Korelacija (dveh signalov)

Ko tudi učitelj ne more pomagati...
mojih500
Posts: 44
Joined: 1.4.2008 23:48

Re: Korelacija (dveh signalov)

Post by mojih500 » 13.1.2012 16:14

Malo vem od korelacije oz avtokorelacije. Imam podano neko zaporedje števil, za katere moram ugotoviti, če je kakšna povezava med samimi števili. Uporabljam avtokorelacijo, sprogramirano v Matlabu. Koda je tukaj:

% calculates the autocorrelation function for the
% data set "sequence1" for a lag timescale of 0 to "endlag" and outputs
% the autocorrelation function in to "a".


load sequence1.ext; % read data into the my_xy matrix
x=sequence1(:,1); % copy first column of my_xy into x

N=length(x);

%now solve for autocorrelation for time lags from zero to endlag
lag= 0;
endlag=102;
for lag=0:endlag
data1=sequence1(1:N-lag);
data1=data1-mean(data1);
data2=sequence1(1+lag:N);
data2=data2-mean(data2);
a(lag+1) = sum(data1.*data2)/sqrt(sum(data1.^2).*sum(data2.^2));
clear data1
clear data2
end
a
figure 1;
plot(a,'r')
title('Autocorrelation');
xlabel('Time index');
ylabel('Amplitude');

Pomagala sem si z dobljeno kodo na internetu, ki sem jo malo preoblikovala. Zanima me kako interpretirat ta dobljen graf in števila. Kaj mi ta števila povejo( -0.0515 0.0345 -0.0442 0.0239 -0.1139)? Jaz sem na približno določila neka števila za "lag" in "endlag", in ne vem kaj točno pomenijo. Pri izpisu "a"ja mi zadnjih nekaj števil izpiše kot NaN (not a number).
Je v tem primeru kakšna povezava med št?

to je moja sequence1.ext:
200
0
0
0
0
0
0
200
0
200
0
600
0
0
0
0
0
0
0
800
0
0
300
0
0
200
0
0
200
0
300
0
0
0
0
0
0
300
200
0
0
0
0
0
0
0
0
0
0
0
0
0
0
200
200
200
300
0
0
0
300
200
0
800
0
800
0
200
0
0
0
0
0
0
0
0
0
0
0
0
300
0
0
0
0
600
200
0
200
300
0
0
0
300
200
0
0
0
0
200

Hvala za pomoč.

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Re: Korelacija (dveh signalov)

Post by Aniviller » 13.1.2012 18:31

Korelacija dveh zaporedij je zaporedje, ki ti pove, koliko je eno zaporedje podobno drugemu, in to za vsak mozen zamik (v tem zargonu ocitno temu zamiku recejo "lag"). Velike pozitivne vrednosti korelacije pomenijo, da se pri tistem zamiku zaporedji dobro ujemata. Za negativne vrednosti pomeni, da tam kjer gre eno zaporedje gor gre drugo dol in obratno. Nic pa pomeni, da ni nobenega pametnega reda pri tem kako gre eno zaporedje glede na drugo in se zato pozitivni in negativni prispevki vecinoma pokrajsajo. Da ne moti to, da imajo zaporedja neke povprecne vrednosti, se povprecje odsteje, da je odmikov v pozitivno enaka kolicina kakor odmikov v negativno. Drugace bi recimo dve zaporedji, ki se obe vrtita okrog 1 imeli korelacijo tudi skozi zelo pozitivno, ne glede na podobnost, kar ni v redu.

Matematicno gledano je korelacija skalarni produkt dveh zaporedij (ali funkcij, ali kakorkoli ze to gledas), pri cemer to pogledas za vsak zamik posebej. V istem smislu kot recimo skalarni produkt dveh vektorjev pove da sta pravokotna (neodvisna), ce je 0 in da kazeta skoraj v isto smer, ce pride skalarni produkt velik. Ce obe zaporedji pred korelacijo normiras (tako kot normiras vektorje), ti korelacija pove neke vrste "kot" med zaporedjema - koliko razlicna sta pri tistem zamiku. Recimo ce posljes radarski pulz nekam in posnames to kar se vrne, in naredis korelacijo med poslanim in prejetim signalom, lahko poisces maksimum korelacije in s tem izves casovni zamik. Ker gledas samo maksimum podobnosti, je lahko povratni signal sibek in zelo popacen, pa bo vseeno delovalo. Podobno deluje tudi GPS navigacija.

