Câu hỏi này cũng đã làm tôi bối rối trong một thời gian dài. @ hotpaw2 giải thích là tốt. Bạn có thể quan tâm đến thí nghiệm đơn giản sử dụng MATLAB.
https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html
thông tin cập nhật.
Để xác minh thực tế này là đơn giản, chúng ta chỉ cần thận trọng quan sát phổ phản ứng xung của bộ lọc thông dải lý tưởng (?) Mà chỉ cần loại bỏ các thùng FFT. Tại sao tôi cần thêm trạng từ "thận trọng"? Nếu chúng ta chỉ sử dụng cùng kích thước của FFT để quan sát phản ứng của xung, chúng ta sẽ bị đánh lừa như trong Hình 1 . Tuy nhiên, nếu chúng ta thêm thứ tự DFT khi quan sát đầu ra của bộ lọc, nghĩa là, không đệm cho đáp ứng xung, chúng ta có thể tìm thấy hiện tượng được gọi là hiện tượng Gibbs, gợn sóng trong miền tần số, như được mô tả trong Hình 2 .
Các kết quả trong thực tế đến từ hiệu ứng cửa sổ. Nếu bạn muốn hiểu hoàn toàn vấn đề, vui lòng tham khảo chương 7.6 và chương 10.1-10.2 của kinh thánh DSP (1). Tóm lại, ba điểm chính được ghi chú ở đây.
- Kích thước của cửa sổ và thứ tự của DFT (FFT) là hoàn toàn độc lập. Đừng trộn chúng lại với nhau.
- Thuộc tính của cửa sổ (loại / kích thước) chi phối hình dạng của DTFT. (ví dụ: thùy chính rộng hơn dẫn đến dải thoáng qua rộng hơn trong đáp ứng tần số.)
- DFT chỉ là mẫu của DTFT trong miền tần số. Hơn nữa, thứ tự DFT càng cao, phổ của DFT càng dày.
Vì vậy, với sự trợ giúp của phổ dày đặc hơn trong Hình 2 , chúng ta có thể nhìn xuyên qua mặt nạ của bộ lọc Băng thông lý tưởng (giả).
Freq lừa dối. Phản ứng.
Hiện tượng Gibbs ở Freq. Phản ứng.
(1) Alan V. Oppenheim và Ronald W. Schafer. 2009. Xử lý tín hiệu thời gian rời rạc (tái bản lần 3). Nhà xuất bản Prentice Hall, Thượng Yên River, NJ, Hoa Kỳ.
fps = 15;
LPF = 1;
HPF = 2;
n = -511:512;
n0 = 0;
imp = (n==n0);
NyquistF = 1/2*fps;
%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];
% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];
N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';
figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');
N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';
figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');
%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)
N = length(input_signal);
n = 0:1:N-1;
freq = ( n .* fs) ./ N;
filered_signal = zeros(N, 1);
for i = 1:N
if freq(i) > w1 & freq(i) < w2
filered_signal(i) = input_signal(i);
end
end
end