Question 2
% construction des signaux y1 y2 y3
%y1
k=[0:2*N-1];
y1=[X;X];
subplot(2,2,2),
stem(k,y1,'b');title('y1');
hold on; plot(k,y1,'r')
%y2
z=0*[1:N]';
y2=[X;z];
subplot(2,2,3),
stem(k,y2,'b');title('y2');
hold on; plot(k,y2,'r')
%y3
for l=0:N-1
p=2*l;
q=2*l+1;
y3(p+1)=X(l+1);
y3(q+1)=0;
end
y3=y3';
subplot(2,2,4),
stem(k,y3,'b');title('y3');
hold on; plot(k,y3,'r')
% Calcul et affichage du spectre
Y1=fft(y1);
Y2=fft(y2);
Y3=fft(y3);
y_f=[0:fe/(2*N):fe];
y_f(end)=[];
figure(2),
subplot(2,2,1),stem(x_f,abs(Y).^2/length(Y)),title('module de la fft X');
subplot(2,2,2),stem(y_f,abs(Y1).^2/length(Y1)),title('module de la fft
Y1');
subplot(2,2,3),stem(y_f,abs(Y2).^2/ length(Y2)),title('module de la fft
Y2');
subplot(2,2,4),stem(y_f,abs(Y3).^2/ length(Y3)),title('module de la fft
Y3');
subplot(2,2,2) Quand le signal est dupliqué en temps, des zéros sont intercalés en fréquence
(un zéro est ajouté entre chaque raie du spectre).
subplot(2,2,4) Quand des zéros sont intercalés en temps, le spectre est dupliqué en fréquence.
subplot(2,2,3),Quand le signal est complété par des 0, les raies ajoutées sont une interpolation du
spectre entre les 2 raies voisines.
Seule la solution qui consiste à compléter par des zéros est intéressante. C’est ce que l’on appelle le « zero
padding ».
C’est la solution utilisée par la fonction fft de Matlab. Taper help fft. Vous verrez que celle-ci peut être appelée
avec un 2ème paramètre d’entrées fft(X,N). Ici, N définit la taille du signal artificiel. La fft sera calculée à partir
du signal X complété par le nombre de zéros suffisant pour atteindre une taille N. Bien évidemment, pour que
cela ait un intérêt N doit être supérieur ou égal à la taille du signal X. On choisit en général N comme une
puissance de 2 (16, 32, …) car le calcul de la FFT est plus rapide dans ce cas.
Version Python (code)
#Creation des y
y1=[Link]((2*N))
y2=[Link]((2*N))
y3=[Link]((2*N))
y1[0:N]=x
y1[N:2*N]=x
y2[0:N]=x
y3[0:2*N:2]=x1[0:N]
[Link]()
[Link](2,2,1), [Link](x1,use_line_collection=True)
[Link](2,2,2), [Link](y1,use_line_collection=True)
[Link](2,2,3), [Link](y2,use_line_collection=True)
[Link](2,2,4), [Link](y3,use_line_collection=True)
X = [Link](x)
Y1 = [Link](y1)
Y2 = [Link](y2)
Y3 = [Link](y3)
[Link]()
[Link](2,2,1), [Link]([Link](X)*[Link](X)/size(X),use_line_collection=True)
[Link](2,2,2), [Link]([Link](Y1)* [Link](Y1)/size(Y1))si,use_line_collection=True)
[Link](2,2,3), [Link]([Link](Y2)* [Link](Y2)/size(Y2))use_line_collection=True)
[Link](2,2,4), [Link]([Link](Y3)* [Link](Y3)/size(Y3)),use_line_collection=True)
subplot(2,2,2) Quand le signal est dupliqué en temps, des zéros sont intercalés en fréquence
(un zéro est ajouté entre chaque raie du spectre).
subplot(2,2,4) Quand des zéros sont intercalés en temps, le spectre est dupliqué en fréquence.
subplot(2,2,3),Quand le signal est complété par des 0, les raies ajoutées sont une interpolation du
spectre entre les 2 raies voisines.
Seule la solution qui consiste à compléter par des zéros est intéressante. C’est ce que l’on appelle le « zero
padding ».
C’est la solution utilisée par la fonction fft de numpy ou scipy. Allez voir le help de la fonction fft . Vous verrez
que celle-ci peut être appelée avec un 2ème paramètre d’entrées fft(X,N). Ici, N définit la taille du signal
artificiel. La fft sera calculée à partir du signal X complété par le nombre de zéros suffisant pour atteindre une
taille N. Bien évidemment, pour que cela ait un intérêt N doit être supérieur ou égal à la taille du signal X. On
choisit en général N comme une puissance de 2 (16, 32, …) car le calcul de la FFT est plus rapide dans ce cas.