Avtokorelacija je kar korelacija zaporedja (signala) s samim seboj. Ce imas normirano, bo pri zamiku 0 vrednost seveda enaka 1. Za druge vrednosti zamika je pa odvisno od zaporedja. Ce ima zaporedje neko periodicno strukturo, tudi ce ni ocitna, se bo to pokazalo kot oscilacije v avtokorelaciji. Ce perodicnost ni tocna in zaporedje pocasi pozablja na dobro usklajenost s starejsimi vrednostmi, te oscilacije padajo z zamikom. Nakljucne vrednosti (sum) pa niso korelirane in dajo za vse zamike razen 0 zanemarljive vrednosti. To ti recimo pomaga, da ce imas zelo pokvarjen signal ki je cisto izgubljen v sumu, z avtokorelacijo se vedno lahko poisces periodo in ostale zanimive lastnosti.

Predlagam da zaporedja in korelacije narises kot graf, bo precej bolje vidno kaj se dogaja. Ce pri avtokorelaciji ne dobis maksimuma pri 0 je nekaj narobe.

mojih500
Posts: 44
Joined: 1.4.2008 23:48

Re: Korelacija (dveh signalov)

Post by mojih500 » 14.1.2012 12:08

Zdej mi je bolj jasno. Sam še vedno imam vprašanje glede izpisanih števil. Tista števila pomenijo korelacijo med začetnim zaporedjem in zaporedjem za premik lag=1, lag=2 itd? Se pravi, je prva številka (za lag=1) korelacija med celotnim začetnim zaporedjem in zaporedjem za premik 1. Druga številka (za lag=2) korelacija med začetnim zaporedjem in zaporedjem za premik 2. Na kratko povedano posamezna številka ti pove korelacijo med dvema celotnima zaporedjema?

Avtokorelacija ti vedno pogleda korelacijo med zaporedjem (ki se začne na prvem členu zaporedja) in potem zaporedjem glede na določem "lag" ki sam nastaviš? Ker recimo bi rada pogledala korelacijo od 100 člena naprej, za vsak člen*2 (oz začnem gledat zaporedje od 100 člena naprej in bi rada pogledala vsak drugi člen)?

Je lahko "lag" v mojem primeru premik za 1 (ze k me to zanima) al lahko kako določim da je "lag" nek časovni interval?

In recimo da imam sledeče zaporedje: 1 _ _ 3 _ _ 9 _ _ 27 _ _ 81 _ _ 243 _ _ ...
Tiste črtice vmes predstavljajo bilokatero število. Z avtokorelacijo dobim povezanost teh št? Trenuten primer je preprost, sam kaj pa recimo da bi bilo zaporedje 30000 števil in je taka povezanost na vsakem 2000 členu zaporedja?

Dobljen graf, kjer so samo neke pikice postavljene glede na x os, ki je moj lag in y os, ki je moj rezultat korelacije. Kako v grafu vidim korelacijo? Ker sam gledam in je pika gor, pika dol, pika še malo bolj dol, pa spet gor... in ne vem kako naprej :-)

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Re: Korelacija (dveh signalov)

Post by Aniviller » 14.1.2012 14:40

Vsemu skupaj (za vse zamike) recemo avtokorelacija, ki jo lahko tudi smatras kot zaporedje oz. funkcijo casovnega zamika. Recimo ce ima avtokorelacija spico pri lag=0, lag=10, lag=20,... to pomeni da se nek vzorec v zaporedju ponovi na vsakih 10 stevil (ce premaknes za 10 je zaporedje podobno samo sebi). V tem stilu. Tole tvoje zaporedje je res butasto - na takih zaporedjih ki so tako nezvezna in razsekana je tezko govorit o samopodobnosti. Tudi korelacija ti ne pokaze nic pametnega - nobenih izrazitih vrhov ni. Se najvec kar ti pokaze da za lag=2 dobis dokaj veliko, kar je najbrz povezano s tem, da se ponekod izmenicno pojavljajo velika stevila in nicle. Za ucne namene je tole skoraj najslabsi mozen primer, ne vem kaj so hoteli s tem pokazat.

