Documente Academic
Documente Profesional
Documente Cultură
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.
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: xt 2 sin2 5 t 0.02 2 sin 10t
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
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
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.
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.
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.
Overloaded methods:
distributed/sin
sym/sin
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.
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 2ft , 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)
>> Nr_elem_N = length(N) % functia length returneaza numarul de elemente ale vectorului N
>> 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;
>> clear
>> t = 0:0.01:1; % defineste un vector de la 0 la 1 cu pasul de 0.01
9
>> xlabel('timp continuu[s]'); % afiseaza textul care apare scris pe axa x
Î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.
t [s ] t [s ]
10
Mdee -S.Paturca
Semnal treaptă
(a )
(b )
t t
0
t [s ] 0
t [s ]
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
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
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
n = 0:1:10; 5
x = n;
stem(n,x)
0
0 2 4 6 8 10
timp discret
11
1
amplitudine
n = 0:0.25:10; 0.5
stem(sinc(n)),grid 0
-0.5
0 10 20 30 40
timp discret
Pentru ca el să fie periodic trebuie ca să fie ales astfel încât N 2k . 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;
Î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 xt , 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 2fnTs A cos 2 n =>
s
Fs
xn 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: xn A cos 2fn .
-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]
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
16
Mdee -S.Paturca
semnal dreptunghiular: r n 5 ;
semnal sinusoidal cu frecvenţa 1 KHz eşantionat la 10 KHz, sin 21000 / 10000n 4 ;
semnal sinus cardinal: sinc[n]
semnal aleator cu repartiţie normală cu media 1.5 şi dispersia 0.25
semnal putere: 2n / 2
semnal logaritm natural: lnn
semnal exponenţial: en
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: xt sin 2ft , 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
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 xn cos0 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 xn 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
Exerciţiul 10. Să se reprezinte grafic următorul semnal în timp discret: xn e 0.1 j 0.3n , 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 * sin2ft 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
meanx 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
meanx 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
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
-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ă:
>>……………………………………
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.
-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
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
% -----------------------------------------------------------------------------------------------------------------------------
% 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);
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
% -----------------------------------------------------------------------------------------------------------------------------
% 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');
y t 0.2 1 cost 0.5 cos 2t
2
A0 A1 cost 1 A2 cos2t 2
unde A0 0.2 şi armonicile de frecvenţe 20 şi 2 40 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
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')
50 50
0 0
-0.5 0 0.5 -0.5 0 0.5
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
38
Mdee -S.Paturca
stem(fn,magX,'ok'); grid on;
xlabel('Frecventa normalizata (cicli/esantion))'); ylabel('Amplitudine (lineara)');
text(-.11,40,'b)');
-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))
Exerciţiul 2.8. Să se genereze următorul semnal yn 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;
|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 ( )|
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 ( )|
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.
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.
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 sin2ft sin2 3 f t * sin2 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 30t sin 80t .
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:
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?
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
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 kes . Deci faptul că magnitudinea spectrului unui semnal pentru o pulsaţie b
este suma magnitudinelor pentru b kes 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 kes .
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)');
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;
figure(1);
subplot(1,1,1);
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);
figure(1); subplot(2,1,1);
subplot(2,1,2);
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.))
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.
52
Mdee -S.Paturca
4. Se consideră un semnal sinusoidal yn sin 2nf / 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.
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:
54
Mdee -S.Paturca