Vous êtes sur la page 1sur 5

TP1: Analyse et traitement de signal sous Matlab

1. Synthèse d’un signal sinusoïdal et Théorème de Shannon :


Le programme permettant de généré un signal sinusoïdal est le suivant :
Ts=100; % Période du sinus
Duree=200; % Durée d'observation signal 2 périodes
dt=1; % Pas ou période d'échantillonnage temporel du signal
N=Duree/dt; % Nombre total d'échantillons
n=0:N; % "Vectorisation du temps" (échantillonnage)
t=n*dt; % Définition du temps
y=sin(2*pi*t/Ts); % Génération du sinus
plot(t,y) ; % graphe du signal en fonction du temps
Dans les manipulations qui suivent, nous allons uniquement modifier la valeur de la variable dt qui représente la
période d’échantillonnage. Cas où dt = 1 : Dans ce cas, nous pouvons constater que la fréquence d’échantillonnage est
largement suffisante. Nous pouvons préciser que la fréquence d’échantillonnage vaut: 1 Hz
• Cas où dt = 10 : Fe=0,1 Hz
• Cas où dt = 50 : Fe=0,02 Hz, Nous pouvons recouper ces résultats en introduisant le théorème de Shannon qui nous
indique que la fréquence d’échantillonnage doit être supérieure à deux fois la fréquence maximale du signal. Dans
notre cas, la fréquence du signal sinusoïdal est de : fmax=0,01 Hz. D’où en théorie, nous devons avoir une fréquence
d’échantillonnage tel que: Fe > 2 fmax ( Fe > 0,02 Hz)
2. Synthèse de Fourier :
2.1 Cas d’un signal créneau :
Le programme permettant de calculer la décomposition en série de Fourier d’un signal créneau est le suivant:
n=input('Entrer le nombre de coefficient n pour la synthèse '); ( commande équivalente à printf et sacnf en langage C
fo=10 ;
dt=1./(50*n*fo); % Incrément temporel
t=(0:dt:2/f0); % Création du temps sur deux périodes du signal par incrément de dt
A=1 ;
Ao=A/2; % Valeur moyenne du signal
e=Ao; % Boucle de calcul de la somme
for i=1:n
an=A*sinc(i/2);
bn=0;
xn=an*cos(2*pi*fo*i*t)+bn*sin(2*pi*fo*i*t);
e=xn+e;
end
plot(t,e)
2.2 Cas d’un signal en dent de scie :
Connaissant l’équation des coefficients Cn et sachant que le signal est impair donc les an = 0, alors nous pouvons en
déduire l’expression de bn : bn = -2x (-1)n /pi x n

1
Le programme permettant de calculer la décomposition en série de Fourier d’un signal dent de scie est le suivant :
n=input('Entrer le nombre de coefficient n pour la synthèse ');
fo=10.
dt=1./(50*n*fo); % Incrément temporel
t=(0:dt:2/f0); % Création du temps sur deux périodes du signal par incrément de dt
Ao=A/2; % Valeur moyenne du signal
e=Ao; % Boucle de calcul de la somme
for i=1:n
an=0;
bn=(‐2*((‐1)^i))/(pi*i);
xn=an*cos(2*pi*fo*i*t)+bn*sin(2*pi*fo*i*t);
e=xn+e;
end
plot(t,e)
TP2: Transformée de Fourier en 1D: Calcul de la transformée de Fourier et affichage
ff = fft(f); % transformée de Fourier 1D du signal f (dans le plan complexe)
ff = fft(f,1024); % transformée de Fourier 1D du signal f, sur 1024 points régulièrement distribués dans [0,1]
plot(fftshift(abs(ff))); % fftshift : pour afficher les basses fréquences au centre
f1 = real(ifft(ff)); % transformée inverse 1D
Exercice 1 : Tapez ceci dans la fenêtre de commande :
lookfor fourier % affiche toutes les fonctions reliées à Fourier
Ensuite, utilisez "help" suivi du nom de la fonction qui vous intéresse pour avoir plus d'informations sur chacune
d’elles.
Exercice 2 : Pour trouver des échantillons de la transformée de Fourier d'un signal, il faut utiliser la fonction
"fft". Tapez dans la fenêtre de commande les lignes suivantes :
figure(1)
T = 0.01; % période d'échantillonnage
Fs = 1/T; % fréquence d'échantillonnage de 100 Hz
t = 0:T:1; % vecteur d’échantillonnage du signal et échelle de l’axe des x
x = sin(2*pi*10*t); % signal ayant une fréquence de 10 Hz
plot(t,x)
title('Signal')
xlabel('temps (ms)')
Q1 : Regardez le résultat avec d’autres fréquences d’échantillonnage (en diminuant T avec par exemple
0.001). Que remarquez-vous ? Changez aussi la fréquence de la sinusoïde (5, 2, … au lieu de 10).
Maintenant tapez ceci :
figure(2)
FFT_size = 2048;
X = fft(x,FFT_size);
2
f = (0:FFT_size/2)/(FFT_size/2)*Fs/2;
plot(f, abs(X(1:FFT_size/2+1))); % on voit bien que le signal est à 10 Hz
title('Signal en fréquence');
xlabel('Fréquence(Hz)');
ylabel('Amplitude');
Remarquez la composante à 10 Hz. Remarquez aussi qu'en utilisant "figure(1)" et "figure(2)" il a été possible
d'afficher des courbes dans des fenêtres différentes.
Q2 : Quelle est la taille de f, de X ? A quoi sert f ? A quoi sert l’instruction : « X(1:FFT_size/2+1)» ?
Q3 : Regardez la phase, la partie réelle et imaginaire de X.
Q4 : Pourquoi n’observe-t-on pas une simple composante fréquentielle à 10 Hz ?
Comparer avec le résultat de l’applet située à cette adresse :
En choisissant la fonction sinus, de fréquence 1000 Hz. Regardez le signal et son spectre, puis baisser la fréquence à
100 puis 10 Hz en faisant varier le nombre d’échantillons (« Number of samples »). Que constatez-vous ?
Exercice 3 : Transformée de Fourier inverse (ifft). Essayez ceci avec le signal défini auparavant :
inv = ifft(fft(x));
plot(t, inv)
Que constatez-vous ?
f = Fs/2*linspace(0,1,NFFT/2+1);
plot(f, 2*abs(Y(1:NFFT/2+1))) % Plot single-sided amplitude spectrum
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)'); ylabel('|Y(f)|')
Q5 : Que fait la fonction nextpow2 ? Que vaut NFFT ?

