Этот вопрос также давно смущал меня. Объяснение @ hotpaw2 хорошо. Возможно, вас заинтересует простой эксперимент с использованием matlab.
https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html
обновленная информация.
Чтобы убедиться, что этот факт прост, нам просто нужно осторожно наблюдать спектр импульсной характеристики идеального (?) Полосового фильтра, который просто обнуляет ячейки БПФ. Почему мне нужно добавить наречие «осторожно»? Если мы просто используем тот же размер БПФ, чтобы наблюдать реакцию импульса, мы будем обмануты, как показано на рисунке 1 . Тем не менее, если мы добавим порядок ДПФ при наблюдении за выходным сигналом фильтра, то есть при заполнении нуля импульсной характеристикой, мы сможем найти так называемое явление Гиббса, рябь в частотной области, как показано на рисунке 2 .
На самом деле результат получается из оконного эффекта. Если вы хотите полностью понять проблему, обратитесь к главе 7.6 и главе 10.1-10.2 Библии о DSP (1). Подводя итог, можно отметить три ключевых момента.
- Размер окна и порядок DFT (FFT) полностью независимы. Не смешивайте их вместе.
- Свойства окна (тип / размер) доминируют над формой DTFT. (например, более широкие главные лепестки приводят к более широкой переходной полосе частотной характеристики.)
- DFT - это просто выборка DTFT в частотной области. Кроме того, чем выше порядок ДПФ, тем плотнее спектр ДПФ.
Итак, с помощью более плотного спектра на рис. 2 мы можем видеть сквозь маску идеального (поддельного) полосового фильтра.
Обманчиво Freq. Отклик.
Феномен Гиббса во Фреке. Отклик.
(1) Алан В. Оппенгейм и Рональд В. Шафер. 2009. Обработка сигналов с дискретным временем (3-е изд.). Прентис Холл Пресс, Аппер Седл Ривер, Нью-Джерси, США.
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