glados.no/ntnu/ttt4120/summary/summary.md

33 KiB

title description date math
Oppsumering av TTT4120 En liten oppsummering og formler i TTT4120, høsten 2020. 2020-12-06 true

Diskret tid

Denne typen signaler baserer seg på at de kan representeres av en sekvens med tall. Sekvensen kan representere amplituden til et signal, ved tidspunkt n.

 x[n] = \{\ldots, x[-1], \underline{x[0]}, x[1], \ldots\} 

Der verdien med strek under er målingen ved n=0.

Sampling

Signalene kan lages ved å sample et analogt signal.

 x[n] \stackrel{_\Delta}{=} x_a(nT)

Der tiden mellom samples er gitt ved T = \frac{1}{F_S}, der samplings-frekvensen (samples per sekund) er F_S.

T trenger ikke å være tid, men f.eks. posisjonen på en stang.

Diskret-tid operasjoner

Skalering, addering, og multiplikasjon:

 
\begin{gather*}
  y[n] = ax[n] \\
  y[n] = x_1[n] + x_2[n] \\
  y[n] = x_1[n]x_2[n]
\end{gather*} 

Tidsforskyvninger og folding

 
\begin{gather*}
  y[n] = x[n-k] \\
  y[n] = -x[n] 
\end{gather*} 

Tidsforskyvninger sammen med folding

 y[n] = x[-n+k] 

Egenskaper til Diskret tid

En sekvens x[n] er kausal dersom:

 x[n] = 0, n<0 

En sekvens x[n] er periodisk med en periode N dersom:

 x[n+N] = x[n], \forall n 

Klassifikasjoner til Diskret tid

En sekvens x[n] er bundet dersom:

 |x[n]| \leq B_x \leq \infty 

En sekvens x[n] er Absolutt summerbar dersom:

 \sum_{n=-\infty}^\infty |x[n]| < \infty 

En sekvens x[n] er Kvadratisk-summerbar dersom energien:

 E_x = \sum_{n=-\infty}^\infty |x[n]|^2 < \infty 

Dette signalet er et energisignal, ikke alle sekvenser er energisignaler. Periodiske er ikke.

Den gjennomsnittlige effekten til en sekvens, er derfinert:

 P_x = \lim_{n\rightarrow\infty} \frac{1}{2N + 1}\sum_{n=-N}^N |x[n]|^2 

Viktige typer sekvenser

Enhetspulsen (Delta-puls)

 \delta[n-k] = 
\begin{cases}
  1 & n=k \\
  0 & n\neq k
\end{cases} $$

Denne du får standardversjonen ved å sette $k=0$.

#### Enhetssteg

$$ u[n-k] = 
\begin{cases}
  1 & n\geq k \\
  0 & n < k
\end{cases}

Denne du får standardversjonen ved å sette k=0.

Sinus

Dersom en sinus-kurve skal være periodisk med en periode N, og siden vi vet at en diskret-tid sinus er periodisk med 2\pi, har vi at:


\begin{aligned}
  \cos(2\pi n) &= \cos(2\pi f (n+N)) \\
  \Rightarrow 2\pi f N &= 2\pi k \\	
  \Rightarrow f &= \frac{k}{N}
\end{aligned}

Kompleks-eksponensial

 x[n] = Ae^{[2\pi f n + \theta]} 

Denne har også en periodisitet på 2\pi, og sekvensen er periodisk dersom f er rasjonell.

Denne er veldig viktig i diskret-tid Fourier representasjon.

Sampling av en sinus-funksjon

Anta vi sampler en analog sinus-funksjon med intervallene nT = \frac{n}{F_S}:

 x_a(t) = A\cos(\Omega t) = A\cos(2\pi F t) 

Da vil den diskrete sekvensen være:


\begin{aligned}
  x[n] 	&= x_a(nT) \\
        &= A\cos\left[2\pi\frac{F}{F_S}n\right] \\
        &= A\cos\left[2\pi f n\right]
\end{aligned}

Der vi har f=\frac{F}{F_S} eller \omega = \Omega T, som er den relative/normaliserte frekvensen (uavhengig av samlingfreksensen).

Fra før vet vi at:

 
\begin{aligned}
  -\frac{1}{2} < &f \leq \frac{1}{2} \\
  -\frac{F_S}{2} < &f \leq \frac{F_S}{2}
\end{aligned}

Dekomponering av signaler

Vi kan få ut en verdi av en sekvens ved å gange inn enhetspulsen på en gitt n.

 x[k] = x[n]\delta[n-k] 

Der hele signalet kan gis som en sum av hver sekvensverdi:

 x[n] = \sum_{k=-\infty}^\infty x[k]\delta[n-k] 

Diskret-tid-systemer

Et diskret-tid-system kan klassifiseres som:

  • Lineær eller ikke-lineær
  • Tidsinvariant eller tidsvariant
  • Kausale eller ikkekausale

I diskret-tid-systemer gjelder følgende:

  • Superpossisjon (lineæritet)
  • Varierer ikke med tiden (tidsinvariant)
  • Kausalt
    • Resultatet er kun avhengig av tidligere eller nåværende verdier
  • Ikke-kausalt
    • Gunstig å implimentere der vi vet alle verdier i en sekvens, men ikke i sanntidssystemer.
  • Stabile
    • Et system er kun stabilt dersom for hvert bundet inngangssignal er det et bundet utgangssignal.

Impulsrespons

Vi sender ut en enhetspuls og ser på hvordan systemet utvikler seg.

Impulsrespons

