Sunteți pe pagina 1din 54

Prelucrare si analiza a semnalelor

Conţinut
Prelucrare si analiza a semnalelor ........................................................................................................................1
Capitol - Reprezentarea semnalelor ..................................................................................................................... 2
Procesare semnale ............................................................................................................................................... 4
Recapitulare - Funcţii Matlab utile ...................................................................................................................... 5
Alte funcţii utile procesării semnalelor ................................................................................................................................ 7
Capitol - Noţiuni de bază de statistică şi probabilitate utile în prelucrarea semnalelor .......................................22
Transformata Fourier discreta .......................................................................................................................... 25
Transformata Fourier discretă ............................................................................................................................................ 25
Calculul numeric al transformatei Fourier discrete (DFT) folosind Matlab ..................................................................... 25
Capitol - Eşantionare semnale. ...........................................................................................................................40
Alegerea frecvenţei de eşantionare şi evitarea fenomenului de aliasing .............................................................. 42
Analiza spectrală ............................................................................................................................................... 47
Aplicaţii ............................................................................................................................................................. 52

Introducere
Prelucrarea semnalelor poate fi realizată: Off-line şi On-line (în timp real).
Prelucrarea în timp real presupune existenţa unui flux neîntrerupt de date care se introduce în
procesor cu o anume viteză (de exemplu biţi/sec), ieşirea obţinîndu-se cu aceeaşi viteză. Din cauza
întîrzierii de prelucrare ieşirea apare adesea cu o întîrziere faţă de intrare. Dacă prelucrarea este
anticipativă, apare o întîrziere suplimentară.
Prelucrarea off-line nu mai presupune o corelare între vitezele de achiziţie ale datelor de intrare şi
ieşire.
Se pot enumera câteva exemple de prelucrări numerice:
a) Transformata Fourier – asociază unui semnal de timp un semnal de frecvenţă; în plus
transformata Fourier necesită pentru calcul cunoaşterea întregului semnal, deci nu poate fi
calculată pe măsura sosirii eşantioanelor. Aceast caz este tipic pentru pelucrarea off-line.
b) Filtrarea este cea mai tipică prelucrare on-line. De regulă prin filtrare se realizează
schimbarea conţinutului de frecvenţă al unui semnal. O aplicaţia specifică filtrelor este
înlăturarea zgomotelor suprapuse peste semnalul util (de bază).
În structura din fig.1 transmiţătorul trimite un semnal u, dar ca rezultat al interacţiunilor cu mediul
de transmisie este recepţionat împreună cu un zgomot n.
u – semnal de util (transmis);
n – zgomot;
y – semnal recepţionat;
z – semnal filtrat;
Fig.1. Atenuare (/filtrare )a zgomotelor
F – filtru (sistem - ex. procesor de semnal)
Prin prelucrarea semnalului y se urmareste a se elimina cat mai mult zgomot fără a distorsiona
semnalul de bază. În cazul în care conţinuturile de frecvenţă (spectre) ale celor două semnale u şi n
se află în benzi de frecvenţă disjuncte, filtarea se reduce la realizarea unui procesor al cărui răspuns
în frecvenţă să fie nul în banda de frecvenţă a zgomotului şi maxim plat în banda semnalului util.
Dacă benzile de frecvenţă se suprapun, atunci problema filtrării este mai dificilă.

1
Prin utilizare FFT se aplică un algoritm eficient pentru calcularea transformatei Fourier, sau al
transformatei Fourier discrete (Discrete Fourier Transform-DFT). Analiza transformatei Fourier
este utilă pentru procesarea datelor, deoarece descompune un semnal într-un şir de componente
sinusoidale de frecvenţe diferite, făcând trecerea din domeniul timp în domeniul frecvenţă si astfel
se permite calculul amplitudinii şi fazei variabilelor (datelor, semnalelor) transformate, iar pentru
eşantionarea datelor vectoriale analiza Fourier utilizează DFT.

Capitol - Reprezentarea semnalelor


De regulă, semnalele provenite din lumea reală înconjurătoare sunt continue în timp şi amplitudine,
acestea numindu-se analogice sau continue în timp. Amplitudinea acestora poate lua orice valoare
reală din domeniul lor de valori. Circuitele care prelucrează acest tip de semnal se numesc circuite
analogice. Dintre semnale analogice pot fi enumerate următoarele: electrice - tensiune, curent,
câmpul magnetic, câmp electric; mecanice: viteză, forţă, cuplu, etc; fizico-chimice: temperatura,
concentraţie pH etc. Pentru prelucrarea semnalelor cu ajutorul sistemelor electronice, acestea sunt
convertite cu ajutorul traductoarelor în mărimi electrice: tensiune, curent. Reprezentarea unui
semnal anlogic este ilustrată într-un prim exemplu în figura 1.1.
Exemplu: Se cere să se determine pentru un semnal sinusoidal continuu, câteva dintre mărimile de
bază care-l caracterizează. Ecuaţia matematică ce descrie semnalul este: u t   Û  sin  t    ;
2 
unde amplitudinea este notată Û ; pulsaţia:   2    f ; valoarea vârf-la-vârf este 2  Û ;
T
valoarea efectivă: U  Û ; valoarea medie=0; factorul de vârf (crest factor): kv  Û  2 ;
2 U
factorul de formă (form factor): k f  U    1,11
u 2 2

Fig 1.1 Reprezentarea unui semnal periodic sinusoidal

Pornind de la reprezentarea ilustrată în figura 1.1 se pot determina mărimile de bază ale semnalului
sinusoidal periodic continuu obţinute prin calcul:
 amplitudine = 2 (valorea amplitudinii semnalului vârf la vârf = 4).
 perioada = 0.22–0.02 = 0.42–0.22 = 0.2 = 1/f => f = 5 Hz.
 întârziere de timp = 0.02 => faza  = –2π5(0.02) = π/5.

Rezultă ecuaţia: xt   2  sin2 5  t  0.02  2  sin 10t  
5
.
Aşa cum s-a prezentat anterior, semnalul cu timp discret se obţine prin memorarea valorii unui
semnal cu timp continuu la momente de timp, echidistante, numite eşantioane, iar procesul de
memorare a acestor valori poartă numele de discretizare semnalului cu timp continuu.

2
Mdee -S.Paturca
Altfel spus, operaţia prin care un semnalul y

continuu este reprezentat cu un număr finit de a)

valori se numeşte discretizare. Intervalul de timp


între două eşantioane succesive se numeşte pas
sau perioadă de eşantionare (notat în mod uzual
cu h, sau T), iar frecvenţa cu care sunt prelevate b)
eşantioanele semnalului analogic f s [în Hz], se
numeşte frecvenţă de eşantionare. În figura se
prezintă rezultatul discretizării semnalului yd
T 2T 3T 4T 5T

continuu în timp 1.3a. Se poate observa că sunt


citite valorile pe care le ia semnalul continuu la c)

momentele de timp, t = 0, h, 2h, 3h,.... Pentru


simplificare secvenţa se reprezintă ca fiind 1 2 3 4 5

definită pe N, ţinându-se cont de valoarea pasului de Fig.1.3 Reprezentarea unui semnal - a) – continuu în timp
eşantionare h, numai atunci când este necesar. cu valori continue, - b) - discretizat cu pasul T, - c) - discret

Se poate observa că semnalul discret a provenit matematic din semnalul continuu în timp, prin
restrângerea domeniului de definiţie doar la valorile discrete. Prin eşantionare se pierde o parte din
informaţia semnalului analogic. Prin anumite procedee, se poate însă reconstrui semnalul de bază,
cu o precizie ce depinde de frecvenţa de eşantionare.
Ex. 1. Reprezentarea grafică a unui semnal analogic şi a celui discret corespunzător se poate
observa într-un prim exemplu simplu, prezentat în figura 1.4, al funcţiei y(t)=sin(pi/8*(n)),
evaluată pe intervalul n=[0, 23], cu o perioadă de eşantionare este h=1sec.

1 1

0.5 0.5
amplitudine
amplitudine

0 0

-0.5 -0.5

-1 -1
0 5 10 15 20 0 5 10 15 20
timp [s] timp [s]
(a) (b)
Fig. 1.4 Reprezentarea unui semnal a) continuu, respectiv b) discret - în timp

Am explicat faptul că discretizarea se obţine prin trecerea de la valori continue la valori finite, fiind
realizată prin eşantionare semnalului în timp, iar în valoare, adică pe mulţimea în care ia valori, se
face prin cuantizare. Pentru trecerea de la un semnal analogic la unul digital şi invers, este nevoie
atât de eşantionare, cât şi de cuantizare. Deci, orice semnal poate fi aproximat printr-un număr finit
de eşantioane având valori cuantizate pe un număr finit de niveluri. Vorbim în acest caz de
semnalele digitale obţinute din semnalele continue în timp prin eşantionarea, şi discretizarea valorii
semnalului, datorată trunchierii sau rotunjirii valorii semnalului real, pentru a-l putea reprezenta cu
un număr finit de cifre. La trecerea de la semnalele analogice la cele cuantizate se pierde
întotdeauna informaţie, aceasta fiind o operaţie neliniară şi ireversibilă.
Exemplu: Secvenţa descrisă prin puncte:
x[0]  1, x[1]  1.234, x[2]  2.7771, x[3]  0.98, .....
3
este reprezentată în figura 1.2
Pentru secvenţa prezentată în figura
1.2a, aproximând fiecare valoare la
cel mai apropiat întreg se obţine
semnalul digital ilustrat de figura
Fig 1.2a 1.2b.
Este cazul semnalului în timp
discret, care nu poate lua decât
valori numere întregi.
Fig 1.2b

Astfel, acest semnal va avea un număr finit de valori la momente de timp bine definite. Rămâne la
latitudinea proiectantului să aleagă ordinea operaţiilor atunci când proiectează sistemul de achiziţie
şi procesare a datelor.
Între semnale prezentate anterior doar cele digitale sunt procesate cu calculatorul numeric.

Procesare semnale
Procesarea semnalului digital este numită DSP (Digital Signal Processing). Semnalul obţinut prin
DSP este tot unul digital. Semnalul analogic iniţial este transformat în semnal digital cu ajutorul
unui convertor analog-numeric (notat CAD, sau CAN), operaţie ce presupune citirea şi convertirea
mărimii analogice într-una numerică, reprezentată în cod binar. În urma procesării se obţine un nou
semnal digital, care în final este transformat în semnal analogic de către un convertor numeric-
analogic (CDA, sau CNA) şi transmis către exterior. Schema generală este reprezentată în figura 4.5.
Un exemplu de operaţie DSP este filtrarea numerică.

Semnal Semnal
Semnal digital digital Semnal
analogic Convertor Convertor analogic
Procesor
D/A
X t  Y t 
A/D digital de
Esantionare semnal
Digitizare

Fig. 4.5 Schemă generică de prelucrare a semnalelor

Datorită lungimii finite a magistralei de date într-un sistem digital, semnalul eşantionat nu poate lua
orice valoare. De exemplu, avem un sistem cu 8 biţi de date şi un semnal în intervalul -10 V...+10 V.
In total pot exista 28 = 256 de valori diferite, deci semnalul eşantionat va avea valori cuantificate
care variază în reprezentarea digitală cu câte o unitate, căreia îi corespunde un interval de 20/256
=0.078 V.
Astfel, se ajunge la reprezentarea semnalelor ca fiind secvenţe definite pe N cu valori în Z. Evident
pentru a stabili legătura cu lumea reală (analogică) din care provin, trebuie ţinut cont de pasul de
eşantionare h şi de intervalul de cuantificare (0.078 pentru exemplul de mai sus).
Prin procesul de eşantionare şi digitizare a semnalelor analogice, se pierde o parte a informaţiei
acestora. Astfel, cu cât numărul de biţi folosiţi pentru digitizare este mai redus, iar perioada de
eşantionare este mai mare, reprezentarea semnalului continuu iniţial va fi mai redusă în informaţie.
Pentru a avea o pierdere cât mai mică a informaţiei unui semnal analogic, este necesară alegerea
4
Mdee -S.Paturca
unei perioade de eşantionare cât mai mică, iar procesul de digitizare a semnalului să utilizeze un
număr cât mai mare de biţi.

Recapitulare - Funcţii Matlab utile


Reprezentarea graficelor în coordonate liniare
Funcţia plot se utilizează pentru reprezentarea graficelor în coordonate liniare se utilizează, iar
pentru apelul acesteia se foloseşte cu una din următoarele sintaxe:
plot (y)
Dacă y este un vector (linie sau coloană), atunci funcţia trasează graficul y=y(i), unde i=1,2,…n
este numărul de ordine al elementului y.
Daca y este complex, plot(y) este echivalent cu plot(real(y),imag(y)).
In celelalte reprezentari partea imaginara este ignorata.
plot(x,y) reprezinta vectorul y in functie de vectorul x.
Daca x sau y sunt matrici, atunci vom obtine reprezentarea grafica a randurilor si coloanelor
matricilor.
plot(x,y,’linie tip’) argumentul ’linie tip’ este o succesiune de caractere care
S.Paturca
specifică tipul liniei cu care este trasat graficul.
plot(x1,y1,x2,y2,…) reprezintă simultan mai multe grafice, în acelaşi sistem de
coordonate şi în aceeaşi fereastră grafică.

Exemple:
plot(x,y,'c+:') reprezinta o linie punctata de culoare bleu deschis, cu un semn plus
pentru fiecare punct.
plot(x1,y1,s1,x2,y2,s2,x3,y3,s3,...) combină tripleta formată din vectorii sau
matricele x, y şi şirul de caractere s.

Atunci când pentru funcţia plot nu se specifica o culoare pentru linie, Matlab-ul uilizeaza culorile
in functie de ordinea stabilita ca prioritara in coloana de culori.
Pentru a indica tipul liniei, trebuie sa se specifice explicit varianta aleasa.

Reprezentarea discretă a datelor


Reprezentarea discretă a datelor se face cu utilizând funcţia stem sub forma unor linii terminate
cu cerculeţ. Pentu apelul acesteia se utilizează cu una din următoarele sintaxe:
stem(y) funcţia trasează grafic y=y[i], unde i=1,2,…n linii terminate cu cerculeţ;
stem(x,y) trasează un grafic cu linii terminate cu cerculeţ, cu locaţiile specificate de
vectorul x. Valorile lui x trebuie să fie egal spaţiate;
stem(x,y‚’linie-tip’) este similară funcţiei plot(x,y,’linie tip’), cu deosebirea că se
trasează graficul cu linii terminate cu cerculeţ.
Observaţie: Atât la funcţia plot cât şi la funcţia stem lungimile vectorilor de pe abscisă şi ordonată
trebuie sa fie egale.

5
Personalizare grafice
Pentru plasarea în câmpul graficelor a unor texte, etichete ale axelor, precum şi a titlului se
utilizează următoarele funcţii:
title(‘text’) comandă prin care titlul graficului se plasează deasupra acestuia; ‘text’ fiind un şir de
caractere care reprezintă titlul graficului;
xlabel(‘text’) precizează eticheta axei x; ‘text’ fiind un şir de caractere care reprezintă
numele axei, unitatea de măsură etc.;
ylabel(‘text’) precizează eticheta axei y; ‘text’ fiind un şir de caractere care reprezintă
numele axei, unitatea de măsură etc.;
grid on trasează o reţea de linii orizontale şi verticale pe grafic;
grid off elimină reţeaua de linii orizontale şi verticale trasate pe grafic de grid on.

