Documente Academic
Documente Profesional
Documente Cultură
LUCRAREA 1
SEMNALE ÎN TIMP DISCRET
x[n] , N1 n N 2 (2.1)
În Octave aceste secvențe se pot defini ca vectori linie sau coloană, având
elemente reale sau complexe. O primă limitare apare din faptul că acești vectori sunt
de lungime finită în timp ce în problemele de prelucrarea numerică a semnalelor se
poate lucra cu secvențe de lungime infinită.
• Impulsul unitate
Din punct de vedere matematic este definit astfel:
1 , n = 0
[ n] = (2.2)
0 , n 0
Utilizând proprietatea de deplasare în timp se poate scrie că
1 , n = n0
[n − n0 ] = (2.3)
0 , n n0
1
1. SEMNALE ÎN TIMP DISCRET
L = ls-li+1;
y = zeros(1,L);
y(k-li+1) = 1;
n = li:ls;
endfunction
Observații:
• Regulile pentru definirea corectă a funcțiilor Octave sunt enumerate aici:
https://octave.org/doc/v4.0.0/Defining-Functions.html
• Numele funcției va fi și numele fișierului în care se va salva funcția. Nu se vor
folosi nume identice cu cele deja existente în Octave!
• Funcțiile se apelează din alte fișiere Octave aflate în același director curent!
Funcțiile NU se execută ca un script obișnuit (butonul Run)!
Exemple:
2
1. SEMNALE ÎN TIMP DISCRET
• Treapta unitate
Din punct de vedere matematic, treapta unitate este definită astfel:
1 , n 0
u[n] = (2.4)
0 , n 0
Utilizând proprietatea de deplasare în timp se poate scrie că
1 , n n0
u[n − n0 ] = (2.5)
0 , n n0
Se va crea de asemenea o funcție Octave pentru definirea secvențelor
discrete de tip treaptă unitate, având un suport temporal finit:
3
1. SEMNALE ÎN TIMP DISCRET
L = ls-li+1;
y = zeros(1,L);
y(k-li+1:L) = 1;
n = li:ls;
endfunction
Exemple:
Să se definească și să se reprezinte grafic secvențele:
1. 𝑦1 [𝑛] = 𝑢[𝑛]
2. 𝑦2 [𝑛] = 0.7 ∙ (𝑢[𝑛 + 3] − 𝑢[𝑛 − 3]), pentru −5 ≤ 𝑛 ≤ 10.
[y1,n] = treapta(-5,10,0);
figure, stem(n,y1), grid
[y21,n] = treapta(-5,10,-3);
[y22,n] = treapta(-5,10,3);
y2 = 0.7*(y21-y22);
figure, stem(n,y2), grid
E1. Exerciții:
Să se definească și să se reprezinte grafic următoarele secvențe discrete:
1. 𝑥1 [𝑛] = 𝛿[𝑛 − 1] + 𝑢[𝑛 − 5] + 𝛿[𝑛 + 2] − 2 ∙ 𝛿[𝑛 − 9],
pentru −10 ≤ 𝑛 ≤ 20
1 𝑛 1 𝑛
2. 𝑥2 [𝑛] = ( ) − (− ) , pentru 0 ≤ 𝑛 ≤ 10
2 2
𝑛𝜋 𝑛𝜋
3. 𝑥3 [𝑛] = ln |cos ( ) − sin ( )|, pentru −20 ≤ 𝑛 ≤ 20
15 15
𝑛𝜋
4. 𝑥4 [𝑛] = (−1)𝑛 cos ( ), pentru 0 ≤ 𝑛 ≤ 10
15
𝑠(𝑛) = 𝑠𝑐 (𝑛𝑇𝑠 )
𝑠𝑐 (𝑡) = 𝐴0 ∙ sin(2𝜋 ∙ 𝐹0 ∙ 𝑡)
4
1. SEMNALE ÎN TIMP DISCRET
𝐹0
𝑠(𝑛) = 𝐴0 ∙ sin(2𝜋 ∙ 𝐹0 ∙ 𝑛 ∙ 𝑇𝑠 ) = 𝐴0 sin (2𝜋 𝑛)
𝐹𝑠
𝐹
Notând frecvența normată 𝑓0 = 0, respectiv pulsaţia normată 𝜔0 = 2𝜋𝑓0 =
𝐹𝑠
𝐹0
2𝜋 rezultă:
𝐹𝑠
𝑠(𝑛) = 𝐴0 sin(2𝜋 ∙ 𝑓0 ∙ 𝑛) = 𝐴0 sin(𝜔0 𝑛)
Exemple:
1. Să se reprezinte grafic cu funcția stem un semnal discret obținut prin eșantionarea
unui semnal sinusoidal de frecvență 300 Hz, de durată 10 milisecunde și
amplitudine 2. Frecvența de eșantionare Fs = 4kHz. Câte eșantioane are semnalul
discret?
F0 = 300; Fs = 4000;
Tmax = 10^(-2); % durata semnalului 10 ms
N = Tmax*Fs; % numar de esantioane N=10ms*4kHz
w0 = 2*pi*F0/Fs; % pulsatia normata
n = 0:N-1;
x = 2*sin(w0*n);
figure(1), stem(n,x), grid
F0 = 300; Fs = 4000;
Tmax = 10^(-2); % durata semnalului 10 ms
Ts = 1/Fs;
t = 0:Ts:Tmax-Ts;
xa = 2*sin(2*pi*F0*t);
figure(2), plot(t,xa,'-o'), xlabel('t[ms]'), grid
5
1. SEMNALE ÎN TIMP DISCRET
%xa = 2*sin(2*pi*F0*t);
figure(3),
subplot(121),plot(n,x,'-or','markersize',10)
subplot(122),plot(t,xa,'-*b','markersize', 15)
Sintaxa:
conv(x1,x2)
• returnează ca rezultat un vector de lungime egală cu lungimea vectorului x1 plus
lungimea vectorului x2 minus 1, ce reprezintă produsul de convoluție liniară al
celor două secvențe definite prin vectorii x1 și x2.
Exemplu:
Să se calculeze și să se reprezinte grafic produsul de convoluție liniară a secvențelor
x1[n] = u[n] − u[n − 5] ( 0 n 10 ) și x2 [n] = (0,9) n ( 0 n 20 ).
x1 = treapta(0,10,0)-treapta(0,10,5);
n = 0:20;
x2 = 0.9.^n;
6
1. SEMNALE ÎN TIMP DISCRET
x = conv(x1,x2);
subplot(2,2,1),stem(0:10,x1),title(’x1’),grid
subplot(2,2,2),stem(n,x2),title(’x2’),grid
subplot(2,1,2),stem(0:length(x)-1,x),title(’x’),grid
x1 x2
1 1
0.8 0.8
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 5 10 0 5 10 15 20
x
5
E2. Exercițiu:
0 5 10 15 20 25 30
F
unde este pulsația normată: . = 2
FS
F este frecvența nenormată (exprimată în Hz) iar FS este frecvența de eșantionare.
F
Similar, frecvența normată este: f = .
FS
Funcția X (e j ) este periodică de perioadă 2 , deci este suficient să
cunoaștem comportarea sa în intervalul [− , ) (interval de bază). Datorită faptului
că această funcție este continuă, variabila putând lua o infinitate de valori, nu este
posibilă o implementare pe o mașină de calcul.
7
1. SEMNALE ÎN TIMP DISCRET
k
k = 2 , cu k = 0,1,, N − 1 .
N
Astfel, transformata Fourier discretă a unei secvențe x[n] este dată de relația:
2
−j
X [k ] = x[n]e
kn
N
cu k = 0,1,, N − 1 (2.9)
n
X a ( j )
S S
− S 2max
2 2 Ω[rad/s]
-Ωmax 0 Ωmax F[Hz]
-Fmax 0 Fmax FS/2 FS
=
X ( e j )
FS
F
f =
FS
-π -ωmax 0 ωmax π 2π f
-0.5 -fmax 0 fmax 0.5 1
k
k = 0,..., N − 1 k = 2
X (k ) N
k
0 123 N/2 N-1
8
1. SEMNALE ÎN TIMP DISCRET
Sintaxe:
y = fft(x)
• dacă x este un vector se returnează un vector y de aceeași dimensiune cu vectorul
x ce conține valorile transformatei Fourier discrete aplicată elementelor vectorului
x; lungimea transformatei Fourier (numărul de puncte N în care se calculează
transformata) este egală în acest caz cu lungimea vectorului x.
• dacă x este o matrice se va returna matricea y de aceeași dimensiune cu matricea
x; coloana i din matricea y va conține valorile transformatei Fourier discrete
aplicată elementelor coloanei i din matricea x.
y = fft(x,N)
• aceleași considerente ca în sintaxa precedentă cu deosebirea că în acest caz se
specifică și numărul de puncte N în care se calculează transformata.
Exemple:
3. Să se calculeze transformata Fourier discretă a secvenței:
x1[n] = u[n] − u[n − 10] , pentru 0 n 20
Să se reprezinte grafic partea reală, partea imaginară, modulul și faza transformatei
Fourier discrete calculate.
x1=treapta(0,20,0)-treapta(0,20,10);
X=fft(x1);
figure(1),plot(X)
// se obține o reprezentare grafică fără semnificație, deoarece X este un vector cu valori complexe.
Octave nu va semnala acest lucru printr-o eroare, întrucât funcția plot poate primi un argument
complex și pentru acesta va afișa grafic partea imaginară în funcție de partea reală.
figure(1),subplot(121),plot(abs(X)),grid, title('|X| in
21 puncte')
9
1. SEMNALE ÎN TIMP DISCRET
// calculul transformatei Fourier discrete s-a efectuat într-un număr de puncte egal cu lungimea
vectorului x1 (vezi help fft în Command Window); pentru o mai bună reprezentare vom
efectua calculul într-un număr mai mare de puncte (N = 512)
X1=fft(x1,512);
subplot(122),plot(abs(X1)),grid, title('|X1| in 512
puncte')
10
1. SEMNALE ÎN TIMP DISCRET
11
1. SEMNALE ÎN TIMP DISCRET
Observații:
• Reprezentarea spectrelor a fost făcută în funcție de pulsația normată
[− , ) .
• Valorile calculate în X1=fft(x1,512) reprezintă spectrul calculat în
k
k = 2 , unde 𝑘 = 0,1, … , 𝑁 − 1. Astfel, numărul de puncte N în care se
N
calculează fft determină rezoluția spectrală. Cu cât N este mai mare, cu atât
aproximarea spectrului de frecvențe continue X (e j ) este mai bună.
• Dacă lungimea secvenței x[n] este mai mică decât N, secvența se completează
cu zerouri, spectrul calculat reprezentând convoluția între spectrul secvenței
de lungime infinită și spectrul funcției poartă de lungime egală cu a secvenței
date.
• Spectrul calculat cu funcția fft poate fi reprezentat și în funcție de
o indicele TFD: 𝑘 = 0,1, … , 𝑁 − 1.
𝐹 𝜔
o frecvența normată: 𝑓 = = , 𝑓 ∈ [−0.5 , 0.5).
𝐹𝑆 2𝜋
f = -0.5:1/N:0.5-1/N;
o frecvența nenormată 𝐹 = 𝑓 ∙ 𝐹𝑆 [𝐻𝑧] , 𝐹 ∈ [− 𝐹𝑆 ⁄2 , 𝐹𝑆 ⁄2).
Exemple:
4. a) Să se genereze secvența discretă 𝑠[𝑛] obținută prin eșantionarea cu= frecvența
de eșantionare 𝐹𝑠 = 8𝑘𝐻𝑧 a semnalului 𝑠(𝑡) = sin(2𝜋𝐹0 𝑡) de frecvenţă 𝐹0 =
500𝐻𝑧 şi durată 𝑡𝑀𝐴𝑋 = 40𝑚𝑠. Câte eşantioane are secvenţa discretă?
Fs = 8000; F0 = 500; t_max = 0.04;
t = 0:1/Fs:t_max-1/Fs;
s = sin(2*pi*F0*t);
12
1. SEMNALE ÎN TIMP DISCRET
N_fft = 256;
S = fft(s,N_ftt);
k = 0:N_fft-1;
figure(1),plot(k,abs(S))
𝑘1 𝑘2
13
1. SEMNALE ÎN TIMP DISCRET
14
1. SEMNALE ÎN TIMP DISCRET
figure(5),subplot(211),plot(f,fftshift(abs(S))),grid
subplot(212),plot(f,fftshift(angle(S))),grid
15
1. SEMNALE ÎN TIMP DISCRET
figure(6),subplot(211),plot(f,fftshift(real(S))),grid
subplot(212),plot(f,fftshift(imag(S))),grid
16
1. SEMNALE ÎN TIMP DISCRET
E3. Exercițiu
1. Pentru programul de la exemplul anterior modificați pe rând următorii parametri
și explicați schimbările apărute în reprezentarea spectrului semnalului.
a) Frecvența semnalului F0 = 200Hz .
b) Numărul de puncte al TFD N=1024 (pentru semnalul inițial cu F0 = 500Hz ).
17