音频噪声抑制(1):经典滤波器篇

好久没有写音频信号处理的文章了……

因为我从零开始学C++去了……


前面有一些文章简要介绍了IIR和FIR滤波器的设计方法。

Review:IIR

Review:FIR


滤波器是一种工具,可以完成许多事情。

用滤波器去除噪声,是很常见的。


用经典滤波器抑制噪声,非常简单。如果噪声的功率谱PSD和有用信号功率谱PSD没有重叠的话,那可以实现非常好的效果。

但是,如果有重叠,去噪的效果就不是特别理想了。因为在复指数信号空间里面,没办法把有用信号和噪声信号分离啊。


当然,如果先知道噪声本身的性质,是可以帮助我们实现噪声抑制的。


如果,噪声是覆盖整个频率范围的白噪声,那去除噪声的步骤大致如下。

1. 需要了解有用信号大致是分布在 多少 Hz  到 多少 Hz之间。

2. 设计滤波器,指标就选尽可能多得抑制带外噪声的那些指标。

3. 让信号通过滤波器,实现噪声抑制。


如果,噪声是某个特定频率的噪声,比如 50Hz 的工频信号(50Hz交流电),

就需要设计一个陷波器。






虽然看起来,用陷波器去掉50 Hz的工频信号效果比较好,但是!但是!但是!

实际上,交流电不一定是刚好50 Hz的嘛,可能是51,52,甚至53,……

所以,实际上,还应该结合一些别的手段,去追踪一下工频信号的频率。


另外,由于有非线性效应,所以,不一定只有基波,还有可能有二次谐波,三次谐波,……

为什么会这样?微积分里面Taylor级数嘛…。我想,进一步的原理在“电路原理”、“模拟电子技术基础”等课程里都讲过。


引用某位老师的话:“哎,跟一群数学不好的、靠经验搞工程的人交流起来,真的是费劲!”

我很欣赏这句话。尽管很多人觉得这句话说得有点骄傲了。但是别人有水平,有水平的人不骄傲,难道还要一群渣渣去骄傲?


需要注意的是:

1. 在matlab里,如果设计IIR滤波器去抑制噪声,用filter函数就好。函数的输出信号y和输入信号x的长度是一样的。y就是去除噪声后的信号。

2. 在matlab里,如果设计FIR滤波器去抑制噪声,一般是得到一个单位脉冲响应h,于是用 y = conv(h,x) 就好。但是y的长度和x的长度不一致。这是由卷积的性质决定的。

L = M + N - 1。因为是FIR,所以y基本上就是x的时延,所以把y从 n0 时刻开始,往后走(x长度-1)个点,就是消除噪声后的信号。至于n0等于多少,这个去算一下就好了。

大概是 (N-1) / 2 个时刻吧。这个自己动笔算一下,算一下。 当然,N取奇数还是偶数,要看实际的需求。有些滤波器的长度N是不能满足某种特定的功能的。比如 z = 1的地方有零点(相当于 H(exp(j0)) = 0),是不能作为低通滤波器的。


  • 9
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qcyfred

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值