Funcţia subplot(m,n,p) determină separarea ferestrei in m x n matrici cu axe mai mici,


selectează axa p pentru plotul curent si întoarce caracteristicile axei.
Afişarea mai multor grafice pe aceeaşi fereastra se realizează prin activarea proprietatii hold on
pentru figura curentă.
Funcţia figure generează o nouă fereastră şi o face fereastra curentă.

Apelarea meniului de ajutor


Limbajul MATLAB este foarte simplu de învăţat dacă se renunţă la inspectarea listelor cu variabile,
funcţii şi operatori şi se utilizează în schimb comenzile help, helpdesk, demo - tastate direct de la
prompterul MATLAB. Prin simpla tastare în fereastra de lucru a comenzii help vor fi afişate toate
informaţiile disponibile. Pentru a capta toate informaţiilor utile despre o comandă sau o funcţie se
tastează help urmat de numele comenzii sau funcţiei respective:
help nume_functie, urmat de ENTER.

Exemplu sugestiv de utilizare a comenzii help:

>> help sin


SIN Sine of argument in radians.
SIN(X) is the sine of the elements of X.

See also asin, sind.

Overloaded methods:
distributed/sin
sym/sin

Reference page in Help browser


doc sin

Pentru vizualizarea funcţiilor elementare se poate tasta:


>> help elfun
Pentru a vedea lista funcţiilor avansate se poate tasta:
>> help specfun
>> help elmat

6
Mdee -S.Paturca
Alte funcţii utile procesării semnalelor
Pentru domeniul procesării semnalelor Matlab-ul oferă un set complet funcţii grupate in librăria
Signal Processing Toolbox.

Depanarea unui program MATLAB


Deoarece pe parcursul conceperii şi implementării unui program MATLAB pot apare o serie de
erori s-a considerat utilă o enumere a celor mai întălnite dintre acestea:

a) Erori sintactice
Apar în cazul nerespectării regulilor MATLAB cu privre la sintaxa specifică expresiilor, funcţiilor
şi a celorlalte componente ale limbajului. Erorile sintactice sunt uşor de depistat, deoarece sunt
semnalate de Matlab. prin afişarea unor atenţionări în fereactra de coamndă. Exemple de astfel de
erori întâlnite în practică:
 Scrierea incorectă a numelui variabilelor, a funcţiilor, etc.
>> 2*cosx
??? Undefined function or variable 'cosx'.
Eroarea constă în scrierea incorectă a funcţiei sin x. In MATLAB toate funcţiile au argumentul
scris între paranteze rotunde. In acest caz sintaxa corecta este cos(x).
 Trecerea greşită a parantezelor în expresii:
>> 1/(2+3))
??? 1/(2+3))
|
Error: Unbalanced or unexpected parenthesis or bracket.
La sfârşitul expresiei a fost trecută o paranteză în plus.
 Omiterea scrierii unui operator sau semn:
>> y = 2;
>> 5*(4+2y)
??? 5*(4+2y)
|
Error: Unexpected MATLAB expression.
Deci, eroarea semnalată este datorată omiterii scrierii unui operator.
Observaţie: Un program este executat de MATLAB doar atunci când nu are erori sintactice.

b) Erori de execuţie
O altă clasă de erori sunt cele execuţie. Odată lansat în execuţie un program MATLAB pot fi
depistate erorile datorate împărţirulor prin 0, precum şi alte tipuri de funcţii sau operaţii care să
conducă la rezultate nedorite: NaN, Inf sau empty matrix.

C) Erori de logică
În cazul în care programul nu semnalează apariţia erorilor, însă nu se obţine un rezultat dorit, cauza
acestora este datorată logicii implementării. Erorile logice nu pot fi depistate de MATLAB, ci doar
de operator. O posibilă soluţie utilă în prevenirea şi depistarea acestora este dată de modularizarea
aplicaţiei program. Aceasta presupune descompunerea programului pe module reduse, care pot
deveni funcţii sau scripturi. Astfel, testarea fiecărui modul presupunse verificarea faptului că pentru
datele de intrare furnizate modulul furnizează date de ieşire dorite, corecte.

7
O altă regulă folosită pentru depanare este utilizarea comenzii keyboard care opreşte execuţia
programului şi asigură controlul tastaturii, ceea ce permite furnizarea comanzilor de vizualizarea a
oricărei variabile dorite. revenirea la programul respectriv se face după introducerea datei
cerute (sau nu), dar oligatoriu prin executarea comenzii RETURN.
O altă recomandare utilă în depanarea programelor vaste presupune utilizarea comenzilor funcţiei
debugger din fereastra Edit.
Spre exemplu, punctele de breakpoint-uri determină oprirea execuţiei fişierului la linia specificată şi
permit evaluarea şi schimbarea variabilelor din workspace înainte de reluarea execuţiei. Breakpoint-
ul este indicat printr-un semn roşu de stop (  ) înainte de linia respectivă. Atunci când execuţia
programului ajunge la breakpoint, o săgeată galbenă orizontală arată următoarea linie care va fi
executată. Dacă săgeata galbenă este verticală atunci aceasta indică o pauză la sfârşitul unui script
sau a unei funcţii şi permite examinarea variabilelor înainte de reîntoarcerea la funcţia principală.
Se şterge breakpoint-ul din linia dorită prin plasarea cursorului pe linie şi selectarea opţiunii Clear
Breakpoint din meniul Debug. Se continuă execuţia programului cu Continue din meniul Debug.
Pentru terminarea sesiunii de depanare se selectează Exit Editor/Debugger din meniul File şi se
termină sesiunea de depanare.

Ap. 1 Funcţia grafică stem generează un grafic funcţie sin 2ft  , unde f=3, iar vectorul de timp
este definit la 0 la 1 sec, cu un pas de 0.01 sec.
% PROGRAM MATLAB
t = 0:0.01:1; % defineste un vector de la 0 la 1 cu pasul de 0.01
x = sin(2*pi*3*t); % defineste semnalul sinusoidal x
legend('Semnal sinusoidal',2); stem(x);
xlabel('index de timp'); ylabel('amplitudine x'); title('Semnal x'); grid

Observaţie: Se poate renunţa la scalarea automată a graficului în favoarea unei scalări manuale, cu
ajutorul următoarelor comenzi:
v = [x_min, x_max, y_min, y_max];
axis(v)

Exerciţiul 1. – Apelare de funcţii utile în procesarea semnalelor

>> N = ones(1,10) % functia ones returneaza un vector cu 10 elemente de valoare 1

>> Nr_elem_N = length(N) % functia length returneaza numarul de elemente ale vectorului N

>> stem(N) % functia stem afiseaza vectorul N folosind esantioane

>> N = zeros(1,10) % functia zeros returneaza un vector cu 10 elemente, N, de valori 0

>> figure(1);

>> stem(N)

>> D = [1 zeros(1,10)] % metoda prin care se poate simula o functie impuls n
>> figure(2);

8
Mdee -S.Paturca
>> stem(D); grid;

>> N = [1+1j*3 -4+1j*5 2+1j*5] % returneaza un vector cu numere complexe

>> Real_N =real(N) % returneaza partea reala a unui numar complex

>> Img_N = imag(N) % returneaza partea imaginara a unui numar complex

>> Conjugat_N = conj(N) % returneaza conjugatul unui numar complex

>> Faza_N = angle(N) % returneaza faza unui numarului unui complex

>> clear
>> t = 0:0.01:1; % defineste un vector de la 0 la 1 cu pasul de 0.01

>> x1 = sin(2*pi*3*t); % defineste semnalul sinusoidal x1

>> x2 = sin(2*pi*0.05*[1:100]); % defineste semnalul sinusoidal x2 (pasul Ts=1)

>> x3 = exp(t); % defineste semnalul exponential x3

>> figure(1); plot(t,x1,'-.'); % activeaza figura 1 si afiseaza semnalul x1

>> legend('Semnal sinusoidal x1',2); % afiseaza legenda graficului


>> figure(2);
>> plot(t,x3,'--rs','LineWidth',2); % activeaza fig. 2 si afiseaza semnalul x3

>> grid on; % determina aparitia gridului

>> legend('Semnal exponential',2);


>> figure(3); stem(x2); grid on;
>> legend('Semnal sinusoidal x2',2);
>> xlabel('timp [s]'); % returneaza textul care apare scris pe axa x

>> ylabel('amplitudine'); % returneaza textul care apare pe axa y

>> title('Semnalul x3'); % afiseaza titlul figurii

>> axis([-10 20 -2 2]); % defineste axa x de la -10 la 20 5

>> figure(4); hold on; plot(t,x1);


>> grid on;
>> plot(t,x3,'r'); grid on;
>> figure(4); hold on; plot(t,x1); grid on;
>> plot(t,x3,'k'); grid on;
>> figure(5);
>> subplot(2,1,1); % subplot determina impartirea figurii 5 in 2 subfiguri pe randuri

% si activarea primei subfiguri

>> plot(t,x1,'r.'); grid on;

9
>> xlabel('timp continuu[s]'); % afiseaza textul care apare scris pe axa x

>> ylabel('amplitudine x1'); % afiseaza textul care apare scris pe axa y

>> title('Semnal x1'); % afiseaza titlul figurii

>> subplot(2,1,2); % subplot determina impartirea figurii 5 in 2 subfiguri pe randuri

>> stem(x1,'g.'); axis([0 100 -1 1]); grid on;

>> xlabel('timp discret[s]');


>> ylabel('amplitudine x1'); title('Semnal x1');

În exemplul anterior comanda hold on aparţine figurii 4 si odată executată determină afişarea
următoarelor grafice tot în figura 4. Dezactivarea acesteia se face executând comanda hold off.
Ştergerea ferestrei de comenzi se poate face rulând comanda clear sau clc, urmată de Enter.
Alte funcţii Matlab specifice prelucrării semnalelor vor fi introduse pe parcursul lucrărilor
următoare.

Aplicaţii - Reprezentarea semnalelor continue şi discrete


Ex1.1 Să se ruleze următoarele secvenţe MATLAB care generează şi reprezintă grafic diferite tipuri
de semnalele fundamentale discrete, precum: impuls, treaptă, rampă, semnal dereptunghiular
periodic şi semnal sinusoidal. Pentru reprezentare se poate apela la o modalitate simplă de
vizualizarea a rezultatelor, prin utilizarea funcţiei Matlab stem().
Semnalul impuls Dirrac analogic are amplitudine infinită în origine şi durata 0 – fig 1.6.a, iar cel
discret are amplitudine unitară în origine – fig.1.6.b.
(a ) (b ) d
c

t [s ] t [s ]

Fig 1.6 Impuls Dirrac analogic - (a), respectiv discret – (b)


0 n  0
Relaţia de definire este:  [ n]  
1 n  0

a) Secvenţa Matlab ce premite reprezentarea unui semnal de tip impuls discret:


1
am plitudine

% x[n] - functie impuls


n = -2:1:2; 0.5
x = [0 0 1 0 0];
stem(n,x) 0
-2 -1 0 1 2
timp discret

10
Mdee -S.Paturca
Semnal treaptă

(a )
(b )

t t
0
t [s ] 0
t [s ]

Fig 1.7 Semnal treaptă analogic - (a), discret – (b)

unde s-au notat cu v.i. – valoare iniţială a semnalului, v.f. – valoare finală, iar cu t0 - momentul în
care se face trecerea de la v.i. la v.f.
0 n  0
Relaţia de definire este: u[n ]  
1 n  0
Între semnalele impuls şi treaptă unitate există următoarele relaţii:
n
[n]  u[n] - u[n - 1] , u [ n ]    [k ]
k  

b) Secvenţa Matlab ce premite reprezentarea unui semnal de tip treaptă discret:

n = 0:1:20; 1
amplitudine

x = ones(1,length(n));
0.5
stem(n,x)
axis([-1 23 0 1.2]) %optional
0
0 5 10 15 20
timp discret

c) Secvenţa Matlab ce premite reprezentarea unui semnal dreptunghiular periodic (pentru


reprezentare se alege numarul de perioade dorit):
1
n = 0:10;
amplitudine

x1=[1;1;1;1;1;1;0;0;0;0];
x11 = x1*ones(1,2); 0.5
x11=x11(:);
stem(0:(length(x11)-1),x11) 0
0 5 10 15 20
timp discret

d) Secvenţa Matlab ce premite reprezentarea unui semnal rampă discret:


10
% x[n] = n (functia rampa)
amplitudine

n = 0:1:10; 5
x = n;
stem(n,x)
0
0 2 4 6 8 10
timp discret

e) Secvenţa Matlab ce premite reprezentarea unui semnal discret de tip sinc:

11
1

amplitudine
n = 0:0.25:10; 0.5

stem(sinc(n)),grid 0

-0.5
0 10 20 30 40
timp discret

f) Dacă se consideră semnalul sinusoidal


xn  sin n  se observă că pentru   1 (cazul
reprezentat) nu este periodic.

Pentru ca el să fie periodic trebuie ca  să fie ales astfel încât N  2k . Această condiţie este
satisfăcută totdeauna la eşantionarea unui semnal continuu sinusoidal.

Următoarea secvenţă de cod Matlab premite reprezentarea grafică a următoarului semnal sinusoidal
discret x[n]  sin  / 17  n  , pentru  15  n  15 .
1
% x[n] = sin(pi/17*n)
amplitudine

n = -15:15;
0
x = sin(pi/17*n);
stem(x) -1
0 5 10 15 20 25 30
timp discret

L2 Generarea unui semnal discret ştiind funcţia care descrie semnalul analogic
Pentru a genera un semnal ştiind funcţia care descrie semnalul analogic, se va genera în prealabil un
vector de timp care reprezintă momentele de timp la care se va realiza practic eşantionarea.
Defineşte frecvenţa de eşantionare în secunde
>> Fs = ............. % [Hz]
Generează vectorul timp, pentru axa absciselor, de la t = 0 sec. până la t = 1 sec. cu pasul
1/Fs:
>> t = 0 : 1/ Fs : 1;

Defineşte semnalul, pe axa ordonatelor, de forma:


>> x = sin(2*pi*f*t);

În acest caz x va conţine eşantioanele semnalului sinusoidal dat, dar pentru a cunoaşte forma
semnalului, trebuie să ştim frecvenţa de eşantionare Fs : astfel, acest semnal poate fi o sinusoidă cu
durata de 1 secundă, eşantionat cu frecvenţa Fs în Hz, cu durata de 1 ms, sau cu durata de 2 sec şi
Fs
eşantionat cu Hz. O reprezentare a semnalului sinusoidal eşantionat este prezentată în figura
2
1.4.

12
Mdee -S.Paturca
Fig.1.4 Reprezentarea unui semnal sinusoidal eşantionat

Semnalul discret eşantionat cu frecvenţa Fs, corespunzător semnalului continuu xt  , se poate
determina pornind de la ecuaţia (1.2). La eşantionarea periodică există o relatie între variabilele
semnalului analogic si discret, adica între t si n, de forma:
n
t  nTs 
Fs
deci, va exista o relaţie între frecvenţa semnalului analogic şi cea a semnalului discret.
Pentru a stabili această relaţie, se consideră următoarele:
 f 
x t  t  nT  x nTs   A cos  nTs     A cos 2fnTs     A cos  2 n    =>
s
 Fs 
