一 前记
音频信号处理中,限波器是一个常用的算法。这个算法难度不是很高,可用起来却坑很多。
二 源码解析
1 滤波器的核心函数,这里注意两点,一个是带宽不能太宽了,太宽了杀伤力太大了,容易出问题。另外一个就是滤波器的阶数非常重要,假如想滤波宽度尽量窄一些,那就阶数尽量高一些。
/************************************************************************ * IIR陷波器(直接II型/典范型) * 参数列表: * short ch:滤波通道,0-17 * int xn:滤波输入 * float fnotch:陷波频率,Hz * float bw: 带宽,Hz(eg:50Hz±1Hz,BW=2Hz ) * float fs: 采样率,Hz * short init: 是否初始化陷波器(1:初始化,0:不初始化) * 输出: * 滤波输出(若ch超出范围,或者fs,bw,fnotch不合理,返回-1) * 说明: 陷波器个数由ch决定,每个陷波器相互独立,因此需要单独初始化; ************************************************************************/ int AzIIRNotchFilter(short ch,int xn, float fnotch,float bw, float fs, short init) { float y0; float Fn; float BW; if (ch<0 || ch>=AZ_CH_NUM)return -1; if (bw<=0 || fs<=0 || fnotch<=0 || fs<=fnotch*2 || fnotch-bw/2<=0)return -1; Fn = fnotch/(fs/2); BW = bw/(fs/2); if (init) { AzInitNotchByChannel(ch,Fn,BW); } // fNotchBuf[ch][0]=(float)xn*fCoefA[ch][0]-fCoefA[ch][1]*fNotchBuf[ch][1]-fCoefA[ch][2]*fNotchBuf[ch][2]; fNotchBuf[ch][0]=(float)xn-fCoefA[ch][1]*fNotchBuf[ch][1]-fCoefA[ch][2]*fNotchBuf[ch][2]; y0=fCoefB[ch][0]*fNotchBuf[ch][0]+fCoefB[ch][1]*fNotchBuf[ch][1]+fCoefB[ch][2]*fNotchBuf[ch][2]; fNotchBuf[ch][2]=fNotchBuf[ch][1]; fNotchBuf[ch][1]=fNotchBuf[ch][0]; return (int)y0; }
三 效果展示
一个1k的正玄波处理前如下所示:

过了这个滤波器之后如下所示:

这样看可以得出这个限波器还是非常有价值的。
四 总结备忘
1 限波期会影响音质,所以用的时候的原则就是尽量少用或者不用。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2017-12-08 python绘图工具matplotlib在linux下安装和使用