Sei sulla pagina 1di 8

Scripts, fonctions, exercices appliqus au Traitement numrique du signal

1. Representing Signals
1.1 Vector Representation
MATLAB represents ordinary one-dimensional sampled data signals, or sequences, as vectors. Vectors are 1-by-
n or n-by-1 arrays, where n is the number of samples in the sequence. One way to introduce a sequence into
MATLAB is to enter it as a list of elements at the command prompt. The statement

x = [4 3 7 -9 1]

creates a simple five-element real sequence in a row vector. Transposition turns the sequence into a column
vector

x = x'

resulting in

x =
4
3
7
-9
1

Column orientation is preferable for single channel signals because it extends naturally to the multichannel case.
For multichannel data, each column of a matrix represents one channel. Each row of such a matrix then
corresponds to a sample point. A three-channel signal that consists of x, 2x, and x/pi is

y = [x 2*x x/pi]

This results in

y =
4.0000 8.0000 1.2732
3.0000 6.0000 0.9549
7.0000 14.0000 2.2282
-9.0000 -18.0000 -2.8648
1.0000 2.0000 0.3183

1.2. Waveform Generation: Time Vectors and Sinusoids
A variety of toolbox functions generate waveforms. Most require you to begin with a vector representing a time
base. Consider generating data with a 1000 Hz sample frequency, for example. An appropriate time vector is

t = (0:0.001:1)';

where MATLAB's colon operator creates a 1001-element row vector that represents time running from zero to
one second in steps of one millisecond. The transpose operator (') changes the row vector into a column; the
semicolon (;) tells MATLAB to compute but not display the result.
Given t you can create a sample signal y consisting of two sinusoids, one at 50 Hz and one at 120 Hz with twice
the amplitude.

y = sin(2*pi*50*t) + 2*sin(2*pi*120*t);

The new variable y, formed from vector t, is also 1001 elements long. You can add normally distributed white
noise to the signal and graph the first fifty points using randn :

yn = y + 0.5*randn(size(t));
plot(t(1:50),yn(1:50))

1
Ex1:
Un signal sinusodal et du bruit
Raliser le script suivant, exprimenter diffrentes frquences.

t = (0:0.001:1)';
y = sin(2*pi*80*t) + 2*sin(2*pi*160*t);
yn = y + 0.5*randn(size(t));
plot(t(1:50),yn(1:50))
% on pourrait utiliser la fonction sound, mais comme de nombreuses valeurs
% dpassent l'intervalle +/- 1, on utilise soundsc (sc=scale=mise l'chelle)
% de plus il faut indiquer la priode d'chantillonnage, ici par le biais de
% la frquence d'chantillonnage fs (s=sampling) qui est son inverse
soundsc(y,1000);
disp('Taper sur la touche "Entre" pour continuer');
pause;
soundsc(yn,1000);

1.3. Common Sequences: Unit Impulse, Unit Step, and Unit Ramp
Since MATLAB is a programming language, an endless variety of different signals is possible. Here are some
statements that generate several commonly used sequences, including the unit impulse, unit step, and unit ramp
functions.

t = (0:0.001:1)';
imp = [1; zeros(99,1)]; % impulse
step = ones(100,1); % step (filter assumes 0 initial cond.)
ramp = t; % ramp
y = t.^2;
y = square(4*t);
All of these sequences are column vectors. The last three inherit their shapes from t.

Ex2:
La fonction "stem"
En utilisant la fonction "stem", reprsenter :
a) imp(n-10)
b) step(n-1)
c) ramp(n-10)
pour les chantillons situs entre n=1 et n=20

1.4. Common Periodic Waveforms
The toolbox provides functions for generating widely used periodic waveforms:
sawtooth generates a sawtooth wave with peaks at 1 and a period of 2 pi.
An optional width parameter specifies a fractional multiple of 2 pi at which the signal's maximum occurs.
square generates a square wave with a period of 2 pi . An optional parameter specifies duty cycle, the percent of
the period for which the signal is positive.

Ex3:
Le signal "dents de scie" et "carr"
To generate 1.5 seconds of 180 Hz sawtooth and square wave with a sample rate of 10 kHz and plot 0.2 seconds
of the generated waveform, use

