为什么方脉冲的巴特沃斯 IIR 滤波器在时域的边缘上显示波纹,但对于正弦波却不一样

信息处理 matlab 巴特沃思
2022-02-04 09:54:48

我将巴特沃斯滤波器用于方脉冲和正弦波。在方波脉冲的情况下,对于不同的巴特沃斯阶 (wn > 2),巴特沃斯会在时域中产生一些方波边缘的尖锐波纹。但是在正弦波的情况下,我看不到任何波纹。谁能解释一下这背后的原因?Matlab 代码与情节一起跟随。

close all

clear all
T = 1/10;
t = linspace(0,T,1001);

s = square (2*pi*100*t);

fs=10/200; % sampling frequency
fc=0.2; % fc normalized
offset=0;
amp=3.3;
duty=50;
t=0:0.01:100;%100 seconds
sq_wav=offset+amp*square(2*pi*fs.*t,duty);
sin_wav = offset + amp*sin(2*pi*fs.*t);
disp(length(sin_wav));

N = length(sq_wav);
disp(N);
#disp(t(1:10));
t1 = [0:N-1];
disp(t1(1:10));
disp(fs);
wn = 15; % filter order

[b,a] = butter(wn, fc);

[h,w] = freqz(b,a);

out_sq = filter(b,a,sq_wav);
out_sin = filter(b,a,sin_wav);

subplot (4, 1, 1)
plot(t(1:end),sq_wav(1:end))
title("square pulse");

subplot (4, 1, 2)
plot(t(1:end),sin_wav(1:end))
title("sine pulse");

subplot (4, 1, 3)
plot(t(1:end),out_sq(1:end))
title("square pluse after butterworth");

subplot (4, 1, 4)
plot(t(1:end),out_sin(1:end))
title("sine pluse after butterworth");

这是此代码的输出:

在此处输入图像描述

1个回答

发生这种情况是因为在进行低通滤波时,您会去除使方脉冲具有尖锐边缘的高频成分。现在,如果您还不精通信号的傅立叶分析,这将有点困难,但我将提供一些图表来说明我的意思。

让我们像您所拥有的那样采用简单的脉冲和正弦曲线。我们将使用一个简单的 4 阶巴特沃斯滤波器对它们进行过滤。下面是信号的时域和频域图。滤光片的光谱也包括在内。频谱图以分贝 (dB) 为单位。

在此处输入图像描述 在此处输入图像描述

如果你不知道,时域中的滤波就是频域中的乘法。因此,您可以查看频谱并将它们相乘,查看衰减发生的位置。您可以看到,与正弦曲线相比,脉冲对高频的贡献更大。因此,经过滤波后,正弦波的失真将小于脉冲,这正是我们在下面看到的

在此处输入图像描述

我们可以更进一步,通过使用更紧密的过滤器来去除更多的频率内容。下面是新过滤器的相同光谱。您会看到脉冲现在更加失真,而正弦曲线保持相对不变。

在此处输入图像描述 在此处输入图像描述