Vi kan finne impulsresponsen ved å sette x[n] = \delta[n]. Da får vi at y[n] = h[n].

Konvolusjon


\begin{aligned}
  y[n] 	&= \mathcal{H}\{x[n]\} \\
        &= \mathcal{H}\left\{\sum_k x[k]\delta[n-k]\right\}\\
        &= \sum_k x[k]\mathcal{H}\left\{\delta[n-k]\right\} \\
        &= \sum_k x[k] h[n-k] \\
        &= x[n] * h[n]
\end{aligned}

Det er mulig å gjøre konvolusjon både stegvis eller med en matrise.

Matrisen er bare å lage en "gangetabell med verdiene i sekvensene, gange sammen og summere anti-diagonalene.

Utregning av Konvolusjon

Dersom lengden av sekvensen x[n] er N_x og lengden av h[n] er N_h, vil lengden av konvolusjonen være:

 N_y = N_x + N_h - 1 

Lengde av systemer

Det finnes to typer lengde på impulsresponsen. IIR og FIR.

IIR

"Infinite(-duration) impulse response", er et system der lengden av impulsresponsen er uendelig i lengde. Typisk er utgangen avhengig av forrige resultat.

FIR

"Finite(-duration) impulse response", er et system der impulsresponsen har en endelig lengde.

Diskret-tid Fourieranalyse

Analytisk transformasjon (DTFT)

 X(\omega) = \sum_{n=-\infty}^\infty x[n]e^{-j\omega n} 

Og invers transformasjon (syntetisk transformasjon)

 x[n] = \frac{1}{2\pi}\int_{-\pi}^\pi X(\omega) e^{j\omega n} d\omega

Grensene for frekvensdomenet er fra -\pi til \pi.

Notasjonen er som følger

 x[n] \stackrel{\mathcal{F}}{\leftrightarrow} X(\omega) 

Egenskaper

Symmetri

Odde og like funksjoner, likt som imaginære og ikke imaginære (reelle).

  • Odd: x[-n] = -x[n]
  • Lik: x[-n] = x[n]

Man kan skrive en sekvens på formen:

 x[n] = \underbrace{x_R[n]}_{\text{reell}} + \underbrace{jx_I[n]}_{\text{imaginær}} 

DTFT symmetrier

Andre egenskaper

  • Tidsforskyvning
 x[n-k] \stackrel{\mathcal{F}}{\leftrightarrow}e^{-j\omega n}X(\omega) 
  • Tidsreversering
 x[-n] \stackrel{\mathcal{F}}{\leftrightarrow} X(-\omega) 
  • Konvolusjon
 x_1[n] * x_2[n] \stackrel{\mathcal{F}}{\leftrightarrow} X_1(\omega)X_2(\omega) 
  • Frekvensskifting
 e^{j\omega_0 n}x[n] \stackrel{\mathcal{F}}{\leftrightarrow} X(\omega - \omega_0) 
  • Modulasjon
 
