您的计算存在两个问题:
首先,您在一个非常窄的时间窗口上评估时域滤波器系数,这会截断滤波器并改变其特性。
其次,您没有正确跟踪时域和频域向量中的哪些索引分别对应于时间点 0 和频率 0。这可以通过不同的方式完成,我在这里选择始终拥有t(1) = 0
and f(1) = 0
,并且仅适用fftshift
于绘图。
这是您的代码的更正版本:
fo = 10; % frequency of the sine wave
Fs = 100; % sampling rate
Ts = 1 / Fs; % sampling time interval
n = 1000; % number of samples
% prepare sampling time vector such that t(1) = 0
t = (0 : n - 1)';
t = t - n * (t >= 0.5 * n);
t = t / Fs;
% prepare frequency vector such that f(1) = 0;
f = (0 : n - 1)' / n;
f = f - (f >= 0.5);
f = f * Fs;
%% sinc filter with bandwidth fo
% define filter in time domain
s = 2*fo/Fs * sinc(2*fo*t);
% transform into frequency domain
Hs = fft(s);
% since the filter is symmetric in time, it is purely real in the frequency
% domain. remove numeric deviations from that:
Hs = real(Hs);
subplot(2, 4, 1)
plot(fftshift(t), fftshift(s))
ylim([-0.1 0.25])
title('sinc, time domain')
subplot(2, 4, 2)
plot(fftshift(f), real(fftshift(Hs)), ...
fftshift(f), imag(fftshift(Hs)))
ylim([-1.1 1.1])
title({'sinc, frequency domain', 'real / imaginary'})
subplot(2, 4, 3)
plot(fftshift(f), abs(fftshift(Hs)))
ylim([-0.1 1.1])
title({'sinc, frequency domain', 'modulus'})
%% Chebyshev filter with bandwidth fo
% define filter in frequency domain
[b,a] = cheby1(6, 0.1, 2*fo/Fs); % 6th order, 0.1 dB ripple
Hc = freqz(b, a, n, 'whole', Fs);
% transform into time domain
c = ifft(Hc);
% determine phase such that phase(1) is as close to 0 as possible
phase = fftshift(unwrap(angle(fftshift(Hc))));
phase = phase - 2*pi * round(phase(1) /2/pi);
subplot(2, 4, 5)
plot(fftshift(t), fftshift(c))
title('Chebyshev, time domain')
ylim([-0.1 0.25])
subplot(2, 4, 6)
plot(fftshift(f), real(fftshift(Hc)), ...
fftshift(f), imag(fftshift(Hc)))
ylim([-1.1 1.1])
title({'Chebyshev, frequency domain', 'real / imaginary'})
subplot(2, 4, 7)
plot(fftshift(f), abs(fftshift(Hc)))
ylim([-0.1 1.1])
title({'Chebyshev, frequency domain', 'modulus'})
subplot(2, 4, 8)
plot(fftshift(f), fftshift(phase))
title({'Chebyshev, frequency domain', 'phase'})
结果如下:
如您所见,sinc 和 Chebyshev 滤波器在频率响应模数方面相似,但在相位方面却大不相同。原因是切比雪夫滤波器是一个因果滤波器,这意味着时域中的系数在 t < 0 时被限制为 0,这是在实际物理系统中实现的滤波器的自然属性。