Documente Academic
Documente Profesional
Documente Cultură
Lucrarea 4
43
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
44
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
Se bazează pe proprietatea:
TFD
yc [n ] = x[n ] ⊗ N h[n ] ←⎯⎯ → Yc [ k ] = X [ k ] H [ k ] , (4.21)
def N −1 2π k ⋅n
−j
unde X [ k ] = x[n]e
n =0
N
şi se defineşte ca fiind Transformata Fourier Discretă
45
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
După cum se poate observa din relaţiile (4.9) şi (4.10), pentru efectuarea directă
a convoluţiei ciclice între două secvenţe cu coeficienţi reali, sunt necesare N 2 înmulţiri
reale şi N ( N − 1) adunări reale.
Eficienţa metodei depinde de eficienţa algoritmului rapid pentru calculul TFD
şi TFDI utilizat în etapele 1° şi 3°. În cazul calculului convoluţiei cu ajutorul TFD vom
avea un număr de 8 N 2 + 4 N înmulţiri ( 2 × 2N 2 la pasul 1°, 4N la pasul 2° şi 2 × 2N 2 la
pasul 3°).
TFD se poate realiza şi utilizând algoritmi rapizi. Dacă N este de forma 2m ,
pentru calculul TFD în N puncte a unei secvenţe este nevoie de 2 N log 2 N înmulţiri
reale şi 3N log 2 N adunări reale. Vor fi deci necesare:
• 4 N log 2 N înmulţiri şi 6 N log 2 N adunări reale pentru realizarea transformatelor
directe ale lui x[n ] şi h[n ] ;
• N înmulţiri complexe, deci 4N înmulţiri şi 2N adunări reale pentru realizarea
produselor X [ k ] H [ k ] ;
• 2 N log 2 N înmulţiri şi 3N log 2 N adunări reale pentru realizarea transformatei
inverse TFDI.
În total, utilizând TFD rapidă, se vor efectua N (6log 2 N + 4) înmulţiri şi
N (9 log 2 N + 4) adunări reale.
De exemplu pentru N = 210 avem:
- 220 înmulţiri şi ≈ 220 adunări reale prin efectuarea directă a convoluţiei;
- 8 ⋅ 220 + 4 ⋅ 210 ≈ 223 înmulţiri reale prin utilizarea TFD;
- 210 (6 ⋅ 10 + 4) = 216 înmulţiri şi 210 (9 ⋅ 10 + 2) ≈ 216,5 adunări reale prin utilizarea
TFD Rapide.
în z = β i .
3° se calculează Y ( β i ) = X ( β i ) H ( βi ), i = 0, Lx + Lh − 2 .
4° se determină, prin interpolare Lagrange, polinomul:
46
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
Lx + Lh − 2 Lx + Lh − 2
z −βj Lx + Lh − 2
Y ( z) = i =0
Y ( βi ) ⋅ ∏
j =0, j ≠i βi − β j
= y [k ] z
k =0
k
unde produsul se face după toţi divizorii lui N ( d / N reprezintă toţi divizorii lui N
inclusiv 1 şi N).
Algoritmul Winograd cuprinde, principial, trei etape:
1°se calculează reziduurile polinoamelor X(z) şi H(z):
X ( k ) ( z ) = RM (k ) ( z ) [ X ( z )] = X ( z )mod M ( k ) ( z ), k = 0, K − 1
H ( k ) ( z ) = RM (k ) ( z ) [ H ( z ) ] = H ( z )mod M ( k ) ( z ), k = 0, K − 1
2°se calculează reziduurile polinomului Y(z):
Y ( k ) ( z ) = X ( z ) H ( z )mod M ( k ) ( z ) = RM (k ) ( z ) { X ( k ) ( z ) H ( k ) ( z )}, k = 0, K − 1
3°se calculează polinomul convoluţiei Y ( z ) din reziduurile sale Y ( k ) ( z ) , pe baza
teoremei chineze a resturilor:
K −1
Y ( z ) = Y ( k ) ( z )S ( k ) ( z ) mod M ( z )
k =0
unde S ( k ) ( z ) pot fi găsite tabelate pentru diverşi N (valorile coeficienţilor acestor
polinoame pot fi stocate într-o memorie de date).
Numărul minim de multiplicări necesare pentru a realiza o convoluţie ciclică de
ordinul N, este 2 N − D( N ) , unde D( N ) reprezintă numărul de divizori ai lui N.
5. Aplicaţii rezolvate
y = { y[0], y[1], y[2], y[3]} = { x[0]h[0], x[0]h[1] + x[1]h[0], x[1]h[1] + x[2]h[0], x[2]h[1]}
Folosind transformatele Z X ( z ) şi H ( z ) ale secvenţelor, rezultă:
47
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
%Program P4_1
clear;
x=[1 2 3]; h=[1 1];
disp('Convolutia liniara a secventelor x si h');
y=conv(x,h)
%Program P4_2
clear;
x=[1 2]; h=[1 3]; disp('iesirea calculata cu circonv');
yc=circonv(x,h,2) %(vezi circonv.m)
48
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
%Program P4_3
clear;
N=2; x=[1 2]; h=[1 3];
X=fft(x,N); H=fft(h,N);
Yc=X.*H; disp('iesirea calculata cu DFT=');
yc=ifft(Yc)
adică yc = {7,5} .
Observaţie. Dacă cele două secvenţe au lungimi mai mici decât numărul de puncte în
care trebuie calculată convoluţia circulară, N, secvenţele vector x şi h se completează
cu zerouri până la lungimea dorită.
49
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
%Program P4_4
clear;
x=[1 1]; h=[1 2 3];
disp('Corelatia liniara a secventelor x si h');
rxh=xcorr(x,h)
rhx=xcorr(h,x)
2
rdg′ = rxh′ [n ] = x ( k + n )( N ) h[k ] = x[n ]h[0] + x (1 + n )( N ) h[1] + x ( 2 + n )( N ) h[2] ,
k =0
pentru n = {0, 1, 2} sau
1
rgd′ = rhx′ [n ] = h ( k + n )( N ) x[k ] = h[n ]x[0] + h (1 + n )( N ) x[1] + h ( 2 + n )( N ) x[2] ,
k =0
pentru n = {0, 1, 2} , astfel că
rxh′ = {rxh′ [0], rxh′ [1], rxh′ [2]} , cu rxh′ [0] = x[0]h[0] + x[1]h[1] + x[2]h[2] ,
rxh′ [1] = x[1]h[0] + x[2]h[1] + x[0]h[2] , iar rxh′ [2] = x[2]h[0] + x[0]h[1] + x[1]h[2] şi
rhx′ = {rhx′ [0], rhx′ [1], rhx′ [2]} , cu rhx′ [0] = h[0] x[0] + h[1] x[1] + h[2]x[2] ,
rhx′ [1] = h[1] x[0] + h[2]x[1] + h[0] x[2] , iar rhx′ [2] = h[2]x[0] + h[1] x[1] + h[0] x[2] .
Se observă că se verifică relaţia rxh′ [n ] = rhx′ ( −n )( N ) = rhx′ [ N − n ] , adică
rxh′ [0] = rhx′ ( 3 − 0 )(3) = rhx′ [0] , rxh′ [1] = rhx′ ( 3 − 1)(3) = rhx′ [2] şi rxh′ [2] = rhx′ ( 3 − 2 ) (3) = rhx′ [1] .
50
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
51
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
unde
K
M ( z) = ∏ M (i ) ( z )
i =0
m ( z ) = M ( z ) M (i ) ( z )
(i )
{ yc [0], yc [1], yc [2], yc [3]} = {x[0], x[1], x[2], x[3]} ⊗4 {h[0], h[1], h[2], h[3]}
care este reprezentată polinomial prin:
Yc ( z ) = X ( z ) H ( z )mod ( z 4 − 1)
unde
X ( z ) = x[0] + x[1]z + x[2]z 2 + x[3]z 3
H ( z ) = h[0] + h[1]z + h[2]z 2 + h[3]z 3
Yc ( z ) = yc [0] + yc [1]z + yc [2]z 2 + yc [3]z 3
Polinomul ( z 4 − 1) se descompune în 3 polinoame ciclotomice:
(z 4
− 1) = M (1) ( z ) M (2) ( z ) M (4) ( z ) = ( z − 1)( z + 1)( z 2 + 1)
Se calculează polinoamele rest X ( i ) ( z ) în raport cu M ( i ) ( z ) :
X (1) ( z ) = X ( z ) mod M (1) ( z ) = X ( z )mod ( z − 1) = x[0] + x[1] + x[2] + x[3]
X (2) ( z ) = X ( z ) mod M (2) ( z ) = X ( z )mod ( z + 1) = x[0] − x[1] + x[2] − x[3]
X (4) ( z ) = X ( z ) mod M (4) ( z ) = X ( z )mod ( z 2 + 1) = ( x[0] − x[2]) + ( x[1] − x[3]) z
Similar, se calculează şi polinoamele rest H ( i ) ( z ) :
H (1) ( z ) = H ( z )mod ( z − 1) = h[0] + h[1] + h[2] + h[3]
H (2) ( z ) = H ( z )mod ( z + 1) = h[0] − h[1] + h[2] − h[3]
H (4) ( z ) = H ( z )mod ( z 2 + 1) = ( h[0] − h[2]) + ( h[1] − h[3]) z
Rezultă că reziduurile polinomului convoluţie vor fi:
Y (1) ( z ) = X (1) ( z ) H (1) (z) mod M (1) ( z ) = (x[0] + x[1] + x[2] + x[3])( h[0] + h[1] + h[2] + h[3])
Y (2) ( z ) = X (2) ( z ) H (2) (z) mod M (2) ( z ) = (x[0] − x[1] + x[2] − x[3])( h[0] − h[1] + h[2] − h[3])
Y (4) ( z ) = X (4) ( z ) H (4) (z) mod M (4) ( z ) = (x[0] − x[2])( h[0] − h[2]) + ( x[1] − x[3])( h[1] − h[3]) +
{
+ ( x[0] − x[2]) + ( x[1] − x[3]) ( h[0] − h[2]) + ( h[1] − h[3])
− ( x[0] − x[2])( h[0] − h[2]) − ( x[1] − x[3])( h[1] − h[3])} z
52
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
6. Aplicaţii propuse
1. Se dau secvenţele:
n − 1, dacă n = 0,1, 2,3, 4
x [n] =
0, în rest
n + 1 , dacă n = 0,1, 2
h [n] =
0 , în rest
Calculaţi analitic convoluţia liniară y [ n ] = x [ n ] ∗ h [ n ] , corelaţia liniară rxh [ n ] şi
autocorelaţia rxx [ n ] şi verificaţi rezultatele în Matlab, folosind funcţiile conv.m şi
xcorr.m.
2. Se dau secvenţele:
1, dacă n = 0,1, 2
x [n] =
0, în rest
5 − n , dacă n = 0,1, 2,3, 4
h [n] =
0 , în rest
Calculaţi analitic convoluţia lor ciclică pentru N = 6 şi verificaţi rezultatul în
Matlab, folosind atât funcţia circonv.m, cât și algoritmul cu Transformata Fourier
Discretă (vezi Programul P4_3).
3. Se dau secvenţele:
1, dacă n = 0,1, 2,3
x [n] =
0, în rest
4 − n, dacă n = 0,1, 2,3
h [n] =
0, în rest
a) calculaţi analitic convoluţiile lor liniare şi ciclice (în 4 puncte) ale celor două
secvenţe;
b) determinaţi valoarea minimă pentru perioada N , pentru care valorile celor
două tipuri de convoluţie sunt egale. Verificaţi rezultatul în Matlab cu ajutorul
Transformatei Fourier Discrete.
53
PNS Lucrarea 4 Convoluţia și corelația secvenţelor
4. Se dau secvenţele:
x [n] = u [n] − u [n − N ]
h [n] = α n ⋅ u [n]
Pentru cazurile ( N = 50; α = 0,5 ) şi ( N = 50; α = 1 ):
a) schiţaţi pe caiet forma celor două semnale discrete
b) generaţi cu ajutorul programului Matlab cele două secvenţe pe suportul
n = 0,99 şi calculaţi convoluţia lor liniară.
c) reprezentaţi grafic secvenţele x[n ], h[n ] , precum şi secvenţa corespunzătoare
convoluției liniare rezultată la punctul b).
54