\begin{gather*}
  x[n] \cos(\omega_0 n) \\
  \updownarrow\mathcal{F} \\
  \frac{1}{2}\left[(X(\omega - \omega_0)+ (X(\omega + \omega_0)\right]
\end{gather*} 
  • Parseval
 
\begin{gather*}
  \sum_n |x[n]|^2\\
  \updownarrow\mathcal{F} \\
  \frac{1}{2\pi}\int_{-\pi}^\pi X(\omega)d\omega
\end{gather*} 
  • Vindu
 
\begin{gather*}
  x_1[n]x_2[n]\\
  \updownarrow\mathcal{F} \\
  \frac{1}{2\pi}\int_{-\pi}^\pi X_1(\lambda)X_2(\omega - \lambda)d\omega
\end{gather*} 

Z-transformasjon

Z-transformasjonen av et diskret sekvens er gitt som:

 X(z) = \mathcal{Z}\{x[n]\} = \sum_{n=-\infty}^\infty x[n]z^{-n} 

Notasjonen er:

x[n] \stackrel{\mathcal{Z}}{\leftrightarrow} X(z)
x[n] = \mathcal{Z}^{-1}\{X(z)\}

Transformasjonen transformerer en sekvens til den tilsvarende representasjonen i det komplekse z-planet.

ROC (Region of convergence) er settet med alle verdier av z der X(z) har en endelig verdi.

Transformasjonen bestemmer ikke unikt tids-sekvensen. Ved å velge en ROC kan vi lage et ønsket signal/filter.

Dersom vi har at ROC er alt utenfor en sirkel, er sekvensen kausal.

Dersom ROC er innsiden av en sirkel, er sekvensen antikausal.

Egenskaper

  • Lineær
    • ROC av resultatet er minst \mathcal{R}\_{X_1} \cap \mathcal{R}\_{X_2}
  • Tidsforskyvning
    • ROC lik som for X(z)
 x[n-k] \stackrel{\mathcal{Z}}{\leftrightarrow}z^{-k}X(z) 
  • Skalering
    • Dersom ROC før skalering er r_1 < \|z\| < r_2, så er ROC etter lik \|a\|r_1 < \|z\| < \|a\|r_2.
 a^n x[n] \stackrel{\mathcal{Z}}{\leftrightarrow} X(a^{-1} z) 
  • Tidsreversering
    • Dersom ROC er r_1 < \|z\| < r_2 , så er ROC etter tidsreversering \frac{1}{r_2} < \|z\| < \frac{1}{r_1}
 x[-n] \stackrel{\mathcal{Z}}{\leftrightarrow} X(z^{-1}) 
  • Konvolusjon
    • ROC minst snittet av ROC til X_1 og X_2.
 x_1[n]*x_2[n]\stackrel{\mathcal{Z}}{\leftrightarrow} X_1(z)X_2(z)
  • Derivering
    • ROC er den samme
    • Initialverditeroremet: x[0] = \lim_{z\rightarrow \infty}X(z), betyr at x[n] er kausalt.
 nx[n] \stackrel{\mathcal{Z}}{\leftrightarrow} -z\frac{dX(z)}{dz} 

Rasjonelle z-transformasjoner

Rasjonell dersom transformasjonen kan bli representert som forholdet mellom to polynomer i z^{-1} eller z.


\begin{aligned}
  X(z) 	&= \frac{B(z)}{A(z)} \\
        &= \frac{b_0 + b_1 z^{-1} + \ldots + b_M z^{-M} }{a_0 + a_1 z^{-1} + \ldots + a_N z^{-N}} \\
        &= \frac{b_0}{a_0}\frac{\prod_{k=1}^M \left(1-z_k z^{-1}\right)}{\prod_{k=1}^N \left(1-p_k z^{-1}\right)}
\end{aligned}

Systemanalyse

Systemanalyse

Dersom vi har et system som vist over, sender inn en sekvens x[n] eller X(z) og observerer utgangen y[n] eller Y(z), kan vi finne systemfunksjonen.

h[n] = \frac{y[n]}{x[n]}
 H(z) = \frac{Y(z)}{X(z)} 

Vi kan bruke transformasjonen til å gå mellom dem.

Begge er helt ekvivalente.

Kausalitet og stabilitet

For at et system skal være kausalt, må ROC være alt utenfor en sirkel.

For at et system skal være BIBO stabilt, må enhetssirkelen z = e^{-j\omega} være med i ROC.

Det er mulig å bestemme om et system er kausal og stabilt ved å velge ROC.

ROC må heller ikke inneholde noen poler.

Frekvensrespons

For å finne frekvensresponsen til et system, "går" man langs enhetsirkelen, fra -\pi til \pi.

Utregning

Dersom vi har frekvensresponsen til et system:

 H_1(z) = \frac{1}{1-\frac{1}{2}z^{-1}} 

Matlabløsningen er som under

{% highlight matlab %} B = 1; A = [1 -0.5]; figure(1) zplane(B,A) figure(2) [H,W]=freqz(B,A); plot(W/pi,abs(H)); {%endhighlight%}

Filteregenskaper

Frekvensresponsen til et system bestemmer hvordan type system det er.

  • Båndpass
    • Slipper gjennom visse frekvenser
  • Båndstopp
    • Stopper visse frekvenser
  • Lavpass
    • Slipper gjennom lave frekvenser
  • Høypass
    • Slipper gjennom høye frekvenser

Lavpass

I et lavpassfilter ønsker vi å putte polene nærme(re) z=1, og nuller nærme(re) z=-1.

Dersom vi ser på et pol-null-plot ser vi at frekvensen er 0 ved z=1, og poler forsterker et signal når vi er "nærme" det (ref tilbake til hvordan finne frevensresponsen til en z-transformasjon).

Høypass

I et høypassfilter ønsker vi det motsatte av et lavpassfilter. Vi ønsker å putte så mange nuller nærheten av z=1, og så mange poler i nærheten av z=-1.

Dette er av samme grunn som for et lavpass.

"Notch"-filter

Kan isolere seg rundt en veldig spesifik frekvens og fjerne den.

For å oppnå dette, så kan man putte noen nuller på enhetssirkelen og noen poler i nærheten av nullene. Da får vi veldig smale bånd.

Kamfilter

Litt som et omvendt "notch"-filter. Det er periodiske nuller langs enhetssirkelen. Ender opp med noe som ligner på en kam.

Allpassfilter

Dette filteret har en amplituderespons på 1. Men den kan endre fasen på signalet ved gitte frekvenser.

Lineær-fase-filtere

Dette er ønskelig, fordi da får vi kun en tidsforsinkning i utgangssignalet i båndpass. For et lavpass er dette for lave frekvenser.

 \angle H(\omega) = a + b\omega 

Der

H(\omega) = |H(\omega)| e^{j\angle H(\omega)} 

Da vil nullene komme i resiproke par. Altså dersom vi har en null i en vinkel, og avstand fra enhetssirkelen. Da vil den resiproke nullen være i samme vinkel, men samme avstand fra enhetssirkelen, bare på andre siden av sirkelen.

Lineær fase

Inverse- og minimumsfase-systemer

Dersom et system \mathcal{T} er inverterbart, kan vi finne inngangssignalet dersom vi har utgangsignalet og den inverterbare systemgfunksjonen.


\begin{gather*}
  h[n]*h_I[n] = \delta[n] \\
  \updownarrow\mathcal{Z} \\
  H(z)H_I(z) = 1
\end{gather*}

Minimumsfasefilter

Et system kalles minimumfase dersom alle nuller og poler ligger innenfor enhetssirkelen.

Et stabilt pol-null-system som er av typen minimum fase har en stabil invers som også er minimum fase.

Korrelasjon

Korrelasjon er et mål på likhet.

Krysskorrelasjon

Dersom vi har en sekvens x[n] og y[n], vil kryssrelasjonen mellom disse to være:

 
\begin{aligned}
  r_{xy}[l]	&= \sum_{n=-\infty}^\infty x[n]y[n-l] \\
            &= \sum_{n=-\infty}^\infty x[n + l]y[n] \\
            &\phantom{=} \text{der } l = \pm 1, \pm 2, \ldots
\end{aligned}

Denne måler likheten mellom signalene x[n] og y[n].

Denne er ikke "kommutativ", altså r_{xy}[l] \neq r_{yx}[l].

Men følgende holder:

r_{yx}[l] = r_{xy}[-l]

Autokorrelasjon

Måler selvlikhet, y[n] = x[n].

 
\begin{aligned}
  r_{xx}[l]	&= \sum_{n=-\infty}^\infty x[n]x[n-l] \\
            &= \sum_{n=-\infty}^\infty x[n + l]x[n] \\
            &\phantom{=} \text{der } l = \pm 1, \pm 2, \ldots
\end{aligned}

Egenskaper til autokorrelasjon

Energi i sekvenser x[n]:

 E_x = \sum_{n=-\infty}^\infty x^2[n] = r_{xx}[0] \geq 0 

Autokorrelasjonen har maksimum lag l=0:

 |r_{xx}[l]| \leq r_{xx}[0] = E_x 

Autokorrelasjon er en lik funksjon:


\begin{aligned}
  r_{xy}[l]	&= r_{yx}[-l]	\\
            &\Downarrow		\\
  r_{xx}[l]	&= r_{xx}[-l]
\end{aligned}

Normaliserte versjoner:


\begin{aligned}
  \varrho_{xx}[l]   &= \frac{r_{xx}[l]}{r_{xx}[0]} 	\\
                    &\Downarrow 										\\
  |\varrho_{xx}[l]| &\leq 1													\\ \\
  \varrho_{xy}[l]		&= \frac{r_{xy}[l]}{\sqrt{r_{xx}[0]r_{yy}[0]}}\\
                    &\Downarrow 																	\\
  |\varrho_{xy}[l]| &\leq 1
\end{aligned}

Spektral tetthet (Energi)

Størrelsen S_{xx}(\omega)\geq 0 er den spektrale tettheten til x[n].

For å finne denne størrelsen, gjør vi en Fourier-transformasjon av autokorrelasjonen r_{xx}[n]:


\begin{aligned}
  r_{xx}[l]     &= x[l] * x[-l] 					\\
                &\updownarrow \mathcal{F}	\\
  S_{xx}(\omega)&= X(\omega)X^*(\omega)		\\
                &= |X(\omega)|^2
\end{aligned}

Størrelsen S_{xy}(\omega) er den kryssspektrale tettheten.


\begin{aligned}
  r_{xy}[l]     &= x[l] * y[-l] 					\\
                &\updownarrow \mathcal{F}	\\
  S_{xy}(\omega)&= X(\omega)Y^*(\omega)
\end{aligned}

Inngang-utgangs-korrelasjoner

Inngang-utgangs-korrelasjoner

I z-transformasjon


\begin{gathered}
  h[l]*h[-l]                  \\
  \updownarrow\mathcal{Z}  \\
  H(z)H(z^{-1})               \\ \\

  r_{xy} = h[l]*r_{xx}[l]     \\
  \updownarrow\mathcal{Z}  \\
  H(z)S_{xx}(z)               \\ \\

  r_{yy} = r_{hh}[l]*r_{xx}[l]\\
  \updownarrow\mathcal{Z}  \\
  H(z)H(z^{-1})S_{xx}(z)
\end{gathered}

Utgangs og kryssspektral tetthet


\begin{aligned}
  S_{yy}(\omega)  &= |H(\omega)|^2 S_{xx}(\omega) \\
                  &= |H(\omega)|^2 |X(\omega)|^2  \\ \\

  S_{yx}(\omega)  &= H(\omega)S_{xx}(\omega)
\end{aligned}

Invers Z-transformasjon

Z-transformasjonen

Det enkleste for å gjøre en invers z-transformasjon er å delbrøkoppspalte likningen.

Vi kan skrive:

 
\begin{aligned}
  x[n]  &= \sum_{k=1}^N R_k z^{-1} \\
        &= \sum_{k=1}^N R_k p_k^n u[n]
\end{aligned}

Der p_k er den k-ende polen, og R_k er resydyren ved p_k.

Dersom vi har komplekskonjugerte par, p_k = p_i^\* er også residyrene komplekskonjugerte, R_k = R_i^*.

For å delbrøkoppspalte, må vi gjøre følgende:

  1. Faktorisere nevnerpolynomet A(z) for å finne alle poler p_1, \ldots, p_N.
  2. Deretter finne residyrene R_1, \ldots, R_N.

Det første punktet er ganske greit, det er bare å faktorisere som vanlig, med komplekse tall. Det å finne residyrene er vanskeligere.

Finnes to metoder for å finne poler og residyrer, løse lineære likninger, som ofte tar veldig lang tid. Selv om dette er en langvarig prosess, fungerer den alltid.

Vi kan også bare gange begge sider med 1-p_k z^{-1}. Da ender vi opp med å få R_k alene uten noen faktorer med poler.

Videre setter man z=p_k. Da vill alt annet enn R_k forsvinne, og vi finner en verdi for R_k.

En generell formel er som følger:

 R_k = (1-p_k z^{-1})X(z)\Big|_{z=p_k} 

Eksempel (regning)

Vi skal delbrøkoppspalte:


\begin{aligned}
  X(z)  &= \frac{1}{\left(1-\frac{1}{4}z^{-2}\right)} \\
        &= \frac{1}{\left(1-\frac{1}{2}z^{-1}\right)\left(1+\frac{1}{2}z^{-1}\right)}\\
        &= \frac{R_1}{1-\frac{1}{2}z^{-1}} + \frac{R_2}{1+\frac{1}{2}z^{-1}}
\end{aligned}

Det er da veldig lett å løse residyrene ved bruk av formelen:


\begin{aligned}
  R_1 &= \left(R_1 + \frac{R_2\left(1-\frac{1}{2}z^{-1}\right)}{1+\frac{1}{2}z^{-1}}\right)\Bigg|_{z=\frac{1}{2}} \\
      &= \frac{1}{1+\frac{1}{2}z^{-1}}\bigg|_{z=\frac{1}{2}} = \frac{1}{2}\\ \\
  R_2 &= \left(\frac{R_1\left(1+\frac{1}{2}z^{-1}\right)}{1-\frac{1}{2}z^{-1}} + R_2\right)\Bigg|_{z=-\frac{1}{2}} \\
      &= \frac{1}{1-\frac{1}{2}z^{-1}}\bigg|_{z=-\frac{1}{2}} = \frac{1}{2}
\end{aligned}

Eksempel 1 (MatLab)

Skal finne impulsresponsen på:

 H(z) = \frac{3 - 4z^{-1}}{1 - 3.5z^{-1} + 1.5z^{-2}} 

Dette kan løses i matlab med koden under.

{% highlight matlab %} B = [3 -4]; A = [1 -3.5 1.5];

[R,P,C] = residuez(B,A);

R % Residues P % Poles C % Direct terms (if improper) {% endhighlight %}

Eksempel 2 (MatLab)

Dersom vi også ønsker å plotte frekvensresponsen til en annen funksjon:

H(\omega) = \frac{1 - e^{-j2\omega}}{1 - 0.81e^{-j2\omega}}

Så kan det løses i matlab med koden under:

{% highlight matlab %} B = [1 0 -1]; A = [1 0 -0.81]; W = [0:1:500]*pi/500; H = freqz(B,A,W);

magH = abs(H); phaH = angle(H);

subplot(2,1,1); plot(W/pi,magH); xlabel('Frequency in pi units') ylabel('Magnitude')

subplot(2,1,2); plot(W/pi,phaH); xlabel('Frequency in pi units') ylabel('Phase') {% endhighlight %}

Diskret Fouriertransformasjon (DFT)

Litt som DTFT, men her sampler vi frekvensdomenet. Som videre kan rekonstrueres tilbake til en fullverdig kontinuerlig frekvensrespons.

Denne kan effektiviseres med en algoritme kalt FFT (Rask fouriertransformasjon eller "Fast Fourier Transform").

Frekvenssampling

Vi sampler frekvensene i intervallet 0\leq\omega<2\pi, med N likte mye mellom punktene.

X(\omega_k) = X(\omega)|_{\omega = \omega_k} 

Der:

 \omega_k = \frac{2\pi k}{N}, k = 0, \ldots, N-1 

Siden DTFT av signalet er periodisk med 2\pi, vet vi at DFT også er periodisk med N, e^{-\frac{j2\pi}{N}n} = e^{-\frac{j2\pi}{N}(n+N)}

Dersom vi tar DTFT av en sekvens x[n] evaluert i punktene \omega_k, får vi:

X(\omega_k) = \sum_{n=0}^{N-1} x_p[n]e^{-\frac{j2\pi k}{N}n} 

Der den periodiske utvidelsen av x[n], x_p[n] er definert:

 x_p[n] = \sum_{l=-\infty}^{\infty} x[n - lN] 

For at vi skal kunne rekonstruere det orginale spektrumet, må vi vite følgende:

Vi trenger DFT med størrelse N \geq M + L - 1, for å unikt rekonstuere y[n] i frekvensdomenet. Der M og L er lengden av to sekvenser vi ønsker å konvulere.

Diskret-tid-fourierrekke


\begin{gathered}
  x_p[n] = \sum_{k=0}^{N-1}c_k e^{\frac{j2\pi k}{N}n}, n=0,\ldots,N-1 \\
  c_k = \frac{1}{N}\sum_{n=0}^{N-1}x_p[n] e^{-\frac{j2\pi k}{N}n} = \frac{1}{N}X\left(\frac{2\pi k}{N}\right)
\end{gathered}

Diskret Fouriertransformasjon (DFT)

X(k) = \sum_{n=0}^{N-1}x[n]e^{-\frac{j2\pi k}{N}n}, k=0,\ldots,N-1 

Invers Diskret Fouriertransformasjon (IDFT)

x[n] = \frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{\frac{j2\pi k}{N}n}, n=0,\ldots,N-1 

Egenskaper til DFT

Ganske like som i DTFT

  • Periodisk
  • Lineær
  • Tidsreversering
  • Sirkulær tidsforskyvning
  • Sirkulær frekvensforskyvning
  • Konjugerte
  • Sirkulær konvolusjon
  • Multiplikasjon av to sekvenser
  • Parsevals teorem

Filtrering med DFT

Dersom vi har to sekvenser, x[n] og h[n] med lengder L og M, må de "paddes" med 0 på slutten, slik at lengden av sekvensene er begge N.


\begin{aligned}
  x[n] &= \{x[0], \ldots, x[L-1], \underbrace{0,\ldots,0}_{N-L}\} \\
  h[n] &= \{h[0], \ldots, h[L-1], \underbrace{0,\ldots,0}_{N-M}\}
\end{aligned}

Da kan utgangssekvensen beregnes med DFT.


\begin{aligned}
  y[n]  &= \text{IDFT}_N\{Y(k)\} \\
        &= \text{IDFT}_N\{\text{DFT}_N\{h[n]\}\cdot\text{DFT}_N\{x[n]\}\}
\end{aligned}

Dersom vi velger N < M + L - 1 vil vi kunne få aliasing i tidsdomenet.

Filtrering av lange sekvenser

Dersom vi har veldig lange sekvenser kan det bli veldig utregningsmessig komlekst. Dette er spesielt merkbart i sanntidsprossesering (ikke noe start eller slutt).

Det er mulig å dele opp sekvensene i mindre biter. Da brukes den additive egenskapen til konolusjon.


\begin{aligned}
  y[n]  &= h[n] * (x_1[n] + x_2[n]) \\
        &= h[n] * x_1[n] + h[n] * x_2[n] \\
        &= y_1[x] + y_2[n]
\end{aligned}

Dette brukes videre for å filtrere lange sekvenser:

  1. Del opp sekvensen x[n] opp i ikke-overlappende blokker x_m[n], hver med lengde L.
  2. Filtrer hver blokk x_m [n] med h[n] for å produsere utgangsblokken y_m[n].
  3. Kombiner blokkene sammen til den totale sekvensen.
y[n] = \sum_m y_m[n]

Dersom lengden av h[n] er M, vil lengden av y[n] være L+M-1. Dermed vil de siste M-1 verdiene i sekvensen y_{m-1}[n] bli lagt til i starten av neste blokk y_m[n].

Lange sekvenser 

Stokastiske signaler

Forventet verdi:

 m_X = E\{X\} = \int_{-\infty}^\infty xp_X(x)dx 

Andre ordens moment:

 E\{X^2\} = \int_{-\infty}^\infty x^2 p_X(x)dx 

Varians:

 
\begin{aligned}
  \sigma_X^2  &= E\{(X - m_X)^2\} \\
              &= \int_{-\infty}^\infty (x-m_X)^2 p_X(x)dx \\
              &= E\{X^2\} - m_X\}
\end{aligned}$$

### Autokorrelasjon av en stokastisk prosess

\begin{gathered} \gamma_{XX}(n,n+l) = E{X[n]X[n+l]} \ = \int_{-\infty}^\infty x_1x_2 p_{X[n]X[n-l]}(x_1 x_2)dx_1 dx_2 \end{gathered}



### Krysskorrelasjon av en stokastisk prosess

$$ \gamma_{XY}(n,n+l)) = E\{X[n]Y[n+l]\} $$

