Signalų koreliacija Matlab terpėje (0)
Signalų koreliacija reikalinga išskirti norimą signalą iš daug signalų ar didelių trukšmų.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Koreliacijos skaičiavimas Matlab terpėje.
Dviejų sekų koreliacijai surasti galima taikyti sąsūkos skaičiavimo procedūrą. Seka y(n) yra apgręžiama, t.y. gaunama seka y(-n), o sekų x(n) ir y(-n) sąsūka atitinka sekų x(n) ir y(n) tarpusavio koreliaciją.
Matlab aplinkoje seka apgręžiama naudojantis funkcija
B = fliplr(A).
Jei A yra eilučių matrica
A =
1 3 5 7 9
tuomet fliplr(A) duos rezultatą
9 7 5 3 1
Koreliacinės funkcijos skaičiavimo programa:
%koreliacines funkcijos skaiciavimas
clear all
fs1=1*10^3; %pirmo signalo daznis
fs2=1*10^3; %antro signalo daznis
N=100; %tasku skaicius periodui
Fd=N*fs1; %diskretizavimo daznis
Tn=1; %periodu skaicius
n=1:Tn*N;
A1=1; %pirmo signalo amplitude
A2=1; %antro signalo amplitude
x=A1*sin(2*pi*(fs1/Fd)*n); %signalu generavimas
y=A2*sin(2*pi*(fs2/Fd)*n); %signalu generavimas
y2=fliplr(y); %funkcijos reiksmiu apsukimas
n2=-fliplr(n); %funkcijos atskaitu apsukimas
[yk,nyk]=convm(x,n,y2,n2); %koreliacijos skaiciavimas
%grafiku braizymas
subplot(3,1,1);
stem(n,y);
grid on;
xlabel('n');
ylabel('y(n)');
subplot(3,1,2);
stem(n,x);
grid on;
xlabel('n');
ylabel('x(n)');
subplot(3,1,3);
stem(nyk,yk);
grid on;
xlabel('n');
ylabel('Rxy(n)');
convm funkcija nėra standartinė, tad ją reiktų apsirašyti savarankiškai. Jos turinys yra toks:
function[y,ny]=convm(x,nx,h,nh);
nyb=nx(1)+nh(1);
nye=nx(length(x))+nh(length(h));
ny=[nyb:nye];
y=conv2(x,h);