xn  A cos  n    ,
unde:   2  f / Fs , Fs este frecvenţa de esantionare si f este frecvenţa de interes.

t
Deoarece t  nTs şi   Ts =>    rad / esant 
n
Semnal discret mai poate fi scris ca o funcţie de forma: xn  A cos 2fn    .

Exerciţiul 3. Se consideră următorul semnal cu timp continuu


y t   5  sin(2  pi  3  t - 0.5)  2  sin(2  pi  5  t) ,
definit între 0 şi 1 sec., şi de frecvenţa de eşationare Fs=0.1 kHz. Se cere afişarea semnalului în
timp continuu şi a celui în timp discret corespunzător.
% PROGRAM MATLAB
Fs = 100; % frecventa de esantionare in Hz
Ts = 1/Fs; % perioada de esantionare in sec.
tf = 1; % valorea finala pe axa timpului
t = 0 : Ts : tf; % generarea vectorului timp, pe axa absciselor
n = 0:length(t)-1;
y_c = 5*sin(2*pi*3*t - 0.5)+ 2*sin(2*pi*5*t); % semnalul pe axa ordonatelor
y_d = 5*sin(2*pi*3/Fs*n - 0.5)+ 2*sin(2*pi*5/Fs*n); % semnalul pe axa ordonatelor
%------------------------------------------------------
% Afisarea grafica a semnalului si a etichetelor axelor
%------------------------------------------------------
13
subplot(211);
plot(t,y_c); title('Semnal sinusoidal cu timp continuu');
xlabel('timp [s]'); ylabel('amplitudea semnalului');
subplot(212);
stem(n,y_d); title('Semnal sinusoidal cu timp discret’);
xlabel('timp discret [s]'); ylabel('amplitudea semnalului');

Semnal sinusoidal cu timp continuu


10
amplitudea semnalului

-5

-10
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
timp [s]
Semnal sinusoidal cu timp discret
10
amplitudea semnalului

-5

-10
0 10 20 30 40 50 60 70 80 90 100
timp discret [s]

Aplicatie explicata - Generarea unui semnal zgomot


Semnalul aleator, sau zgomotul, reprezintă un element important pentru procesarea numerică.
Acesta stabileşte valoarea minimă a semnalului care poate fi măsurat de un anumit echipament. O
etapă importantă în procesarea semnalului o reprezintă generarea de diferite semnale zgomot,
necesare testării eficienţei algoritmilor numerici de tratare a semnalelor.
Semnalul zgomotul digital poate fi creat prin procedura de generare a numerelor aleatoare. În
Matlab se va utiliza funcţia predefintă rand pentru zgomot cu distribuţie uniformă şi randn pentru
zgomot cu distribuţie normală. În practică, cele mai des întâlnite zgomote sunt cele cu funcţia de
distribuţie de probabilitate Gaussiană.
Exercitiul 1.1 Presupunem ca avem un semnal sinusoidal compus din două frecvenţe 75Hz şi 100Hz.
Semnalul este eşantionat cu frecvenţa de 1000 Hz.
Se defineşte perioada de eşantionare de 0.001sec:
>> Ts = 0.001;
Se generează vectorul timp de la 0 sec. până la 0.25 sec., cu pasul Ts:
>> t = 0:Ts:.25;
Se construieşte un semnal sinusoidal compus din componentele de frecvenţe 75 Hz şi 100 Hz:
>> x1 = sin(2*pi*75*t) + sin(2*pi*100*t);
Se cere reprezentarea semnalului în domeniul timp:
>> ……………………………………………………………………………………

14
Mdee -S.Paturca
Peste semnalul obţinut se va suprapune un zgomot aleator care produce un semnal bruiat x2:
>> x2 = x1 + 2*randn(size(t));
Se cere reprezentarea semnalului y în domeniul timp:
>> ……………………………………………………………………………………

Exerciţiul 2. Vor fi considerate datele de intrare (semnalul compus sinusoidal) - semnal ca fiind
eşantionat cu frecvenţa de 1000 Hz (perioada 0.001 sec).
% PROGRAM MATLAB
Fs = 1000; % frecventa de esantionare [Hz]
Ts = 1/Fs; % perioada de esantionare
% Genereaza axa timpului printr-un vector, cu volori de la t = 1 până la t = 2-Ts, cu pasul de esantionare Ts:
t = 1:Ts:2-Ts;
% Componentele semnalului util
F = 1; % frecveta [Hz]
A = 1; % amplitudine
% Se introduce semnalul de prelucrat:
semnal = A*sin(2*pi*t*F); % semnal util sinusoidal
% Semnal zgomot
F_Zgomot = 50; % frecventa [Hz]
A_Zgomot = 0.25; % amplitudine
zgomot = A_Zgomot*sin(2*pi*t* F_Zgomot);
% Atasare semnalului de zgomot la semnalul util
semnal_zgomot = semnal + zgomot;
% Afisare semnale
subplot(3,1,1); plot(t, semnal);
xlabel('timp [s]');ylabel('amplitudine'); grid
title('Semnal original');
subplot(3,1,2); plot(t, zgomot);
xlabel('timp [s]');ylabel('amplitudine'); grid
title('Semnal zgomot');
subplot(3,1,3);plot(t, semnal_zgomot);
xlabel('timp [s]'); ylabel('amplitudine'); grid
title('Semnal original + zgomot');

Semnal original
1
amplitudine

-1
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
timp [s]
Semnal zgomot
0.5
amplitudine

-0.5
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
timp [s]
Semnal original + zgomot
2
amplitudine

-2
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
timp [s]

15
Exerciţiul 3. Să se reprezinte grafic semnalul compus din două sinusoide de frecvenţe 50 Hz şi
respectiv 120 Hz, şi un zgomot aditiv, alb, gaussian, de medie nulă şi dispersie 4, intervalul de timp
0, 0.8 .
% PROGRAM MATLAB
t = 0:0.001:0.8;
y = sin(2*pi*50*t)+sin(2*pi*120*t)+2*randn(1,length(t));
subplot(2,1,1); plot(y); title('Semnalul y(t)'); grid;
subplot(2,1,2); stem(t,y); grid

Exerciţiul 4. Să se ruleze următoarele secvenţe de cod Matlab în fereastra Command Window:


% Afiseaza un semnal sinusoidal de perioada=30:
>> T = [1:100];
>> X = cos(2*pi*T/30); plot(X)
% Afiseaza un semnal crescator exponential:
>> T = [1:100];
>> Y = 2.*(T/20); plot(Y)
% Afiseaza o decada dintr-o sinusoida:
>> T = [1:100];
>> Z = 2.*(-T/20).*cos(2*pi*T/30); plot(Z)

Exerciţiul 5. Să se ruleze următoarele coduri Matlab direct în fereastra Command Window:


A. Semnale sinusoidale:
>> T = [0:10]; X = 3*cos(T)+4*sin(T); plot(T,X)
>> T = [0:0.1:10]; X = 3*cos(T)+4*sin(T); plot(T,X)
>> T =[1:4000]; X=cos(2*pi*440*T/8192); plot(X); sound(X)
>> plot(X(1:100)) % “zoom in” pentru 100 de esantioane
>> sound(X(1:2:4000)) % se omit fiecare valori inalte ale semnalului X
% in acest caz tonul notei “A” este o octava mai inalta.
B. Semnale nesinusoidale
>> load train; sound(y)
>> plot(y)
>> plot(y(1501:1700))
>> sound(y(1:2:length(y)))
>> Z = y’.*cos(2*pi*1000*[1:length(y)]/8192); sound(Z)
% pentru modularea frecventei semnalului y de 1000Hz
>> plot(Z)
>> plot(Z(1501:1700)) % cu efect de „zoom in”.

Se va urmări modificarea semnalului sonor.

Exerciţiul 6. Să se genereze şi să se reprezinte grafic în aceeaşi fereastră Matlab, secvenţele


numerice ale următoare semnale discrete:
 impuls Dirrac: n  5 ;
 semnal treaptă unitate: un ;

16
Mdee -S.Paturca
 semnal dreptunghiular: r n  5 ;
 semnal sinusoidal cu frecvenţa 1 KHz eşantionat la 10 KHz, sin 21000 / 10000n   4 ;
 semnal sinus cardinal: sinc[n]
 semnal aleator cu repartiţie normală cu media 1.5 şi dispersia 0.25
 semnal putere: 2n / 2
 semnal logaritm natural: lnn
 semnal exponenţial: en
unde 0  n  20 .
% PROGRAM MATLAB
clear all
n = 0:20;
f = figure('Units','Norm','Position',[.01 .01 .98 .95]);
set(f,'MenuBar','none');
% Impuls Dirrac
a1 = axes('Position',[.05 .7 .25 .25]);
stem([zeros(1,14) 1 zeros(1,5)]);
set(a1,'YLim',[0 1.2],'XTick',[0:5:20],...
'XTickLabel',[-10:5:10],'FontSize',8);
legend('Impuls Dirrac',2) ;grid
% Semnal treapta unitate
a2 = axes('Position',[.35 .7 .25 .25]);
stem([zeros(1,10) ones(1,10)]);
set(a2,'YLim',[0 1.2],'XTick',[0:5:20],...
'XTickLabel',[-10:5:10],'FontSize',8);
legend('Semnal treapta unitate',2); grid
% Semnal dreptunghiular
a3 = axes('Position',[.65 .7 .25 .25]);
stem([zeros(1,10) ones(1,5) zeros(1,5)]);
set(a3,'YLim',[0 1.2],'XTick',[0:5:20],...
'XTickLabel',[-10:5:10],'FontSize',8);
legend('Semnal dreptunghiular',2); grid
% Semnal sinusoidal
a4 = axes('Position',[.05 .4 .25 .25]);
stem(sin(2*pi*.1*[n]+pi/2));
set(a4,'XLim',[0 20],'YLim',[-1 1.5],'XTick',[0:10:20],...
'XTickLabel',[0:10:20]*1e-4,'FontSize',8);
legend('Semnal sinusoidal',2) ; grid
% Semnal sinc
a5 = axes('Position',[.35 .4 .25 .25]);
stem(sinc(.25*[-9:10]));
set(a5,'XLim',[0 20],'YLim',[-.25 1.5],'XTick',...
[0:5:20],'XTickLabel',[-10:5:10],'FontSize',8);
legend('Semnal sinc',2) ; grid
% Semnal aleator
17
a6 = axes('Position',[.65 .4 .25 .25]);
stem(1.5+sqrt(0.25)*randn(1,20))
set(a6,'YLim',[0 3],'XLim',[1 21],'XTick',[1:5:21],...
'XTickLabel',[-10:5:10],'FontSize',8);
legend('Semnal aleator normal',2); grid
% Semnal putere 2^(-0.5*n)
a7 = axes('Position',[.05 .1 .25 .25]);
stem(pow2(-0.5*n))
set(a7,'YLim',[0 1.2],'XLim',[1 21],'XTick',[1:5:21],...
'XTickLabel',[0:5:20],'FontSize',8);
legend('Semnal putere 2^-^0^.^5^n',2) ; grid
% Semnal logaritm natural
a8 = axes('Position',[.35 .1 .25 .25]);
stem(log([.1:.1:2]))
set(a8,'YLim',[-3 2],'XLim',[0 20],'XTick',[0:5:20],...
'XTickLabel',[0:.5:2],'FontSize',8);
legend('Semnal logaritm natural',2) ; grid
% Semnal exponential e^(-n)
a9 = axes('Position',[.65 .1 .25 .25]);
stem(exp(-n));
set(a9,'YLim',[0 1.2],'XLim',[0 15],'XTick',[0:5:20],...
'XTickLabel',[0:5:20],'FontSize',8);
legend('Semnal exponential e^-^n',2) ; grid

Exerciţiul 7. Se consideră următorul semnal continuu sinusoidal: xt   sin 2ft , unde -∞<t<∞.
Semnalul va avea următoarele frecvenţe f=0.5 Hz, 4 Hz, 0.5 Hz şi 4 kHz. Să se vizualizeze
semnalul discret x[n], pentru 0<=n<=99, eşantionat cu Fs=5Hz. Se vor identifica similarităţile şi
diferenţele dintre graficele afişate.
18
Mdee -S.Paturca
% PROGRAM MATLAB
clear all
n = 0:1:99; % genereaza vect index de timp
Fs = 5; % frecventa de esantionare [Hz]
f = 0.5; % frecventa semnalului[Hz]
x = sin(2*pi*(f/Fs)*n); % Semnal de prelucrat, x
stem(n,x); grid
figure;
f = 2; % frecventa semnalului
x1 = sin(2*pi*(f/Fs)*n); stem(n,x1); grid
figure
f = 3; % frecventa semnalului
x2 = sin(2*pi*(f/Fs)*n); stem(n,x2); grid
figure
f = 4.5; % frecventa semnalului
x3 = sin(2*pi*(f/Fs)*n); stem(n,x3); grid
Figura 1, fs = 5Hz, f = 0.5Hz Figura 2, fs = 5Hz, f = 2Hz
1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 50 100 0 50 100

Figura 3, fs = 5Hz, f = 3Hz Figura 4, fs = 5Hz, f = 4.5Hz


1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 50 100 0 50 100

Exerciţiul 8. Se consideră următorul semnal discret xn  cos0 n  , a cărui pulsatie variază de la
-4л la 4л [rad/sec]. Să se afişeze semnalul pentru următoarele frecvenţe f=1/16, 1/8, 1/4 şi 1/2 Hz,
iar pentru vizualizarea simultană a graficelor se va folosi funcţia Matlab subplot. Pentru care
valoare a frecvenţei f se obţine cea mai mare rată de oscilaţii? Se vor alege următorii paşi de calcul:
1, 0.5, 0.1, 0.01; 0.0001sec.
% PROGRAM MATLAB – exemplificare pentru pasul de timp 1 sec:
clear all
n = -4*pi:4*pi; % genereaza vectorul index de timp, pas=1sec
f = 1/16; % frecventa semnalului
y = cos(2*pi*f*n ); % semnal de prelucrat
subplot(2,2,1); stem(n,y); grid; axis([-12 12 -1.5 1.5]);
f = 1/8; % frecventa semnalului
y1 = cos(2*pi*f*n );
19
subplot(2,2,2); stem(n,y1); grid; axis([-12 12 -1.5 1.5]);
f = 1/4; % frecventa semnalului
y2 = cos(2*pi*f*n );
subplot(2,2,3); stem(n,y2); grid; axis([-12 12 -1.5 1.5]);
f = 1/2; % frecventa semnalului
y3 = cos(2*pi*f*n );
subplot(2,2,4); stem(n,y3); grid; axis([-12 12 -1.5 1.5]);
Rep r ez en t ar ea s emn alulu i y = co s (2 *p i* f* n) , un de n - ind ex de t imp , iar f = 1 /16 , 1 /8 , 1 /4 , 1 /2H z
1.5 1.5
1 1
0.5 0.5
0 0
-0.5 -0.5
-1 -1
-1.5 -1.5
-10 -5 0 5 10 -10 -5 0 5 10
1.5 1.5
1 1

0.5 0.5
0 0

-0.5 -0.5
-1 -1
-1.5 -1.5
-10 -5 0 5 10 -10 -5 0 5 10

 1  
Exerciţiul 9. Să se genereze semnalul xn  K  exp    j   n  , unde K=2, n  N şi
 12 6 
0  n  40 . Să se explice care este semnificaţia părţii reale a exponentului?
% PROGRAM MATLAB
K = 2; n = 0:40; Parte reala
2

p = -(1/12)+(pi/6)*i; 1
Amplitudine

x = K*exp(p*n); 0

subplot(2,1,1); stem(n,real(x)); grid -1

xlabel('Index temporal n'); -2


0 5 10 15 20 25 30 35 40
ylabel('Amplitudine'); Index temporal n
Parte imaginara
2
title('Parte reala');
subplot(2,1,2); stem(n,imag(x)); grid
Amplitudine

xlabel('Index temporal n'); 0


ylabel('Amplitudine');
-1
title('Parte imaginara'); 0 5 10 15 20 25 30 35 40
Index temporal n

Exerciţiul 10. Să se reprezinte grafic următorul semnal în timp discret: xn  e 0.1 j 0.3n , unde
 10  n  10 .
% PROGRAM MATLAB
n = [-10:1:10]; alpha=-0.1+ 0.3j;
x = exp(alpha*n);
subplot(2,2,1); stem(n,real(x));
title('partea reala') ; xlabel('n');
20
Mdee -S.Paturca
subplot(2,2,2); stem(n,imag(x));
title('partea imaginara'); xlabel('n');
subplot(2,2,3); stem(n,abs(x)) ;
title('magnitudine'); xlabel('n') ;
subplot(2,2,4); stem(n,(180/pi)*angle(x));
title('faza') ;xlabel('n');
partea reala partea imaginara
2 1

0 0

-2 -1

-4 -2
-10 0 10 -10 0 10
n -index timp n -index timp
magnitudine faza
3 200

100
2
0
1
-100

0 -200
-10 0 10 -10 0 10
n -index timp n -index timp

Exerciţiul 11. Să se scrie codul MATLAB ce permite reprezentarea formelor de undă pentru un
semnal sinusoidal continuu de forma: 10 * sin2ft   4 şi discret:
10 * sin 2  f / Fs n   4 , având ca parametri: frecvenţa 1200 Hz, frecvenţa de eşantionare

160 KHz, amplitudinea A=10, faza 0  rad / s şi t 0  0 s , t f  5ms .
4
% PROGRAM MATLAB
clear all
f = 1200; % [Hz], frecventa semnalului
Fs = 160e3; %[Hz], frecventa de esantionare
Fi = pi/4; % faza semnalului
A = 10; % amplitudinea semnalului
t = 0:1/Fs:5e-3; % genereaza vectorul timp
n = 0:length(t)-1; % n – index de timp
subplot(211);
% Afisarea semnalului sinusoidal continuu
plot(t,A*sin(2*pi*f*t+Fi));grid;
xlabel('timp continuu'); ylabel('amplitudine');
title('Semnal sinusoidal continuu');
subplot(212);
% Afisarea semnalului sinusoidal discret
stem(t,A*sin(2*pi*(f/Fs)*n+Fi));grid
xlabel('timp discret'); ylabel('amplitudine');
title(' Semnal sinusoidal discret');

21
Capitol - Noţiuni de bază de statistică şi probabilitate utile în
prelucrarea semnalelor
Prin procesare semnalului se urmăreşte reducerea interferenţei şi a zgomotelor ce se suprapun în
procesul de achiziţie, datorită imperfecţiunilor sistemelor de achiziţie, cât şi ca rezultat inevitabil al
diferitelor tehnici de procesare numerică.
Prin elementele de statistică şi probabilitate devine posibilă măsurarea şi clasificarea efectelor
nedorite (zgomote, interferenţe, etc.), în vederea eleboării strategiei optime de reducere sau
înlăturarea a lor din semnalul util.
În statistică, dacă ne referim la semnale numerice, vom denumi variabilă independentă „numărul
eşantionului”.
Dacă un semnal conţine N eşantionae, de la x 0 până la x N 1 , vom calcula media (eng. „mean”),
sau valoarea medie a acestui semnal, notată cu , conform formulei:
1 i  N 1
  meanx    xi
N i 0
Media este elementul de la mijlocul unui set de date ordonate în ordine crescătoare. Dacă semnalul
este o undă periodică, definim drept amplitudine vârf la vârf (eng. „peak-to-peak value”) distanţa
distanţa dintre valoarea cea mai mică şi cea mai mare a amplitudinii semnalului pe timp de o
perioadă.
Cele mai multe semnale au o natură aleatoare, neputând fi defintă o valoare a amplitudinii vârf la
vârf. Pentru aceste semnale se definşte deviaţia standard, notată  .
Deviaţia de la valoarea medie a semnalului se numeşte deviaţie medie, şi reprezintă suma
1 N 1
diferenţelor dintre valoarea fiecărui eşantion x i şi valoarea medie  :    xi   .
N i 0
În practică, în operarea cu semnale este utilă cunoaşterea deviaţiei standard a semnalului de la
valoarea medie, adică a puterii reprezentate de deviaţia de la valoarea medie. Deviaţia standard este
dată de formula:
1 N 1 1 N 1
2   xi   2 , sau     x i   2
N  1 i 0 N  1 i 0

Termenul  2 este adesea folosit în statistică şi poartă numele de varianţă. Deviaţia standard oferă
informaţii asupra variaţiei semnalului în raport cu valoarea medie.
O altă noţiune foarte utilă în prelucrarea semnalelor este rădăcina medie pătratică (eng. Root
Mean Square, RMS)
Histograma este o altă noţinue importantă, fiind o reprezentare grafică a numărului de eşantioane
dintr-un şir de date (semnalul) care au aceeaşi valoare, în funcţie de plaja de valori a eşantioanelor.
Suma numărului de apariţii din histogramă este egală cu numărul de eşantioane din semnalul
considerat.
M 1
N  Hi
i 0
unde M reprezintă numărul de valori posibile pe care fiecare eşantion le poate lua.
Histogramele sunt utile pentru calculul valorii medii şi a deviaţiei standard în cazul unui număr
mare de date (milioane de eşantioane), sore exemplu în cazul procesării de imagine. Histogramele
22
Mdee -S.Paturca
grupează împreună eşantioane care au aceeaşi valoare. Aceasta permite să se realizeze calculul
statistic utilizând un număr mic de grupe de valori în loc de milioane de valori. Prin utilizarea
histogramelor se pot calcula media şi deviaţia standard cu formulele următoare:
1 M 1 1 M 1
  meanx    i i  H şi    i   2 H i
N i 0 N  1 i 0
Spre exemplu, H 10 înseamnă numărul de eşantioane care au valoare egală cu 10.
Prin această metodă se micşorează considerabil numărul operaţiilor repetate, reducându-se
considerabil calculul statistic.
Semnalul achiziţionat este o versiune bruiată a procesului (semnalului) de bază. Histograma se
referă doar la semnalul achiziţionat.
Procesul de bază poate fi descris printr-o funcţie asemănătoare histogramei, dar care se numeşte
funcţie masă de probabilitate (pmf, probablility mass function).
Histograma se referă la un număr finit de eşantioane, iar funcţia masă de probabilitate încearcă să
estimeze ce s-ar obţine cu un număr infinit de valori, fiind o caracterizare a procesului care
generează semnalul.
Histograma are pe axa ordonatelor numărul de repetări ale unei valori, iar pmf are probabilitatea de
apariţie a unui număr, exprimat fracţionar. In graficul pmf se vor regăsi valori de la 0 la 1, suma
tuturor valorilor din grafic fiind 1. Pentru a trasa pmf se împarte fiecare valoare din histogramă la
numărul total de eşantioane, N. Altfel sous, pmf estimează probabilitatea ca o anumită valoare să fie
generată, adică să apară în şirul respectiv de date. Această funcţie se referă doar la semnalele
discrete.
Funcţia densitate de probabilitate (pdf, probability density function), reprezintă în cazul
semnalelor continui funcţia similară pmf din cazul semnalelor discrete. Referindu-se la un semnal
continuu în timp, pdf are ca unitate de măsură pe axa ordonatelor densitatea de probabilitate.
Semnalele generate de procese aleatorii au întotdeauna pdf reprezentată grafic sub forma unui
clopot. Aceast se numeşte distribuţie normală sau distribuţie Gaussiană.
Integrala din pdf poartă numele de funcţie de distribuţie cumulativă (cdf) şi se notează simbolic
cu x  .

Exemple
Se consiferă mai multe semnale, construite prin funcţiile cu numele:
semnal_drept – care generează un semnal dreptunghiular de durata dată, amplitudine A şi frecvenţa de eşantionare fs,
şi nivel de zgomot (alb) stabilit
MA_recursiv - implementat prin recursivitate a mediei alunecatoare
MA_direct – construit prin media directă
Se cere testarea medierii aecestor semnale. Se rulează codurile prezentate mai jos.
Soluţie:
function [t,y]=semnal_drept(ti,tf,fs,D,A,SNR);
% generare semnal dreptunghiular de durata D si amplitudine A
% dar reprezentarea semnalului este intre ti si tf
% fs frecventa de discretizare
% nivel de zgomot (alb) stabilit prin SNR
Ts=1/fs;
t=ti:Ts:tf;
L=length(t);
y(1:L)=0;
n=find(~t);
Dd=floor(D*fs); %latimea semnalului in nr. esantioane
23
y(n:n+Dd)=A;
Z=A*10^(-SNR/20);
zg=Z*(rand(size(t))-0.5); % semnal zgomot alb
y=y+zg;

function y= MA_recursiv(t,x,M);
% implementare prin recursivitate a mediei alunecatoare
p=(M-1)/2;
q=p+1;
L=length(x);
y=x;
y(q)=sum(x(1:M))/M;
for k=q+1:L-p
y(k)=y(k-1)+(x(k+p)-x(k-q))/M;
end;

function y=MA_direct(x,M)
y=0*x;
L=length(x);
for k=1:(L-M+1)
y(k)=sum(x(k:k+M-1))/M;
end

% program test mediere


close all;
clear all;
M=21; % nr. de puncte prin care se va realiza medierea
ti=-100;
tf=200;
fs=100;
D=70;
A=1;
SNR=10;
[t,y]=semnal_drept(ti,tf,fs,D,A,SNR); %generare semnal dreptunghiular
% parametri: t_initial=-100; t_final=200; f_discretizare =100; latimea
impulsului 70;
% amplitudinea semnalului 1; raportul semnal/zgomot SNR=10 dB.
disp('flops cu MA_recursiv:')
tic
yf_r=MA_recursiv(t,y,M);
toc
disp('flops cu MA_direct:')
tic
yf_d=MA_direct(y,M);
toc
figure (1);
plot (t,y);
grid;
d=tf-ti;
axis([ti-0.1*d tf+0.1*d -1.5*abs(min(y)) 1.5*max(y)]);
xlabel('timp (secunde)');
hold on
plot(t,yf_r,'r');
plot(t,yf_d,'y');
ylabel('amplitudine')
title(sprintf('filtrarea cu MA a unui semnal puls dreptunghiular; lungimea
filtrului M=%4d',M))

24
Mdee -S.Paturca
Transformata Fourier discreta
A. Serii Fourier discrete
Fie un semnal discret periodic, cu perioada N. Acesta poate fi reprezentat printr-o serie Fourier
discretă, adică:
2 kn 2 kn
N 1 j 1 N 1 j
x[n]   ak e N , unde coeficienţii sunt: ak   x[n]e N (1.1)
k 0 N n 0

Observaţie: Spre deosebire de cazul semnalelor continue, seria este finită.

Transformata Fourier discretă


Fie un semnal discret neperiodic, finit, lungimea sa fiind N. Se defineşte transformata Fourier
discretă:
2 kn
N 1 j
X [k ]   x[n]e N (1.2.)
n 0
se remarcă şi în acest caz faptul că este finită.

Calculul numeric al transformatei Fourier discrete (DFT) folosind Matlab


Pentru calculul numeric al transformatei Fourier discrete s-a impus algoritmul numit transformata
Fourier rapidă (Fast Fourier Transform) sau FFT, care reuşeşte calculul coeficienţilor de mai sus
folosind un număr de operaţii mai mic decât evaluarea directă a formulei.
Numărul de eşantioane ale semnalului trebuie să fie de forma 2m , cu m întreg (de exemplu: 32, 64,
128, 256, 512, 1024…).
Functia MATLAB pentru calcularea transformatei Fourie discrete a unui vector x,
utilizând algoritmul de calcul al transformatei Fourier rapide este: fft(x).
Functia fft(x, N) se utilizează pentru a obţine FFT pentru un vector de lungime N (cu N
puncte).
spc = fft(x,N)
unde x este vectorul care conţine eşantioanele x  i  , i  0,N  1 , iar spc este vectorul ale cărui
componente sunt numere complexe, reprezentând transformata Fourier discretă. Dacă N nu este de
forma 2m , funcţia fft generează acelaşi rezultat, dar timpul de calcul creşte.
Daca X este o matrice, functia fft returnează transformata Fourier a fiecărei coloane.
Daca lungimea lui X este mai mica decât N, atunci matricea X este completată cu valoarea zero
până la dimensiunea N. Daca lungimea lui X este mai mare decât N, atunci secvenţa matricei X este
trunchiata.

Exerciţiul 1 - Transformata Fourier


Determinarea şi reprezentarea în MATLAB a seriilor Fourier pentru diverse semnale.

f = 4; % frecventa semnalului sinusoidal


Fs = 100; % frecventa de esantionare
Ts = 1/Fs; % perioada de esantionare
t = 0:Ts:1-Ts
n = 0:length(t)-1; % numar de esantioane
y = 2*sin(2*pi*f*t);
25
subplot(211)
plot(t,y); grid on
Spec = fft(y);
subplot(212)
stem(n,abs(Spec)); grid on
axis([0,100,0,120])

-2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

100

50

0
0 10 20 30 40 50 60 70 80 90 100

Aplicaţie 1. Se va defini un vector index discret k pe 20 de puncte pentru coeficienţii ak, sub forma :
>> k = [0:10 -9:-1]; % reprezentarea pentru definirea lui k (în loc de [-9:10]) are scopul de a
%face calculele compatibile cu functiile fft şi ifft din MATLAB.
Se defineste vectorul de timp, tot pe 20 de puncte, pentru 0  t  1, astfel:
>> T = 0.05; t = [0:T:0.95];
Se calculeaza si se reprezeinta seriile Fourier î n cazul unui semnal sinusoidal scris sub form ă
complexă, astfel:
>> x0 = exp(j*2*pi*t);
>> X0 = fft(x0)/20;
>> stem(k,X0,’b’) %sau plot(k,X0,’o’);
Se vor relua paşii precedenti pentru semnalul complex conjugat exp(-j*2*pi*t)
>> ………………………………………
Aceste rezultate demonstreaz ă c ă pentru functia fft, vectorul de intrare x0 este considerat ca o
perioadă a semnalului periodic. De asemenea funtia fft trebuie corelată cu numărul de puncte ale
vectorului semnalului (20 în expemplul dat) pentru a obţine valori corecte ale amplitudinii.
Se vor calcula şi reprezenta seriile Fourier pentru următoarea sinusoidă:
>> x1 = sin(2*pi*t);
>> …………………………………………
Pentru semnalul x1 (sau pentru oricare alt semnal care nu este par), trebuie să se reprezinte atât partea reală
cât şi partea complexă a coeficienţilor Fourier, astfel:
>> subplot(2,1,1), stem(k,real(X1),’b’)
>> subplot(2,1,2), stem(k,imag(X1),’b’)
sau alternativ :
>> clg; plot(k,real(X1),’ro’,k,imag(X1),’bx’)
Se determină şi se reprezentă coeficienţii Fourier în cazul sinusoidelor având faze diferite:
>> x3 = sin(2*pi*t + pi/4);
>> x4 = sin(2*pi*t - pi/6);
>> ………………………………………………
Nota: Reprezentarea seriei Fourier se poate vizualiza şi prin apelarea functiei xfourier.

26
Mdee -S.Paturca
Aplicaţie 2. Determinarea şi reprezentarea transformatei Fourier
Pentru semnalelor continue, in MATLAB se pot calcula doar aproximativ transformatele Fourier ale
acestor semnale, deoarece sistemul de calcul procesează doar semnale de durată finiă, iar semnalele
ce se pot stoca sunt doar semnale eşantionate ale semnalelor continue.
Dacă eşantioanele semnalului sunt suficient de dense pe axa timpului, iar amplitudinile semnalului
sunt zero sau suficient de mici in afara intervalului de timp specificat, atunci transformata calculată
va aproxima destul de bine transformata Fourier actuală. In solutia prezentata in continuare, se va
ţine cont de specificaţiile anterior menţionate.
Se va defini intevalul dintre esantioanele de timp la 1 ms, astfel:
>> T = 0.001;
ceea ce corespunde unei frecvente de esantionare de 1 Khz.
Se stabileşte un interval de timp de 100 ms:
>> t = [0:T:0.1];
Se generează şi se reprezintă un semnal exponenţial având constanta de timp de 10 ms:
>> x = exp(-t/0.01);
>> x(1) = 0.5;
>> plot(t,x,’b’);
unde se setează valoarea semnalului x (t) în punctul de discontinuitate (t = 0) la jumătate din
valoarea sa.
Pentru a genera transformata Fourier a semnalului x (t), se defineşte vectorul frecvenţă
>> f = [-100:2:100];
Vectorul frecvenţei normate şi transformata Fourier corespunzătoare vor fi:
>> w = 2*pi*f*T;
>> X = freqz(x,1,w);
Se cere reprezentarea grafică a componentelor reale ş i imaginare ale transformatei Fourier X î n
funcţie de timp:
>>……………………………………
Se cere sa se reprezinta spectrul de amplitudini şi spectrul de fază:
>> amplX = abs(X);
>> fazaX = angle(X);
>>……………………………………
Se multiplică o funcţie exponenţială având o constantă de timp de 20 ms cu o funcţie sinusoidală ce
are o frecvenţă de 50 Hz:
>> y = exp(-t / 0.02).*sin(2*pi*50*t);
> clg; plot(t,y,’b’)
şi se cere reprezentarea spectrului de amplitudini şi de fază a acestui semnal compus
>> ……………………………………
Se determină spectrul în cazul semnalelor impulsuri rectangulare de forma:
>> p = [ones(1,40) zeros(1,61)];
plot(t,p)
pentru diferite durate a impulsului, notând relaţia dintre durata impulsului şi bandă:
>>……………………………………

Aplicaţie 3. Determinarea transformatatei Fourier rapidă a unui semnal


Explicatii. Daca se consideră un semnal sinusoidal de baza componentele de frecventa pot fi usor
identificate. In cazul semnalelor bruiate de zgomot este mai dificil de deteminat componentele sale

27
in frecventa. Din aceasta cauza, pentru determinarea acestora metoda clasică este folosirea
transformatei Fourier rapidă (FFT).
Consideram un semnal sinusoidal compus din doua componente, una la 75 de Hz, iar cealalta de
100 Hz. Se definesc datele de intrare (semnalul compus sinusoidal) - semnal ca fiind eşantionat cu
frecvenţa de 1000 Hz (perioada 0.001 sec):
>> Ts = 0.001; % secunde
Se generează axa de timp de la t = 0 până la t = 0.25 cu pasul Ts:
>> t = 0:.Ts:.25;
Se construieşte un semnal sinusoidal compus din componentele de frecvenţe 75Hz şi 110Hz:
>> x = sin(2*pi*75*t) + sin(2*pi*110*t);
Se cere reprezentarea semnalului în domeniul timp:
>> ………………………………………………
Peste semnalul obţinut se va suprapune un zgomot aleator care produce un semnal bruiat y:
>> y = x + 2*randn(size(t));
Se cere reprezentarea semnalului rezultant y_r, pe intervalul y(1:150):
>> ………………………………………………
Se poate observa că este dificil de identificat componentele in domeniul frecvenţă ale semnalului
y_r. Pentru aceasta vom aplica analiza spectrală pentru semnalul y_r. Pentru aceasta vom determina
transformata Fourier rapidă a semnalului y_r, considerată pe 256 de puncte (eşantioane):
>> Y = fft(y_r,256);
Se determina energia diferitelor componente ale frecventei prin reprezentarea densitatii spectrale de
putere, care reprezinta o măsură a acestei energii, folosind functia:
>> Pyy = Y.*conj(Y)/256;
Pentru a reprezenta densitatea spectrala de putere trebuie generată axa frecvenţelor:
>> f = 1000/256*(0:127);
care a fost generată doar pentru jumatate din interval (numar de puncte), celelalte 127 de puncte
fiind simetrice. Reprezentati densitatea spectrala de putere pe intervalul (1:128):
>> ………………………………………………
Se cere o reprezentare cu o precizie mai mare a densitatii spectrale de putere, doar pâna la frecventa
de 150 Hz:
>> ………………………………………………

Ex.2 Fie un semnal sinusoidal de frecvenţă f =1. Să se discretizeze folosind diverse frecvenţe şi să
se calculeze spectrul semnalului obţinut. Să se compare cu cel real.
Soluţie: Coeficienţii seriei Fourier în forma reală pentru semnalul continuu sunt evident:
b1  1 , b k  0 în rest şi c k  0 .
Acestora le corespund coeficienţii seriei complexe: a 1  0.5 , a k  0 în rest.
Pentru N=101 (fs = 101) rezultă folosind funcţia fft( ) următoarele valori pentru modulele primilor
3 coeficienţi:
0.0000 50.2403 0.6781.
Pentru N=11 (fs = 11) rezultă următoarele valori:
0.0000 5.1370 0.8074 0.4669 0.3652 (evident 5 sunt semnificativi, restul se repetă).
Se observă că în ambele cazuri rezultatul este afectat de erori. Acest lucru se datorează preciziei
algoritmului, nu reprezentării semnalului. Erorile de calcul sunt cu atât mai mici cu cât numărul de
puncte este mai mare, deci fs este mai mare. Deci chiar pentru semnale cu spectru limitat este bine
28
Mdee -S.Paturca
ca fs să fie cât mai mare, nu doar de două ori fmax, pentru reducerea erorilor de calcul. In practică
ea se alege de obicei (6 10)fmax.

Exerciţiul 3. - Metode de determinare a transformatatei Fourier discrete a unui semnal


clear all; close all;
fs = 1000; % frecventa de esantionare in Hz
Ts = 1/fs; % perioada de esantionare in sec.
tf = 5; % timp final de calcul in sec.
t = 0 : Ts : tf; % genereaza vectorul timp
y = 5*sin(2*pi*3*(t - 0.5)) + ...% genereaza semnal
2*sin(2*pi*5*t);
% Afisarea semnalului
figure; plot(t,y);
title('Plot example'); xlabel('timp [s]');ylabel('Amplitude semnal');

% Calculul Transformatei Fourier Discrete pentru semnalul y


Y = fft(y);
mag_Y = abs(Y);
N = length(y);

% Afisarea DFT, metoda demonstrativa 1.


% The frequency axis spans the whole unit circle starting at f = 0.
f = [0 : (N-1)] * (fs/N);
figure; plot(f, mag_Y);
title('DFT, metoda 1'); xlabel('frecventa [Hz]'); ylabel('amplitudine');

% Afisare DFT, metoda demonstrativa 2


% The frequency axis spans the whole unit circle
% Zero frequency is placed in the middle of the plot using the fftshift command on the mag_Y vector and using
proper generation of the abscissa.
p = ceil(N/2);
f = [(p - N) : (p - 1)] * (fs/N);
mag_Y_shifted = fftshift(mag_Y);
figure; plot(f, mag_Y_shifted);
title('DFT, metoda 2'); xlabel('frecventa [Hz]'); ylabel('amplitudine');

% Afisare DFT, metoda demonstrativa 3a.


% The frequency axis spans half of the unit circle (positive frequencies and DC).
p = ceil(N/2);
f = [0:(p - 1)] * (fs/N);
mag_Y_pos_freq = mag_Y(1:p);
figure; plot(f, mag_Y_pos_freq);
title('DFT, metoda 3a'); xlabel('frecventa [Hz]'); ylabel('amplitudine');

% Plotting the DFT magnitude, method 3b.


% The frequency axis spans half of the unit circle (positive frequencies and DC).
% The command "axis" is used to highlight the important part of the graph.
% The limits used in the "axis" command are obtained from visual inspection of the figure in any of the
preceding methods.
figure; plot(f, mag_Y_pos_freq);
title('DFT, metoda 3b'); xlabel('frecventa [Hz]'); ylabel('amplitudine');
f_min = 0;
29
f_max = 10;
mag_min = 0;
mag_max = 14000;
axis([f_min f_max mag_min mag_max]);

Reprezentarea spectrului de fază şi de amplitudine al DFT.


Ex.2.1 Să se genereze şi să se reprezinte grafic următoarele semnale:
yt   sin2ft   0,5 sin 2  5 f  t  , unde f=50Hz, iar frecvenţa de eşantionare fs  1kHz .
Se va reprezenta semnalul eşantionat. Pentru reprezentarea spectrului se va utiliza DFT.
% PROGRAM MATLAB
% Calculul amplitudinii transformatei Fourier rapide
clear all
Fs = 1000; % frecventa de esantionare
Ts = 1/Fs; % perioada de esantionare
t = 0:Ts:(1-Ts); % genereaza vectorul timp
y = sin(2*pi*50*t)+1/2*sin(2*pi*250*t); % semnal de prelucrat
spc = fft(y); % calculeaza DFT a semnalului
m = abs(spc)./(length(y)/2); % amplitudinea semnalului
f = 0:(Fs-1); % vectorul frecventei
subplot(211), plot(t,y);
xlabel('timp(s)'); ylabel('Semnalul x(t)');
title('Semnalul achizitionat in domeniul timp'); grid;
subplot(212); plot(f,m); grid
xlabel('frecventa(Hz)');ylabel('Amplitudinea semnalului');
title('Amplitudinea semnalului calculata cu functia fft');

Semnalul achizitionat in domeniul timp


2
S e m n a lu l x (t )

-2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
timp(s)
A m p lit u d in e a s e m n a lu lu i

Amplitudinea semnalului calculata cu functia fft


1

0.5

0
0 100 200 300 400 500 600 700 800 900 1000
frecventa(Hz)
Fig. 1 Reprezentarea semnalului a) în timp şi a spectrului acestuia

30
Mdee -S.Paturca
Densitatea spectrală de putere şi transformata Fourier
Exerciţiul 2.2. Reprezentaţi densitatea spectrală de putere a unui semnal format din două sinusoide
de 50 Hz şi 120 Hz şi un zgomot aditiv, alb, gaussian, de medie nulă şi dispersie 4.

t = 0:0.001:0.8;
x = sin(2*pi*50*t)+sin(2*pi*120*t)+2*randn(1,length(t));
subplot(211);plot(x);
title('Semnalul x(t)'); grid;
X = fft(x,512);
Px = X.*conj(X)/512;
f = 1000*(0:255)/512;
subplot(212);plot(f,Px(1:256));
title('Densitatea spectrala de putere'); grid

Semnalul x(t)
10

-10
0 200 400 600 800 1000
Densitatea spectrala de putere
200

100

0
0 100 200 300 400 500

31
Exerciţiul 2.3. Să se genereze un semnal sinusoidal cu următorii parametri: A=1V, Ts=0.001s şi
frecvenţă f=50Hz, peste care se va suprapune un semnal zgomot cu amplitudinea de aproximativ
10% din amplitudinea semnalului, având valoarea medie zero (se va utiliza funcţia Matlab rand).
Se cere:
- calculul transformatei Fourier discrete;
- realiza filtrarii semnalului folosind funcţia Matlab ifft;
- vizalizarea reprezentarii semnalului initial şi a celui filtrat în timp şi în frecvenţă.
% PROGRAM MATLAB
% -----------------------------------------------------------------------------------------------------------------------------
% Semnalul original, reprezentare in timp
% -----------------------------------------------------------------------------------------------------------------------------
T_semnal = 1; % [s], perioada semnalului
Ts = 0.001; % [s], perioada de esantionare
t = 0:Ts:T_semnal-Ts; % genereaza vectorul timp
y = sin(2*pi*50*t); % semnalul original, esantionat
n = length(y); % dimensiunea semnalului

% Genereaza un zgomot cu amplitudinea de ~10% din amplitudinea semnalului, avand


%valoarea medie zero
ampl_noise = 0.1;
noise = ampl_noise * (rand(1,length(y)) * 2 - 1);

ny = y + noise; % semnalul cu zgomot adaugat

% -----------------------------------------------------------------------------------------------------------------------------
% Calculul transformatei Fourier
% -----------------------------------------------------------------------------------------------------------------------------
Y = fft(y); % transf. Fourier a semnalului fara zgomot
nY = fft(ny); % transf. Fourier a semnalului cu zgomot

% Amplitudinea spectrului
amp_spec = abs(nY)/(n/2); % n/2 deoarece jumatate sunt complex conjugate

% -----------------------------------------------------------------------------------------------------------------------------
% Reprezentare grafica in timp si frecventa
% -----------------------------------------------------------------------------------------------------------------------------
figure(1);

% Traseaza semnalul cu zgomot, in timp


% -----------------------------------------------------------------------------------------------------------------------------
subplot(2,1,1);
plot(t, ny); grid on;
xlabel('timp [s]'); ylabel('amplitudine')
title('Semnalul cu zgomot in timp si in frecventa');

% Traseaza spectrul semnalului cu zgomot


% -----------------------------------------------------------------------------------------------------------------------------
subplot(2,1,2);
f = (0:1:n-1)/T_semnal; % genereaza vectorul frecventa
plot(f, amp_spec); grid on;
xlabel('frecventa [Hz]'); ylabel('amplitudine');
32
Mdee -S.Paturca
% Traseaza spectrul semnalului fara zgomot, si cel al semnalului cu zgomot, pentru comparatie
% -----------------------------------------------------------------------------------------------------------------------------
figure(2);

subplot(2,1,1);
amp_spec = abs(Y)/(n/2);
plot(f, amp_spec); grid on;
title('Traseaza spectrul semnalului fara zgomot, si cel al semnalului cu zgomot');

subplot(2,1,2);
amp_spec = abs(nY)/(n/2);
plot(f, amp_spec); grid on;

% -----------------------------------------------------------------------------------------------------------------------------
% Filtrare- atenuare semnal cu ajutorul transf. Fourier inverse
% -----------------------------------------------------------------------------------------------------------------------------
% in spectrul semnalului cu zgomot, anuleaza toate punctele pentru care amplitudinea este mai
% mica decat o valoare prestabilita, ampl_min
ampl_min = ampl_noise;
for k = 1:n
if abs(nY(k))/(n/2) < ampl_min
Y_f(k) = 0;
else
Y_f(k) = nY(k);
end
end

iY_f = ifft(Y_f); % calculeaza transf. inversa a semnalului modificat, "filtrat"


y_f = real(iY_f); % pastreaza doar partea reala

% -----------------------------------------------------------------------------------------------------------------------------
% Semnalul filtrat reprezentat in timp si in frecventa
% -----------------------------------------------------------------------------------------------------------------------------
figure(3);

% Reprezentare in timp
subplot(2,1,1);
plot(t, y_f); grid on
xlabel('timp [s]'); ylabel('amplitudine');
title('Semnalul filtrat reprezentat in timp si in frecventa');

% Reprezentare in frecventa
subplot(2,1,2);
amp_spec = abs(Y_f)/(n/2);
plot(f, amp_spec); grid on;
xlabel('frecventa [Hz]'); ylabel('amplitudine');

Exerciţiul 2.4. Se consideră un semnalul sinusoidal de forma:


2
y t    cos t  0.5  sin 2t  0.2 ;   , t  0,2T0 , T0  3.2s ,
T0
33
ce se va eşantiona cu o perioadă de Te  0.1s , şi va avea o lungime N  32 .
Se cere să se realizeze un program Matlab pentru analiza spectrală a semnalului care să realizeze
următoare:
 generarea şi reprezentarea grafică a semnalului;
 calculul transformatei Fourier discrete şi calculul spectrelor de amplitudini şi de faze.
 calculul transformatei Fourier inverse, folosind funcţia ifft ;
Soluţie:
Prin calculul transformatei Fourier discrete obţine spectrul semnalului (notat spc(i), unde i=[1,N]),
respectiv spectrul de amplitudini (notat sp1c(i), unde i=[1,N/2]) şi de faze (notat spc2(i), unde
i=[1,N/2]). Pentru calculul transformatei Fourier inverse se utilizează funcţia Matlab ifft.
Eşantionarea caracteristicii spectrale este realizată cu pulsaţia: 0  2 T  2  2T0    2 . Expresia
semnalului se scrie:

 
y t   0.2  1  cost    0.5 cos 2t   
 2
 A0  A1 cost  1   A2 cos2t   2 
unde A0  0.2 şi armonicile de frecvenţe   20 şi 2  40 au amplitudinile A1  1, A2  0.5 şi
fazele 1   , 2    2 .

% PROGRAM MATLAB
clear all;
T0 = 3.2; T = 2*T0; Te = 0.1; N = T/Te; omg = 2*pi/T0;
for i = 1:N % calculul esantioanelor semnalului
ind(i) = i;
x(i) = -cos(omg*(i-1)*Te)+1.5*sin(2*omg*(i-1)*Te)+0.2;
end;
figure(1); stem(ind,x); grid; pause;
spc = fft(x,N); % calculul transformatei Fourier discrete
N1 = N/2;
spc1 = abs(spc)/N1; % calculul spectrului de amplitudini
spc1(1) = spc(1)/N;
figure(2); stem(ind(1:N1),spc1(1:N1));
grid; axis([0 32 0 1.5]); pause;
for i = 1:N1, % calculul spectrului de faze
if abs(spc(i))<1e-7 spc2(i) = 0;
else spc2(i) = angle(spc(i));
end;
end;
figure(3); stem(ind(1:N1),spc2(1:N1));
grid; axis([0 32 -3.5 0]); pause;
xi = ifft(spc,N); % calculul transformatei Fourier inverse
figure(4); stem(ind,xi); grid;
C0 = spc1(1); % calculul seriei Fourier trigonometrice
for i = 1:N1,
C(i) = 2*real(spc(i+1))/N;
S(i) = -2*imag(spc(i+1))/N;
end;
for n = 1:N, % calculul semnalului pe baza seriei Fourier trigonometrice
xc(n) = C0;
34
Mdee -S.Paturca
for k = 1:N1
xc(n) = xc(n)+C(k)*cos(2*pi*k*...
(n-1)/N)+S(k)*sin(2*pi*k*(n-1)/N);
end;
end;
figure(5); stem(ind,xc); grid; pause;

1.5 0

-0.5

-1
1
amplitudine

-1.5

faza
-2
0.5
-2.5

-3

0 -3.5
0 5 10 15 20 25 30 0 5 10 15 20 25 30

a) b)
Fig.2.5 Analiza spectrului de amplitudine si de fază al semnalului
3