### Hvitt Gausisk Støy

Et viktig signal er det hvite gausiske støyet. Det er uavhengig, og har forventet verdi  $0$. 
Variansen til signalet er $\sigma_W^2$ og autokorrelasjonen er $\sigma_W^2 \delta[n]$.

Alle verdier i sekvensen er ukorrelerte.

### Filtrering av stokastiske signaler

Dersom vi har en stokastisk prosess $X[n]$, vil en realisjon av denne prosessen være $x[n]$. 
Dersom vi filtrerer signalet med $h[n]$, hva blir da den forventede verdien.

\begin{aligned} m_Y &= E{Y[n]} \ &= E\left{\sum_{k=-\infty}^\infty h[n] X[n-k]\right} \ &= \sum_{k=-\infty}^\infty h[n] E\left{X[n-k]\right} \ &= m_X \sum_{k=-\infty}^\infty h[n] \ &= m_X \sum_{k=-\infty}^\infty h[n] e^{j2\pi 0 k} \ &= m_X H(0) \end{aligned}



**Autokorrealsjonen** av det stokastiske utgangssignalet $Y[n]$:

\begin{aligned} \gamma_{YY}[l] &= E{Y[n]Y[n+l]} \ &= h[-l]h[l]\gamma_{XX}[l] \ &= r_{hh}[l] * \gamma_{XX}[l]
\end{aligned}



