Informatica
Convolutii si corelatii - lucrarea de laboratorConvolutii si corelatii - lucrarea de laborator Obiectivele lucrarii 1) Asimilarea functiilor MATLAB pentru realizarea convolutiilor, corelatiilor 1D si 2D; 2 Studiul algoritmilor pentru calculul convolutiilor si corelatiilor 3) Studiul interactiv al convolutiilor si transformatelor utilizand mediul DIDACTICIEL. Desfasurarea lucrarii Interpretarea polinomiala a convolutiei liniare si ciclice Operatiile de convolutie liniara si ciclica, precum si de deconvolutie se pot interpreta prin prisma operatiilor cu polinoame. Sa consideram secventele 1D si polinoamele asociate de mai jos:
Conform definitiei: . Se obtine prin urmare:
Aceiasi coeficienti pot fi obtinuti ca urmare a produsului polinoamelor :
Functia MATLAB conv pentru calculul convolutiilor liniare 1D calculeaza de fapt acest produs. De exemplu, pentru a realiza convolutia secventelor se utilizeaza: x=[1, 2, 3] ; h=[1, 1] ; [y]=conv(x, h) Deconvolutia poate fi realizata cu functia MATLAB deconv si poate fi vazuta ca rezultatul impartirii cu rest a polinoamelor Y si X. [q, r]=deconv(y, x) Si convolutia ciclica admite o interpretare polinomiala. Sa consideram secventele:
Conform definitiei: se obtine:
Acelasi rezultat se obtine ca rest al operatiei polinomiale: , adica ca rest al impartirii polinomului prin . Un exemplu de convolutie ciclica 1D este prezentat mai jos:
x=[1, 2]; h=[3, 4]; m=[1, 0, -1]; [q, y]=deconv(fliplr(conv(x, h)), m) Aceleasi consideratii sunt valabile si in cazul secventelor 2D. Astfel, in cazul convolutiei liniare:
Modul de calcul al primelor elemente ale secventei 2D este prezentat mai jos:
Rezultatul complet se obtine utilizand comenzile MATLAB: x=[0, 1, 2; 3, 4, 5] ; h=[1, 0, 1; 1, 0, 1] ; y=conv2(x, h) Acelasi rezultat poate fi obtinut reprezentand convolutia ca produs de polinoame:
Reprezentand fiecare secventa 2D ca un polinom de doua variabile, se obtine:
Se poate deci scrie convolutia 2D sub forma polinomulului de doua variabile:
Teorema lui Plancherel Pentru a verifica teorema lui Plancherel se poate considera urmatorul exemplu:
w = -pi:2*pi/255:pi; x1 = [1 3 5 7 9 11 13 15 17]; x2 = [1 -2 3 -2 1]; y = conv(x1, x2); h1 = freqz(x1, 1, w); h2 = freqz(x2, 1, w); hp = h1.*h2; h3 = freqz(y, 1, w); subplot(2, 2, 1) ; plot(w/(2*pi), abs(hp)); grid title('Produsul spectrelor de amplitudine') subplot(2, 2, 2) ; plot(w/(2*pi), abs(h3)); grid title('Spectrul de amplitudine a rezultatului convolutiei') subplot(2, 2, 3) ; plot(w/(2*pi), angle(hp)); grid title('Suma spectrelor de faza') subplot(2, 2, 4) ; plot(w/(2*pi), angle(h3)); grid title('Spectrul de faza a rezultatului convolutiei') Calculul convolutiilor cu ajutorul transformatei Fourier Sa se calculeze convolutia ciclica a doua secvente, si , de aceeasi perioada , utilizand . x=[1, 2]; h=[3, 4]; X=fft(x); H=fft(h); Y=X.*H; y=abs(ifft(Y)) Sa se utilizeze aceeasi metoda pentru a realiza convolutia ciclica 2D dintre secventele:
x=[1, 2, 3; 4, 5, 6]; h=[1, 0, 1; 1, 0, 1]; X=fft2(x); H=fft2(h); Y=X.*H; y=abs(ifft2(Y)) Mecanismul de calcul al convolutiei Sa se calculeze pas cu pas convolutia a doua secvente discrete. Originea celor doua functii este presupusa la . x=ones(3, 1); h=exp(-[1:10]); Ly=length(x)+length(h)-1; lh=length(h); lx=length(x); y=zeros([Ly, 1]); xf=fliplr(x); disp(['Apasati pe orice tasta pentru a calcula convolutia']); for i=1:1:Ly indlo=max(0, i-lx); indhi=min(i-1, lh-1); for j=indlo:indhi y(i)=h(j+1)*x(i-j)+y(i); end subplot(311); stem(-lx+i:1:i-1, xf); ylabel('x in oglinda'); lim1= max(lh, lx) ; lim2= min(min(min(x), min(h)), 0) ; lim3= max(max(x), max(h)) ; axis([-lx, lim1, lim2, lim3]); subplot(312); stem(0:1:lh-1, h); ylabel('h'); axis([-lx, lim1, lim2, lim3]); subplot(313); stem(0:1:Ly-1, y); ylabel('y'); pause end Convolutia, corelatia si filtrajul adaptat Sa se scrie un program care sa arate ca operatia de convolutie realizata de un filtru adaptat este echivalenta cu corelatia dintre semnalul cu care acesta este adaptat si semnalul de intrare. Se va considera semnalul de intrare:
si filtrul adaptat caracterizat prin functia pondere:
h = [3 2 1 -2 1 0 -4 0 3]; x = [1 -2 3 -4 3 2 1]; xa = fliplr(h); y1 = conv(h, x) ; y2 = filter(h, 1, [x zeros(1, length(x)+1)]); y3 = xcorr(x, xa); subplot(311); stem(y1); ylabel('Amplitudine'); title('Iesire obtinuta prin convolutie'); grid; subplot(312); stem(y2); ylabel('Amplitudine'); title('Iesire obtinuta prin filtraj'); grid; subplot(313); stem(y1) xlabel('Index temporal n'); ylabel('Amplitudine'); title('Iesire obtinuta prin corelatie'); grid; Studiul operatorilor de convolutie si corelatie utilizand mediul DIDACTICIEL 1) Se lanseaza DIDACTICIEL-ul prin introducerea comenzii: didact 2) Se studiaza interactiv operatorii de convolutie si corelatie cu ajutorul meniurilor definite in: Math Tools Tema Se dau secventele 1D:
Calculati analitic convolutia lor ciclica pentru si verificati rezultatul in MATLAB.
|