很多场合我们需要动态显示实时语音的音量分贝,以展示人的说话声音的大小,以便可以动态条件声音的大小,比较常见的几种音量分贝检测算法有如下几种, 下面做一下简单说明和比较

1、计算音频能量数据和

算法原理:

算法比较简单,首先我们分别累加每个采样点的数值,除以采样个数,得到声音数据求平均能量值。然后再将其做0--32767之间的等比量化。得到1-100的量化值,返回结果。
通过实际测试,通常情况下,人声一般都分布在较低的能量范围内,人说话的声音基本在0-35之间,很难达到50以上,这样就会使量化后的音量数据大致分布在1-35这个区域之间,不能够很敏感的感知音频数据的音量变化。

改进方式:

        可以得到的音频分贝数据等比放大3倍,然后再做溢出处理即可,这样算法基本可用,但是实际效果也不是很理想。

2、计算均方根求分贝值

算法原理:

在数据统计分析中,将所有值平方求和,求其均值,再开平方,就得到均方根值。在物理学中,我们常用均方根值来分析噪声、音量分贝。这也是一个标准算法,但是实际测试中,一样效果差强人意。

3、均方根算法改进

以上几种算法在实际测试应用中,效果都不是很理想,只是理论上可行,所以我针对这些算法做了一些优化和改进,可以针对PCM音频数据完成音量值的检测,测试效果比较准确,并量化到0--100能量数据值,欢迎大家测试;

下面是一段音频文件:

这个是上面文件对应输出的音频能量值,应该说还是比较准确的。

测试代码:

int main(int argc, char* argv[])
{FILE *input_fd = NULL, *output_fd = NULL;short* pshInBuff = NULL; int iEnergy = 0, iRet = 0;//input_fd = fopen(argv[1], "rb");input_fd = fopen("input_8k.pcm", "rb");output_fd = fopen("result.txt", "wb");if(input_fd == NULL){printf("Error:can not open audio input file %s.\n", argv[2]);return (-1);};pshInBuff = (short*)malloc(sizeof(short)*DEFAULT_SAMPLE_FRAME_LEN);if(pshInBuff == NULL){printf("Error\n");return (-1);} while (!feof(input_fd)){if((iRet = fread(pshInBuff, sizeof(short), DEFAULT_SAMPLE_FRAME_LEN, input_fd))!= DEFAULT_SAMPLE_FRAME_LEN){printf("while Exit and file over.\n "); break;}iEnergy = uniqueVolDetection(pshInBuff, 320);printf("Voice Energy %d\n", iEnergy);fprintf(output_fd, "%02d ", iEnergy);if (iEnergy > 70){printf("Voice Energy Too High! \n");}}fclose(input_fd);fclose(output_fd);if (pshInBuff){free(pshInBuff);}getchar();return 0;
}

项目地址:https://download.csdn.net/download/unique_no1/85034214

里面包含测试程序和可执行文件,windows平台和linux平台的我都已经编译好了,大家可以测试看下效果,如果技术合作、交流的也非常欢迎。

联系方式:

微信:unique_no_1

音频原始数据能量检测算法相关推荐

  1. 基于matlab的信号能量检测算法仿真

    能量检测方法,即将接收到的模拟信号变为数字信号后,通过FFT变换,然后再进行,在现有的通信系统中,通常为ASK.PSK.FSK.QAM等,它们都由数字基带脉冲对周期性载波的参数进行调制.采样频率fs ...

  2. 基于MATLAB的leach协议能量检测算法仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 LEACH协议,全称是"低功耗自适应集簇分层型协议" (Low Energy Adaptive Clust ...

  3. 基于能量检测的调制方式识别算法MATLAB仿真,识别不同SNR下的MFSK和MPSK

    UP目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 随着无线通信的快速发展,用户对通信质量的要求越来越高,同时无线设备的大幅度增长,使得频谱资源显得更加重要.认知无线电(Cognitiv ...

  4. 基于短时能量的语音端点检测算法

    1 带噪语音信号 日常生活中噪声无处不在,说话声.风声.雨声.打字声.机器运行的声音等都可定义为噪声.噪声的种类也很多,每种都有其各自的特点,对有用信息的影响程度也不同.噪音主要包括稳定噪音和非稳定噪 ...

  5. 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----音频检测算法设计

    (2条消息) [开发日志]2022.09.02 ZENO----Audio----Beat detection algorithm----Combine Wav&Mp3_minimp3 和 f ...

  6. m认知无线电信号检测算法matlab仿真,能量检测,循环平稳检测以及自相关检测

    目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 频谱感测是认知无线电的一项关键技术.我们将频谱感知作为一个分类问题,提出一种基于深度学习分类 ...

  7. 基于语音的疲劳度检测算法研究

    基于语音的疲劳度检测算法研究 摘 要 疲劳是一种自然现象,是人体的一种自我调节和保护功能.检测疲劳状态对于当今社会从事各行各业都有积极意义.本课题提出了一种基于语音特征参数和概率神经网络的语音疲劳度识 ...

  8. 万字长文详解目标检测算法,超大超全(2022最新)

    摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypo ...

  9. 基频检测算法详细总结

    基频估计算法 F0 estimate methods 基音频率,简称基音或基频,是语音信号最重要的韵律特征参数之一,基频的复杂之处在于不同的人说同一个字词,发出的语音基频可能不同,同一个人在不同的时间 ...

最新文章

  1. 图灵1月书讯:阅新书辞旧岁,览经典迎新年
  2. [ Luogu 4626 ] 一道水题 II
  3. 2016-11-17试题解题报告
  4. 14-数据库连接池和jdbc优化
  5. asp.net甘特图控件exG2antt介绍及免费下载
  6. common_test使用注意事项
  7. Numpy中数组创建函数的辨析
  8. 无法将mysql服务器连接到_无法从java连接到mysql服务器
  9. 常用视频像素格式NV12、NV21、I420、YV12、YUYV
  10. 个人静态博客页面模板
  11. 常见元件、封装及尺寸
  12. Kali学习 | 无线渗透:7.5 Gerix 破解 WEP
  13. hash和history路由的区别
  14. 如何训练一个通用人工智能
  15. 济南大雨,银座亲历(转载)
  16. LFM雷达实现及USRP验证【章节2:LFM雷达测距】
  17. cf 、B. Fridge Lockers(思维 + 贪心)
  18. ttf字体文件子集生成工具
  19. 流行学习,比较好的一篇博客
  20. 经典算法之右边界二分查找法(俗称基本右边界二分搜索法)

热门文章

  1. matlab中m_map工具箱绘制大圆航线
  2. HbuilderX 小程序转快应用
  3. 赵小楼《天道》《遥远的救世主》深度解析(116)论天国的女人
  4. 笔记本分享热点wifi给手机上网
  5. ORA-3136错误解决
  6. Sublime text 3(ST3) - Source Insight
  7. 《学会提问-批判性思维指南》--70页原创PPT免费分享 (评论: 学会提问)
  8. OpenCV C++案例实战二十九《遥感图像分割》
  9. 移远 EC200S 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程
  10. 智能卡CPU卡开卡指令