**Spektral tetthet for effekten** av det stokastiske signalet $Y[n]$:

\begin{aligned} \Gamma_{YY}(f) &= \mathcal{F}{\gamma_{YY}[l]} \ &= \mathcal{F}{r_{hh}[l] * \gamma_{XX}[l]} \ &= \mathcal{F}{r_{hh}[l]}\mathcal{F}{\gamma_{XX}[l]} \ &= S_{hh}(f)\Gamma_{XX}(f) \ &= |H(f)|^2 \Gamma_{XX}(f) \end{aligned}



> Den spektrale utgangstettheten er produktet av den spektrale inngangstettheten og amplituderesponsen til filteret kvadrert.

## Estimering

Mangler, kommer kanskje senere

## Design av digitale filter

Alle filtere beskrevet under kan lages med funksjonen `filterDesigner` i MatLab.

Digitale filtere brukes for å modifisere et signal i frekvensdomenet, eller i tidsdomenet.
Det kan forskyve signalet, forsterke/fjerne gitte frekvenser, fjerne støy og så videre.

Det finnes flere måter å implimentere et digitalt filter, men de to hovedtypene er FIR (Finite Impulse Response, Endelig impulsrespons) og IIR (Infinite Impulse Response, Uendelig impulsrespons).

De fem hovetypene av filter er:

