音频噪声抑制(1):经典滤波器篇 |
您所在的位置:网站首页 › 怎样去掉录音中的杂音和杂音 › 音频噪声抑制(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),是不能作为低通滤波器的。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |