如果将此代码放入Matlab,您可以清楚地看到滤波器已成功去除了较高的频率,但是由于某种原因,较低的频率幅度已被减半,并且我增加滤波器系数的数量越多,它会使我的整个曲线变得更加平坦,为什么会发生这种情况?以及如何防止阻带不向外传播?这是图像和代码:
fSampling = 8000; tSampling = 1/fSampling; t = 0:tSampling:0.005; F0 = 1000; F1 = 3000; xt = sin(2*pi*F0*t) + sin(2*pi*F1*t); ht = fir1(40,.25,'stop'); yt = conv(xt,ht); fAxis = -4000:125:4000-125; xF = fft(xt,64); MagXF = fftshift(abs(xF)); plot(fAxis,MagXF); hold on yF = fft(yt,64); MagYF = fftshift(abs(yF)); plot(fAxis,MagYF,'r')
#1 楼
滤波器在其频率响应中始终具有固有的“衰减”特性,因为您实际上无法实现具有理想矩形功能的通带。对于低通滤波器,您的频率响应幅度下降到-3dB的点称为通带,超出范围的一切都称为阻带(从技术上讲,超出拐角频率的所有事物,但是我们将采用拐角频率为-3dB等级)。频率响应衰减超过通带的速度取决于滤波器的长度。如果查看滤波器的频率响应
ht
,您会发现它在下降到-6dB。 1000 Hz:因此,滤波后功率下降了6dB是有意义的,在您的图中您将其视为振幅的一半。
如果您查看过所使用的
fir1
函数的文档,您也会意识到这一点(强调我的意思):B = fir1(N,Wn)
设计了N
'低阶低通' FIR数字滤波器,并返回长度为
N+1
矢量B
的滤波器系数。截止频率Wn必须在
0 < Wn < 1.0
之间,而1.0
对应于一半采样率。滤波器
B
是实数,并且具有线性相位。在Wn处,滤波器的归一化增益为
现在要创建更清晰的滤波器,其响应非常接近矩形,您必须使用IIR过滤器,这些过滤器自带稳定性等问题,但绝对是一种选择。您可以在这里看到我的答案,以获取有关实现分立形式2,二阶截面IIR滤波器的一些想法,这些滤波器给出了非常尖锐的拐角。这里有一个带通滤波器的示例,但是您可以阅读其中使用的功能的文档,并自己实现一个低通版本。
#2 楼
滤波器“决定”信号是在滤波器转换之内还是之外都需要时间。一种解决方案是,使滤波器转换远离任何感兴趣的信号,例如在两个测试信号之间的中间位置,在您的测试案例中,几乎没有信号会因不完善的决策而失真。#3 楼
而是使用ht = fir1(40,.5,'stop');
,您将在F0处具有非常低的衰减,而在F1处具有非常高的衰减。
评论
带通/带阻滤波在本质上是不完善的,并且会始终影响您想单独留下的频谱区域。这是野兽的本质。嗯...有什么方法可以抵消吗?还是更适合的另一个相对简单的过滤器?我对陷波滤波器了解不多,但我知道它们确实是窄带阻滤波器,并且Matlab可以为它们提供命令。
就像我说的那样,这是固有的。在优化某些参数的同时,设计滤波器始终是一个权衡的选择,但要以牺牲其他参数为代价(并且以牺牲成本为代价)。