* Lavpass
* Høypass
* Båndpass
* Båndstopp
* Allpass

Det ideelle lavpassfilteret har skarpe kanter ved knekkfrekvensen.

![Ideelt filter](figures/idealFilter.svg)

Impuls responsen til dette filteret er ikke kausal og har uendelig lengde, kompleksitet og forsinkelse.
Det er derfor ikke fysisk mulig å implimentere.

For å konstruere et filter, pleier man å finne løsningen med minst kompleksitet for gitte spesifikasjoner.

* Det vil forekomme små rippler i passbåndet
* Amplituden i stoppbåndet er ikke konstant
* Overgansbåndet (ved knekkfrekvensen) må ha en lengde.

Desto strammere spesifikasjonene er, desto mer komnplekst blir systemet.

Kausalt filter, med reelle verdier på formen:

$$ H(z) = \frac{b_0 + b_1 z^{-1} + \cdots + b_M z^{-M}}{1 + a_1 z^{-1} + \cdots + a_N z^{-N}} $$


### FIR mot IIR

FIR: 

\begin{gathered} H(z) = \sum_{k=0}^{M-1} b_k z^{-k} \ \Downarrow\ y[n] = \sum_{k=0}^{M-1} b_k x[n-k] \end{gathered}



* Alltid stabile
* Kan oppnå lineær fase
* Enkelt å designe med lineære metoder
* Enkel å implimentere