fs = 10000;
t = 0:1/fs:1.5;
x1 = 0.2*sawtooth(2*pi*180*t); % on met une amplitude de 0.2 pour ne pas saturer les oreilles
x2=0.2*square (2*pi*180*t);
plot(t,x1,t,x2), axis([0 0.2 -1 1]);
sound(x1,fs);
disp('Taper sur la touche "Entre" pour continuer');
pause;
sound(x2,1000);

2
1.5. Common Aperiodic Waveforms
The toolbox also provides functions for generating several widely used aperiodic waveforms:

gauspuls generates a Gaussian-modulated sinusoidal pulse with a specified time, center frequency, and fractional
bandwidth.

clear;
close all;
fs = 10000;
t = -5:1/fs:5;
fc=1000;
bw=0.0002;
y = gauspuls(t,fc,bw);
plot(t,y), axis([-5 5 -1 1]);
sound(y,fs);

chirp generates a linear swept-frequency cosine signal. An optional parameter specifies alternative sweep
methods.

Ex4:
Le signal "chirp"
To compute 4 seconds of a linear chirp signal with a sample rate of 10 kHz, that starts at 100 Hz and crosses 500
Hz at 1 second, use

t = 0:1/10000:4;
y = 0.2*chirp(t,100,1,500); % amplitude 0.2
plot(t,y);
sound(y,10000);

2. Exercices lis au cours
2.1. Quelques sries
La fonction suivante "serie_fourrier", simule le calcul de la dcomposition en srie de Fourrier.

function [rtdf,itdf]=Serie_Fourrier(t,s,fs);
% Calcule les parties rlle, imaginaire et le module de
% la transforme de Fourrier discrte du signal s
% chantillonn sur t la frquence fs

% Le but tant de simuler la dcomposition en srie de Fourrier

N=length(t); % N nombre d'chantillons (suppos grand sinon modifier cette fonction)
if rem(N,2) ~= 0 % On impose N pair
N=N-1; % quitte enlever un chantillon si ncessaire
end

tdf=fft(s)/N; % rapporte au nombre N d'chantillons
tdf=[tdf(N/2+1:N) tdf(1:N/2)]; % la seconde partie du spectre correspond
% la priodisation, on la ramne dans les
% frquences ngatives

f=fs/N*(-N/2:N/2-1);

rtdf=real(tdf);
itdf=imag(tdf);
Rymax=max(rtdf);Iymax=max(itdf);ymax=1.1*max([Rymax Iymax]);
Rymin=min(rtdf);Iymin=min(itdf);ymin=1.1*min([Rymin Iymin]);
subplot(3,1,1);plot(f,rtdf),ylim([ymin ymax]),ylabel('Partie relle');
subplot(3,1,2);plot(f,itdf),ylim([ymin ymax]),ylabel('Partie imaginaire');
subplot(3,1,3);plot(f,abs(tdf)),ylabel('Module'),xlabel('Frquence(Hz)');

3
Ex5:
Sries de Fourrier de quelques signaux importants
Reprsenter le spectre de
a) s(t)=cos(2 pi F
0
t)
b) s(t)=sin(2 pi F
0
t)
c) du signal carr priodique unit de priode T
0

d) d'un peigne de dirac temporel en utilisant l'option "duty" de la fonction square
Vrifier les rsultats obtenus avec les calculs "formels".

Ex6:
Entendre le repliement
Crer 3 signaux en sinusodaux d'amplitude 1, frquence 1 000 Hz chantillonns
a) 20 000 Hz
b) 5 000 Hz
c) 1 500 Hz
Les reprsenter dans le mme graphe. Les entendre successivement, avec la fonction "sound". Enfin reprsenter
leur spectre avec la fonction "serie_fourrier". Interprter.

