diff --git a/semester3/numcs/numcs-summary.pdf b/semester3/numcs/numcs-summary.pdf index 01dccb1..9f56478 100644 Binary files a/semester3/numcs/numcs-summary.pdf and b/semester3/numcs/numcs-summary.pdf differ diff --git a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/01_construction.tex b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/01_construction.tex index 82723ac..3dfad45 100644 --- a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/01_construction.tex +++ b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/01_construction.tex @@ -1,26 +1,73 @@ \subsubsection{Konstruktion} -\fancydef{Trigonometrische Basis} $\{v_0, v_{N-1}\}$ ist eine Basis von $\mathbb{C}^N$, wobei $v_k = \begin{bmatrix} - \omega_N^{0\cdot k} \\ \omega_N^{1\cdot k}1 \\ \vdots \\ \omega_N^{(N-1)\cdot k} -\end{bmatrix} \in \mathbb{C}^N$ +Wir definieren die Trigonometrische Basis. Den Basiswechsel zu dieser Basis nennen wir diskrete Fourier Transformation. -Die symmetrische, nicht hermitesche Matrix $V = [v_0,\ \ldots\ , v_{N-1}]$ ist dann eine orthogonale Basis für $\mathbb{C}^N$: $V^HV = N\cdot I_N$. +\fancydef{Trigonometrische Basis}\\ +\begin{align*} + \{v_0, v_{N-1}\} \text{ ist eine Basis von } \mathbb{C}^N, \text{ wobei } v_k = + \begin{bmatrix} + \omega_N^{0\cdot k} \\ \omega_N^{1\cdot k}1 \\ \vdots \\ \omega_N^{(N-1)\cdot k} + \end{bmatrix} + \in \mathbb{C}^N +\end{align*} -Ebenfalls ist $V$ die Basiswechsel Matrix Trigonometrische Basis ($z$) $\mapsto$ Standardbasis ($y$). Algebraisch: +Die symmetrische, nicht hermitesche Matrix $V = [v_0,\ \ldots\ , v_{N-1}]$ ist eine orthogonale Basis für $\mathbb{C}^N$: $V^HV = N\cdot I_N$.\\ +Ebenfalls ist $V$ die Basiswechsel Matrix Trigonometrische Basis ($z$) $\mapsto$ Standardbasis ($y$).\\ +An Hand von $V$ definieren wir gleich die Fourier-Matrix $F_N$. \begin{align*} y = Vz \implies z = V^{-1}y = \frac{1}{N}V^Hy = \frac{1}{N}\underbrace{F_N}_{:= V^H} y \end{align*} -\fancydef{Fourier-Matrix} $F_N := V^H = \begin{bmatrix} - \omega_N^0 & \omega_N^0 & \cdots & \omega_N^0 \\ - \omega_N^0 & \omega_N^1 & \cdots & \omega_N^{N-1} \\ - \omega_N^0 & \omega_N^2 & \cdots & \omega_N^{2(N-1)} \\ - \vdots & \vdots & & \vdots \\ - \omega_N^0 & \omega_N^{N-1} &\cdots & \omega_N^{(N-1)^2} -\end{bmatrix} -= \begin{bmatrix} - \omega_N^{jk} -\end{bmatrix}^{N-1}_{j,k = 0} \in \mathbb{C}^N -$ +Der Eintrag $y_l$ enstspricht einem Glied der Fourier-Reihe ausgewertet in $\frac{l}{N} \in [0,1)$. \\ +Die diskreten Fourier-Koeffizienten $\gamma_k$ sind eine Umsortierung der trigonometrischen Basis Koeffizienten. +\begin{multicols}{2} +\begin{align*} + y = \underbrace{\sum_{k=0}^{N-1} y_k e_{k+1}}_{y \text{ in Komponenten}} = \underbrace{\sum_{k=0}^{N-1} z_k v_k}_{\text{in Trig. Basis}} = \sum_{k=0}^{N-1} z_k \begin{bmatrix} + \omega_N^{0 \cdot k} \\ \omega_N^{1 \cdot k} \\ \omega_N^{2 \cdot k} \\ \vdots \\ \omega_N^{(N-1) \cdot k} + \end{bmatrix} +\end{align*} +\newcolumn -\fancydef{Diskrete Fourier Transformation} $\mathcal{F}_N: \mathbb{C} \to \mathbb{C}$ s.d. $\mathcal{F}_N(y) = F_Ny$ \ No newline at end of file +\begin{align*} + y_l &= \sum_{k=0}^{N-1} z_k \omega_N^{l \cdot k} \overset{\text{S. 75}}{=} \sum_{k=-N/2}^{N/2-1} \gamma_k \cdot \exp(\frac{2\pi i}{N}lk) \\ + \text{wobei }\gamma_k &= \begin{cases} + z_k, & 0 < k \leq \frac{N}{2}-1 \\ + z_k+N, & -\frac{N}{2} \leq k < 0 + \end{cases} +\end{align*} +\end{multicols} + +\newpage + +\fancydef{Fourier-Matrix}\\ +\begin{align*} + F_N := V^H = [v_0, \ldots, v_{N-1}]^H = \begin{bmatrix} + \omega_N^0 & \omega_N^0 & \cdots & \omega_N^0 \\ + \omega_N^0 & \omega_N^1 & \cdots & \omega_N^{N-1} \\ + \omega_N^0 & \omega_N^2 & \cdots & \omega_N^{2(N-1)} \\ + \vdots & \vdots & & \vdots \\ + \omega_N^0 & \omega_N^{N-1} &\cdots & \omega_N^{(N-1)^2} + \end{bmatrix} + = + \begin{bmatrix} + \omega_N^{jk} + \end{bmatrix}^{N-1}_{j,k = 0} + \in \mathbb{C}^{N\times N} +\end{align*} + +Die skalierte Fourier-Matrix $\frac{1}{\sqrt{N}}F_N$ hat einige besondere Eigenschaften. + +\setcounter{all}{6} +\inlinetheorem Die skalierte Fourier-Matrix $\frac{1}{\sqrt{N}}F_N$ ist unitär: $F_N^{-1} = \frac{1}{N} F_N^H = \frac{1}{N} \overline{F_N}$ + +\fancyremark{Eigenwerte von $\frac{1}{\sqrt{N}}F_N$} Die $\lambda$ von $\frac{1}{\sqrt{N}}F_N$ liegen in $\{1,-1,i,-i\}$. + +Die diskrete Fourier-Transformation ist nun einfach die Anwendung der Basiswechsel-Matrix $F_N$. + +\setcounter{all}{5} +\fancydef{Diskrete Fourier-Transformation} $\mathcal{F}_N: \mathbb{C} \to \mathbb{C}$ s.d. $\mathcal{F}_N(y) = F_Ny$ +\begin{align*} + \text{Für } c = \mathcal{F}_N(y) \text{ gilt: }\quad c_k = \sum_{j=0}^{N-1} y_j \omega_N^{kj} +\end{align*} + +$c$ lässt sich als Repräsentation von $y$ im Frequenzbereich interpetieren. Durch die DFT können wir nun jederzeit zwischen der normalen und der Frequenz-perspektive wechseln. Das ermöglicht einige interessante Anwendungen. diff --git a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/02_fftshift.tex b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/02_fftshift.tex index e69de29..25fda00 100644 --- a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/02_fftshift.tex +++ b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/02_fftshift.tex @@ -0,0 +1,28 @@ +\subsection{DFT in Numpy} + +Sei $y$ in der Standardbasis, und $c = \mathcal{F}_N(y)$, also $y$ in der trig. Basis. +$$ + c = F_N \times y = \verb|fft|(y)\quad \textit{(DFT in numpy)} \quad \quad \quad y = \frac{1}{N}F_N^Hc = \verb|ifft|(c)\quad \textit{(Inverse DFT in numpy)} +$$ + +Um zur ursprünglichen Darstellung des trig. Polynoms zurück zu kommen, müssen wir die Koeffizienten umsortieren: \\ +Seien $z = \frac{1}{N} F_N y$ und $\zeta = \verb|fft.fftshift|(z)$. +\begin{align*} + f(x) \approx \underbrace{\sum_{k=-N/2}^{N/2-1} \zeta_k \cdot e^{2 \pi ikx} }_{\text{Form des trig. Polynoms}} +\end{align*} + +\setcounter{all}{13} +\inlineremark Man kann mit dieser Approximation einfach die $L^2$-Norm und Ableitungen berechnen: +\begin{multicols}{2} +\begin{align*} + ||f||^2_{L^2} \approx \left\Vert \sum_{k=-N/2}^{N/2-1} \zeta_k \cdot e^{2 \pi ikx} \right\Vert^2_{L^2} = \sum_{k=-N/2}^{N/2-1} |\zeta_k|^2 = \Vert z \Vert^2_{L^2} +\end{align*} + +\newcolumn + +\begin{align*} + f'(t) \approx \sum_{k=-N/2}^{N/2-1} (2\pi ik) \zeta_k \cdot e^{2 \pi ikx} +\end{align*} +\end{multicols} + +Im Skript S. 78 - 83 befinden sich einige sehr gute Anwendungsbeispiele. \ No newline at end of file diff --git a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/03_linalg.tex b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/03_linalg.tex index e69de29..a6c86bb 100644 --- a/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/03_linalg.tex +++ b/semester3/numcs/parts/01_interpolation/01_trigonometric/01_dft/03_linalg.tex @@ -0,0 +1,104 @@ +\newpage +\subsection{DFT \& Lineare Algebra} + +\setcounter{all}{25} +\fancydef{Zirkulant} Für einen vektor $c \in \mathbb{R}^N$ hat der Zirkulant $C \in \mathbb{R}^{N \times N}$ die Form: +\begin{align*} + C = \begin{bmatrix} + c_0 & c_{N-1} & c_{N-2} & \cdots & c_3 & c_2 & c_1 \\ + c_1 & c_0 & c_{N-1} & \cdots & c_4 & c_3 & c_2 \\ + c_2 & c_1 & c_{0} & \cdots & c_5 & c_4 & c_3 \\ + \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots \\ + c_{N-3} & c_{N-4} & c_{N-5} & \cdots & c_0 & c_{N-1} & c_{N-2} \\ + c_{N-2} & c_{N-3} & c_{N-4} & \cdots & c_{1} & c_0 & c_{N-1} \\ + c_{N-1} & c_{N-2} & c_{N-3} & \cdots & c_{2} & c_1 & c_0 + \end{bmatrix} + \quad \quad \quad + S_N = \begin{bmatrix} + 0 & 0 & \cdots & \cdots & 0 & 1 \\ + 1 & 0 & \cdots & \cdots & 0 & 0 \\ + \vdots & \vdots & \ddots & \ddots & \vdots & \vdots \\ + 0 & 0 & \cdots & \cdots & 0 & 0 \\ + 0 & 0 & \cdots & \cdots & 1 & 0 + \end{bmatrix} +\end{align*} + +Die Shift Matrix $S_N$ ist der Zirkulant für $c=e_2$. $S_N$ ist eine Permutationsmatrix, die alle Einträge nach vorne schiebt. +\begin{align*} + S_N \begin{bmatrix} + x_0 \\ + x_1 \\ + \vdots \\ + x_{N-1} + \end{bmatrix} + = + \begin{bmatrix} + x_{N-1} \\ + x_0 \\ + \vdots \\ + x_{N-2} + \end{bmatrix} + \quad \quad \quad + S_N^\top \begin{bmatrix} + x_{N-1} \\ + x_0 \\ + \vdots \\ + x_{N-2} + \end{bmatrix} + = + \begin{bmatrix} + x_0 \\ + x_1 \\ + \vdots \\ + x_{N-1} + \end{bmatrix} +\end{align*} + +Die Shift-Matrix hat einen speziellen Bezug zu den Spaltenvektoren $v_k$ von $F_N$, und auch allen anderen Zirkulanten $C$. + +\inlineremark Der $k$-te Fourier-vektor $v_k$ ist ein Eigenvektor von $S_N$ zu $\lambda_k = e^{2\pi i \frac{k}{N}}$. + +\fancytheorem{Diagonalisierung von Zirkulanten} Die Eigenvektoren von $S_N$ diagonalisieren jeden Zirkulanten $C$, und sind d.h. auch die Eigenvektoren von $C$. +Die Eigenwerte erhält man aus $p(z) = c_0z^0 + \ldots + c_{N-1}z^{N-1}$. + +Eine Operation mit vielen Anwendungen ist die Faltung. Sie hat einige Beziehungen zur Fourier-Transformation. + +\fancydef{Faltung} $a * b := (c_k)_{k \in \mathbb{Z}} = \displaystyle\sum_{n=-\infty}^{\infty}a_nb_{k-n}$, wobei $(a_k)_{k \in \mathbb{Z}}$, $(b_k)_{k \in \mathbb{Z}}$ unendliche Folgen sind. + +Die Faltung von $a = [a_0,\ldots,a_{N-1}]^\top, b = [b_0,\ldots,b_{N-1}]^\top$ ist leicht: Man erweitert beide Vektoren mit Nullen. + +% ^ This needs an example + +\fancydef{Zyklische Faltung} Für $N$-periodische Folgen oder Vektoren der Länge $N$: +\begin{align*} + c = a \circledast b\quad\quad \text{s.d. } \sum_{n=0}^{N-1} a_nb_{k-n} \equiv_N \sum_{n=0}^{N-1}b_na_{n-k} +\end{align*} + +\setcounter{all}{32} +\inlineremark Zyklische Faltungen von Vektoren kann man mit Zirkulanten berechnen. +\begin{align*} + c = a \circledast b = Ab = \underbrace{\begin{bmatrix} + a_0 & \cdots & a_{N-1} \\ + \vdots & \ddots & \vdots \\ + a_{N-1} & \cdots & a_0 + \end{bmatrix}}_{\text{Zirkulant von } a} + b +\end{align*} + +% NOTE: I'm not sure if this below is correct. This is how I interpret what is written in the script + +\setcounter{all}{30} +\inlineremark Eine Multiplikation von Polynomen $g,h$ entspricht einer Faltung im Frequenzbereich. +\begin{align*} + \mathcal{F}_N(\underbrace{g * h}_{\text{Standard Basis}}) = \underbrace{\mathcal{F}_N(g) \cdot \mathcal{F}_N(h)}_{\text{Trigonometrische Basis}} +\end{align*} +Im Fall von $T$-periodischen Funktionen gilt: $(g * h)(x) = \frac{1}{T}\displaystyle\int_{0}^{T}g(t)h(x-t)$. + +\inlineremark Da $F_N$ jeden Zirkulant $C$ diagonalisiert (Satz 3.4.27), gilt sogar: +\begin{align*} + c = a \circledast b = Ab = F_N^{-1}p(D)F_Nb \quad \quad \quad (p(D) \text{ ist Diagonalmatrix der } \lambda \text{ von } C ) +\end{align*} +Man erhält so letzendlich das Faltungs-Theorem: Die $F_N$-Transformierte einer Faltung ist genau das gleiche wie die Multiplikation zweier $F_N$-Transormierten. Da die DFT in $\mathcal{O}(n\log(n))$ (Kap. 3.5) geht, gilt dies nun auch für die Faltung. +\begin{align*} + F_Nc = \text{diag}(F_N a) F_N b +\end{align*} \ No newline at end of file