-1

-2

-3
0 10 20 30 40 50 60 70

Fig.2.4 Reprezentarea grafică a semnalului


Din calculul transformatei Fourier inverse s-a obţinut semnalul yi, care este practic identic cu
semnalul iniţial, y.

Proprietăţi ale transformatei Fourier


Exerciţiul 2.5. Să ve verifice proprietăţile de translaţie (deplasare, decalaj) în timp şi de modulaţie ale transformatei
Fourier. Se va considera semnalul:

figure
w = -pi:2*pi/255:pi;
wo = 0.4*pi; D = 10;
num = [1 2 3 4 5 6 7 8 9];

h1 = freqz(num, 1, w);
h2 = freqz([zeros(1,D) num], 1, w);

subplot(2,2,1)
plot(w/(2*pi),abs(h1));grid
title('Spectrul de amplitudine al secventei initiale')
subplot(2,2,2)
plot(w/(2*pi),abs(h2));grid

35
title('Spectrul de amplitudine al secventei decalate')
subplot(2,2,3)
plot(w/(2*pi),angle(h1));grid
title('Spectrul de faza al secventei initiale')
subplot(2,2,4)
plot(w/(2*pi),angle(h2));grid
title('Spectrul de faza al secventei decalate')

figure

w = -pi:2*pi/255:pi; wo = 0.4*pi;
num1 = [1 3 5 7 9 11 13 15 17];
L = length(num1);
h1 = freqz(num1, 1, w);
n = 0:L-1;
num2 = exp(wo*i*n).*num1;
h2 = freqz(num2, 1, w);
subplot(2,2,1)
plot(w/(2*pi),abs(h1));grid
title('Spectrul de amplitudine al secventei initiale')
subplot(2,2,2)
plot(w/(2*pi),abs(h2));grid
title('Spectrul de amplitudine al secventei modulate')
subplot(2,2,3)
plot(w/(2*pi),angle(h1));grid
title('Spectrul de faza al secventei initiale')
subplot(2,2,4)
plot(w/(2*pi),angle(h2));grid
title('Spectrul de faza al secventei modulate')