Ex7:
Erreur de quantification
On veut vrifier les rsultats de l'tude thorique du bruit de quantification. Crer un script qui :
a) ralise un signal cosinus s1, d'amplitude 1, d'une dure de 1 seconde, de frquence 100 Hz, chantillonn 10
000 Hz.
b) afin de simuler la quantification, multiplie s1 par 5, ralise un arrondi au plus proche entier (utiliser la
fonction "round"), puis divise le rsultat par 5 pour obtenir le signal quantifi s2.
c) reprsente s1 et s2 dans le mme graphe.
d) reprsente bq=s2-s1, le bruit de quantification dans une autre figure. De cette reprsentation en dduire une
estimation de q
0
le quantum.
e) calcule la moyenne (fonction "mean"), la variance (fonction "var").
f) calcule partir de e), le quantum q
0
.

Ex8:
Transforme de Fourrier Discrte (TFD) avec la fonction "fft"
Crer un signal s de 0.8 secondes, sinusodal d'amplitude 1 de frquence 100 Hz chantillonn 1 000 Hz.
Combien y a t'il d'chantillons ? Quelle est la longueur du vecteur s ?
Reprsenter le module de la TFD en crivant dans la fentre de commande :
>> plot(abs(fft(s)));
On voit en abscisse l'indice varier de 1 N = 800, le nombre d'chantillons temporels et frquentiels. D'aprs
l'tude thorique, le pas frquentiel est f
0
= fs/N. La frquence varie donc de f=f
0
(indice=1) f=fs
(l'indice=800).
Afin de bien concrtiser les frquences du signal traiter, crer le vecteur frquence freq = n.f
0
avec n variant de
0 N-1. Tracer abs(fft(s)) en fonction de freq en crivant :
>> plot(freq,abs(fft(s)));
Vrifier qu'il y a bien une raie la frquence du signal.

Crer un signal "trichromatique" gale la somme de 3 sinusodes de frquence f1=2*f2=3*f3=1200 Hz et
d'amplidude 1, 1.5 et 4 respectivement. La dure du signal est de 1.2 seconde. Raliser un script qui reprsente le
signal ou une partie du signal ainsi que sa TDF (on prendra dsormais, sauf indication contraire le module de la
TDF : abs(fft(s))).

Modifier le sript en ajoutant un bruit alatoire au signal. Exprimenter plusieurs amplitudes du bruit.

Ex9:
Prcision spectrale
Le but de cet exercice est de montrer que la prcision frquentielle dpend du nombre de points N dans la TFD.
Ce nombre correspond au nombre de frquences dans la reprsentation du spectre. Matlab utilise l'algorithme
Fast Fourier Transform dont la vitesse d'excution est optimale pour N = puissance de 2. La fonction fft de
Matlab, permet de prciser le nombre de points N dans la TFD (si il n'est pas prcis, N = nombre d'chantillons
temporels). Le domaine frquentiel [0 fs] est alors diviser en N frquences.
4
Dans un script, crer un signal sinusodal s d'amplitude 1, frquence 600 Hz, frquence d'chantillonnage fs = 5
000 Hz de dure d = 300 ms.
Calculer la TFD pour N = 32, N = 128 et N = 1024. Les reprsenter dans la mme figure de f =0 fs/2. A quelle
frquence se situe la raie spectrale dans chaque cas.
Interprter.
Rsolution

Ex10:
Influence de la dure d'observation, fentre rectangulaire, rsolution
Le fait de ne travailler qu'avec des signaux de dure limite introduit une distorsion en sinc dans les raies du
signal analyser. Cette "perte" d'information est d'autant plus grande que la fentre d'observation est petite.
Raliser un signal sinusodal de frquence 1 000 Hz, d'amplitude 1, chantillonn 20 000 Hz. Dans une mme
figure, reprsenter :
a) ce signal sur une dure de 2 ms et en dessous sa TFD 2048 points
b) le mme signal mais sur une dure de 24 ms et en dessous sa TFD 2048 points.
Interpreter les rsultats, notamment la largeur des raies.
c) modifier le script en ajoutant une composante 1 200 Hz. Consquences sur la rsolution (capacit discerner
des frquences distinctes dans un mme signal).

Ex11:
Transforme de Fourrier inverse.
Taper le script suivant. Commenter chaque partie en expliquant ce que ralise le script.
Remarquer que fft et ifft sont des calculs portant aussi bien sur des signaux rels que complexes. Exprimenter
des signaux complexes, par exemple en modifiant s :
s = i * s; % le signal est maintenant imaginaire
Quelle est la consquence sur la suite du script ?

