Cette question m'a également dérouté pendant longtemps. L'explication de @ hotpaw2 est bonne. Vous pouvez être intéressé par l'expérience simple utilisant matlab.
https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html
informations mises à jour.
Pour vérifier que ce fait est simple, il suffit d'observer avec prudence le spectre de réponse impulsionnelle d'un filtre passe-bande idéal (?) Qui met à zéro les bacs FFT. Pourquoi dois-je ajouter l'adverbe "avec précaution"? Si nous utilisons simplement la même taille de la FFT pour observer la réponse de l'impulsion, nous serons trompés comme le montre la figure 1 . Néanmoins, si nous ajoutons l'ordre de DFT lors de l'observation de la sortie du filtre, c'est-à-dire que nous complétons à zéro la réponse impulsionnelle, nous pouvons trouver ce que l'on appelle le phénomène de Gibbs, des ondulations dans le domaine fréquentiel, comme illustré à la Fig . 2 .
Les résultats proviennent en fait de l'effet de fenêtrage. Si vous voulez bien comprendre le problème, veuillez vous reporter au chapitre 7.6 et au chapitre 10.1 à 10.2 de la bible de DSP (1). En résumé, trois points essentiels sont notés ici.
- La taille de la fenêtre et l'ordre de DFT (FFT) sont totalement indépendants. Ne les mélangez pas ensemble.
- Les propriétés de la fenêtre (type / taille) dominent la forme de DTFT. (Par exemple, le lobe principal plus large conduit à une bande passante plus large en réponse en fréquence.)
- DFT est juste l'échantillonnage de DTFT dans le domaine fréquentiel. De plus, plus l'ordre de la TFD est élevé, plus son spectre est dense.
Ainsi, à l'aide du spectre plus dense de la figure 2 , nous pouvons voir à travers le masque du filtre passe-bande idéal (faux).
Faussement Freq. Réponse.
Phénomène Gibbs en Freq. Réponse.
(1) Alan V. Oppenheim et Ronald W. Schafer. 2009. Discrete-Time Signal Processing (3 e éd.). Prentice Hall Press, rivière Upper Saddle, NJ, États-Unis.
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