Spectrul de amplitudine al secventei initiale


Spectrul de amplitudine al secventei modulate
100 100

50 50

0 0
-0.5 0 0.5 -0.5 0 0.5

Spectrul de faza al secventei initiale Spectrul de faza al secventei modulate


4 4

2 2

0 0

-2 -2

-4 -4
-0.5 0 0.5 -0.5 0 0.5

36
Mdee -S.Paturca
Influenţa lungimii semnalului asupra spectrului estimat cu TFD

Exerciţiul 2.6. Să se studieze influenţa lungimii semnalului asupra spectrului său, estimat prin
intermediul TFD. Se va considera un semnal sinusoidal de frecvenţă 10 Hz, eşantionat la 100 Hz.
Să se studieze apoi efectul procedeului de zero-paddding şi cazurile în care numărul de perioade
este întreg sau nu.
figure(1)
t = 0:0.01:0.5-0.01;
x = cos(20*pi*t);
N = length(x) ; X = fft(x,N);
fp = (0:N-1)/N/0.01; fp = fp - 1/2/0.01;
stem(fp,fftshift(abs(X)));grid ;
axis([ -1/(2*0.01) 1/(2*0.01) 0 25]);
xlabel('frecventa (Hz)')
ylabel('spectrul de amplitudine')

figure(2)
X = fft(x,20*N); N = length(X);
fp = (0:N-1)/N/0.01;
fp = fp - 1/2/0.01;
plot(fp,abs(fftshift(X)));grid ;
axis([ -1/(2*0.01) 1/(2*0.01) 0 25]);
xlabel('frecventa (Hz)')
ylabel('spectrul de amplitudine')