Korelacija ni omejena na cela stevila in nicesar ne pove o lepih stevilskih lastnostih (kot recimo v tvojem primeru to da imas obliko 3,3^2,3^3,...). Korelacija opisuje splosno obliko funkcije (pri nas imamo zaporedje ker imamo diskretno vzorcenje, ampak si lahko predstavljas da je to zvezno v casu). Ce imas neko funkcijo in jo koreliras s funkcijo, ki ima recimo en sirok visok hribcek in eno ozko plitvo dolino na vsaki strani hribcka, ti bodo vrhovi v korelacijski funkciji povedali na katerih mestih prva funkcija izgleda podobno (ima na tistem mestu hribcek obdan z dolinami).

mojih500
Posts: 44
Joined: 1.4.2008 23:48

Re: Korelacija (dveh signalov)

Post by mojih500 » 18.1.2012 12:41

Trenutno se mi je pojavil en problem. Naredila sem zaporedje 100000 števil, kjer se vsaka 100 številka ponavlja (v mojem primeru se prvič ponavlja številka 500 in v drugem primeru pa 8000). Problem je sledeč: vseh 100000 števil ne presega vrednosti 2000. V primeru ko je na vsakem 100 mestu vredost 8000 je na grafu zelo očitno izpostavljen vrh za lag =100. V drugem primeru ko je vsaka 100-ta številka 500, graf NE izriše nobenega izrazitega vrha pri lag=100.
V prvem primeru je za lag=100 vrednost nekje kjer so ostale max vrednosti (to je cca 0.2- 0.3), medtem ko pri drugem primeru ima vrh lag=100 vredost cca 0.9. Kako naj rešim ta problem?

Tudi glede normiranja nisem točno razumela. Kaj točno je to? Kakšno formulo maram sprogramirat v Matlabu da bom normo upoštevala za moje zaporedje? Kaj norma sploh naredi?

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Re: Korelacija (dveh signalov)

Post by Aniviller » 18.1.2012 13:07

Normalizacija pomeni isto kot pri vektorjih: vsota kvadratov hoces da je 1 (s tem naredis vse signale v nekem smislu enako velike). Deljenje z "velikostjo" obeh signalov se v zgonji kodi zgodi tukaj:
sqrt(sum(data1.^2).*sum(data2.^2))

Ne da pa to nobene bistvene spremembe glede oblike korelacije, samo stevilke so blizje 1. To je koristno, da lahko potem stevilsko tocno podajas koliko je korelacija pri dolocenem zamiku.

Kot sem rekel, korelacija nicesar ne govori o tocnih vrednostih. Vrh bo pri lag=100, ce bo vsakih 100 stevilk zaporedje podobno - celih 100 stevilk vmes se mora priblizno ponovit. Recimo zaporedje

0 2 5 9 6 12
0 1 3 15 3 11
-1 4 6 14 1 10
...
bo imelo vrh pri lag=6, ker se vsakih 6 potez priblizno ponovi to, da imas najprej narascajoce stevilke, potem eno majhno in potem spet eno veliko.

Res glej na signale kot na casovno zvezne oblike (recimo zvocni zapis ali elektricni signal ali kaj takega). Tole z zaporedji te samo zmede.

mojih500
Posts: 44
Joined: 1.4.2008 23:48

Re: Korelacija (dveh signalov)

Post by mojih500 » 18.1.2012 14:37

Jaz bi rada v nalogi izvedela, če se kakšen vzorec ponavlja. Se pravi, bi lahko bilo:
- vsak 100 element je npr oblike n*2 (2 _ _ ... _ _ 4 _ _ ... _ _ 6 _ _ ... _ _ 8 _ _ ... _ _ 10 _ _ ...)
- naj bi se signal ponavljal pri recimo lag= 6 (...vsakih 6 potez priblizno ponovi to, da imas najprej narascajoce stevilke, potem eno majhno in potem spet eno veliko... to je tvoj primer)
- vsak 100-ti element je vrednosti 200

