Komplement till DIGITAL SIGNALBEHANDLING Fredrik Gustafsson 2005
2 Dokumentet innehåller nyskriva delar till nya upplagan. Fredrik
Innehåll 8.2 Stationära kalmanfiltret.................. 5 8.2.1 Härledning av stationära kalmanfiltret...... 7 2.1 Mikromodul: stokastiska processer............ 9 2.1.1 Stokastiska variabler................ 9 2.1.2 Stokastiska vektorer och kovarians........ 9 2.1.3 Stokastiska processer och kovariansfunktionen.. 11 3.1 Hilberttransformen..................... 15 3.1.1 Inledning...................... 15 3.1.2 Modulering..................... 15 3.1.3 Hilberttransformen................. 17 3.1.4 Utvärdering..................... 20 3
8.2 Stationära kalmanfiltret 5 8.2 Stationära kalmanfiltret Tillståndsmodell för mätningar t = 1,2,...,N: x(t + 1) =Ax(t) + Bw(t), Cov(w(t)) = Q, y(t) =Cx(t) + v(t), Cov(v(t)) = R, E(x(1 0)) =x 0, Cov(x(1 0)) = P 0. Utan information ger (8.3.a) att initialskattningen och dess osäkerhet ska propageras enligt ˆx(t t 1) = Aˆx(t 1 t 1),P(t t 1) = AP(t 1 t 1)A T + BQB T. (8.2a) Vi ansätter nu ett godtycklig linjär funktion av informationen i senaste mätningen för att korrigera skattningen a (8.3a) Vet vi skattningen ˆx(t 1 t 1) vid tiden t 1, blir prediktionen (sätt w(t 1) = 0 i signalmodellen): ˆx(t t 1) = Aˆx(t 1 t 1) Prediktionsfelet, eller innovationen som det också kallas i kalmanfiltret, ges av ε(t) = y(t) Cˆx(t t 1) Vi ansätter nu ett linjärt filter ˆx(t t) = ˆx(t t 1) + Ly(t) + M. För att bevara ett korrekt väntevärde måste 0 = E(Ly(t) + M) = E(L(Cx(t) + v(t)) + M) = LCx(t) + M vilket kan erhållas genom att välja konstanttermen till M = Cˆx(t t 1). Vi får då filtret ˆx(t t) = ˆx(t t 1) + L(y(t) Cˆx(t t 1)). Skattningsfelet definieras som x(t + 1 t) = x(t + 1) ˆx(t + 1 t),
6 Innehåll och på samma sätt för x(t t) = x(t) ˆx(t t). Skattningsfelet ges av rekursionen x(t + 1 t) = x(t + 1) ˆx(t + 1 t) (8.4a) = Ax(t) + Bw(t) A(ˆx(t t 1) + L(y(t) Cˆx(t t 1))) (8.4b) = Ax(t) + Bw(t) A(ˆx(t t 1) + L(Cx(t) + v(t) Cˆx(t t 1))) (8.4c) = (A ALC) x(t t 1) + Bw(t) ALv(t) (8.4d) Felrekursionen kan expanderas till formen x(t + 1 t) = (A ALC) t+1 (x(0) x 0 ) + Vi noterar följande: t (A ALC) t k (w(k) ALv(k)) För att initalfelet (x(0) x 0 ) ska avta mot noll, så måste K väljas så att egenvärdena till A ALC är innanför enhetscirkeln ( A ALC t 0, t ). Valet av L är för övrigt en kompromiss mellan att minimera initialfelets inverkan och att undertrycka både processbrus och mätbrus. Målet kan nu uttryckas i att välja L så att felets kovariansmatris Cov x(t + 1 t) =(A ALC) t P 0 ((A ALC) T ) t+1 + t (A ALC) t k ( Q ALRL T A T) ((A ALC) T ) t k k=0 minimeras. Några specialfall att beakta: 1. Observatör. Finns inget brus är det endast transienten av initialfelet som beaktas. Observatörens poler, dvs egenvärdena till A ALC kan väljas godtyckliga om tillståndsmodellen är observerbar. 2. Stationära kalmanfiltret fokuserar på att balansera summan av brustermerna, eftersom att stationärt har initialtillståndets inverkan försvunnit. k=0
8.2 Stationära kalmanfiltret 7 3. Tidsvariabla kalmanfiltret balanserar inverkan av alla tre termerna så att skattningsfelets kovariansmatris minimeras. 8.2.1 Härledning av stationära kalmanfiltret Kovariansmatrisen för vänster- respektiva högerled av (8.4) ger en bra utgångspunkt för att härleda kalmanfiltret, P(t + 1 t) = = (A ALC)P(t t 1)(A ALC) T + BQB T ALRL T A T. (8.5) Kvadratkomplettering ger (med den kompaktare notationen P = P(t t 1)) P(t + 1 t) =APA T ALCPC T L T A T + ALCPA T + APC T L T A T + BQB T ALRL T A T =A ( P + L(CPC T + R)L T + LCP + PC T L T) A T + BQB T =A ( P + ( L PC T (CPC T + R) 1) (CPC T + R) ( L PC T (CPC T + R) 1) T ) A T PC T (CPC T + R) 1 CP + BQB T A ( P PC T (CPC T + R) 1 CP ) A T + BQB T. Det L som minimerar kovariansmatrisen P(t + 1 t) och dess minimum ges av L(t) = PC T (CP(t t 1)C T + R) 1, (8.6a) P(t + 1 t) = A ( P(t t 1) PC T (CP(t t 1)C T + R) 1 CP ) A T + BQB T. (8.6b)
8 Innehåll
2.1 Mikromodul: stokastiska processer 9 2.1 Mikromodul: stokastiska processer 2.1.1 Stokastiska variabler En stokastiskt variabel X beskrivs av dess täthetsfunktion p X (x), vars viktigaste egenskaper sammanfattas i dess första två s.k. moment: medelvärde och varians E(X) = xp X (x)dx x ( ) 2pX Var(X) = x E(X) (x)dx = E(X 2 ) ( E(X) ) 2 Normalfördelningen har x p X (x;µ,σ 2 ) = 1 2πσ 2 e (X µ)2 2σ 2, där parametrarna µ = E(X) och σ 2 = Var(X) beskriver hela täthetsfunktionen. Ett konfidensintervall med konfidensgrad 95% ges för normalfördelingen av µ ± 1.96σ, dvs. Prob( X µ < 1.96σ) = 0.95. I Matlab genereras ett normalfördelat slumptal av x=mu+sigma*randn(1,1). En vektor eller matris skapas av oberoende slumptal skapas av randn(n,m). Konfidensgraden för ett intervall kan verifieras numeriskt med >> x=randn(10000,1); >> length(find(x<1.96 & x>-1.96))/10000 ans = 0.9512 dvs. 95% av alla slumptal hamnar i intervallet [ 1.96, 1.96]. Analytiskt kan sannolikheten Prob( X > 1.96) räknas ut med >> erfc(1.96) ans = 0.0056 2.1.2 Stokastiska vektorer och kovarians En vektor X (dimension n 1) av stokastiska variabler beskrivs på analogt sätt av en vektorvärd täthetsfunktion, t.ex. den multivariabla
10 Innehåll normalfördelningen p X (x;µ,p) = 1 (2π) n det(p) e 0.5(X µ)t P 1 (X µ). Väntevärde µ (n 1) och kovarians P (n n) definieras av µ = E(X) = xp X (x)dx x P = Cov(X) = E [ (x µ X )(x µ X ) T] = (x µ X )(x µ X ) T p X (x)dx. x Kovariansen anger hur starkt kopplade slumptalen är till varandra. Om element P ij = 0 betyder det att elementen x i och x j är okorrelerade. Omvänt, om P ij > 0 så är x i och x j positivt korrelerade så ett om den ena är positiv så är den andra det sannolikt också. Konfidensintervall kan enkelt generaliseras till vektorer. Ett område med konfidensgrad 95% ges för normalfördelningen av {X : (X µ) T P 1 (X µ) < 1.96}. En linjärtransformation Y = AX ger en ny stokastisk vektor Y (som kan vara längre eller kortare än X. Från definitionen härleds enkelt följande räkneregler för de första momenten: Y = AX µ Y = E(Y ) = AE(X) = Aµ X P Y = Cov(Y ) = ACov(X)A T = AP X A T. En normalfördelad vektor av slumptal kan genereras i Matlab med [U,S,V]=svd(P); Psqrt=U*sqrt(S); x=mu+psqrt*randn(n,1); De första två raderna räknar ut en matriskvadratrot av P som definieras av P 1/2 P T/2 = P. SVD faktoriserar en godtycklig matris P = USV T, där U är unitär (dvs. U T U = UU T = I) och S är diagonal. I detta fall när P är symmetrisk och positivt semidefinit gäller att U = V och S ii 0. Från dessa egenskaper följer att kvadratrotsdefinitionen är uppfylld med konstruktionen P 1/2 = US 1/2.
2.1 Mikromodul: stokastiska processer 11 Följande exempel illustrerar principerna för linjära avbildningar. 200 slumptal X från standardnormalfördelningen genereras först, och avbildas sedan linjärt på 200 stokastiska vektorer Y. X=randn(2,200); A=[1 0.5;0 1]; Y=A*X; figure(1) plot(x(1,:),x(2,:),. ) figure(2) plot(y(1,:),y(2,:),. ) Kovariansmatrisen ges av P = AIA T = ( ) 1.25 0.5, 0.5 1 vilken illustreras av nivåkurvan i figur 2.1.b Härur följer t.ex. att Var(y 1 ) = P 11 = 1.25 och E(y 1 y 2 ) = 0.5. Elementen y 1 och y 2 är alltså positivt korrelerade, så om den ena är positiv så är den andra det också med stor sannolikhet. Den ellips som svarar mot 95% av alla punkter ritas med nedanstående beräkningar, där enhetscirkeln avbildas av samma transformation y = Ax och sedan skalas till önskad konfidensgrad. P=A*A phi=linspace(0,2*pi,100); x=[cos(phi);sin(phi)]; y=a*x; plot(1.96*y(1,:),1.96*y(2,:), - ) Notera att den positiva korrelationen mellan y 1 och y 2 kan ses på ellipsens form. 2.1.3 Stokastiska processer och kovariansfunktionen Om x[k] är en sekvens av stokastiska variabler är det en stokastisk process. Den stora skillnaden på en stokastisk vektor och en stokastisk process är att den senare oftast anses vara oändligdimensionell. I övrigt
12 Innehåll x 2 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5 3 2 1 0 1 2 3 x 1 (a) y 2 3 2 1 0 1 2 3 3 2 1 0 1 2 3 4 y 1 (b) Figur 2.1 Tvådimensionella normalfördelade slumptal med väntevärde noll och kovariansmatris P = I respektive P = AA T. Ett konfidensområde svarande mot 95% av alla punkter är också markerat. definieras väntevärdesfunktionen och kovariansfunktionen (notera ordet funktion i dessa begrepp) analogt: m x [k] = E(x[k]) R xx [k,l] = E ( (x[k] m x [k])(x[l] m x [l]) ) Ser vi x som en vektor med element x[k], ges väntevärdet av en vektorn med element µ k = m[k] och kovariansen av matrisen P med element P kl = R xx [k,l]. Vi fokuserar på processer med medelvärde 0 (m x [k] = 0) som är stationära. Stationäritet definieras av att R xx [k,l] = R xx [k l], dvs. endast tidsskillnaden och inte absolut tid inverkar på kovariansfunktionen, och skriver R xx [l] = E(x[k]x[k l]). Om x tolkas som en vektor av längd N blir kovariansmatrisen R xx [0] R xx [1]... R xx [N 1] R xx [ 1] R xx [0]... R xx [N 2] Cov(x) =...... R xx [ N + 1] R xx [ N + 2]... R xx [0] På grund av symmetrin i matrisen (kallas för Toeplitz-struktur), samt symmetrin R xx [ k] = R xx [k], räcker det med att specifiera första
2.1 Mikromodul: stokastiska processer 13 raden i denna matris. Notera att första raden sammanfaller med kovariansfunktionen för den stationära processen. Korskovariansfunktionen definieras analogt som R xy [l] = E(x[k]y[k l]). I motsats till kovariansfunktionen som alltid är symmetrisk gäller här att R yx [ l] = R xy [l] R xy [ l] = R yx [l]. Ett typexempel på stationär stokastisk process är filtrerat vitt brus. Vitt brus svarar mot en sekvens av oberoende slumptal x[k] med m x [k] = 0 och R xx [k] = δ[k]. Exempel: en sekvens y[k] genereras från vitt brus x[k] med följande rekursion y[k] = 0.8y[k 1] + x[k]. Rekursionen kan utvecklas till y[k] = x[k] + 0.8x[k 1] +... 0.8 l x[k l] +... Kausalitet ger att y[k] är oberoende av framtida x[k + l], så att korskovariansfunktionen blir { 0.8 l, l 0, R yx [l] = E(y[k]x[k l]) = 0, l < 0. På motsvarande sätt blir kovariansfunktionen for y[k] R yy [l] = E(y[k]y[k l]) = E ( (x[k] + 0.8x[k 1] +... )( x[k l] + 0.8x[k l 1] +...) ) = 0.8 l (0.8 2 ) i = 0.8 l 1 1 0.8 2 = 0.8 l 25 9 i=1 I Matlab kan exemplet testas med x=randn(10000,1); y=filter([1 0],[1-0.8],x); Ryy=covf(y,20) k=0:19; plot(k,ryy, -,k,25/9*0.8.^k, -- ) vilket genererar Figur 2.2. 2.78 0.8 l
14 Innehåll 3 2.5 Skattad Sann 2 R yy [k] 1.5 1 0.5 0 0 5 10 15 20 k Figur 2.2 Skattad och sann kovariansfunktion R yy[k].
3.1 Hilberttransformen 15 3.1 Hilberttransformen 3.1.1 Inledning Att bestämma frekvensen för en sinusformad signal vore enkelt med en komplex signalrepresentation, då signalen skulle ges av x[k] = e i2πfkt. (3.7) Genom att utnyttja argumentfunktionen för komplexa tal kan man studera differensen mellan signalens argument och får arg x[k] arg x[k 1] = 2πfkT 2πf(k 1)T = 2πfT. (3.8) Rent allmänt brukar man definiera en signals momentana frekvens som f[k] = arg x[k] arg x[k 1], (3.9) 2πT och den allmänna algoritmen 3.8 kan alltså alltid appliceras på komplexa signaler för att beräkna momentan frekvens. Frågan är nu hur man gör för reellvärda signaler? Det finns två trick för detta: Låtsas att man har observerat realdelen av en s.k. analytisk signal, och från denna återskapa imaginärdelen. Modulera signalen på en komplex bärvåg som i telekommunikation. Båda metoderna ämnar att stryka det ena sidbandet för signalen och behålla det andra, och på detta sätt få en komplex signal. T.ex. har en ren sinus x[k] = cos(i2πf 0 kt) Fouriertransformen X(f) = δ(f f 0 )+δ(f +f 0 ), dvs. den har en spegelfrekvens i f 0. Om vi kan stryka det negativa sidbandet försvinner denna, och vi har transformparet: x[k] = e i2πf 0kT X(f) = δ(f f 0 ). 3.1.2 Modulering Låt x[k] vara den observerade signalen, och bilda x c [k] = x[k]e i2πfckt, (3.10) där f c är bärvågsfrekvensen. Frekvensinnehållet för x[k] kommer att flyttas från att ha varit centrerat kring f = 0 till centrering kring
16 Innehåll 0.6 Impulssvar för diskret LP filter 0.5 0.4 0.3 0.2 0.1 0 0.1 0 2 4 6 8 10 12 14 16 18 20 Figur 3.3 Impulssvar för hilbertfilter bärvågen f = f c. Vi har nu en komplex representation av signalen som kan användas för frekvensskattning. Några extrasteg förenklar implementeringen: 1. Välj f c = f s /4 och modulera x c [k] = x[k]e i2πfckt. 2. Lågpassfiltrera x cf = h x c [k] med gränsfrekvens f c så att endast det negativa sidbandet för X(f) behålls. LP-filtret ges i figur 3.4. 3. Frekvenserna blir nu spegelvända, så momentana frekvensen som kommer ut från (3.8) behöver reflekteras med f s /4 f och vi får ˆf[k] = f s 4 arg x cf[k] arg x cf [k 1]. (3.11) 2πT I denna algoritm behålls det negativa sidbandet för signalen enligt figur 3.3.
3.1 Hilberttransformen 17 1.4 1.2 Original Modulerat LP filter Illustration 1 0.8 H(f) 0.6 0.4 0.2 0 fs/2 fs/4 0 fs/4 fs/2 f Figur 3.4 Impulssvar för LP-filtret 3.1.3 Hilberttransformen Matematisk bakgrund Cauchy-Riemanns relation: Om f(z) = u(x, y) + iv(x, y) är deriverbar i en punkt z 0 = x 0 + iy 0, så gäller följande samband: u x (x 0,y 0 ) = v y (x 0,y 0 ) (3.12) u y (x 0,y 0 ) = v x (x 0,y 0 ) (3.13) Cauchys integralsats säger att om en komplex funktion är entydigt bestämd av sitt värde på randen av en region där den är analytisk. Dessa samband gör att vi entydigt kan bestämma en analytisk funktion enbart genom att känna dess real- eller imaginär-del på randen av dess definitionsområde. Detta kallas i matematiken för Poissons formel. Om dessa båda samband istället används i signalbehandling och appliceras på den kontinuerliga fouriertransformen erhålls den s.k. hilberttransformen. En signal x(t) kallas analytisk om dess fouriertransform är kausal, dvs X(iω) = 0 för ω < 0. För en diskret sekvens
18 Innehåll x[k] definierar vi en analytisk signal genom att kräva att DFT:n uppfyller X(e jωn ) = 0 för π ω < 0, dvs. den är noll på undre delen av enhetscirkeln. Alltså, vi mäter x r [k], och vi vill skapa en analytisk signal x[k] = x r [k] + x i [k] så att X(e jω ) = TDFT[x[k]] = 0, π ω < 0. Från grundläggande transformsamband gäller att en reell sekvens har komplexsymmetrisk transform, och samma sak för inverstransformen. Det gäller då att X r (e jω ) = 0.5 ( X(e jω ) + X (e jω ) ) ix i (e jω ) = 0.5 ( X(e jω ) X (e jω ) ) Från dessa samband härleder vi { X i (e jωn ixr (e ) = jω ), 0 ω < π ix r (e jω ), π ω < 0 eller på filterform X i (e jω ) = H(e jω )X r (e jω ) där H(e jω ) = { i, 0 ω < π i, π ω < 0 Matlabs funktion hilbert opererar direkt i FFT:n X[n] genom att nollställa alla spegelfrekvenser. För jämna N, blir X c [n] = X[n]H[n] där 1, n = 0,N/2 H[n] = 2, n = 1,2,...,,N/2 1 0, n = N/2 + 1,...,N 1 Detta svarar mot ett diskret filter h[n] enligt figur 3.5. Eftersom impulssvaret avtar som 1/n är det inte helt enkelt att implementera, även om varannan koefficient är noll. Numeriskt exempel Ett exempel på frekvensskattning där f 0 = 1/6 ges nedan:
3.1 Hilberttransformen 19 1 Impulssvar för diskreta hilbertfiltret 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 0 5 10 15 20 25 30 35 Figur 3.5 Impulssvar för hilbertfilter >> x=sin(2*pi*[0:5]/6) x = 0 0.8660 0.8660 0.0000-0.8660-0.8660 >> xc=hilbert(x) xc = 0-1.0i 0.8660-0.5i 0.8660+0.5i 0.0+1.0i -0.8660+0.5i -0.8660-0.5i >> fft(x) ans = 0.0-0.0-3.0i 0.0-0.0 0.0-0.0+3.0i >> fft(x) ans = 0.0-0.0-3.0i 0.0-0.0 0.0-0.0+3.0i >> diff(angle(xc))/2/pi ans = 0.1667 0.1667 0.1667 0.1667-0.8333 Notera att övre frekvensindex blir noll i Hilberttransformen, och att en moduloopereration som skiftar in frekvenserna i intervallet [0,0.5]
20 Innehåll 0.5 0.45 Referens SNR = 10 SNR = 100 Modulationsfrekvensskattning, N=30 0.7 0.6 Frekvensskattning med hilberttransform, N=30 Referens SNR = 10 SNR = 100 0.5 0.45 Referens SNR = 10 SNR = 100 AR(2) frekvensskattning, N=30 0.4 0.4 Skattad frekvens (normaliserad) 0.35 0.3 0.25 0.2 0.15 Skattad frekvens (normaliserad) 0.5 0.4 0.3 0.2 Skattad frekvens (normaliserad) 0.35 0.3 0.25 0.2 0.15 0.1 0.1 0.1 0.05 0.05 0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Sann frekvens (normaliserad) (c) (a) 0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Sann frekvens (normaliserad) 0 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 Sann frekvens (normaliserad) (b) Figur 3.6 Jämförelse av de grundmetoder för frekvensskattning: baserat på frekvensmodulering och fasdifferenser, baserat på hilberttransformering och fasdifferenser, och modellbaserad AR(2)-metod. behövs. 3.1.4 Utvärdering Vi ska här studera hur de två icke-parametriska metoder förmår skatta en ren sinus från brusiga mätningar. Figur 3.6 sammanfattar de numeriska resultaten: Modulationsbaserat skattning sker rekursivt och med cirka 16 multiplikationer och additioner per sampel för själva moduleringen. Det tillkommer operationer för arctan och division i argumentberäkningarna för varje sampel, samt medelvärdesbildning. Efter en transient om 20 sampel fås en fasdifferensskattning av frekvens utan bias och med låg varians. Hilberttransformen implementerad i frekvensdomänen arbetar segmentvis på data och kräver då log 2 (N) operationer per sampel i snitt. Det tillkommer operationer för arctan och division i argumentberäkningarna för varje sampel, samt medelvärdesbildning. Skattningen förefaller ha en viss bias för låga frekvenser med få data, men variansen är liten. AR-skattningen byggs upp av normalekvationerna i minstakvadratmetoden, och dessa kräver cirka 5 operationer per sampel. Skattningen bildas med cirka 6 operationer samt lösning av andragradsekvation och argumentberäkning, men behöver inte ske
3.1 Hilberttransformen 21 varje sampel. AR-modellen modellerar inte en sinus i brus på korrekt sätt så därför erhålls en bias, och variansen är större än för de bägga andra metoderna.