figure(3)
t = 0:0.01:0.5-0.01-1/20;
x = cos(20*pi*t); N = length(x);
X = fft(x,N);
fp = (0:N-1)/N/0.01;
fp = fp - 1/2/0.01;
plot(fp,abs(fftshift(X)));grid ;
axis([ -1/(2*0.01) 1/(2*0.01) 0 25]);
xlabel('frecventa (Hz)');
ylabel('spectrul de amplitudine')

25
spectru de amplitudine

20

15

10

0
-50 -40 -30 -20 -10 0 10 20 30 40 50
frecventa (Hz)

37
25

spectru de amplitudine
20

15

10

0
-50 -40 -30 -20 -10 0 10 20 30 40 50
frecventa (Hz)

25
spectru de amplitudine

20

15

10

0
-50 -40 -30 -20 -10 0 10 20 30 40 50
frecventa (Hz)
Exercitului 2.7 Calcul FFT
% Exemplu 20: FFT pentru DFT-sinusoidal
N = 64; % Trebuie ales ca puterea a lui 2
T = 1; % Seteaza perioada de esantionare
A = 1; % Amplitudinea semnalului sinusoidal
phi = 0; % Faza semnalului sinusoidal
f = 0.25; % Frecventa (cicli/esantioane)
n = [0:N-1]; % Axa de timp in discret
x = A*cos(2*pi*n*f*T+phi); % Semnalul sinusoidal
X = fft(x); % Spectrul

% Afiseaza date reprezentate in timp:


figure(1);
subplot(3,1,1);
plot(n,x,'*k');
ni = [0:.1:N-1]; % Genereaza aAxa timpului interpolata
hold on;
plot(ni,A*cos(2*pi*ni*f*T+phi),'-k'); grid off;
title('Sinusoida la 1/4 din frecventa de esantionare');
xlabel('Timp (esantioane)'); ylabel('Amplitudine');
text(-8,1,'a)');
hold off;

% Afiseaza aplitudinea spectrala:


magX = abs(X);
fn = [0:1/N:1-1/N]; % Axa frecventelor normalizata
subplot(3,1,2);

38
Mdee -S.Paturca
stem(fn,magX,'ok'); grid on;
xlabel('Frecventa normalizata (cicli/esantion))'); ylabel('Amplitudine (lineara)');
text(-.11,40,'b)');

% Afisare pe o scara in dB:


spec = 20*log10(magX); % Amplitudinea spectrala in dB
subplot(3,1,3);
plot(fn,spec,'--ok'); grid on;
axis([0 1 -350 50]);
xlabel('Frecventa normalizata (cicli/esantion))'); ylabel('Amplitudinea (dB)');
text(-.11,50,'c)');
%cmd = ['print -deps', '../eps/example1.eps'];
Di%sp(cmd); eval(cmd);

Sinusoida la 1/4 din frecventa de esantionare


a) 1
Amplitudine

-1
0 10 20 30 40 50 60 70
Timp (esantioane)
Amplitudine (lineara)

b) 40

20

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normalizata (cicli/esantion))
c)
Amplitudinea (dB)

0
-100
-200
-300
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normalizata (cicli/esantion))

Figure 8.1: Semnal sinusoidal eşantionat la frecvenţa f=fs/4

 
Exerciţiul 2.8. Să se genereze următorul semnal yn  cos 2  0.1  t   , unde t=[1:50]. Să
 4
se reprezinte grafic amplitudinea unui semnalului utilizând functia fft. Să se modifice reprezentarea
spectrului astfel incat abscisa unei subfigurii să translateze componetele de joasă frecvenţă pe
centrul axei. Să se afişeze transformata Fourier discretă inversă.
% PROGRAM MATLAB
t= [1:50]; y = cos(2*pi*0.1*t+pi/4);
spc = fft(y); % Transformata Fourier discreta a semnalului f[n]
figure(4);
subplot(4,1,1); stem(abs(spc)); grid on;
subplot(4,1,2); stem(fftshift(abs(spc))); %Functia fftshift transleaza componentele
% de joasa frecventa ale spectrului pe centrul axei
grid on;
subplot(4,1,3); hold on; stem(ifft(spc)); %Transformata Fourier discreta inversa
39
% a semnalului y[n].
stem(f,'r*'); grid on;

Exerciţiul 2.9 Se consideră următorul semnal: y t   0.9n  cosn , n  0 . Să se reprezinte grafic


amplitudinea semnalului utilizând DFT. Se va face evaluarea semnalului în: 4 puncte DFT, 16
puncte DFT, 32 puncte DFT, 64 puncte DFT, 128 puncte DFT.
Se vor afişa şi interpreta răspunsurile vizualizate în aceeaşi fereastră.
% PROGRAM MATLAB
n = 0:1:1000; % genereaza vectorul index de timp
h = (0.9).^n.*cos( pi * n ); % semnal de prelucrat
H1 = fft(h,4); % calculeaza DFT a semnalului
f1 = (0:3)/4; % genereaza vectorul frecventei
m4 = abs(H1); % amplitudine semnal
H2 = fft(h,16); f2 = (0:15)/16; m16 = abs(H2);
H3 = fft(h,32); f3 = (0:31)/32; m32 = abs(H3);
H4 = fft(h,64); f4 = (0:63)/64; m64 = abs(H4);
H5 = fft(h,128); f5 = (0:127)/128; m128 = abs(H5);
plot(f1,m4,'b',f2,m16,'c',f3,m32,'k', ...
f4,m64,'y',f5,m128,'m')
xlabel('frecventa(Hz)'); ylabel('Amplitudine semnale');
title('Amplitudine semnale calculate cu functia fft');

Capitol - Eşantionare semnale.

Teoria esantionarii tratează condiţiile şi modalitatea reconstruirii exacte a semnalelor în timp


continuu din eşantioanele acestora. Ce înseamnă “exact”? Este permisa aproximarea?
Aşa cum s-a prezentat anterior, prin eşantionarea unui semnal continuu se înţelege citirea valorilor
sale la anumite intervale de timp, rezultatul fiind un semnal discret. Această operaţie este realizată
de convertoarele analog - numerice (analog - digitale).
Problema definitorie: În ce măsură informaţia asociată cu semnalul x(t) este transmisă corect într-
un semnal numeric x[n] – eventual de lungime finită?
Principala regulă care trebuie avută în vedere când se doreşte eşantionarea unui semnal este dată de
teorema eşantionării (teorema lui Shannon). Teorema eşantionării face posibilă aplicarea filtrelor
digitale în prelucrarea semnalelor continue.
40
Mdee -S.Paturca
Teorema lui Shannon
Un semnal continuu având componente de frecvenţă maximă f max poate fi reprezentat prin
eşantionare regulată, cu o frecvenţă de eşantionare de cel puţin 2 f max .
f s  2  f max
Notă: Frecvenţa fN este numită Nyquist, iar condiţia anterioară f s  fN dacă nu este respectată apare
fenomenul de aliasing (adică repliere a spectrelor), care are ca efect “falsificarea” informaţiei.
Exemple
Ex.3.1. Fie un semnal continuu având componente de frecvenţă maximă f max . Modulul
transformatei Fourier este reprezentat schematic în figura 3.1, unde 1  2f1 , ( f1  f max ).