clear; close all;
fe=20000;
fsig=1000;
N=2048;
d=0.024;
t=0:1/fe:d-1/fe;
s=cos(2*pi*fsig*t);
f=0:fe/N:fe-fe/N;

tfd=fft(s,N);

rtfd=real(fft(s,N));
subplot(311);plot(f,rtfd,'-'),xlim([0 3000]);
itfd=imag(fft(s,N));
subplot(312);plot(f,itfd,'-'),xlim([0 3000]);
mtfd=abs(fft(s,N));
subplot(313);plot(f,mtfd,'-'),xlim([0 3000]);

figure
signal=ifft(tfd,N);
plot(real(signal));
hold on;
plot(imag(signal),'k');

figure
t=1/fe*(0:N-1);
plot(t,real(signal));

Ex12:
Convolution
Raliser un script qui cre un bruit blanc de N = 10 000 chantillons, le fasse entendre avec une frquence
d'chantillonnage fs = 10 000 Hz, le reprsente ainsi que sa TDF dans le domaine de frquences [0 fs/2].
5
Aprs une pause de 2 secondes (fonction "pause"), ce bruit est convolu (fonction "conv") avec un signal porte
de m chantillons et d'amplitude 1/m. Reprsenter le signal rsultant ainsi que sa TDF et l'couter. Exprimenter
plusieurs valeurs de m en termes de fraction de N : m = N/10, N/100, ...
Interprter les observations.

ex13a:
Filtre_bruit_a
Le bruit gaussien, normal est un bruit blanc. Il est constitu de raies d'amplitude alatoire toute frquence. Dans
cet exercice, on va prlever une partie du pectre (ci-dessous entre 2000 et 2200 Hz) d'un signal bruit et
reconstituer un signal partir de ce prlvement.


Crer un signal bruit de 10 000 chantillons une frquence d'chantillonnage de fe=10
4
Hz. Le reprsenter ainsi
que le module de sa TFD. L'couter avec la fonction "soundsc".
Plever une partie de sa tfd (qui est un vecteur complexe) entre la frquence f1 et la frquence f2. Complter les
segments [0, f1[ et ]f2,fs] avec des zros. En utilisant la fonction "ifft", reconstituer le signal bf (bruit filtr),
signal lui-aussi complexe. Reprsenter Re(bf), Re(fft(bf)) et l'couter. Mme question pour la partie imaginaire.
Au total, obtenir une figure similaire celle ci-dessus. Exprimenter diffrentes valeurs de f1 et f2. "Zoomer" sur
le signal reconstitu afin d'estimer sa priode et comparer le signal rel et imaginaire.