TP3: Modulated signal= (1+ msin(2 πfmt))*Acsin(2 πfct)

 Ac = Carrier signal amplitude


 Am = Message signal amplitude
 fc= Carrier frequency
 fm =Message frequency
Generating AM in Simulink : For generating AM we just have to implement the equation of AM in block level.
Blocks Required. Analyzing the equation we need,
1. Carrier Signal Source
2. Message Signal Source
3. Blocks for viewing the signals – Scope
4. Product Block
5. Summer Block
6. Constant Block
We can find these blocks in the following locations of Simulink Library
Carrier, Message, Constant blocks
 Simulink –> Sources –> Sine wave
 Simulink –> Sources –> Constant
View Block
 Simulink –> Sink –> Scope
Product and Summer Block

 Simulink –> Math Operations–> Product


 Simulink –> Math Operations–> Summer
3
Block Diagram

AM Generation using Simulink – Block Diagram


Block parameters can be changed by selecting the block and parameter that I used are given below..
 Carrier Signal frequency = 2*pi*25 and sampling time=1/5000
 Message Signal frequency = 2*pi and sampling time=1/5000
 Amplitudes of both signals are 1

 clear all;
 close all;
 t=0:0.001:1;
 set(0,'defaultlinelinewidth',2);
 A=5;%amplitude de signal
 fm=input('Message frequency=');%entrée la fréquence du message
 fc=input('Carrier frequency=');% entrée la fréquence du porteuse avec (f2>f1)
 mi=input('Modulation Index=');%taux de modulation
 Sm=A*sin(2*pi*fm*t);%signal message
 subplot(3,1,1);% divisée le cadre en 3 parties le message apparaître dans la premiere division
 plot(t,Sm);
 xlabel('Time'); ylabel('Amplitude');
 title('Message Signal');
 grid on;
 Sc=A*sin(2*pi*fc*t);%porteuse
 subplot(3,1,2);
 plot(t,Sc);
 xlabel('Time');
 ylabel('Amplitude');
 title('Carrier Signal');
4
 grid on;
 Sfm=(A+mi*Sm).*sin(2*pi*fc*t);%AM Signal, l’amplitude varié d’apres le message (A+Message)
 subplot(3,1,3);
 plot(t,Sfm);
 xlabel('Time');
 ylabel('Amplitude');
 title('AM Signal');
 grid on; fréquence message=10, Porteuse=100, Taux modulation=1
 Pour mieux comprendre la modulation en fréquence on essayé la simulation sur Matlab :
 clear all;
 close all;
 fm=input('Message Frequency=');
 fc=input('Carrier Frequency=');
 mi=input('Modulation Index=');
 t=0:0.0001:0.1;
 m=sin(2*pi*fm*t);
 subplot(3,1,1);
 plot(t,m);
 xlabel('Time');
 ylabel('Amplitude');
 title('Message Signal');
 grid on;
 c=sin(2*pi*fc*t);
 subplot(3,1,2);
 plot(t,c);
 xlabel('Time');
 ylabel('Amplitude');
 title('Carrier Signal');
 grid on;
 y=sin(2*pi*fc*t+(mi.*sin(2*pi*fm*t)));
 subplot(3,1,3);
 plot(t,y);
 xlabel('Time'); ylabel('Amplitude');
 title('FM Signal'); grid on;
 Message Frequency=140, Carrier Frequency=300, Modulation Index=1

Vous aimerez peut-être aussi