|X ( 
)|

 1 0 1 
Fig.3.1 Modulul transformatei Fourier pentru un semnal continuu

Este cunoscut faptul că acesta este o funcţie pară în raport cu originea. Fie T lungimea (perioada)
semnalului şi fie o eşantionare a sa cu o frecvenţă f s  2 f max . Numărul de puncte pe perioadă va fi
N şi evident: f s  N / T .
Se poate defini o transformată Fourier a semnalului eşantionat, funcţie continuă de . Ea nu este
altceva decât înfăşurătoarea punctelor date de transformata Fourier discretă definită anterior, care
este proporţională cu spectrul semnalului continuu. Aceasta din urmă se repetă periodic pentru k >N.
Aceasta înseamnă că şi înfăşurătoarea ei se repetă întocmai, cu o perioadă dată de ωs  2πf s , fapt
remarcat în figura 3.2.
|X ( )|

-  -  es  - es - 1 1   1+ es  + es


1 1 1
- es es
0
Fig. 3.2 Modulul transformatei Fourier a semnalului din figura 3.1 pentru o frecvenţă de eşantionare mai mare de
două ori frecvenţa f max
Se observă că fs >2 f max , înseamnă că spectrele nu se intersectează.

O altă regulă de care trebuie să se ţină seamă este evitarea fenomenului de aliasing. Dacă pentru
semnalul anterior nu este respectată condiţia cerută de teorema lui Shannon, se observă că pentru
fs = 2 f max spectrele se repetă fără pauză între ele, iar pentru fs < 2 f max ele se suprapun. In acest caz,
ceea ce se obţine în urma calculării transformatei Fourier discrete pentru semnalul astfel eşantionat,
sunt coeficienţii corespunzători sumei celor două spectre, deci un alt spectru, care nu mai este
proporţional cu cel al semnalului continuu. Acest fenomen este redat în figura 3.3.

41
|X ( )|

- 1-  es - 1 1+ es


1
- es 0 es
Fig. 3.3 Modulul transformatei Fourier a semnalului din figura 3.2 pentru o frecvenţă de eşantionare mai mică de
două ori frecvenţa f max

In situaţia particulară reprezentată în figura 3.3, această sumă (linia întreruptă) este chiar constantă.
In general, de acest fenomen vor fi afectate frecvenţele care intră în zona de suprapunere a
spectrelor.
Pentru a evita această situaţie rezultă că trebuie respectată teorema lui Shannon, deci aleasă
frecvenţa fs suficient de mare. Acest lucru nu este însă totdeauna posibil. Astfel, dacă semnalul are
şi componente de frecvenţă foarte mare, sau dacă există şi zgomot (care este de frecvenţă mare) nu
vom putea, sau nu vom dori creşterea excesivă a ratei de eşantionare.
Rezultă atunci că va trebui să filtrăm semnalul înainte de a-l eşantiona, eliminându-i toate
frecvenţele mai mari decât fs / 2. Această operaţie se numeşte filtrare anti-aliasing (anti-repliere).
Multe din convertoarele A / D moderne au incluse pe cip filtre analogice anti-aliasing, utilizatorul
fixând, în funcţie de aplicaţie, frecvenţa de tăiere.

Alegerea frecvenţei de eşantionare şi evitarea fenomenului de aliasing

Aplicaţiile au ca scop înţelegerea tehnicii de eşantionarea a semnalelor analogice, punandu-se în


evidenţă şi efectul de aliasing (repliere de spectre).
Exercitiul 3.2 In următoarea aplicaţie se consideră suma a două semnale sinusoidale. Rulaţi
aplicaţia pas cu pas.
>> T = [1:8192]/8192;
>> Z = cos(2*pi*440*T)+cos(2*pi*444*T); sound(Z)
Să se descrie sunetul produs prin rularea codului anterior. Poate fi considerat combinatia a doua
tonuri apropiate, sau u unui singur ton de amplitudine variată în timp?
>> plot(Z) şi plot(Z(1501:1700))
Vom intelege prin rularea următorului cod motivul pentru care acest sunet poate fi asociat cu o
sinusoidă de amplitudine variată. Pentru înţelegerea fenomenului se vor rula următoarele linii de
instrucţiuni Matlab:
>> T=[0:.01:.99]; f=2; x=cos(2*pi*f*T); plot(x) % frecventa 2Hz

>> T=[0:.01:.99]; f=98; X=cos(2*pi*f*T); plot(X) % frecventa 98Hz


Ambele frecvenţe 2 Hz, 98 Hz ale sinusoidelor au Ts=0.01→fs=100 furnizează acelaşi rezultat.
Este deci cazul fenomenului de aliasing. Adică este necesar să eşationăm mai rapid decât cu
frecvenţa de 100 Hz pentru a se face distincţie de la o frecvenţă de 2 Hz la una de 98 Hz.

42
Mdee -S.Paturca
Exercitiul 3.2.1 Să se genereze un semnal de 0.5s compus din suma a două sinusoide de frecvenţe
100 Hz şi 156 Hz cu amplitudinea de 1V. Se consideră o frecvenţă de eşantionare de 256 Hz.
Reprezentaţi semnalul sumă. Comentaţi efectul alegerii frecvenţei de eşantionare.

f = (1:128); f1 = 100; f2 = 156; Fs = 256;


y = sin(2*pi*f1/Fs*t)+sin(2*pi*f2/Fs*t);
plot(t/fe,y); xlabel('timp (s)');grid; ylabel('amplitudine (V)')

Exercitiul 3.3 Să se analizeze şi descompună un semnal dat in componente armonice. Se aplică transformata Fourier
discretă ( algoritmul fft).
% Program ce permite descompunere in componente armonice
close all;
clear all;
% Generarea semnalului
Fs = 10^5;
f = 50;
T = 1/f;
ti = 0;
Ts = 1/Fs;
tf = 4*T;
t = ti:Ts:tf;
f1 = f;
a1 = 300;
f2 = 3*f;
a2 = 40;
f3= 5*f;
a3 = 30;
a0 = 20; % amplitudinea componentei continua
x = a0+a1*sin(2*pi*f1*t)+a2*sin(2*pi*f2*t)+a3*sin(2*pi*f3*t);
figure
plot(t,x); xlabel('timpul [s]'); title('Semnal test'); grid

% Analiza Fourier
Nviz = 100 % determinarea sectiunii de grafic ce se vizualizeaza
L = length(x);
L2 = floor(L/2); %jumatate din lungimea semnalului, consecinta Teorema Shannon
Lviz = floor(L2/Nviz); % banda de frecventa de vizualizare (un fel de zoom pe
% valorile de la inceputul spectrului)
yf = fft(x); % calculul transformatei Fourier discreta,
% aplicand algoritmul fft;
yf1 = abs(yf)*2/L; % calculul puterii spectrale (numere reale!)
yf1(1) = yf1(1)/2; % daca comp.primul element in sir, aplic formula
freq = (0:L2-1)*Fs/L; % genereaza axa frecventelor
yf2 = yf1(1:L2); % restrictioneaza vectorul la componentele de
% frecventa pozitiva
freq_viz = freq(1:Lviz); % restrictioneaza vectorii la fereastra
% de zoom (frecvente mici)
yf_viz = yf2(1:Lviz);
figure
plot(freq, yf2); xlabel('frecventa [Hz]');
title('Analiza Fourier a semnalului x'); grid;
figure
plot(freq_viz, yf_viz); xlabel('frecventa [Hz]');
title('Analiza Fourier a semnalului x'); grid;
disp('Sectiunea de grafic ce se vizualizeaza');
Nviz = 100

43
Semnal test Analiza Fourier a semnalului x
400 300

300 250
200 200
100
150
0
100
-100
50
-200

-300 0
0 0.02 0.04 0.06 0.08 0 1 2 3 4 5
timpul [s] frecventa [Hz] 4
x 10
Analiza Fourier a semnalului x
300

250

200

150

100

50

0
0 100 200 300 400 500
frecventa [Hz]

Exercitiul 3.4. Să se genereze şi să se reprezinte grafic spectrul următoarele semnale utilizând DFT:

1 1
I. y t   sin2ft   sin2  3 f  t   * sin2  5 f  t  , unde f=50Hz;
3 5
a) Explicaţi ce se întamplă atunci cand alegeţi o frecvenţă de eşantionare fs=450Hz.
II. y t   sin 30t   sin 80t  .
Cerinţe comune ambelor semnale sunt următoarele:
a) Explicaţi cum poate fi pus în evidenţă fenomenul de aliasing (pentru a fi evitat).
b) Se alege o frecvenţă de eşantionare corectă (respectând teorema lui Shanon);

Soluţie :
Soluţia aplicaţiei este furnizată parţial, doar pentru punctul (I), rezolvând doar cazul în care se alege
o frecvenţa de eşantionare care să respecte teorema lui Shanon: fs  2 * f max_ semnal
% PROGRAM MATLAB
% Calculul amplitudinii transformatei Fourier rapide
Fs = 1000;
Ts = 1/Fs;
t = 0:Ts:(1-Ts); % genereaza vectorul timp
% Semnalul de prelucrat
y = sin(2*pi*50*t)+1/3*sin(2*pi*3*50*t)+1/5*sin(2*pi*5*50*t);
spc = fft(y); % calculeaza DFT a semnalului
m = abs(spc)./(length(y)/2); % amplitudinea semnalului
f= 0:(Fs-1); % vectorul frecventei
44
Mdee -S.Paturca
subplot(211), plot(t,y); xlabel('timp(s)'); ylabel('Semnalul x(t)');
title('Semnalul achizitionat in domeniul timp'); grid
subplot(212), plot(f,m); xlabel('frecventa(Hz)');ylabel('Amplitudinea semnalului');
title('Amplitudine semnal calculata cu functia fft'); grid

Ex.3.5 Se va genera, folosind func ţ ia gensin(), un semnal sinusoidal cu faza egal ă cu - 900 ş i
frecvenţa de 50 Hz, iar frecvenţa de eşantionare va fi de 1000 Hz. Să se explice ce se întâmplă dacă
frecven ţ a de e ş antionare va fi de 100 Hz (adic ă dublul semnalului armonic)? Aplicţia permite o
facilă înţelegere a eşantionării prin determinarea efectului acesteia asupra unui semnal armonic.
Pentru a afla răspunsul la întrebarea formulată prin aplicaţie se consideră o frecvenţă de eşantionare
mai scăzută împărţind 1000 Hz la 100 Hz, adică 10:
>> …………………………………………………………
>> % Se simulaza o frecvenţă de 100 Hz impartind 1000 / 100
>> % si se obtin astfel 10 puncte
>> s1 = s(1:1000/100:length(s));
>> t1 = t(1:1000/100:length(t));
Se compară semnalele original şi eşantionat
>> clf
>> plot(t,s)
>> hold on
>> %reprezentarea continua
>> plot(t1,s1,'b')
>> plot(t1,s1,'bo')
>> title('FrecEs = 2*f')
Cerinţă: Se observă prin comparea rezultatele că semnalul eşantionat este reprezentat greşit?
Se testează în continuare cazul în care frecven ţ a de e ş antionare este mai mică , spre exemplu de
60Hz:
>> …………………………………………
Exemplificarea unor rezultate posibile este prezentată în figurile următoare:

Semnal neeşantionat de frecvenţă f Semnalul eşantionat cu o frecvenţă egală cu f

Semnalul eşantionat cu o frecvenţă mai mică decât f

45
Cerinţe: Explicaţi ce se observă din analiza rezltatelor obţinute în reprezentarea grafică? Se poate
discuta despre apariţia fenomenului de aliere? Cât se pare că ar fi perioada semnalului şi frecvenţa?
(T = 0.1 sec. şi f = 1/ 0.1 = 10 Hz ?). Ce concluzie se poate trage?

Ex.3.6. Fie următorul set de valori măsurate:

a) să se găsească expresia semnalului continuu din care au rezultat


 9   7 
b) să se eşantioneze cu fs = 1 semnalul sin  2 t  şi  sin  2 t  . Să se explice cele constatate.
 8   8 
% PROGRAM MATLAB
t = 0:0.05:10;
x2c = sin(2*pi*9/8*t);
td = 0:1:10;
x1d = sin(2*pi*1/8*td); x1c = sin(2*pi*1/8*t);
plot(td,x1d,'*'); hold on
plot(t,x1c,'r'); plot(t,x2c,'b'); hold off

 1 
a) Este un sinus cu perioada 8, deci de frecvenţă 1 8 . Expresia este: y  sin  2 t  . Trasându-i
 8 
graficul se poate vedea că trece prin punctele cerute.
 9 
b) pentru sin  2 t  eşantionat cu fs = 1 se obţin exact aceleaşi puncte:
 8 

De asemenea pentru -sin (2 7/8 t) = sin (-2 7/8 t):

Rezultă că aceleaşi puncte obţinute prin eşantionare (deci acelaşi semnal discret) pot corespunde
unui număr infinit de semnale sinusoidale continue, ale căror frecvenţe respectă relaţia:
46
Mdee -S.Paturca
f  f b  kf es , k N ,
unde: fes frecvenţa de eşantionare,
fb frecvenţă oarecare ce satisface această relaţie
Adică:   b  kes . Deci faptul că magnitudinea spectrului unui semnal pentru o pulsaţie b
este suma magnitudinelor pentru   b  kes se datorează fenomenului de mai sus, şi anume
punctele obţinute prin eşantionarea semnalului sinusoidal de b pot descrie la fel de bine orice
sinusoidă de forma   b  kes .

Analiza spectrală
Ferestre Blackman
In modulul Matlab Signal Processing Toolbox, o fereastră Blackman cu lungime specificată (ca
exemplu ), poate fi reprezentată cu uşurinţă:
M = 64;
w = blackman(M);
De asemenea, multe alte tipuri de ferestre pot fi reprezentate, inclusive hamming, hanning, and bartlett.
In Matlab-ul de bază care nu dispune de modulul Signal Processing Toolbox, fereastra Blackman
poate fi uşor calculată din definiția matematic a acesteia:
w = .42 - .5*cos(2*pi*(0:M-1)/(M-1)) ...
+ .08*cos(4*pi*(0:M-1)/(M-1));

In figura 8.5 este prezentată o fereastră Blackman, şi se afişează spectrul semnalului reprezentat pe
scală liniară şi în dB. În figura 8.5c se reprezintă axa de frecvenţă fizică, în care jumătatea
superioară a numerelor FFT sunt interpretate ca frecvenţe negative.
Exercitiul 3.7. Fişierul Matlab este prezentat în continuare:
M = 64;
w = blackman(M);
figure(1);
subplot(3,1,1); plot(w,'*'); title('Fereastr? Blackman');
xlabel('Timp (esantioane)'); ylabel('Amplitudne'); text(-8,1,'a)');

% Afiseaza fereastra transformata:


