这是我的两色信号代码,其中我使用阻带去除较高的音调,然后在将信号与滤波器系数进行卷积后在频域中绘制前(蓝色)和后(红色) 。

如果将此代码放入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')


评论

带通/带阻滤波在本质上是不完善的,并且会始终影响您想单独留下的频谱区域。这是野兽的本质。

嗯...有什么方法可以抵消吗?还是更适合的另一个相对简单的过滤器?我对陷波滤波器了解不多,但我知道它们确实是窄带阻滤波器,并且Matlab可以为它们提供命令。

就像我说的那样,这是固有的。在优化某些参数的同时,设计滤波器始终是一个权衡的选择,但要以牺牲其他参数为代价(并且以牺牲成本为代价)。

#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处具有非常高的衰减。