Bu soru da beni uzun zamandır kafam karıştı. @ hotpaw2'nin açıklaması iyi. Matlab kullanarak basit deney ilginizi çekebilir.
https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html
güncellenmiş bilgi.
Bu gerçeği doğrulamak için, sadece FFT kutularını sıfırlayan ideal bir (?) Bant geçiş filtresinin dürtü yanıtı spektrumunu dikkatlice gözlemlememiz gerekir. Neden "ihtiyatla" zarfını eklemem gerekiyor? Darbenin tepkisini gözlemlemek için sadece aynı boyutta FFT kullanırsak, Şekil 1'de gösterildiği gibi kandırılırız . Bununla birlikte, filtrenin çıktısını gözlemlerken DFT sırasını eklersek, yani impuls yanıtını sıfıra silerken, Gibbs fenomenini, Şekil 2'de gösterildiği gibi frekans bölgesinde dalgalanmalar bulabiliriz .
Aslında sonuçlar pencereleme etkisinden geliyor. Sorunu tamamen anlamak istiyorsanız, lütfen DSP (1) İncil'inin 7.6 ve 10.10-10.2. Bölümlerine bakınız. Özetle, burada üç kilit nokta belirtilmiştir.
- Pencerenin boyutu ve DFT (FFT) sırası tamamen bağımsızdır. Onları birlikte karıştırmayın.
- Pencerenin özellikleri (tip / boyut) DTFT şeklini domine eder. (örn. daha geniş ana lob, frekans yanıtında daha geniş geçici bandın oluşmasına neden olur.)
- DFT, DTFT'nin sadece frekans alanındaki örneklemesidir. Dahası, DFT'nin sırası ne kadar yüksek olursa, DFT'nin tayfı o kadar yoğun olur.
Böylece, Şekil 2'deki daha yoğun spektrumun yardımıyla , ideal (sahte) Bant geçiş filtresinin maskesini görebiliriz.
Aldatıcı Frek. Tepki.
Frek'te Gibbs olayı. Tepki.
(1) Alan V. Oppenheim ve Ronald W. Schafer. 2009. Kesikli Zamanlı İşaret İşleme (3. baskı.). Prentice Hall Press, Üst Sele Nehri, NJ, ABD.
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