zpf = 8; % factorul zero-padding
xw = [w',zeros(1,(zpf-1)*M)]; % fereastra zero-padded
Xw = fft(xw); % Transforamarea ferestrei Blackman
spec = 20*log10(abs(Xw)); % Ampltudinea spectrala in dB
spec = spec - max(spec); % normalizare la 0 dB maxim
nfft = zpf*M;
spec = max(spec,-100*ones(1,nfft)); % clip to -100 dB
fni = [0:1.0/nfft:1-1.0/nfft]; % Axa frecventelor normalizata
subplot(3,1,2); plot(fni,spec,'-'); axis([0,1,-100,10]);
xlabel('Frecventa normalizata (cicli/esantion))');
ylabel('Amplitudinea (dB)'); grid; text(-.12,20,'b)');

% Reafiseaza numere cu frecven?e superioare <0:


nh = nfft/2;
47
specnf = [spec(nh+1:nfft),spec(1:nh)];
fninf = fni - 0.5;
subplot(3,1,3);
plot(fninf,specnf,'-'); axis([-0.5,0.5,-100,10]); grid;
xlabel('Frecventa normalizata (cicli/esantion))');
ylabel('Amplitudinea (dB)');
text(-.62,20,'c)');
cmd = ['print -deps ', '../eps/blackman.eps'];
% disp(cmd); eval(cmd);
% disp 'pauza pentru RETURN (verifica afisarea). . .'; paus

Fereastrã Blackman
a) 1
Amplitudne

0.5

0
0 10 20 30 40 50 60 70
Timp (esantioane)
b)
Amplitudinea (dB)

-50

-100
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normalizata (cicli/esantion))
c)
Amplitudinea (dB)

-50

-100
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
Frecventa normalizata (cicli/esantion))

Figure 8.5: Fereastra Blackman : a) afişarea ferestrei în domeniul timp, b) amplitudinea spectrului in dB afisaj al
frecvenţelelor normalizate [0, 1), şi c) afişaj între [-0.5, 0.5).

Fereastră Hann
Fereastră Hann pentru un semnal sinusoidal complex

Exercitiul 3.8. Fişierul Matlab util pentru sinteza şi afişarea ferestrei Hann este prezentat in
continuare:
% Analiza parametrilor:
M = 31; % lungime ferestra
N = 64; % lungime FFT (factor zero padding aproape de 2)

% Parametri semnal:
wxT = 2*pi/4; % Frecventa semnalului sinusoidal (rad/esant.)
A = 1; % Amplitudinea semnalului sinusoidal
phix = 0; % Faza semnalului sinusoidal

% Determina semnalul x:
n = [0:N-1]; % indicii de timp pentru semnal
x = A * exp(j*wxT*n+phix); % semnalul sinusoidal complex [1,j,-1,-j...]
48
Mdee -S.Paturca
% Calculeaza fereastra Hann:
nm = [0:M-1]; % indicii de timp pentru fereastra calculata
% Fereastra Hann = cosinus “ridicat", normalizare (1/M)
% alege un varf al amplitudinii spectrale al 1/2:
w = (1/M) * (cos((pi/M)*(nm-(M-1)/2))).^2;

wzp = [w,zeros(1,N-M)]; % zero-pad in afara semnalului x


xw = x .* wzp; % aplica fereastra w pentru semnalul x

figure(1);
subplot(1,1,1);

% Afiseaza componenta real pentru semnalul ferestruit si pentru fereastra Hann


plot(n,wzp,'-k'); hold on; plot(n,real(xw),'*k'); hold off;
title(['Fereastra Hann si ferestruire, Aplicarea procedeului Zero-Padding, ',...
'Semnal sinusoidal (componeta reala)']);
xlabel('Timp (esantioane)'); ylabel('Amplitudine');

Rezultatul aplicării ferestrei Hann este prezentat în figura 8.7.


Fereastra Hann si ferestruire, Aplicarea procedeului Zero-Padding,
Semnal sinusoidal (componeta reala)
0.04

0.03

0.02

0.01
Amplitudine

-0.01

-0.02

-0.03

-0.04
0 10 20 30 40 50 60 70
Timp (esantioane)

Fig. 8.7: Fereastra Hann de lungime 31. Afişarea părţii reale a semnalului sinusoidal. Semnalul eşantionat este afişat
folosind marcaje `*' fără linie continuă printer acestea.

Exercitiul 3.9. Se calculează DFT pentru o fereastră Hann a unui semnal sinusoidal si se va urmări
reprezentarea spectrului. Se aplica procedeul zero padding.
% Calculeaza spectrul si formele alternative ale acestuia:
Xw = fft(xw); % calcul FFT pentru datele ferestruite
fn = [0:1.0/N:1-1.0/N]; % axa frecventelor normalizata
spec = 20*log10(abs(Xw)); % apmitudinea spectrului in dB
49
% Deoarece zerourile pot merge la minus infinit, decupaj la -100 dB:
spec = max(spec,-100*ones(1,length(spec)));
phs = angle(Xw); % Faza spectrului in radiani
phsu = unwrap(phs);

% Calcul variante cu interpolare pentru comparare:


Nzp = 16; % factor Zero-padding
Nfft = N*Nzp; % creste dimensiunea FFT
xwi = [xw,zeros(1,Nfft-N)]; % nou tampon zero-padded FFT
Xwi = fft(xwi); % Calculeaza spectrul
fni = [0:1.0/Nfft:1.0-1.0/Nfft]; % axa frecventelor normalizata
speci = 20*log10(abs(Xwi)); % interpoleaza ampl. spectrului (dB)
speci = max(speci,-100*ones(1,length(speci)));
phsi = angle(Xwi); % interpoleaza faza
phsiu = unwrap(phsi);

figure(1); subplot(2,1,1);

plot(fn,abs(Xw),'*k'); hold on;


plot(fni,abs(Xwi),'-k'); hold off;
title('Amplitudine spectru');
xlabel('Frecventa normalizata (cicli/esant))');
ylabel('Amplitudine (lineara)');

subplot(2,1,2);

% Afiseaza datele calulate anterior pe o scala in dB


plot(fn,spec,'*k'); hold on; plot(fni,speci,'-k'); hold off;
title('Amplitudine spectru (dB)');
xlabel('Frecventa normalizata (cicli/esant.))');
ylabel('Amplitudine (dB)');

cmd = ['print -deps ', 'specmag.eps']; disp(cmd); eval(cmd);


disp 'pauza pentru RETURN (verifica afisaj). . .'; pause

figure(1);
subplot(2,1,1);
plot(fn,phs,'*k'); hold on; plot(fni,phsi,'-k'); hold off;
title('Sectrul fazei');
xlabel('Frecventa normalizata (cicli/esant.))');
ylabel('faza (rad.)'); grid;
subplot(2,1,2);
plot(fn,phsu,'*k'); hold on; plot(fni,phsiu,'-k'); hold off;
xlabel('Frecventa normalizata (cicli/esant.)))');
ylabel('faza (rad)'); grid;
%cmd = ['print -deps ', 'specphs.eps']; disp(cmd); eval(cmd);

Nu apar componete de negative pentru frecvenţă, s-a analizat cazul unui semnal sinusoidal complex.

50
Mdee -S.Paturca
Amplitudine spectru
0.8

Amplitudine (lineara)
0.6

0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normalizata (cicli/esant))
Amplitudine spectru (dB)
0
Amplitudine (dB)

-50

-100
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normalizata (cicli/esant.))

Fig. 8.8: Amplitudinea spectrului pe scala lineară (sus) şi în dB (jos) .

Influenţa tipului ferestrei asupra spectrului calculat cu TFD


Exercitiul 3.10. Să se genereze o sinusoidă de amplitudine 1V, de frecvenţă 50 Hz, eşantionată la
256 Hz, în 32 de puncte. Să se calculeze TFD în 1024 de puncte considerând succesiv o fereastră
dreptunghiulară, apoi triunghiulară, Hamming, Hanning şi Blackman.

t = (1:32); f1 = 50; Fs = 256; Nfft = 1024 ;


y1 = sin(2*pi*f1/Fs*t);
y_dreptunghiulara = abs(fftshift((fft(y1.*boxcar(32)',Nfft))));
y_trunghiulara = abs(fftshift((fft(y1.*triang(32)',Nfft))));
y_hamming = abs(fftshift((fft(y1.*hamming(32)',Nfft))));
y_haningn = abs(fftshift((fft(y1.*hanning(32)',Nfft))));
y_blackman = abs(fftshift((fft(y1.*blackman(32)',Nfft))));
f = [-Fs/2:Fs/Nfft:(Fs/2-Fs/Nfft)];
subplot(511); semilogy(f(513:1024),y_dreptunghiulara(513:1024));
axis([0 128 1e-3 100]);grid;
legend('fereastra dreptunghiulara')
subplot(512);semilogy(f(513:1024),y_trunghiulara(513:1024));
axis([0 128 1e-3 100]);grid;
legend('fereastra triunghiulara')
subplot(513);semilogy(f(513:1024),y_hamming(513:1024));
grid; axis([0 128 1e-4 100]);
legend('fereastra Hamming')
subplot(514);semilogy(f(513:1024),y_haningn(513:1024));
axis([0 128 1e-3 100]);grid;
legend('fereastra Hanning')
subplot(515);semilogy(f(513:1024),y_blackman(513:1024));
axis([0 128 1e-3 100]);grid;
legend('fereastra Blackman')
ylabel('amplitudine spectrala'); xlabel('frecventa (Hz)')

51
0
10 fereastra dreptunghiulara

0 20 40 60 80 100 120
0
10 fereastra triunghiulara
amplitudine spectrala

0 20 40 60 80 100 120
0
10 fereastra Hamming

0 20 40 60 80 100 120
0
10 fereastra Hanning

0 20 40 60 80 100 120
0 fereastra Blackman
10

0 20 40 60 80 100 120
frecventa (Hz)

Aplicaţii

1.Se vor rula în Matlab toate aplicaţiile descrise în breviarul teoretic. Se va urmări şi înţelege
execuţia lor.

2 Să se genereze şi să se reprezinte grafic secvenţele numerice pentru următoare semnale:


 0,9[n  5] , pentru 1  n  20
 22 n
 lg[2n]
 u[n]  u[n  4] , pentru 0  n  10 (8 perioade)
 0,5  0,5[n  1]  u[n  3]  u[n  6] , pentru 0 ≤ n ≤ 8 (4 perioade)
 sinusoidal cu frecvenţa de 3.2kHz eşantionat la 10kHz cu o fază iniţială de π/2.

3. O problemă în reprezentarea transformatei Fourier a unui semnal este dată de simulare.


În realizarea simulării una din mărimile de intrare este
pasul de simulare dt. Se va alege ca frecvenţă de
simulare o frecvenţă de cel putin 5 ori mai mare decât
frecventa de eşantionare (pentru aplicaţii f_sim se va
lua de 10 ori mai mare decât Fs).
Să se prelucreze un semnal analogic de forma y t   cos2ft    , unde 0 t T.
Faza se alege aleatorie. Să se genereze eşantioanele la frecvenţa f_sim=80KHz, în intervalul de
lungime T. Să se aleagă T astfel încât să se obţină aproximativ 900-1000 eşantioane ale semnalului
analogic simulat. Se cere:
b) Să se vizualizeze semnalul cu funcţia plot, astfel încât eşantioanele să fie unite.
c) Să se reprezinte transformata Fourier discretă a acestui semnal cu funcţia fft.

52
Mdee -S.Paturca
4. Se consideră un semnal sinusoidal yn  sin 2nf / Fs   , eşantionat cu frecvenţa Fs=8 KHz.
Se cere:
a) să se reprezinte cu funcţia stem semnalul sinusoidal eşantionat. Frecvenţa semnalului sinusoidal
este f=300 Hz si eşantioanele sunt luate de la 0 ms la 10 ms. Faza semnalului este arbitrar aleasă.
b) să se reprezinte semnalul discret modificând frecvenţa semnalului de la 100 Hz la 475 Hz în paşi
de 125 Hz. Se va utiliza funcţia subplot pentru reprezentare. Să se comenteze rezultatul
vizualizărilor.
c) să se repete punctul b) variind frecvenţa semnalului de la 7525 la 7900 Hz în pasi de 125 Hz. Să
se comenteze fenomenul prin comparatie cu punctul c).
d) să se refacă punctul b) variind frecvenţa semnalului de la 32100 la 32475 în pasi de 125 Hz.
Încercaţi să anticipaţi forma semnalului în timp ce măriţi sau micşoraţi frecvenţa sinusoidei.
e) să se reprezinte semnalul discret cu funcţia plot. În acest caz punctele sunt conectate cu linii,
astfel încât alura sinusoidală este evidentă. Conectarea punctelor cu linii este o formă de
reconstructie a semnalului care transformă semnalul discret în semnal continuu. Aceasta nu este
forma ideală dată de termenii eşantionării, dar, în multe situatii poate fi considerată satisfăcătoare.

5. Să se genereze şi să se reprezinte în timp următoarele semnale:


 semnal sinusoidal cu frecvenţa de 8kHz eşantionat la 30kHz;
 semnalul format din suma a două semnale sinusoidale de 2kHz, respectiv 3kHz eşantionate
la 13kHz;
 semnal dreptunghiular cu perioada de 125µs, eşantionat la 15kHz;

6. Să se reprezinte grafic următoarele semnale discrete:


xn  e  a  n , n  0, 99, a  0.1
hn  cos2fn , n  0, 99, f  1/ 4
yn  xn  hn, n  0, 99
Să se calculeze şi reprezinte spectrul pentru secvenţele xn şi yn  folosind transformata Fourier
Discrete.

7. Să se reprezinte grafic 1024 eşantioane ale unui semnal alcătuit din 2 sinusoide (una cu frecvenţă
de 50 Hz, defazajul 0 şi amplitudinea de 0.5 V, iar cealaltă având frecvenţa de 230 Hz, defazajul de
π/3 și amplitudinea de 0.2 V) folosind o frecvenţă de eşantionare de 8 kHz.

8. Să se genereze un semnal de 0.5s compus din suma a două sinusoide de frecvenţe 100Hz şi
156Hz cu amplitudinea de 1V. Se consideră o frecvenţă de eşantionare de 256Hz. Reprezentaţi
semnalul sumă. Comentaţi rezultatul.

9. Să se genereze şi să se reprezinte grafic spectrul unui semnal utilizând DFT pentru următoarele
semnale:

a) yt   sin 2ft   sin 2f * 7t 


b) y t   sin 2ft   sin 2f * 3t   3 * sin 2f * 5t  , pentru ambele semnale frecvenţă f=50Hz
53
c) y t   square2ft  , unde f= 10Hz
 1
d) y t   sin 0.4t   0.8 sin  0.64t  
 6
 
  
3

y t   2 cos 6.4 10 3 t  4 cos 3.2 10 3 t    0.8 cos 8 10 3 t  
2
 
Se cere:
 să se determine perioada semnalului
 să se aleagă o frecvenţă de eşantionare corectă si şă se reprezinte semnalul eşantionat.
 să se aleagă o frecvenţă de eşantionare care să reflecte fenomenul de aliasing.
10. Să se genereze şi să se reprezinte în timp şi frecvenţă următoarele
semnale:
• semnal sinusoidal cu frecvenla 8kHz eşantionat la 30kHz;
• semnalul format din suma a două semnale sinusoidale de 2kHz, respectiv 3kHz
eşantionate la 13kHz;
• semnal dreptunghiular cu perioada de 125µs, eşantionat la 15kHz;
   
11. Se consideră semnalul: y t   3  2 cos kt    3 cos 2400t   . Se cere să se determine k
 3  3
astfel încât spectrul semnalului să conţină armonicele 3 şi 4. Pentru k determinat să se calculeze
perioada semnalului şi să se reprezinte spectrul acestuia.

54
Mdee -S.Paturca

S-ar putea să vă placă și