% MATLAB Ex V-6 % Script principal % generation d'un signal carre. % le plus efficace consiste a generer une rampe % puis a comparer cette rampe a une valeur. % Lorsqu'on teste une variable dimensionnee a une valeur, le test est % effectue pour chaque valeur et le resultat est vrai (1) ou faux (0) % on obtient un tableau de 0 et de 1. % linspace(0,1,10)<0.5 produit : 1 1 1 1 1 0 0 0 0 0 % On a donc un signal carre qu'il faut mettre en forme en augmentant son % amplitude (Vmax-Vmin) et en ajoutant un decalage (Vmin) % ici on veut -10, + 10, 128 points et 0,5 en amplitude ce qui donne x = (10 - -10) * (linspace(0,1,128) < 0.5 ) -10 ; % transformee de Fourier normalisee X = fft( x ) / length(x) ; % ne pas oublier la division pour normaliser l'amplitude % pour isoler un harmonique on doit prendre en consideration % les frequences positives et negatives -> se referer au graphe magique (page 16) % on genere un vecteur contenant des 0 et des 1 et l'on multiplie terme a terme le % signal et le masque : on procede de meme facon en info indus pour isoler un bit sur % un port d'entree... % si l'on veut garder Les 3 premiers harmoniques on aura donc un masque de la forme m = [ 0 1 1 1 zeros(1, length(X) - 7 ) 1 1 1] ; % on commence par un zero pour supprimer la composante continue (F=0) % on garde 3 harmoniques : 1 1 1 % on elimine les autres avec des 0 => il en faut autant que de points (length(X) ) % moins les 7 frequences que l'on garde 3+3+1... Xm = X.*m ; % on masque le signal. % trace des spectres signal masque et signal non masque. figure(1) p = stem(abs(X)) ; % one recupere un pointeur sur le graphe set(p,'color','r','marker','.') ; % change la couleur et la forme du point de stem hold on p = stem(abs(Xm)) ; % one recupere un pointeur sur le graphe set(p,'color','b','marker','.') ; % change la couleur et la forme du point de stem % retour dans le domaine temporel xm = ifft(Xm)*length(Xm); figure(2) plot(real(xm) ) % ne pas oublier le real sinon on obtient un trace dans le plan d'Argand % pour R harmoniques on utilise des ones... R = 3 ; m = [ 0 ones(1,R) zeros(1,length(X) - 2*R-1 ) ones(1,R) ] ;