ex13b (facultatif):
Filtre_bruit_b
Reprendre le script prcdent et le modifier (aprs l'avoir sauver sous un autre nom) de faon ce que la
transforme de fourier inverse du signal porte utilis pour le prlvement soit convolu avec le signal de dpart.
Quel est le rsultat ? Que peut on observer en terme de temps d'excution par rapport au script prcdent ?
Modifier (lgrement) le script de faon ne convoluer que les 100 ou 200 premires valeurs de fft(porte). Que
peut on observer ?


PROJET 1
Filtre sinc
Etude thorique prliminaire ( effectuer la maison)
Soit P
f0,
(f) le signal porte tel que :
P
f0,
(f) = 1 pour f0 - /2 <= f <= f0 + /2
P
f0,
(f) = 0 partout ailleurs
Montrer que la transforme de Fourier inverse de P
f0,
(f) est :
p(t) = exp(2 j f0 t) . sinc( t)
6

Ralisation d'un passe-bande
D'aprs l' exercice 13b, on peut raliser un filtre f1-f2 par convolution avec la fonction sinc correctement
paramtre. Le but de cet exercice est de raliser une fonction filtre(signal,fs,f1,f2) qui renvoie le signal filtr.
L'tude thorique ci-dessus (et le thorme de Plancherel) montre que si on convolue un signal quelconque s(t)
avec p(t) alors, le rsultat est le signal sf(t) ne comprenant que les frquences comprises entre f1 et f2. raliser
cette fonction, elle devra dbuter par la ligne suivante :

function [sf,noyau]=filtre(signal,fs,f1,f2)

o les paramtres renvoys par la fonction sont sf le signal filtr et noyau le signal p(t) limit ses 100 premires
valeurs.
Les paramtres passs la fonction sont signal, le signal filtrer, fs la frquence d'chantillonnage, f1 et f2 les
bornes frquentielles du passe bande.
La fonction devra de plus :
- comporter des instructions testant si le nombre de paramtres passs est correct (utiliser "nargin"), si les
frquences f1 et f2 sont positives. Cette partie devra comporter l'ventualit de messages d'erreur (utiliser
l'instruction"error").
- donner les reprsentations des signaux, original et filtr, ainsi que leur tfd respective. Les tfd seront ralises
sur 2048 points.
- permettre l'coute de signal et de sf.

Il sera judicieux de tester la fonction sur un signal bruit. Exprimenter diffrentes bandes, diffrentes longueurs
du noyau.

ex14 :
La fonction "filter"
0/ Prliminaire. Comme on l'a fait quelques fois ci-dessus, nous sommes souvent amens comparer un signal
original avec le rsultat aprs filtrage. On peut gagner du temps en crant la fonction :

function ex14_comparer(s1,fs1,s2,fs2)

qui reprsente dans la mme fentre, les signaux s1 et s2 chantillonns aux frquences fs1 et fs2, ainsi que leur
TFD respective.
1/ Appeler l'aide de Matlab afin d'obtenir la documentation de cette fonction (la fonction "filter") de base du
traitement du signal numrique sous Matlab. Dans le paragraphe "Algoritm", l'quation aux diffrences finies est
donne. Quelle est la diffrence avec celle donne en cours ?

Bien remarquer que a(1) sous Matlab correspond au a
0
du cours. Ils prennent, en gnral, la valeur 1 car ils
correspondent au "poids" de y(n). Donnons un exemple :
Soit l'quation aux diffrences finies

y(n) + 0.5y(n-1) - y(n-2) = x(n) + 2x(n-1) + 3x(n-2)

elle correspond 1 SLI dont la rponse une entre x sera calcule sous Matlab par

y = filter([1,2,3],[1,0.5,-1],x);

2/ Dterminer les vecteurs a et b pour le filtre "moyenne mobile" sur une longueur L = 20 chantillons. Crer un
signal s dichromatique additionn de bruit, le filtrer avec la moyenne mobile. Exprimenter diffrentes
longueurs. Quelle est la nature du filtre ainsi ralis ?
7
On doit obtenir :








3/ La fonction "filter"
utilise en moyenne
mobile, est quivalente
la convolution du
signal avec une porte de
longueur L. Interprter
les rsultats obtenus.
Vous devez
normalement pouvoir
"prdire" la longueur L
ncessaire une
frquence de coupure fc
donne.





ex15 :
Synthse d'un coupe bande avec la fonction yulewalker (du nom de l'algoritme utilis).
Le problme avec la fonction "filter" est
de trouver les coefficients adquats un
filtrage dsir. Cela est rsolu grce la
fonction "yulewalker" qui cherche pour
un ordre donn (la longueur maximale
des vecteurs a ou b) les coefficients de
ces vecteurs qui sont ensuite utilis dans
la fonction filter.
1/ Utiliser la fonction "wavread" pour
charger un fichier .wav quelconque
(dans l'exemple ci-dessous c'est
notify.wav qui a t utilis).
2/ Si le fichier tait strophonique (2
canaux donc 2 colonnes), ne prendre que
l'un des canaux.
3/ Ecouter le son produit avec
"soundsc".
4/ Supposons que nous voulions
liminer (ou attnuer) un signal dans la
bande de frquences comprises entre f1 et f2. On cre alors une sorte de gabarit schmatis ci-dessous :

Frquence
Amplitude
0
1
f1 f2 fs 0

Dans Matlab, ce gabarit peut tre dcrit
avec les points de coordonnes dfinies par
les 2 vecteurs suivants:

freq=[0 f1 f1 f2 f2 fs]
magn=[1 1 0 0 1 1]


8

Potrebbero piacerti anche