为什么我的阻带滤波器会衰减其他频率?

信息处理 过滤器 matlab
2021-12-29 08:13:53

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

如果你把这段代码放到Matlab中,你可以清楚地看到高频已经被滤波器成功去除,但由于某种原因,低频的幅度被削减了一半,而且我越增加滤波器系数的#,它越使我的整个曲线变平,为什么会发生这种情况?以及如何防止它使阻带不会向外传播?这是图像和代码:

在此处输入图像描述

f 采样 = 8000;
tSampling = 1/fSampling;

t = 0:t采样:0.005;
F0 = 1000;
F1 = 3000;

xt = sin(2*pi*F0*t) + sin(2*pi*F1*t);
ht = fir1(40,.25,'stop');
yt = 转换(xt,ht);

fAxis = -4000:125:4000-125;

xF = fft(xt,64);
MagXF = fftshift(abs(xF));

绘图(fAxis,MagXF);
坚持,稍等

yF = fft(yt,64);
MagYF = fftshift(abs(yF));

情节(fAxis,MagYF,'r')
3个回答

滤波器的频率响应总是具有固有的“滚降”,因为您实际上无法实现完美矩形函数的通带。对于低通滤波器,频率响应幅度降至 -3dB 的点称为通带,超出的所有点称为阻带(从技术上讲,所有超出转角频率的点,但我们将采用转角频率为 -3dB 水平)。您的频率响应在通带之外衰减的速度取决于滤波器长度。

如果您查看滤波器的频率响应ht,您会发现它在 1000 Hz 时下降到 -6dB:

在此处输入图像描述

因此,滤波后功率下降 6dB 是有道理的,您在图中可以看到幅度减半。

如果您查看了fir1您使用的函数的文档,您也会意识到这一点(强调我的):

B = fir1(N,Wn)设计一个N' 阶低通 FIR 数字滤波器,并返回长度N+1向量中的滤波器系数B截止频率 Wn 必须在 之间0 < Wn < 1.01.0 对应于采样率的一半。滤波器B是真实的并且具有线性相位。 Wn 处滤波器的归一化增益为 -6 dB。

现在要创建更清晰的过滤器,其响应非常接近矩形,您必须使用 IIR 过滤器,它有自己的稳定性问题等问题,但绝对是一种选择。您可以在此处查看我的答案,了解有关实现离散形式 2、二阶部分 IIR 滤波器的一些想法,该滤波器给出了非常尖锐的角。该示例用于带通滤波器,但您可以阅读文档以了解其中使用的功能并自己实现低通版本。

滤波器需要时间来“决定”信号是刚好在滤波器转换内部还是外部。一种解决方案是将滤波器转换从任何感兴趣的信号移开,例如在两个测试信号之间的中间,在您的测试用例中,几乎没有信号会因不完美的决定而失真。

采用

ht = fir1(40,.5,'stop');

相反,F0 处的衰减非常低,F1 处的衰减非常高。

在此处输入图像描述