IIR: 

\begin{gathered} H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 + \sum_{k=1}^{N} a_k z^{-k}} \ \Downarrow\ y[n] = -\sum_{k=1}^{N} a_k y[n-k] + \sum_{k=0}^{M} b_k x[n-k] \end{gathered}



* Ferre parametere
* Mindre minne
* Lav forsinkelse
* Mindre komplese utregninger
* Typisk designet ved å transformere et analogt filter


### FIR

For at det skal være mulig å lage et lineært fast filter må ha en symmetrisk impulsrespons.

Det finnes fire alternativer, der lengden av impulsresponsen er $M$:

* Type I
  * M er odd, og $h[n]$ er symmetrisk
* Type II
  * M er lik, og $h[n]$ er symmetrisk
* Type III
  * M er odd, og $h[n]$ er anti-symmetrisk
* Type IV
  * M er lik, og $h[n]$ er anti-symmetrisk


For å designe et FIR filter, kan vi starte med ønsket spesifikasjon, $H(\omega)$, for å så finne impulsresponsen ved å invers foriertransformere.
Resultatet har typisk ikke en endelig lengde, så responsen må avgrenses (truncate).

Ved bruk av et rektangulært vindu, vil vi få den smaleste hovedloben, men mer sidelober (som ikke demper riktig), og den totale dempingen i stoppbåndet er ikke veldig stor.

#### Equiripple-design

En ulempe med vindumetoden er at du har lite kontroll over de kritiske frekvensene og dempingen i stoppbåndet.

Vi ønsker heller å desgine et filter som minimerer det maksimale avviket fra den ønskede spesifikasjonen.

##### MatLab

{% highlight matlab %}
E = [0 0.3 0.4 1];
A = [1 1 0 0];
M = 15;
B = firpm(M-1, E, A)
w = linspace(0,pi,500);
H = freqz(B,1,w);
figure
subplot(2,1,1),
stem(B);
subplot(2,1,2),
plot(w/pi,abs(H));
{% endhighlight %}


### IIR

Brukes mest for bevegende og rekursivt snitt. 

Filteret har både poler og nuller.

$$ H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 + \sum_{k=1}^{N} a_k z^{-k}} $$

For en gitt filterorden, vil den kunne ha strammere spesifikasjoner enn FIR.

Finnes i hovedsak tre måter å designe et IIR filter på.
Man kan se på følgende:

* Systemfunksjonen
* Impulsresponsen
* Differensiallikninger


Videre ser vi på systemfunksjonen. 
For å designe et IIR filter, er det ganske annerledes enn et FIR filter.
Prosessen er delt opp i fire deler:

1. Bestem filterspesifikasjoner $\{\omega_p, \omega_s, \delta_1, \delta_2\}$
2. Overfør spesifikasjonene til det analoge domenet. $\omega_p \rightarrow \Omega_p$ og $\omega_s\rightarrow \Omega_s$.
3. Design et analogt filter med motstander, kondensatorer, spoler osv, ved hjelp av Laplace transformasjonen $H(s)$.
4. Deretter bruker vi en funksjon $s=f(z)$ eller $H(z) = H(s)\|_{s=f(z)}$.

#### Bilinæer transformasjon

$$ s=\frac{2}{T}\frac{z-1}{z+1} \text{ eller } z=\frac{\frac{2}{T}+s}{\frac{2}{T}-s}$$

Dersom vi setter $s=\sigma+j\Omega$ og $z=e^{j\omega}$, får vi en transformasjon for frekvensene også.

\begin{gathered} \omega = 2 \arctan\frac{\Omega T}{2} \ \text{eller} \ \Omega = \frac{2}{T}\tan\frac{\omega}{2} \end{gathered}



I $s$-planet vil innsiden av sirkelen i $z$-planet være hele venste halvplan, eller 2. og 3. kvadrant. 
Utsiden av sirkelen er hele høyre halvplan, eller 1. og 4. kvadrant. 
Og enhetssirkelen vil være den imaginære aksen i $s$-planet.

Tre klasser med IIR filter:

##### Butterworth
* I MatLab: `butter`
* Ikke noe ripples i $\|H(\omega)\|$, maksimalt flatt
* Glattest overgang fra passbånd til stoppbånd

\begin{aligned} |H(\Omega)|^2 &= \frac{1}{1 + \left(\frac{\Omega}{\Omega_c}\right)^{2N}}\ &= \frac{1}{1 + \epsilon^2 \left(\frac{\Omega}{\Omega_p}\right)^{2N}} \end{aligned}



Her ligger de $N$ polene i en sirkel med radius $\Omega_c$ i $s$-planet. Man velger $N$ basert på hvor flatt man ønsker filteret i passbånd og hvor fort den skal minke. Huskeregel er $-20$dB per dekad per andre filterorden $N$.