Je avtokorelacija sploh primerna metoda, s katero dobim lahko te odgovore? Mislim direktne odgovore v stilu: DA, vsak 100 elt se ponavlja.

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Re: Korelacija (dveh signalov)

Post by Aniviller » 18.1.2012 16:22

Odgovor za vse 3 primere:

1) NE. Iskanje stevilskih vzorcev je cisto nekaj drugega. Korelacijski funkciji je prakticno vseeno ali je tam 2, ali 3, ali mogoce 2.00001, glavno da je podobne oblike. Poleg tega mora bit signal ali stacionaren (da sta na dolgi rok amplituda, in spekter priblizno konstantna) ali pa koncen (da lahko reces da bi se je enkrat zacel in se bo enkrat iztekel v 0). Predstavljaj si da signal bodisi nadaljujes periodicno, ali pa predpostavis nicle pred in za tvojimi podatki. 2,4,6,8,10,... temu ne zadosti.
2) To ja.
3) NE. O tocnih stevilskih vrednostih ne pove nicesar. Korelacija je statisticna metoda in se ukvarja z globalno sliko - ali je cel signal A podoben celemu signalu B. Lokalne posamezne tocke imajo same po sebi zanemarljiv vpliv na rezultat. Metoda se uporablja ravno v situacijah, kjer recimo motnje signal tako pokvarijo, da ce ga gledas kot takega ne vidis nic - korelacija pa se vedno lahko zazna podobnosti.

mojih500
Posts: 44
Joined: 1.4.2008 23:48

Re: Korelacija (dveh signalov)

Post by mojih500 » 19.1.2012 8:43

Se pravi, če prav razumem naj bi avtokorelacija gledala signale kot je pokazano v prvem primeru in ne drugem?
to je zaporedje: 0 2 5 9 6 12 0 1 3 15 3 11 -1 4 6 14 1 10...

prvi primer: 0 2 5 9 6 12
0 1 3 15 3 11
-1 4 6 14 1 10

drugi primer: 0 2 5 9 6 12
2 5 9 6 12 0
5 9 6 12 0 1
Za lag=100, bo gledalo zaporedje1-100,101-200,201-300,301-400,401-500.... in ne 1-100, 2-101,3-102,4-103,5-104,...????

User avatar
Aniviller
Posts: 7263
Joined: 15.11.2004 18:16

Re: Korelacija (dveh signalov)

Post by Aniviller » 19.1.2012 11:24

Ne razumeva se dobro... korelacija jemlje signal tak kakor je. Hotel sem povedat samo kaj je tisto kar ti sploh pove. Korelacija govori o podobnosti v obliki signala pri razlicnih zamikih. Tocni detajli o posameznih vrednostih so minimalnega pomena, glavno je, da se signal vsaj delno ponovi po doloceni periodi.

Za oba podana zaporedja bo avtokorelacija dala podoben odgovor: prvi bo imel vrh pri 6, drugi pa najbrz okrog 5. Detajli v razlikah pri periodicnosti niso pomembni.

Za vsak lag v avtokorelaciji gledas VSE pare ki so razmaknjeni za podano vrednost. Definicija avtokorelacije je namrec
\(C(\tau)=A\int x(t+\tau)x(t)dt\)
oziroma za diskretno varianto
\(C_n=A\sum x_{i+n}x_i\)
pri cemer je A normalizacijska konstanta (pa ker imamo realne vrednosti sem izpustil kompleksno konjugacijo). Pred tem moras se zagotovit, da signalu x odstejes njegovo povprecje, da je centriran okrog 0. Ce povemo zelo po domace, avtokorelacija je povprecen produkt signala s kopijo istega signala, premaknjenega za vsak mozen zamik. Ce se premaknjen signal priblizno ujema z originalnim, bo produkt povsod velik in prakticno nikjer negativen (ce sta podobna, bo tam kjer je en negativen tudi drug najbrz pretezno negativen in se zmnozita v +). Zato pride korelacija velika. Ce sta signala cisto razlicna, se negativni in pozitivni prispevki vecinoma pokrajsajo in je korelacija majhna.

Post Reply