aboutsummaryrefslogtreecommitdiff
path: root/sem5
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2021-01-11 17:19:56 +0100
committerJulian T <julian@jtle.dk>2021-01-11 17:19:56 +0100
commit8ead771aafe22c7cdf30436da9c6e2614831f1ee (patch)
treea75eff47579354a45e9d76c50672416a14986a19 /sem5
parentccf8359ed3a061cdff335b39ddb27a36b296e1d9 (diff)
Added signal processing notes and assignments
Diffstat (limited to 'sem5')
-rw-r--r--sem5/sig/eksamnen/fir-plot.m37
-rw-r--r--sem5/sig/eksamnen/noter.md332
-rw-r--r--sem5/sig/mm11/Opgaver.ipynb93
-rw-r--r--sem5/sig/mm12/noter.md27
4 files changed, 489 insertions, 0 deletions
diff --git a/sem5/sig/eksamnen/fir-plot.m b/sem5/sig/eksamnen/fir-plot.m
new file mode 100644
index 0000000..3148b9b
--- /dev/null
+++ b/sem5/sig/eksamnen/fir-plot.m
@@ -0,0 +1,37 @@
+clear
+
+M = 28;
+
+for i=0:999,
+ omega(i+1) = pi * i / 999;
+end;
+
+
+for i=0:999,
+ sum_t = 0;
+ sum_b = 0;
+
+ for k=1:M/2,
+ % h får altid M/2 så det kan optimeres ud.
+ h = ((sin((pi/4) * k)) / (pi * k));
+
+ a = 2 * h;
+ % Hamming:
+ a = a * (0.54 - 0.46 * cos( 2 * pi * (k + (M/2)) / (M)));
+
+ sum_t = sum_t + a * cos(k * omega(i+1));
+ sum_b = sum_b + a;
+ end;
+
+ % Når k=0
+ sum_t = sum_t + 0.25;
+ sum_b = sum_b + 0.25;
+
+ amp(i+1) = sum_t / sum_b;
+
+end;
+
+plot(omega, 20 * log10(abs(amp)), 3/16 * pi, -1, "+", 3/8 * pi, -10, "+")
+grid;
+xlabel("Frequency");
+ylabel("Amplitude [dB]"); \ No newline at end of file
diff --git a/sem5/sig/eksamnen/noter.md b/sem5/sig/eksamnen/noter.md
new file mode 100644
index 0000000..d4f8afb
--- /dev/null
+++ b/sem5/sig/eksamnen/noter.md
@@ -0,0 +1,332 @@
+# TODO
+
+- [ ] Check opgaver i TOPIC 1
+- [ ] Check opgaver i TOPIC 2
+- [ ] Check opgave 7 i TOPIC 3
+
+- [ ] Check opgaver i 10
+- [ ] Check opgaver i 11
+
+- [ ] Kig på B.1 i reexam
+
+# Topic 1
+
+## Eksponential sekvens
+
+Kan beskrives som:
+
+$$x[n] = A \alpha^n$$
+
+## Komplex eksponential sekvens
+
+(Se slide 42)
+
+Her lader man de to dele (imag og real) være exponentialt vægtede siusiods.
+
+## Frekvens i deskrete signaler
+
+Hvis man har en frekvens $\omega_0$ kan man ikke se forskel fra frekvensen $\omega_0 + 2 \pi$.
+
+## Perioditet
+
+Hvis man har en complex exponential sekvens er det ikke sikkert at den er periodisk.
+Her kræver det er at:
+
+$$
+e^{j \omega_0 (n + N)} = e^{j \omega_0 n}
+$$
+
+Ved sinusiod gælder.
+
+$$
+\omega_0 N = 2 \pi k
+$$
+
+# Topic 2
+
+## Mærkelige ord
+
+Tids-invariante system
+: Ved en given input-sekvens giver systemet altid det samme output uafhængigt at tidspunktet.
+
+Kausalitet
+: Et kausalt systems output afhænger kun af tidsligere input og ikke fremtidigt input.
+
+BIBO stabilt
+: Et bounded input skal også give et bounded output.
+
+## Lineære tidsinvariante systemer og foldning
+
+Her kan man beskrive systemet som at være afhængig af et input sekvens og et impuls respons $h[n]$.
+
+$$
+y[n] = \sum_{k=-\infty}^{\infty} x[k] h[n-k]
+$$
+
+Dette kaldes også en *foldning* eller *convolution*.
+
+Foldning er både kommulatativ og distributiv (se slide 17).
+
+### Stabilitet
+
+Et LTI system er stabilt hvis dens impulsrespons er summerbar.
+
+$$
+S = \sum_{k=-\infty}^{\infty} |h[k]| < \infty
+$$
+
+Dette kaldes også et finite impulse response eller FIR.
+
+Man kan også have stabile systemer med et uendeligt impuls respons, sålænge summen konvergere.
+Dette kaldes et infinite impulse response eller IIR.
+
+# Topic 3
+
+## Overførings funktion eller transfer function
+
+Kaldes H og er laplace(eller z) af impuls respons.
+
+$$
+y(t) \ast h(t) \leftrightarrow Y(s) = H(s) \cdot X(s)
+$$
+
+I frequency domain bliver en foldning til en multiplication og omvendt.
+
+## Z Transform
+
+$$
+X(z) = \sum_{n=-\infty}^{\infty} x[n] z^{-n}
+$$
+
+Bilateral
+: Two sided, altså fra $-\infty$ til $\infty$.
+Unilateral
+: Her har man kun en positive side af summen.
+
+### Konvergens
+
+Vi ved ikke om alle x[n] sekvenser eller z får z tranformation til at konvergere.
+
+Derfor defineres ROC eller Region of Convergense som siger hvilke værdier får transformationen til at konvergere.
+Vi kan sige at den konvegere hvis:
+
+$$
+\sum_{n=-\infty}^{\infty} | x[n] r^{-n} | < \infty
+$$
+
+Fordi konvergens ikke afhænger af frekvens(hvor langt rundt i cirklen man er) men kun $|z|$, må ROC altså være en ring.
+Hvis ROC indeholder enhedscirklen $|z| = 1$ betyder det at fourier transformen også konvergere.
+
+### Stabilt
+
+Ens transfer funktion skal indeholde ROC for at være stabilt.
+
+## Fourier transform af sequence
+
+$$
+X(e^{j \omega}) = \sum_{n=-\infty}^{\infty} x[n] e^{-j \omega n}
+$$
+
+Dette er bare en z transform hvor $z = e^{j \omega}$.
+
+Her er en z tranformation på enhedscirklen i det komplekse plan lig med fourier transform.
+Læs mere på slide 14.
+
+## Brug af z transform
+
+En z transform fortæller meget hvis man kan skrive den op som en rational function (altså kan beskrives som to polynomier over hinnanden).
+
+$$
+X(z) = \frac{P(z)}{Q(z)}
+$$
+
+Her beskriver rødderne i $P(z)$ nulpunkterne i X(z).
+Mens rødderne i $Q(z)$ beskriver rødder.
+
+Disse to typer punkter beskriver egenskaberne af X(z).
+
+### Properties
+
+1. ROC er en ring eller disk i z planet
+2. Fourier transformen af $x[n]$ konvergere hvis og kun hvis ROC indeholder enhedscirklen.
+3. ROC indeholder ikke nogle poler
+4. Hvis x[n] kun indeholder elementer i et finite interval, vil ROC indeholde hele z planet undtaget $z = 0$ eller $z = \infty$.
+5. Hvis x[n] er en *right-sided sequence*, altså en sekvens der er nul mindre end en bestemt $N_1$, vil ROC gå fra den største pol til $\infty$.
+6. Hvis x[n] er en *left-sided sequence*, altså en sekvens der er nul større end en bestemt $N_2$, vil ROC gå fra center til den mindste pol.
+7. Hvis x[n] er en *two-sided sequence* vil ROC være en disk.
+8. ROC skal være en forbundet region.
+
+
+
+# Topic 5
+
+## Frekvens og fase response
+
+$H(j\Omega) kan deles op i frekvens og fase respons:
+
+Amplitude respons: $|H(j\Omega)|$
+
+Fase respons: $Arg(H(j\Omega))$
+
+Amplitude responsen skrives tit i decibel, hvilken regnes ud med:
+
+$$
+20 \cdot log_{10} |H(j \Omega)| \qquad \textrm{[dB]}
+$$
+
+# Topic 6
+
+## Forskellige typer filtre
+
+Low-pass
+: Lukker af for signalet efter en cutoff frequency
+
+High-pass
+: Åbner for signalet efter en bestemt cutoff frequency
+
+Bandpass
+: Lader en et bestemt interval af signaler igennem
+
+Notch
+: Omvendt af bandpass
+
+Disse kan findes på slide 14
+
+## Forskellige områder i et filter
+
+Passband
+: De frekvenser som filteret skal lade komme igennem, stopper ved $\Omega_p$
+
+Transition
+: Hvor filtreret går fra åbent til lukker, stopper ved $\Omega_s$
+
+Stopband
+: De frevenser som filteret ikke lader komme igennem
+
+# Topic 7
+
+Forklarer en masse om hvordan man laver et IIR filter ud fra en analog specifikation.
+
+Samt bilinear transformation.
+
+## Butterworth
+
+Et idealt filter er ikke muligt, men en approx er butterworth LP filter.
+
+$$
+|H_c (j \Omega)|^2 = \frac{1}{1 + \left(\frac{j\Omega}{j\Omega_c} \right)^2N}
+$$
+
+Her er $N$ filter orderen hvor højere approx, altså mindre transition band.
+
+## Bilinear
+
+Her mapper man en frekvens i s domainet til en revolution på enheds cirklen i z domainet.
+
+$$
+s = \frac{2}{T_d} \left(\frac{ 1 - z^{-1}}{1 + z^{-1}}\right)
+$$
+
+# Topic 8
+
+## FIR filter
+
+Finite impuls response.
+
+Giver mulighed for *Linear phase*, hvilket har den fordel at det er let at manipulere signalet.
+Dette betyder at ligemeget frekvensen vil filteret give det samme delay.
+
+Linear phase kan opnås ved at man lader sit impulse response være symmetrisk.
+
+Findes mange forskellige typer beskrevet på slide 17.
+
+Design process er beskrevet super godt i Topic 9 starten af slides.
+
+# Topic 9
+
+Bruger frekvens transformation til at lave LP om til andre.
+Se side 553.
+
+# Topic 10
+
+## Quantitation
+
+Fejl der opstår når man convertere noget til digitalt hvor der kun er en fixed mængde precision.
+
+### Time quantitation
+
+Ved Sample hold og man fjerner continues time.
+
+### Variable contituation
+
+I ADC hvor man convetere et signal til en digital værdi på et begrænset antal bits.
+
+Her kommer der noget ind om signal to noise. Se slide 4.
+
+### Computer H(z)
+
+Dette sker ved interne beregninger, da man hele tiden mister precision.
+
+Her er der en masse ting man kan gøre.
+
+## Realisation structures
+
+Måder at konvertere fra en difference equation til en graphical representation.
+
+### Direct form 1
+
+Kan ses på slide 16, hvor man mapper en difference equation direkte.
+
+### Direct form 2
+
+Her introducere man en mellem function $w[n]$ som ligger mellem $x$ og $y$.
+
+Dette giver en kombineret direct form 1, og har den fordel at det kræver mindre memory.
+
+## Scaling
+
+Vil gerne have højst mulig Signal to noise, altså man vil gerne bedst mulig udnytte sin precision.
+
+Overflow inde i systemet er okay, sålænge den totale sum ikke kommer over.
+
+Forskellige typer scaling er muligt for at få god utilization.
+
+ - Max-value scaling
+ Har den ulempe at man kan ende med ikke at udnytte systemet optimalt.
+ - Sinusoid scaling
+ Self study
+ - Variance scaling
+ Siger man at energi ved input skal være større end ved vigtige steder.
+
+# Topic 11
+
+## DFT
+
+Modsat DTFT som er continuer i frekvens, DTF er deskret i frekvens.
+
+Udledt af DFS, og udregnes med en sum af signalet selv.
+
+$$
+X[k] = \sum_{n=0}^{N-1} x[n] W_N^{kn}
+$$
+
+Virker også omvendt.
+
+$$
+x[n] = \frac{1}{N} \sum_{k=0}^{N-1} X[k] W_N^{-kn}
+$$
+
+Her skal X og x være 0 uden for [0, N-1].
+
+# Topic 12
+
+ - Periodic convolution (slide 7)
+ - God opsummering af DTF (slide 11)
+
+## Finite sequence to periodic
+
+DTF kræver at man har en periodisk i tid signal.
+Dette er ikke rigtig sådan virkeligheden fungere.
+
+Istedet tager man N bits fra sig signal og gentager det om og om igen.
+Hvis man ikke har nok bits i sit signal til at tage N, kan man zero pad det til N.
diff --git a/sem5/sig/mm11/Opgaver.ipynb b/sem5/sig/mm11/Opgaver.ipynb
new file mode 100644
index 0000000..d8077e0
--- /dev/null
+++ b/sem5/sig/mm11/Opgaver.ipynb
@@ -0,0 +1,93 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Opgave 1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import cmath\n",
+ "import math\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def f(k):\n",
+ " part1 = (2 + 2j * k * math.pi)\n",
+ " tope = (1 + k * 1j * math.pi)\n",
+ " part2 = np.exp(tope) - np.exp(-tope)\n",
+ " return part2 / part1\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "<matplotlib.collections.PathCollection at 0x7f78484dd610>"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "<Figure size 432x288 with 1 Axes>"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = np.arange(-30, 30, dtype=np.complex)\n",
+ "y = abs(f(x))\n",
+ "plt.scatter(x, y)\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/sem5/sig/mm12/noter.md b/sem5/sig/mm12/noter.md
new file mode 100644
index 0000000..7acf1a9
--- /dev/null
+++ b/sem5/sig/mm12/noter.md
@@ -0,0 +1,27 @@
+# Signal behandling mm12
+
+hej med dig
+
+HUSK: Mærkelig måde at skrive modulo på:
+
+$$
+(n \mathrm{modulo} N) = ((n))_N
+$$
+
+
+## Periodisk foldning
+
+Foldning af to periodiske signaler.
+Dette kan gøres som en multiplication i frekvens.
+
+Husk at man kun behøver at folde mellem 0 og N, hvor N er perioden af de to signaler.
+
+$$\tilde{x}_3 [n] = \sum_{n=0}^{N-1} \tilde{x}_1 [m] \tilde{x}_2 [n-m]$$
+
+Her er det vigtigt at se at $\tilde{x}_3$ også er periodisk.
+
+## Cirkulærs skifte
+
+Hvis man har en endelig sekvens som man vil rykke, kan man lave et **Cirkulært skift** hvor man tager dem i starten og sætter i enden eller omvendt.
+
+Når man gør dette tager man $x_1$ og $x_2$ og laver periodiske og derefter laver shift.