##### Chebyshev

* Finnes to typer, enten så er det ripples i passbånd, eller i stoppbånd
* I MatLab: `cheby1` (ripples i passbånd) og `cheby2` (ripples i stoppbånd)

Chebychev I:

|H(\Omega)|^2 = \frac{1}{1 + \epsilon^2 T_N^2 \left(\frac{\Omega}{\Omega_c}\right)}



Chebyshev II:

|H(\Omega)|^2 = \frac{1}{1 + \frac{1}{\epsilon^2 T_N^2 \left(\frac{\Omega}{\Omega_c}\right)}}



Der $T_N(x)$ er $N$-te ordens chebyshev poler. $\epsilon$ bestemmer hvor mye ripple det er i passbånd. Polene ligger på en ellipse i $s$-planet.

##### Elliptisk
* I MatLab: `ellip`
* Rippler i både stopp- og passbånd
* Skarpeste overgang fra pass- til stoppbånd

|H(\Omega)|^2 = \frac{1}{1 + \epsilon^2 U_N^2\left(\frac{\Omega}{\Omega_c}\right)}



Der $U_N$ er den $N$-te ordens Jacobi elliptiske funksjon.
$\epsilon$ bestemmer rippel i passbånd. 
Dersom $N$ er et partall, vil det være mindre rippel i passbånd, men mer i stoppbånd.
For $N$ oddetall er det mer rippel i passbånd, men mye flatere i stoppbånd.

### Wienerfilter

Kommer kanskje.

## Filterstrukturer

Det finnes fire hovetyper av filterstrukturer:

* Dirkete
  * Implementere ulikhetslikningen, finnes to typer.
* Kaskade
  * Faktorisere $H(z)$ i faktorer av andre orden.
* Parallell
  * Delbrøkoppspalte $H(z)$ opp i delbrøker av andre orden.
* Transponert

Frem til nå er det kun beskrevet et filter ved hjelp av systemfunksjon, frekvensrespons og impulsresponsen. 
Filterstrukturer beskriver hvordan de kan implementeres.

Forskellige strukturer har forskjellige egenskaper og resultater når man legger til at konstander og kalkulasjoner kun har en endelig presisjon.
Med uendelig presisjon vil alle strukturer gi ut samme resultat.

### Blokker

Det brukes tre blokker for å beskrive et digitalt filter:

Adderer:

![Aderer](figures/adder.svg)

Konstant muliplisering:

![Mulitply](figures/constant.svg)

Enhetsforsinking:

![Unit delay](figures/delay.svg)

### Rasjonale systemfunksjoner

$$ H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 + \sum_{k=1}^{N} a_k z^{-k}}, a_0 = 1 $$

Systemets orden er $N$ dersom $a_N\neq0$

Ulikhetslikning assosiert med IIR:

$$y[n] = \sum_{k=0}^{M} b_k x[n-k] - \sum_{k=1}^{N} a_k y[n-k]$$

Ved å ednre på rekkefølgen på utregningene kan vi oppnå ulike strukturer.

### FIR-implemetasjon

Dersom du har impulsrespons og systemfunksjon for et FIR filter, kan du sette opp en "Direkte struktur".

\begin{aligned} y[n] &= \sum_{k=0}^{M-1} b_k x[n-k] \ &= \sum_{k=0}^{M} h[k] x[n-k] \end{aligned}

  

$$ H(z) = \sum_{k=0}^{M-1}b_k z^{-k} $$

Dette kan tegnes:

![Direkte I](figures/directFormI.svg)

Dersom vi har et FIR filter med lineær fase kan vi halvere mengden regneoperasjoner som må gjøres.

Dersom vi feks. har en FIR av lengde 7, og type I, og symetrisk kan denne beskrives:

\begin{aligned} h[n] = &h[0](1 + z^{-6}) + h[1](z^{-1} + z^{-5}) \ &+ h[2](z^{-2} + z^{-4}) + h[3]z^{-3} \end{aligned}



Dette kan impemeteres som under dersom $h[n] = \pm h[M-1-n]$:

![Direkte II](figures/DirectTypeII.svg)


### IIR-implementasjon

#### Direkte struktur
Dersom du har impulsrespons og systemfunksjon for et IIR filter, kan du sette opp en "Direkte struktur".

\begin{aligned} y[n] = &\sum_{k=0}^{M} b_k x[n-k] \ &- \sum_{k=1}^{N} a_k y[n-k] \end{aligned}

  

\begin{aligned} H(z) &= \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 + \sum_{k=1}^{N} a_k z^{-k}} \ &= \frac{B(z)}{A(z)} = B(z)\frac{1}{A(z)} \end{aligned}



Vi kan tegne Type I av en direkte struktur.

Det vil være 
* $M+N+1$ multiplikasjoner
* $M+N+1$ minneplasser brukt

![IIR Direct-form I](figures/IIR_Dir1.svg)

Vi kan endre på rekkefølgen av brøken og ende opp med en Type II av direkte struktur.

Det vil nå være mange ferre minneplasser, mindre forsinking, men like mange regneoperasjoner.

![IIR Direct-form II](figures/IIR_Dir2.svg)


#### Kaskade

Her deler man opp en kompleks funksjon i andre ordens faktorer, og kobler filterene i serie. 
Hver ledd lages på samme måte som i Type II av direkte struktur.

#### Parallell

Her delbrøkoppspalter man problemet, for å så lage en parallell struktur der hver bit er en type II direkte struktur.