Signaux Matlab2
Signaux Matlab2
Signaux Matlab2
2018/2019
__________________________________________________________________
Mohamed SABRI- département de physique- FST Béni Mellal- Université sultan Moulay Slimane
%analyse harmonique d'une tension sinusoïdale redressée
N=2048; %nbre de points
F=50; %fréquence de la sinusoïde
T=1/F; %période
Fe=2000; % fr. ech.
Te=1/Fe; % per ech
t=0:Te:(N-1)*Te; % axe du temps, N points
x=abs(sin(2*pi*F*t)); % tension redressée
fprintf('moyenne de x(t) :\n m = %d\n',mean(x));
fprintf('puissance de x(t):\n P = %d\n',mean(x.^2));
fprintf('valeur efficace de x(t) :\n s = %d\n',sqrt(mean(x.^2)));
% spectre de Fourier de x
y=fft(x)/N; %TFD de x = |Cn|=An/2=sqrt(an^2+bn^2)
z=abs(y); % spectre de module de x
f=0:Fe/N:Fe/2-Fe/N; %axe des fréquences
%affichage
subplot(121);plot(t(1:50),x(1:50));grid on;
xlabel('temps en s');
ylabel('tension redressée');
A=[51.07 9.238 3.469 2.857];
fprintf('taux de distorsion harmonique TO = %d\n',sqrt(sum(A.^2)/(A(1)^2)-1));
subplot(122);plot(f(1:N/2),z(1:N/2));grid on;
xlabel('fréquence en Hz');
ylabel('spectre de module');
TP I INITIATION au logiciel MATLAB
_____________________________________________________________________________________________________
Ce TP a pour but d’apprendre à utiliser le logiciel Matlab afin de pouvoir développer des
applications simples en traitement du signal.
Créer d’abord un répertoire portant votre nom sous la directorie work pour y
développer vos programmes : >>mkdir « votre nom » puis >>cd « votre nom ».
1- Variables scalaires
Dans un premier temps on génère trois variables scalaires a, b et c de la manière
suivante :
>> a=2 ;
>> b=3;
>> c=4 ;
>> a
La réponse serait :
a=
2
Cela signifie que les valeurs des variables sont mémorisées automatiquement avec
leurs noms.
3- Commandes de base :
who et whos :
Affiche la taille mémoire et types de toutes les variables utilisées.
cd :
Affiche le répertoire (directorie) où vous opérez en ce moment.
what, dir :
Affiche la liste les noms des fichiers contenus dans le répertoire actuel.
help nom_fonction :
Donne un descriptif de la fonction et ses arguments d’entrée sortie.
4- Opérations sur les variables
>>d=a+b+c
>>e=a+b*c
>>f=(a+b)*c
>>g=(a/b)*c
>>h=a^2
Matlab est optimisé pour l’usage matriciel : Eviter les formulations non matricielles.
[ a b c ] est un vecteur ligne.
[a ;b ;c ;] est un vecteur colonne.
V’ est le transposé du vecteur V
u=1:5 est le vecteur [1 2 3 4 5] (de même que [1 :5] et (1 :5).
t=0 :2 :15 est le vecteur [0 2 4 6 8 10 12 14]
sin(t) est le vecteur [sin(0) sin(2) …sin(14)]
zeros(1,N) est le vecteur ligne nul à N éléments.
Ones(1,N) est le vecteur ligne à N éléments égaux à 1.
V=début:pas:fin;
On définit une valeur de début : début
On définit une valeur de fin : fin
On définit un pas de progression linéaire ou logarithmique
(incrémentation) : pas ;
si le pas n’est pas spécifié, il est égal à 1 automatiquement.
>>v3=1:10
>>v4=1:-0.5:-1
>>debut=0;fin=256;pas=8;
>>v5=debut:pas:fin
Une liste des fonctions les plus courantes est disponible dans l’aide en ligne en tapant la
commande (elfun désigne elementary functions : sin, cos, log, exp…)
>>help elfun
7- Les matrices
Saisir la matrice 3x3 suivante :
a=[1 2 3 ;4 5 6 ;7 8 9]
Noter que deux lignes sont séparées par un point virgule.
Si vous entrez la commande a(:) vous obtenez le vecteur colonne [1 4 7 2 5 8 3 6 9]’.
La fonction eig donne les valeurs propres de la matrice a.
zeros(N) est la matrice nulle NxN, eye(N) est la matrice identité NxN.
II- ROGRAMMATION
1-LES SCRIPTS
Plutôt que de taper les commandes au clavier les unes après les autres pour effectuer
une tâche, ce qui vous oblige à refaire la même chose à chaque utilisation de cette
tâche, il est préférable de grouper les commandes dans un fichier à extension .m, ainsi
tous les programmes auront pour nom name.m. Il suffit alors de taper name pour que la
tâche s’exécute.
Exemple 1 :
Créez un fichier qui s’appelle essai1.m, qui génère un signal sinusoïdal x(t) de n points,
puis visualisez le à l’aide de la commande plot(x).
Etape 1 : édition du fichier par la commande : edit essai1.m
Etape 2 : taper les commandes suivantes dans la fenêtre d’édition :
>>essai1
2- Utilitaires graphiques
Exemple 2 :
Générez,à l’aide d’un programme prog1.m, deux périodes des deux signaux x(t)=cos(t)
et y(t)=sin(t) et visualisez les deux signaux sur une même figure, l’une en rouge et
l’autre en bleu à l’aide de la fonction plot(t,x,’b’,t,y,’r’). Mettre une légende.
Exemple 3 :
Visualisez sur une même figure,à l’aide d’un programme prog2.m, les quatre signaux
cos(t), sin(t),log10(t) et exp(t) en utilisant la fonction subplot(.,.,.) qui divise l’écran en
quatre sous figures : (2,2,1),(2,2,2),(2,2,3) et (2,2,4).
>>subplot(2,2,1),plot(t,x);
x=input(‘x=’) ;
fprintf(‘x=’%d) ;
III- LES FONCTIONS
Si plusieurs de vos programmes personnels utilisent en commun une liste d’instructions,
il est préférable de regrouper ces instructions sous forme d’un programme indépendant.
A chaque besoin on appelle le dit programme par son nom : c’est une fonction.
Une fonction possède des paramètres d’entrée et des paramètres de sortie, dont la
syntaxe de déclaration est la suivante :
function [sortie1,sortie2,…]=nom_fonction(entrée1,entrée2,…)
Le programme matlab correspondant à la fonction doit porter le même nom que la
fonction : nom_fonction.m
Exemple 1 :
Calcul de la moyenne arithmétique m d’un vecteur v de dimension n :
n
1
∑ v (i )
m= n i=1
La fonction moyenne.m comportera les instructions suivantes :
function resultat=moyenne(v,n); %déclaration de la fonction
s= √p = √ 1
∑
n i=1
x 2 (i)
Réaliser :
Une fonction factoriel(n) qui calcule le factoriel d’un entier naturel.
Une fonction somme(x,n) qui calcule s(x,n).
Un programme prog3.m qui calcule la valeur de l’exponentiel de 2 avec une
précision (incertitude relative) supérieure à 95% (incertitude inférieur à 5%).
PARTIE THEORIQUE
n
1. En utilisant e j .nα = [ e j. α ] , Trouver les expressions de cos(nα) et sin(nα) pour n=2 et
n=3.
2. De même retrouver les expressions de cos(α+β) et sin(α+β).
∞
1 1
∑ s(n) n
+j n
3. Calculer la somme n=1 , avec s(n)= 2 3
j
( )n
4. Même question pour s(n)= 3
N −N
5. Trouver les complexes z tels que : z̄ =z
6. trouver les racines cubiques de 1.
∞ n
∏ e jπ /2
7. Calculer le produit infini n=1
π /2 π /2
n
I n= ∫ sin ( x )dx J n = ∫ cosn ( x )dx
8. Calculer 0 et 0
________________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie
et doit contenir en plus de la partie théorique :
Un listing des programmes :
prog1.m
prog2.m
puissance.m
spectre(f,H)
myfilter.m
factoriel(n)
somme(x,n)
prog3.m
___________________________________________________________________________
factoriel.m
function p=factoriel(n)
if n>1
p=factoriel(n-1)*n ;% récursivité
else
p=1 ;
end
end
___________________________________________________________________________
myfilter.m
%TP1 : myfilter.m
f=0 :0.01 :100 ;
H1=(1+j*f./fc).^(-1) ;
H2=(j*f./fc).*H1 ;
___________________________________________________________________________
prog1.m
Te=0.001;
T=2*pi;
t=0:Te:2*T;
x=sin(t);
y=cos(t) ;
plot(t,x,’b’,t,y,’r’) ;grid on ;
legend(‚Sin(t)’,’Cos(t)’);
___________________________________________________________________________
prog2.m
Te=0.001;T=2*pi;t=0:Te:2*T;
x=sin(t);y=cos(t) ;t1=Te :Te :5 ;z=log10(t1) ;
t2=-2 :Te :2 ;u=exp(t2) ;
subplot(2,2,1) ;plot(t,x) ;grid on ;legend(‘Sin(t)’) ;
subplot(2,2,2) ;plot(t,y) ;grid on ;legend(‘Cos(t)’) ;
subplot(2,2,3);plot(t1,z);grid on;legend(‚log10(t)’);
subplot(2,2,4);plot(t2,u);grid on;legend(‚Exp(t)’);
_________________________________________________________________________
TP1 : prog3.m
s=somme(2,1) ;
i=1 ;%nombre d’itérations
fprintf(‚incertitude : %d\n’,(exp(2)-s)/exp(2));
___________________________________________________________________________
puissance.m
p=mean(v.^2) ;%la puissance de v
r=[p,s];
end
___________________________________________________________________________
somme.m
end
___________________________________________________________________________
spectre.m
function spectre(f,H,i)
subplot(2,2,i);plot(f,20*log10(abs(H)));title('spectre d''amplitude');
I- Définition
Un signal numérique s(k) est une suite de N échantillons régulièrement espacés de T e
secondes :
s(0,),s(Te),s(2Te),…,s((N-1)Te)
La grandeur Fe=1/Te est appelée fréquence d’échantillonnage : c’est le nombre
d’échantillons par seconde.
p
Le nombre d’échantillons N est le plus souvent une puissance de 2 : N= 2 où p est
un entier naturel.
Signal numérique
100
80
60
s(kTe)
40
20
0
Te 2Te 3Te 4Te kTe
kTe (secondes)
4
(−1)k
∑ k . cos(2 π . k . f 2 . t )
s2(t)= k =1
Avec : N=1024, f1=50Hz, Fe=8Khz pour s1 et f2=1/2 Hz , Fe=100Hz pour s2,.
Générez et visualisez en même temps, à l’aide d’un programme prog2.m, les deux
signaux s1 et s2.
Quelles remarques pouvez vous faire sur la forme des signaux?
Que constatez vous lorsque les sommations vont plus loin que 4?
A quel type de signaux connus pouvez vous comparer les signaux
générés (comparer à sawtooth (t) et square (t))?
Le bruit b(k) est défini comme étant un signal indésirable se mêlant additivement ou
autrement à un signal s(t) qui intéresse l’observateur.
Le model le plus fréquent de bruit de mesure de grandeurs physiques est le bruit blanc
gaussien : c’est un bruit aléatoire b(k) dont les échantillons sont dé-corrélés (entendez
par cela que même si on connaît b(k1), b(k2) reste aussi imprévisible qu’avant).
La fonction b=randn(1,N) permet de générer un vecteur bruit b de distribution pseudo
normale (de Gauss) de taille N de moyenne nulle et d’écart type 1.
Un coefficient multiplié par randn permet d’augmenter à volonté la puissance du bruit.
Ainsi pour générer un vecteur bruit blanc de taille N, de moyenne m et d’écart type σ
la commande est :
bruit= m+ σ *randn(1,N);
2 2
Dont la puissance est Pb =m +σ (Puissance de la moyenne plus celle des
fluctuations autour de cette moyenne).
Ps
10 . log10
SNR= Pb
On distingue trois cas de figure :
SNR positif : le signal est plus puissant que le bruit.
SNR nul : il y a autant de bruit que de signal.
SNR négatif : le signal est dégradé, il ya plus de bruit que d’information.
L’énergie d’un signal x(k) est fournie sous matlab par sum(x.^2). Concernant la
puissance moyenne, il faut diviser l’énergie par le nombre d’éléments de x(k).
PARTIE THEORIQUE
1- s(t) étant un signal défini sur [-T/2,T/2], on peut l’analyser sous la forme :
+∞
j 2π nf 0 t
s(t )= ∑ C n e
n=−∞
Avec :
T
2
1 − j 2π nf 0 t
∫ s(t )e dt
T T −1
−
Cn= 2 , f0=T
(Cn)n constituent le spectre de Fourier du signal s(t) aux fréquences (harmoniques) nf0 multiples
du fondamental f0.
s(t)=sin(t) si 0≤ t < π
a) Tracer s(t).
b) Calculer la valeur moyenne de s(t).
c) Calculer la série de Fourier de s(t).
s(t)=0 si T/4<|t|<T/2
a) Tracer s(t).
b) Calculer la valeur moyenne de s(t).
c) Calculer la série de Fourier de s(t).
a) Tracer s(t).
b) Calculer la valeur moyenne de s(t).
c) Calculer la série de Fourier de s(t).
2
d) On définit le spectre de puissance du signal s(t) par P n=Cn , Cn désigne un coefficient
de Fourier.
Calculer Pn.
2
Pour quel rapport θ /T a-t-on P1=A ?
_____________________________________________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie
et doit contenir en plus de la partie théorique :
Un listing des programmes : prog1.m, prog2.m, prog3.m
___________________________________________________________________________
prog1.m
%TP2 : prog1.m
for i=1:n/4 rec(i)=1;end % on génére une impulsion rectangulaire Rec de durée n/4
x=[rec,zeros(1,n-1)]; % on complète avec des zéros car la convolution x*x admet 2n-1 échantillons
for m=1:k
end
end
prog2.m
%TP 2 : prog2.m
s1=zeros(1,n);%initialisation
te=1/fe;t2=0:te:(n-1)*te;s2=zeros(1,n);
___________________________________________________________________________
TP2 : prog3.m
f=50;%fréquence de la sinusoide
a=1;%amplitude de la sinusoide
fe=2500;%fréquence d'échantillonnage
s=a*sin(2*pi*f*t);%génération du signal
Es=sum(s.^2);%énergie du signal
m=0;%moyenne du bruit
sigma=0.1;%ecart type du bruit
b=m+sigma*rand(1,n);%génération du bruit
y=s+b;%bruitage
Ps=Es/n;%puissance du signal
Pb=sigma^2;%puissance du bruit
subplot(2,2,1);plot(t,s);title('sinusoide');subplot(2,2,2);plot(t,b);title('bruit');subplot(2,2,3);
s(t)= −∞
∑ s( k)sinc[ F e (t−k .Te )]
sin( πu)
sin c (u)=
Où : πu .
Obstacles pratiques :
Les signaux physiques observés possèdent le plus souvent des spectres
de Fourier occupant des bandes fréquentielles illimitées, donc F max est
infini.
L’observation d’un signal physique se fait durant un intervalle limité [0,T]
ce qui donne le plus souvent un spectre très étalé.
Pour pallier ces difficultés, il faut noter que le spectre d’un signal physique tend vers
zéro avec la fréquence (l’énergie du signal s’évanouit aux hautes fréquences). Ceci
nous permet de limiter la bande significative du spectre et par la suite appliquer le
théorème de Shannon.
II- Transformée de Fourier Discrète :
La TFD d’ordre N d’un signal numérique s(kTe), k=0…N-1 est définie par :
N −1
n
.F e ∑ s(kTe )Exp [− j 2 π kn /N ]
S(f)=S( N )= k =0 , n= -N/2…N/2-1
La transformation inverse :
N /2−1
1
∑ S(nFe / N ) Exp[ j2 π kn/ N ]
s(t)=s(kTe)= N n=−N /2 , k=0…N-1
Remarques :
Par abus d’écriture et pour simplifier on note s(k) et S(n) le signal
et sa TFD en omettant les facteurs Te et Fe.
N est souvent une puissance de 2 et dans ce cas il ya un
algorithme rapide de calcul des N coefficients de la TFD, on parle
de FFT (Fast Fourier Transform).
Ainsi aux coefficients s(1)…s(N) correspondent par TFD les coefficients S(1)…S(N).
Sous matlab la TFD est donnée par la fonction fft(s,N).
La transformée inverse est donnée par ifft(s,N).
40
30
|S(nFe/N)|
20
10
0
Fe/N 2Fe/N 3Fe/N 4Fe/N (1-1/N)Fe
nFe/N (Hertz)
20*log10(abs(fft(s,N)))
angle(fft(s,N))
Repliement de spectre (aliaising)
2
Générer le signal x(t)= sin( π .t +2 π . t+1 ) de durée une seconde avec F e=1kHz.
Visualiser x en fonction de t. Visualiser la TFD de x. Commenter.
La fréquence instantanée de x(t) dépend de t, exprimer cette fréquence. Cela implique
que le théorème d’échantillonnage ne pourra jamais être respecté : aliaising inévitable.
Matlab permet de visualiser le spectre par tranches temporelles en fonction du temps :
C’est le spectrogramme. Observer ce spectrogramme à l’aide de la fonction
specgram(x) ;
prog1.m :
Générer et visualisez les n/8 points de la TFD d’ordre n d’une sinusoïde
sin(t) ainsi que sa phase. Utiliser le zoom et « data cursor » pour lire les
pics.
Faites de même pour une somme de sinusoïdes sin[(2k+1)t], k=0…4.
prog2.m
Générer et visualisez Rec(k), sur 2 secondes. Visualisez les n/8 points
des spectres d’amplitude et de phase de la TFD d’ordre n=512 en
respectant les unités temporelle et fréquentielle.
Générer et visualisez la convolution z(k) de Rec(k) avec lui-même
(utilisez la fonction conv(Rec,Rec)) ainsi que sa TFD et sa phase (Les
n/8 points uniquement).
Comparez la TFD de z(k) et le carré de la TFD de Rec(k).
Générez wave(k) une onde carrée à l’aide de la fonction square( pour
l’utiliser correctement tapez help square).
Visualisez wave et sa TFD.
prog3.m
Générer et visualisez la TFD d’une sinusoïde bruitée de fréquence f 0 en
2
lui rajoutant un bruit blanc centré de puissance σ et observez si l’on
distingue le pic correspondant à la fréquence de la sinusoïde. Testez
2
plusieurs valeurs de σ et de f0.
PARTIE THEORIQUE
I- Propriétés de la TFD
II- Modulation
On considère un signal s(t) dont la transformée de Fourier S(f) occupe la bande de
fréquences [-Fmax,Fmax].
1- Donner l’expression de la transformée de Fourier analogique de s m(t)=s(t).cos(2
π fpt) en fonction de S(f).
2- Donner l’expression de la transformée de Fourier analogique du signal démodulé
mais non filtré : sdm(t)=sm(t).cos(2 π fpt), en fonction de S(f).
3- Proposez une méthode pour extraire S(f) de sdm(t).
_____________________________________________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie
et doit contenir en plus de la partie théorique :
Un listing des programmes : prog1.m, prog2.m, prog3.m
TPIII : TFD
___________________________________________________________________________
prog1.m
n=1024;%nombre de points
x=sin(t);%sinusoide
y=fft(x);%sa tfd
moduly=abs(y);phasey=angle(y);
s=zeros(1,n);%initialisation de la somme
z=fft(s);%tfd de s
modulz=abs(z);phasez=angle(z);
%On visualise les n/8 points pour bien voir les pics
subplot(3,2,1);plot(t,x);title('sin(t)');grid on;
___________________________________________________________________________
prog2.m
%TP 3 : prog2.m
s=fft(rec);moduls=abs(s);%spectre de module
phases=angle(s);%spectre de phase
te=2/n;%pas d'échantillonnage
fe=1/te;%fréquence d'échantillonnage
t=0:te:(n-1)*te;%durée d'observation
sx=fft(x);modulx=abs(sx);phasex=angle(sx);
sw=fft(wave);modulw=abs(sw);
%on visionne les n/8 points pour voir les pics sans zoomer
___________________________________________________________________________
prog3.m
%TP3 : prog3.m
n=1024;%nombre de points
fe=1/te;
f0=1;
y=fft(x);%sa tfd
moduly=abs(y);
phasey=angle(y);
%On visualise les n/8 points pour bien voir les pics
subplot(3,1,1);plot(t,x);title('sin(t)+randn(t)');grid on;
Réalisez prog1.m qui :
1. Génère une sinusoïde s(k) de fréquence 100Hz, de taille N=512 échantillonnée à
1kHz.
2. Visualise les modules des TFD d’ordres M=16, 32, 64, 128, 256, 512 et donne à
chaque fois la largeur Δ f du lobe principal du spectre : Cette largeur est l’écart entre
les fréquences où le max du spectre est divisé par deux (largeur à mi-hauteur) (utiliser
la fonction find() sinon le zoom et « data cursor ».
3. Vérifiez que le produit p=M Δ f est constant. Conclure.
2- Fenêtre d’analyse :
Une fenêtre d’analyse est une mise en forme que l’on donne au signal avant de
l’analyser par TFD :
On multiplie s(k) terme à terme par une fenêtre w(k) de forme adéquate pour réduire les
lobes secondaires afin que le spectre observé tende vers le résultat théorique qui est
pour une sinusoïde de fréquence f0 une raie pure à la fréquence f0.
Les analyseurs de spectre (appareils qui donnent le spectre d’un signal) proposent de
nombreuses fenêtres d’analyse, qui ont chacune des effets différents : Blackman,
Hamming, Hanning…
Sous matlab on peut utiliser les fonctions hanning(N) et blackman(N) pour le fenêtrage
(ce sont deux vecteurs colonnes de taille N).
Réalisez prog2.m qui :
4. Visualise sur une même figure les deux fenêtres citées et leurs spectres
d’amplitude sur [0, 0.5Hz]. Conclure sur l’utilité de ces deux fenêtres.
5. Multiplie terme à terme la sinusoïde s(k) du prog1.m par chacune des deux
fenêtres, et visualise les spectres résultants.
6. Observez l’effet du fenêtrage sur le spectre. Comparez l’effet des deux fenêtres
proposées.
Δ f=Fe/N
On va essayer de voir les limites de l’analyse par TFD en essayant de détecter des
sinusoïdes prôches.
Réalisez prog3.m qui :
Réalisez prog4.m qui :
12. Visualise la TFD X(n) d’un signal rectangulaire x(k), sa fonction d’auto-corrélation
R(n) et la TFD de R. Utiliser xcorr(x,x,’biased’) ;
13. Visualise un bruit blanc b(k), son auto-corrélation B(n) et la TFD de B.
14. En comparant R(n) et X(n), vérifiez le théorème de Wiener-kinchine.
PARTIE THEORIQUE
On désigne par u(t) l’échelon unité, nul pour t négatif et égal à 1 ailleurs.
5- Quelle est la puissance ΔP localisée dans la bande [f 0- Δ f/2, f0+ Δ f/2] d’un signal s(t) à
puissance moyenne finie. Que se passe-t-il si Δ f tend vers zéro ?
_________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie et
doit contenir en plus de la partie théorique :
Un listing du programme :
prog1.m, prog2.m, prog3.m, prog4.m
TP IV : ANALYSE SPECTRALE
___________________________________________________________________________
prog1.m
%TP4 : prog1.m
clear all;
f0=100;%fréquence de la sinusoïde
fe=1000;%fréquence d'échantillonnage
te=1/fe;
m=ordre(k);%ordre de la TFD
t=0:te:(m-1)*te;%durée observée
s=sin(2*pi*f0*t);%génération de la sinusoïde
x=fft(s,m);
y=abs(x);%spectre de module
end
___________________________________________________________________________
prog2.m
%TP 4: prog2.m
clear all;
n=512;
blak=blackman(n);%fenêtre de blackman
mhan=abs(fft(han));
mblak=abs(fft(blak));
f0=100;%fréquence de la sinusoïde
fe=1000;%fréquence d'échantillonnage
te=1/fe;t=0:te:(n-1)*te;%durée observée
s=sin(2*pi*f0*t);clear f;%initialisation de f
sh=s.*han';%fenêtrage
sb=s.*blak';%fenêtrage
msh=abs(fft(sh));msb=abs(fft(sb));
subplot(4,2,5);plot(sh);title('sin(t)*hanning');grid on;subplot(4,2,6);plot(sb);title('sin(t)*blackman');grid
on;subplot(4,2,7);plot(f,msh(1:n/2));title('spectre de sin*hanning');grid on;
___________________________________________________________________________
prog3.m
%TP4 : prog3.m
fe=1000;%fréquence d'échantillonnage
te=1/fe;
for k=5:8% calcul des TFD d'ordres 256, 512, 1024, 2048
n=2^(3+k);%ordre de la TFD
t=0:te:(n-1)*te;%durée observée
x=fft(s,n);%TFD de la somme
y=abs(x);%spectre de module
%Affichage
subplot(4,2,2*(k-5)+1);plot(t,s);title('somme des deux sinusoides');grid on;
end
___________________________________________________________________________
prog4.m
%TP4 : prog4.m
mx=abs(X);
sr=fft(R);%TFD de R
B=xcorr(b,b,'biased');%autocorrélation du bruit
mb=abs(sb);
%affichage
1- La puissance acoustique
P
PdB=10.log 10
P étant la puissance par cm2, la puissance en dB s’écrit : P0 , avec
P0=10-16. La puissance est proportionnelle au carré de la pression subie par le tympan.
L’écart de puissance minimum distinguable par l’oreille est de l’ordre de 1dB soit à peu
près 11% d’écart relatif en puissance (correspond à une pression minimale de 20
micropascales).
L’oreille possède une sensibilité logarithmique : un facteur deux ressenti correspond à
un facteur dix en puissance.
2- La hauteur du son
Le fondamental étant f, les harmoniques sont 2f, 3f, 4f, …liés respectivement aux
modes fondamental (do3), second (do4), troisième (sol4)…
3. Le timbre
Il correspond au contenu spectral du son, peu importe son allure temporelle.
4. Echelle logarithmique
la séparation minimum entre niveaux distinguables étant de 1dB, pour coder la plage
allant de 0dB à 120 dB il faudra coder la plage de puissance allant de 0 à 10 12 soit sur
40 bits.
Du fait que l’oreille ait une sensibilité logarithmique, seuls 120 niveaux sont
distinguables, d’où un codage sur 8 bits uniquement. Cela exige une quantification
logarithmique des échantillons sonores (Echelle de quantification compensée).
X étant la donnée originale, la donnée quantifiée Y s’écrit :
ln(1+μ . X )
Y=
ln(1+μ ) , 0 ¿ X ¿ 1 (standard US, ex. μ =255)
1+ln( A . X )
Y=
1+ln( A ) , 1/A ¿ X ¿ 1 (standard EU, ex. A=87.6)
5. Qualité des données audio
u=wavread(‘son1.wav’,N) ;
u contient les N premières données ou échantillons.
fid=fopen(‘son1.wav’,’r’) ;
Ouvre le fichier son en tant que flot de données non spécifiés pour sa lecture.
fid est le pointeur du fichier :pointe la donnée actuelle.
son_lu=fread(fid,inf,’int16’);
son_lu est un vecteur colonne constitué de données 16 bits ;
inf demande la lecture jusqu’à la fin du fichier.
fclose(fid); Ferme le fichier.
Testez ces instructions sur un fichier son et en déduire la taille de l’entête.
wavwrite(x,fs,’son2.wav’) ;
Crée un fichier son son2.wav dont les échantillons (compris entre -1 et 1) se
trouvent dans la matrice x avec une fréquence d’échantillonnage fs.
prog2.m
Enregistrer un son x stéréo de durée 16 secondes.
Visualisez sur deux systèmes d’axes différents les N=2048 premiers échantillons
de chaque canal (un extrait y).
Visualisez les spectres de phase et d’amplitude correspondant à y.
Modifier le contenu de x, en effaçant quelques passages, puis écouter le résultat.
prog3.m
Mixage : Enregistrer deux sons différents x1 et x2 et fusionner les données
alternativement (un morceau de x1 suivi d’un morceau de x2…etc) dans un
fichier y .
Ecouter x1, x2 et y .
___________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie et
doit contenir un listing des programmes : prog1.m, prog2.m, prog3.m
TP V : NOTIONS d’AUDIO
recordblocking(x,D) ;
play(x);
___________________________________________________________________________
%lecture d'un son
wavplay(x,fs);%ecoute
siz=wavread(son,'size');%
fprintf('nombre d''échantillons:');siz(1)
fprintf('nombre de canaux:');siz(2)
fprintf('durée du son:');siz(1)/fs
fclose(fid);
___________________________________________________________________________
prog1.m
te=1/fe;%pas d'échantillonnage
D=100/f0;%durée du son
n=D*fe+1;%nombre de samples
t=0:te:D;%durée du son
wavplay(y);
___________________________________________________________________________
prog2.m
%enregistrement audio
recordblocking(x,D) ;
play(x);
n=2048;y1=y(1:n,1);%extrait canal 1
y2=y(1:n,2);%extrait canal 2
subplot(3,2,1);plot(y1(1:n));title('extrait de l''enregistrement');
subplot(3,2,3);plot(abs(fft(y1)));title('spectre d''amplitude');
subplot(3,2,5);plot(angle(fft(y1)));title('spectre de phase');
subplot(3,2,2);plot(y2(1:n));title('extrait de l''enregistrement');
subplot(3,2,4);plot(abs(fft(y2)));title('spectre d''amplitude');
subplot(3,2,6);plot(angle(fft(y2)));title('spectre de phase');
%modification de l'enregistrement
L=size(y,1);
wavplay(z,fs);
_________________________________________________________________________
prog3.m
%TP5 prog3.m
%mixage audio
clear all;
recordblocking(x1,D) ;
recordblocking(x2,D) ;
%modification de l'enregistrement
L=size(y1,1);%nombre d'échantillons
z=[y1(1:L/4,:);y2(1:L/4,:);y1(L/4+1:L/2,:);y2(L/4+1:L/2,:)];%mixage
wavplay(z,fs);
TP VI MODULATIONS NUMERIQUES
_____________________________________________________________________________________________________
I- Modulations analogiques
On se propose de moduler un signal audio en utilisant les fonctions Matlab ammod et pmmod.
1- Modulation d’amplitude
prog2.m
Visualiser et écouter les trois signaux x ,y et z ainsi que leurs spectres d’amplitude.
2- Modulation de phase
x = sin(2*pi*t) + sin(4*pi*t);
Fp = 10;
y = pmmod(x,Fc,Fs,phasedev); % Modulation
Matlab permet d’effectuer le tracé des constellations des modulations les plus courantes (trace
l’enveloppe complexe des symboles de l’alphabet). En voici deux exemples :
PSK-16
x = int16([0:M-1]);
QAM-32
M = 32;
x = int16([0:M-1]);
y = qammod(x,M);
scale = modnorm(y,'peakpow',1);
2- Modulation QAM-16
y = qammod(x,M); % modulation
Visualisez x et y.
scatterplot(ynoisy);
z = qamdemod(ynoisy,M); % démodulation
Visualisez x, y, ynoisy et z
PARTIE THEORIQUE
Permet de définir l’enveloppe réel r(t ) et la phase instantanées ϕ(t ) d’un signal réel
x(t).
4- Donner l’enveloppe et la phase du signal modulé x(t )=a(t ). cos(2π . f 0 t+ϕ) , a(t)
étant un signal réel. Faire un tracé qui illustre l’enveloppe de x(t).
L’enveloppe complexe d’un signal réel x(t) est définie, pour une pulsation arbitraire
ω0
− j . ω0 t
~ ~
par : r (t )= x (t ). e
On peut interpréter l’enveloppe complexe comme le résultat d’une modulation
d’amplitude du signal analytique.
~r (t )
5- Exprimer les parties réelles et imaginaires a(t) et b(t) de en fonction de x(t),
ω ω
y(t) et les porteuses sin( 0 t) et cos( 0 t).
a(t) et b(t) s’appellent la composante en phase (IN) et en quadrature (Q) du signal réel
x(t).
6- Inversement, exprimer x(t) et y(t) en fonction de a(t), b(t) et les porteuses.
7- On considère un signal x(t) réel, aléatoire ou non, à spectre passe
bande symétrique :
γ x (f )=1 , pour f 1 ≤|f|≤f 2 Et nul ailleurs.
8- Exprimer les spectres de x(t), a(t) et b(t) en fonction du spectre de l’enveloppe
complexe. Faites un schéma illustratif.
_____________________________________________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie et
doit contenir en plus de la partie théorique : Un listing des programmes prog1.m et
prog2.m
TP VI : MODULATION
prog1.m
%modulation analogique
fe=8000;%fréquence d'échantillonnage
te=1/fe;
n=512;%ombre de points
t=0:te:te*(n-1);%durée d'observation
x=sin(2*pi*f0*t);%signal à moduler
fp=2500;%fréquence porteuse
p=cos(2*pi*fp*t);%la porteuse
sx=abs(fft(x));
sp=abs(fft(p));
sm=abs(fft(m));
sdm=abs(fft(dm));
f=0:fe/n:fe/2-fe/n;
%visualisation
subplot(4,2,1);plot(x);title('signal original');grid on;
___________________________________________________________________________
prog2.m
clear all;
[x,fe]=wavread(nom);
sx=abs(fft(x));%spectre original
te=1/fe;
n=size(x,1);%taille du son
T=te*(n-1);
fp=5000;%fréquence porteuse
t=0:te:T;%durée du son
y=ammod(x,fp,fe);%modulation d'amplitude
z=amdemod(y,fp,fe);%démodulation d'amplitude
sz=abs(fft(z));%spectre du son démodulé
f=0:fe/n:fe/2-fe/n;%plage spectrale
wavplay(x,fe);
wavplay(y,fe);
wavplay(z,fe);
subplot(3,2,1);plot(x(1024:2*1024));title('signal audio');
I- Estimation de la moyenne
Soit X une variable aléatoire stationnaire d’ordre un et x(1)…x(N) une série de N observations
ou mesures de X décorrélées. On se propose d’étudier le comportement de l’estimateur de la
moyenne μ =E[X] suivant (moyenne empirique):
N
1
μ^ ( N )= . ∑ x (i)
N i=1
prog1.m
N.B. : Avant chaque génération de bruit il faut initialiser le processus de génération à l’aide de la
commande rand('state',0);
prog2.m
Générez 1000 échantillons décorrélés d’une variable aléatoire X stationnaire au second
ordre en additionnant une sinusoïde et un bruit blanc de moyenne μ =5 et de variance
σ 2 =1.5.
Calculez les deux estimateurs σ^ (N) pour les valeurs de N = 1…1000.
Visualisez σ^ 1(N), l’erreur ε (N)=( σ^ 1- σ )(N) et l’erreur quadratique ε 2
(N).
Est ce qu’il y a convergence?
On considère un signal constant C noyé dans un bruit b(k) blanc centré de variance v, le signal
résultant observé est s(k). On estime la valeur de la constante en prenant la moyenne de s(k).
PARTIE THEORIQUE
Soit N échantillons [x1,…xN] extraits d’un signal stationnaire X centré d’ordre deux de fonction de
corrélation inconnue RX(n)=E[x(k).x(k+n)].
prog1.m
T=2*pi;%période du signal
te=1/fe;
t=0:te:4*T;%durée observée
s=sin(2*pi*t/T);%le signal
mu=5;%moyenne du bruit
b=mu+randn(1,n);%le bruit
x=s+b;%signal bruité
moyenne(k)=mean(x(1:k));
end
e=moyenne-5;%le biais
eqd=e.^2;%l'erreur quadratique
subplot(2,2,1);plot(t,x);
subplot(2,2,2);plot(moyenne);
xlabel('N');grid on;subplot(2,2,4);plot(eqd);
xlabel('N');grid on;
___________________________________________________________________________
prog2.m
clear all;
T=2*pi;%période du signal
a=1;%amplitude du signal
te=1/fe;
t=0:te:4*T;%durée observée
s=a*sin(2*pi*t/T);%le signal
mu=5;%moyenne du bruit
b=mu+sigma*randn(1,n);%le bruit
x=s+b;%signal bruité
variance1(1)=0;%initialisation
variance2(1)=0;
variance1(k)=mean((x(1:k)-mean(x(1:k))).^2);
variance2(k)=k/(k-1)*variance1(k);
end
e1=variance1-Px;%le biais
eqd1=e1.^2;%l'erreur quadratique
e2=variance2-Px;%le biais
eqd2=e2.^2;%l'erreur quadratique
%premier estimateur
subplot(2,4,1);plot(t,x);
subplot(2,4,2);plot(variance1);
title('variance1');xlabel('N');grid on;
subplot(2,4,3);plot(e1);
xlabel('N');grid on;
subplot(2,4,4);plot(eqd1);
xlabel('N');grid on;
%second estimateur
subplot(2,4,5);plot(variance2);
title('variance2');xlabel('N');grid on;
subplot(2,4,6);plot(e2);
xlabel('N');grid on;
subplot(2,4,7);plot(eqd2);
xlabel('N');grid on;
___________________________________________________________________________
prog3.m
te=1/fe;
t=0:te:T;%durée observée
mu=0;%moyenne du bruit
v=C/2;
b=mu+sqrt(v)*randn(1,n);%le bruit
Ce=mean(x);
e=Ce-C;%le biais
eqd=e.^2;%l'erreur quadratique
fprintf('Biais : %d\n',e);
fprintf('EQ : %d\n',eqd);
TP VIII FILTRAGE NUMERIQUE
Remarques :
il peut y avoir plusieurs fréquences de coupure.
Les fonctions filter, fir1, fir2, remez…permettent la création de filtres
suivant plusieurs méthodes.
La réponse fréquentielle (RF) du filtre, égale à la TFD de la RI en dB, doit
être contenue dans le gabarit pour que le filtre soit utilisable
correctement ; sinon on dit que la méthode diverge :il faut chercher une
autre procédure.
Le module de H(f) étant déterminé, le choix de la phase se fait
généralement en prenant tous les pôles et zéros de h(k) à l’intérieur du
cercle unité (exigences de stabilité et de causalité).
Passe haut
|H(f)|
coupée
passante|
f1 fc Fe/2 f
On se propose de rehausser une sinusoïde noyée dans le bruit. Un bruit blanc possède
un spectre étalé sur toute la bande fréquentielle, alors que celui du sinus est concentré
autour de sa fréquence.
prog4.m
Générez un sinus de fréquence 1kHz échantillonné à 10kHz
Ajoutez un bruit centré au sinus avec un RSB=10dB.
Quel gabarit pour atténuer le bruit ?
Réalisez le filtrage par moyenne mobile sur 5 points et comparez les spectres et
allures temporelles des signaux bruité et débruité.
PARTIE THEORIQUE
___________________________________________________________________________
prog1.m
% filtrage numérique
%réponses impulsionnelles
clear all
n=32;%nombre d'échantillons
d=zeros(1,n);%impulsion de Dirac
d(1)=1;
%visualisation des RI
for i=1:5
subplot(2,3,i);stem(h(i,:));title(['h' num2str(i,'%d')]);
end
%visualisation des RF
for i=1:5
H(i,:)=abs(fft(h(i,:)));
subplot(2,3,i);plot([-1/2+1/n:1/n:1/2],H(i,:));title(['H' num2str(i,'%d')]);grid on
end
for i=1:5
end
T=100;
t=0:2*T;
x=sin(2*pi*t/T);
for i=1:5
end
ech=ones(1,n);%échelon unité
%visualisation
for i=1:5
end
__________________________________________________________________________
prog2.m
clear all;
max=10^(datt/20);
Hg=[ones(1,8) min inter max max/2 max/4 zeros(1,n-26) max/4 max/2 max inter min ones(1,8)];
mH=abs(H);
pH=angle(H);
%visualisations
%pôles et zéros
%Filtrage d'harmoniques
te=1/fe;%pas d'échantillonnage
t=0:te:(n-1)*te;%durée d'observation
e1=sin(2*pi*f1*t);
e2=sin(2*pi*f2*t);
s2=real(ifft(H.*fft(e2)));
%affichage
________________________________________________________________________
prog3.m
%Filtrage d'harmoniques
fe=8000;%fréquence d'échantillonnage
te=1/fe;
f0=100;%le fondamental
n=1024;
t=0:te:(n-1)*te;%durée d'observation
x=zeros(1,n);%initialisation
f=0:fe/n:fe/2-fe/n;%bande 0,fe/2
sx=abs(fft(x));%module du spectre
%visualisation
subplot(3,2,2);plot(f,sx(1:n/2));
H=fft(h);%RF estimée
mH=abs(H);
xf=conv(h,x);%signal filtré
%visualisation
___________________________________________________________________________
prog4.m
fe=10000;%fréquence d'échantillonnage
te=1/fe;
f0=1000;%le fondamental
n=256;
t=0:te:(n-1)*te;%durée d'observation
x=sin(2*pi*f0*t);%sinusoide
b=sigma*randn(1,n);%bruit
y=x+b;%signal bruité
sx=abs(fft(x));%spectre original
f=0:fe/n:fe/2-fe/n;
subplot(3,2,1);plot(t,x);title('sinusoide');
subplot(3,2,2);plot(t,b);title('bruit');
subplot(3,2,3);plot(f,sx(1:n/2));title('spectre de la sinusoide');
subplot(3,2,4);plot(t,y);title('sinusoide bruitée');
z=filter(ones(1,m)/m,1,y);%moyennage mobile
subplot(3,2,5);plot(t,z);title('sinusoide débruitée');
sz=abs(fft(z));
subplot(3,2,6);plot(f,sz(1:n/2));title('spectre débruité');
TP IX NOTIONS de TRAITEMENT d’IMAGES
_____________________________________________________________________________________________________
I- DEFINITIONS
1- Une image à deux dimensions est définie comme une matrice I(N,N) de N ligne et N
colonnes.
2- Le point (i,j) est appelé pixel (picture cell), sa valeur I(i,j) réelle traduit le degré de luminosité
de l’image au point (i,j) : On l’appelle niveau de gris de l’image au point (i,j).
3- Généralement N est une puissance de 2 (32,64,…,1024..) et le niveau de gris des pixels varie
8
entre 0 et 255=256-1=2 -1.
0 correspond au noir (luminosité minimum) et 255 au blanc (luminosité maximum) ; Tous les
niveaux sont codables sur 8 bits (octet ou byte). Ceci pour une image noir et blanc, pour une
image couleur, il faut prévoir trois matrices qui correspondent aux niveaux du rouge, vert et bleu
(RVB ou RGB).
pixel (1 , N )
(1,1 )
( N ,1 ) (N ,N )
Les images noir et blanc ou couleur occupent beaucoup d’espace mémoire, ceci est ressenti
lors de la conception d’un programme manipulant plusieurs images.
Ainsi une image telle que celle définie ci-dessus, va occuper NxNx8 bits ou encore NxN
10
octets (un Kilo octets=1Kb=1024 octets=2 octets):
128 16.384 16
256 65.536 64
On parle aussi de compression d’une image. Vue la taille occupée par une image, surtout en
couleur et lorsque les images sont animées, on a inventé des méthodes qui permettent de
réduire considérablement la taille mémoire d’une image après compression : On distingue les
images bitmap, tif, gif, epg, jpeg…suivant la méthode de compression utilisée.
MATLAB Dénomination
Comme tout fichier formaté, une image en mémoire est un fichier qui possède deux champs :
Une entête : c’est une suite d’octets spécifiant le nombre de lignes et de colonnes
de l’image, le nombre d’octets par pixel, le genre de codage utilisé pour
compresser l’image…
C’est justement le format induit par la méthode de compression : tif, gif,
mpeg…
Les données : c’est la suite des niveaux de gris de tout les pixels de l’image
tenant compte de la méthode de compression, ce qui exige pour lire l’image un
programme spécifique connaissant le code de l’image.
Si R est une matrice NxN, la commande imwrite (R,’nom.tif’) crée une nouvelle image
NxN nom.tif dont les pixels ont les niveaux de gris figurant dans la matrice r.
Exemple 1
Cette instruction stock l’image cameraman.tif dans une matrice i de type uint8.
Les niveaux de gris de l’image sont disponibles maintenant dans la matrice i, ce qui nous
permet d’effectuer toutes les transformations possibles sur cette image et de sauver les résultats
du traitement dans une autre image (il faut la convertir au type double avant de la manipuler
x=double(i)).
Les opérations mathématiques nécessaires s’effectuent sur des variables de type double ; il
serait indispensable de convertir les images sources avant leur traitement de la manière
suivante :
id=double (isource) ;
prog1.m :
On considère le pixel x(i,j) d’une image donnée à laquelle on a additionné un bruit gaussien
(utiliser rand(N,N)), et on s’intéresse à ses 8 pixels proches voisins : x(i-1,j-1), x(i,,j-1), x(i+1,j-1),
x(i-1,j), x(i+1,,j), x(i-1,j+1), x(i,j+1) et x(i+1,j+1). Ces neuf pixels forment une fenêtre locale :
Réalisez un programme prog2.m qui effectue le filtrage local 3x3 et visualisez le résultat pour
plusieurs images. Quel est l’effet du filtre ?
Filtrage médian
Le filtrage médian est une opération non linéaire, qui consiste en deux étapes :
prog3.m
Le seuillage d’une image consiste à choisir un nombre réel s (threshold) et de tester les pixels
de l’image point par point et ligne par ligne : tout niveau de gris inférieur au seuil s est mis à zéro
(noir) sinon il est mis à 255 (blanc) ou 1 : Binarisation.
Matlab permet en une seule instruction de comparer les éléments d’une matrice M à un seuil
donné s : a=(M>s), a est une matrice composée de 1 et de 0.
prog4.m
L’image C contient les limites ou frontières ou périmètres des objets contenus dans Im. Par
exemple si Im est la photo d’un disque plein alors C sera une image contenant un cercle de
même centre et rayon que le disque.
Méthode du gradient :
Le calcul des pixels de C s’effectue en faisant la soustraction des pixels voisins de Im :
Le parcours d’une image ligne par ligne (ordre lexicographique) dans un programme s’effectue
de la manière suivante :
traitement1 ;
traitement2 ;…
end
end
prog5.m
Réalisez un programme qui donne le contour horizontal d’une image et visualisez
le résultat.
Réalisez un programme qui donne le contour vertical d’une image et visualisez le
résultat.
Générez et visualisez l’image moyenne des deux contours précédents.
Testez le programme sur plusieurs images.
____________________________________________________________________________________________________
Le compte rendu de la séance doit être rédigé sur la feuille qui vous est fournie et
doit contenir :
Un listing des programmes : prog1.m, prog2.m, prog3.m, prog4.m, prog5.m
___________________________________________________________________________
prog1.m
%calcul des deux premiers moments statistiques
i=imread('cameraman.tif');%lecture de l'image
sup=max(x(:));%niveau max
inf=min(x(:));%niveau min
m=mean(x(:));%moyenne
v=mean(d(:));%variance
s=sqrt(v);%ecart type
___________________________________________________________________________
prog2.m
%TP 9 prog2.m
clear all;
isource=imread('cameraman.tif');%lecture de l'image
n=256;%taille de l'image
end
end
%affichage
subplot(1,2,1);imshow(isource);title('image originale');
___________________________________________________________________________
prog3.m
%TP 9 prog3.m
%Filtrage median
clear all;
isource=imread('cameraman.tif');%lecture de l'image
n=256;%taille de l'image
end
end
%affichage
subplot(1,2,1);imshow(isource);title('image originale');
___________________________________________________________________________
prog4.m
isource=imread('cameraman.tif');%lecture de l'image
m=mean(x(:));%moyenne de l'image
sx=255*(x>s);%seuillage par s
sx2=255*(x>m);%seuillage par m
%affichage
subplot(2,2,1);imshow(isource);title('image originale');
___________________________________________________________________________
prog5.m
clear all;
isource=imread('cameraman.tif');%lecture de l'image
n=256;%taille originale
for i=1:n-1
for j=1:n-1
ch(i,j)=abs(x(i,j+1)-x(i,j));%gradient horizontal
cv(i,j)=abs(x(i+1,j)-x(i,j));%gradient vertical
end
end
ch1=255*(ch>mch);%binarisation du gradient h
cv1=255*(cv>mcv);%binarisation du gradient v
%affichage
subplot(2,4,1);imshow(isource);title('image originale');
subplot(2,4,2);imshow(uint8(ch));title('gradient horizontal');
subplot(2,4,3);imshow(uint8(cv));title('gradient vertical');