From 4fd4422b52f6377a82696ea67da9beb13d93e581 Mon Sep 17 00:00:00 2001 From: Nicolas Tobler Date: Sun, 15 May 2022 23:15:36 +0200 Subject: draft --- buch/papers/ellfilter/main.tex | 370 ++++++++++++++++++++++++++-- buch/papers/ellfilter/packages.tex | 3 + buch/papers/ellfilter/python/chebychef.py | 65 +++++ buch/papers/ellfilter/python/elliptic.py | 316 ++++++++++++++++++++++++ buch/papers/ellfilter/python/elliptic2.py | 78 ++++++ buch/papers/ellfilter/references.bib | 32 +-- buch/papers/ellfilter/teil0.tex | 28 +-- buch/papers/ellfilter/teil1.tex | 90 +++---- buch/papers/ellfilter/teil2.tex | 64 ++--- buch/papers/ellfilter/teil3.tex | 64 ++--- buch/papers/ellfilter/tikz/arccos.tikz.tex | 97 ++++++++ buch/papers/ellfilter/tikz/arccos2.tikz.tex | 46 ++++ 12 files changed, 1084 insertions(+), 169 deletions(-) create mode 100644 buch/papers/ellfilter/python/chebychef.py create mode 100644 buch/papers/ellfilter/python/elliptic.py create mode 100644 buch/papers/ellfilter/python/elliptic2.py create mode 100644 buch/papers/ellfilter/tikz/arccos.tikz.tex create mode 100644 buch/papers/ellfilter/tikz/arccos2.tikz.tex diff --git a/buch/papers/ellfilter/main.tex b/buch/papers/ellfilter/main.tex index 26aaec1..29ebf7a 100644 --- a/buch/papers/ellfilter/main.tex +++ b/buch/papers/ellfilter/main.tex @@ -8,29 +8,361 @@ \begin{refsection} \chapterauthor{Nicolas Tobler} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} + +\section{Einleitung} + +Lineare filter + +Filter, Signalverarbeitung + + +Der womöglich wichtigste Filtertyp ist das Tiefpassfilter. +Dieses soll im Durchlassbereich unter der Grenzfrequenz $\Omega_p$ unverstärkt durchlassen und alle anderen Frequenzen vollständig auslöschen. + +Bei der Implementierung von Filtern + + +In der Elektrotechnik führen Schaltungen mit linearen Bauelementen wie Kondensatoren, Spulen und Widerständen immer zu linearen zeitinvarianten Systemen (LTI-System von englich \textit{time-invariant system}). +Die Übertragungsfunktion im Frequenzbereich $|H(\Omega)|$ eines solchen Systems ist dabei immer eine rationale Funktion, also eine Division von zwei Polynomen. +Die Polynome habe dabei immer reelle oder komplex-konjugierte Nullstellen. + + +\begin{equation} \label{ellfilter:eq:h_omega} + | H(\Omega)|^2 = \frac{1}{1 + \varepsilon_p^2 F_N^2(w)}, \quad w=\frac{\Omega}{\Omega_p} +\end{equation} + +$\Omega = 2 \pi f$ ist die analoge Frequenz + + +% Linear filter +Damit das Filter implementierbar und stabil ist, muss $H(\Omega)^2$ eine rationale Funktion sein, deren Nullstellen und Pole auf der linken Halbebene liegen. + +$N \in \mathbb{N} $ gibt dabei die Ordnung des Filters vor, also die maximale Anzahl Pole oder Nullstellen. + +% In \eqref{ellfilter:eq:h_omega} wird $F_N(w)$ so verzogen, dass $F_N(w) \forall |w| < 1$ + + +Damit ein Filter die Passband Kondition erfüllt muss $|F_N(w)| \leq 1 \forall |w| \leq 1$ und für $|w| \geq 1$ sollte die Funktion möglichst schnell divergieren. +Eine einfaches Polynom, dass das erfüllt, erhalten wir wenn $F_N(w) = w^N$. +Tatsächlich erhalten wir damit das Butterworth Filter, wie in Abbildung \ref{ellfilter:fig:butterworth} ersichtlich. +\begin{figure} + \centering + \includegraphics[scale=1]{papers/ellfilter/python/F_N_butterworth.pdf} + \caption{$F_N$ für Butterworth filter. Der grüne Bereich definiert die erlaubten Werte für alle $F_N$-Funktionen.} + \label{ellfilter:fig:butterworth} +\end{figure} + +wenn $F_N(w)$ eine rationale Funktion ist, ist auch $H(\Omega)$ eine rationale Funktion und daher ein lineares Filter. %proof? + +\begin{align} + F_N(w) & = + \begin{cases} + w^N & \text{Butterworth} \\ + T_N(w) & \text{Tschebyscheff, Typ 1} \\ + [k_1 T_N (k^{-1} w^{-1})]^{-1} & \text{Tschebyscheff, Typ 2} \\ + R_N(w) & \text{Elliptisch (Cauer)} \\ + \end{cases} +\end{align} + +Mit der Ausnahme vom Butterworth filter sind alle Filter nach speziellen Funktionen benannt. +Alle diese Filter sind optimal für unterschiedliche Anwendungsgebiete. +Das Butterworth-Filter, zum Beispiel, ist maximal flach im Durchlassbereich. +Das Tschebyscheff-1 Filter sind maximal steil für eine definierte Welligkeit im Durchlassbereich, währendem es im Sperrbereich monoton abfallend ist. +Es scheint so als sind gewisse Eigenschaften dieser speziellen Funktionen verantwortlich für die Optimalität dieser Filter. + +\section{Tschebyscheff-Filter} + +Als Einstieg betrachent Wir das Tschebyscheff-Filter, welches sehr verwand ist mit dem elliptischen Filter. +Genauer ausgedrückt sind die Tschebyscheff-1 und -2 Fitler ein Spezialfall davon. + +Der Name des Filters deutet schon an, dass die Tschebyschff-Polynome $T_N$ relevant sind für das Filter: +\begin{align} + T_{0}(x)&=1\\ + T_{1}(x)&=x\\ + T_{2}(x)&=2x^{2}-1\\ + T_{3}(x)&=4x^{3}-3x\\ + T_{n+1}(x)&=2x~T_{n}(x)-T_{n-1}(x). +\end{align} +Bemerkenswert ist, dass die Polynome im Intervall $[-1, 1]$ mit der Trigonometrischen Funktion +\begin{equation} \label{ellfilter:eq:chebychef_polynomials} + T_N(w) = \cos \left( N \cos^{-1}(w) \right) +\end{equation} +übereinstimmt. +Abbildung \ref{ellfilter:fig:chebychef_polynomials} zeigt einige Tschebyscheff-Polynome. +\begin{figure} + \centering + \includegraphics[scale=1]{papers/ellfilter/python/F_N_chebychev2.pdf} + \caption{Die Tschebyscheff-Polynome $C_N$.} + \label{ellfilter:fig:chebychef_polynomials} +\end{figure} +Da der Kosinus begrenzt zwischen $-1$ und $1$ ist, sind auch die Tschebyscheff-Polynome begrenzt. +Geht man aber über das Intervall $[-1, 1]$ hinaus, divergieren die Funktionen mit zunehmender Ordnung immer steiler gegen $\pm \infty$. +Diese Eigenschaft ist sehr nützlich für ein Filter. +Wenn wir die Tschebyscheff-Polynome quadrieren, passen sie perfekt in die Voraussetzungen für Filterfunktionen, wie es Abbildung \ref{ellfiter:fig:chebychef} demonstriert. +\begin{figure} + \centering + \includegraphics[scale=1]{papers/ellfilter/python/F_N_chebychev.pdf} + \caption{Die Tschebyscheff-Polynome füllen den erlaubten Bereich besser, und erhalten dadurch eine steilere Flanke im Sperrbereich.} + \label{ellfiter:fig:chebychef} +\end{figure} + + +Die analytische Fortsetzung von \eqref{ellfilter:eq:chebychef_polynomials} über das Intervall $[-1,1]$ hinaus stimmt mit den Polynomen überein, wie es zu erwarten ist. +Die genauere Betrachtung wird uns dann helfen die elliptischen Filter zu verstehen. + +\begin{equation} + \cos^{-1}(x) + = + \int_{0}^{x} + \frac{ + dz + }{ + \sqrt{ + 1-z^2 + } + } +\end{equation} %TOdO is it minus dz? + +\begin{equation} + \frac{ + 1 + }{ + \sqrt{ + 1-z^2 + } + } + \in \mathbb{R} + \quad + \forall + \quad + -1 \leq z \leq 1 +\end{equation} +Wenn $|z|$ über 1 hinausgeht, wird der Term unter der Wurzel negativ. +Durch die Quadratwurzel entstehen zwei Reinkomplexe Lösungen +\begin{equation} + \frac{ + 1 + }{ + \sqrt{ + 1-z^2 + } + } + = i \xi \quad | \quad \xi \in \mathbb{R} + \quad + \forall + \quad + z \leq -1 \cup z \geq 1 +\end{equation} + +\begin{figure} + \centering + \input{papers/ellfilter/tikz/arccos.tikz.tex} + \caption{Die Funktion $z = \cos^{-1}(w)$ dargestellt in der komplexen ebene.} + \label{ellfilter:fig:arccos} +\end{figure} + + + +\begin{figure} + \centering + \input{papers/ellfilter/tikz/arccos2.tikz.tex} + \caption{ + $z$-Ebene der Tschebyscheff-Funktion. + Je grösser die Ordnung $N$ gewählt wird, desto mehr Nullstellen werden hat das Tschebyscheff-Polynom. + } + % \label{ellfilter:fig:arccos} +\end{figure} + + + + + +% Analytische Fortsetzung + + + +\section{Jacobische elliptische Funktionen} + + +Für das elliptische Filter, wird statt der für das Tschebyscheff-Filter benutzen Kreis-Trigonometrie die elliptischen Funktionen gebraucht. +Der begriff elliptische Funktion wird für sehr viele Funktionen gebraucht, daher ist es hier wichtig zu erwähnen, dass es ausschliesslich um die Jacobischen elliptischen Funktionen geht. + +Im Wesentlichen erweitern die Jacobi elliptischen Funktionen die trigonometrische Funktionen für Ellipsen. + +%TODO $z$ or $u$ for parameter? + +neu zwei parameter +$sn(z, k)$ +$z$ ist das winkelargument +Im Kreis ist der Radius für alle Winkel konstant, bei Ellipsen ändert sich das. +Dies hat zur Folge, dass bei einer Ellipse die Kreisbodenstrecke nicht linear zum Winkel verläuft. +Darum kann hier nicht der gewohnte Winkel verwendet werden. +An deren stelle kommt der parameter $k$ zum Einsatz, welcher durch das elliptische Integral erster Art +\begin{equation} + z + = + F(\phi, k) + = + \int_{0}^{\phi} + \frac{ + d\theta + }{ + \sqrt{ + 1-k^2 \sin^2 \theta + } + } +\end{equation} +mit dem Winkel $\phi$ in Verbindung liegt. + + + + +Dabei wird das vollständige und unvollständige Elliptische integral unterschieden. +Beim vollständigen Integral +\begin{equation} + K(k) + = + \int_{0}^{\pi / 2} + \frac{ + d\theta + }{ + \sqrt{ + 1-k^2 \sin^2 \theta + } + } +\end{equation} +wird über ein viertel Ellipsenbogen integriert also bis $\phi=\pi/2$. + +Die Jacobischen elliptischen Funktionen können mit der inversen Funktion +\begin{equation} + \phi = F^{-1}(z, k) +\end{equation} +definiert werden. Dabei ist zu beachten dass nur das $z$ Argument der Funktion invertiert wird also +\begin{equation} + z = F(\phi, k) + \Leftrightarrow + \phi = F^{-1}(z, k). +\end{equation} +Mithilfe von $F^{-1}$ kann $sn^{-1}$ mit dem Elliptischen integral dargestellt werden: +\begin{equation} + \sin(\phi) + = + \sin \left( F^{-1}(z, k) \right) + = + \sn(u, k) +\end{equation} + +\begin{align} + \sn^{-1}(w, k) + & = + \int_{0}^{\phi} + \frac{ + d\theta + }{ + \sqrt{ + 1-k^2 \sin^2 \theta + } + }, + \quad + \phi = \sin^{-1}(w) + \\ + & = + \int_{0}^{w} + \frac{ + dt + }{ + \sqrt{ + (1-t^2)(1-k^2 t^2) + } + } +\end{align} + +Beim $\cos^{-1}(x)$ haben wir gesehen, dass die analytische Fortsetzung bei $x < -1$ und $x > 1$ rechtwinklig in die Komplexen zahlen wandert. +Wenn man das gleiche mit $\sn^{-1}(w, k)$ macht, erkennt man zwei interessante Stellen. +Die erste ist die gleiche wie beim $\cos^{-1}(x)$ nämlich bei $t = \pm 1$. +Der erste Term unter der Wurzel wird dann negativ, während der zweite noch positiv ist, da $k \leq 1$. +\begin{equation} + \frac{ + 1 + }{ + \sqrt{ + (1-t^2)(1-k^2 t^2) + } + } + \in \mathbb{R} + \quad \forall \quad + -1 \leq t \leq 1 +\end{equation} +Die zweite stelle passiert wenn beide Faktoren unter der Wurzel negativ werden, was bei $t = 1/k$ der Fall ist. + + + + +Funktion in relle und komplexe Richtung periodisch + +In der reellen Richtung ist sie $4K(k)$-periodisch und in der imaginären Richtung $4K^\prime(k)$-periodisch. + + + +%TODO sn^{-1} grafik + + +\section{Elliptische rationale Funktionen} + + +\begin{equation} + R_N(\xi, w) = \cd \left(N~f_1(\xi)~\cd^{-1}(w, 1/\xi), f_2(\xi)\right) +\end{equation} +\begin{equation} + R_N(\xi, w) = \cd (N~u K_1, k_1), \quad w= \cd(uK, k) +\end{equation} + + +sieht ähnlich aus wie die trigonometrische darstellung der Tschebyschef-Polynome + +der Ordnungszahl $N$ kommt auch als Faktor for + +%TODO cd^{-1} grafik mit + + +\subsection{Degree Equation} + +Der $cd^{-1}$ Term muss so verzogen werden, dass die umgebene $cd$ funktion die nullstellen und pole trifft. +Dies trifft ein wenn die Degree Equation erfüllt ist. + +\begin{equation} + N \frac{K^\prime}{K} = \frac{K^\prime_1}{K_1} +\end{equation} + + +Leider ist das lösen dieser Gleichung nicht trivial. +Die Rechnung wird in \ref{ellfilter:bib:orfanidis} im Detail angeschaut. + + +\subsection{Polynome?} + +Bei den Tschebyscheff-Polynomen haben wir gesehen, dass die Trigonometrische Formel zu einfachen Polynomen umgewandelt werden kann. +Im gegensatz zum $\cos^{-1}$ hat der $\cd^{-1}$ nicht nur Nullstellen sondern auch Pole. +Somit entstehen bei den elliptischen rationalen Funktionen, wie es der name auch deutet, rationale Funktionen, also ein Bruch von zwei Polynomen. + + + + +\begin{figure} + \centering + \includegraphics[scale=1]{papers/ellfilter/python/F_N_elliptic.pdf} + \caption{$F_N$ für ein elliptischs filter.} + \label{ellfilter:fig:elliptic} +\end{figure} + + + + \input{papers/ellfilter/teil0.tex} \input{papers/ellfilter/teil1.tex} \input{papers/ellfilter/teil2.tex} \input{papers/ellfilter/teil3.tex} -\printbibliography[heading=subbibliography] +% \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/ellfilter/packages.tex b/buch/papers/ellfilter/packages.tex index c94db34..8045a1a 100644 --- a/buch/papers/ellfilter/packages.tex +++ b/buch/papers/ellfilter/packages.tex @@ -8,3 +8,6 @@ % following example %\usepackage{packagename} + +\DeclareMathOperator{\sn}{\text{sn}} +\DeclareMathOperator{\cd}{\text{cd}} diff --git a/buch/papers/ellfilter/python/chebychef.py b/buch/papers/ellfilter/python/chebychef.py new file mode 100644 index 0000000..a278989 --- /dev/null +++ b/buch/papers/ellfilter/python/chebychef.py @@ -0,0 +1,65 @@ +# %% + +import matplotlib.pyplot as plt +import scipy.signal +import numpy as np + + +order = 5 +passband_ripple_db = 1 +omega_c = 1000 + +a, b = scipy.signal.cheby1( + order, + passband_ripple_db, + omega_c, + btype='low', + analog=True, + output='ba', + fs=None, +) + +w, mag, phase = scipy.signal.bode((a, b), w=np.linspace(0,2000,256)) +f, axs = plt.subplots(2,1, sharex=True) +axs[0].plot(w, 10**(mag/20)) +axs[0].set_ylabel("$|H(\omega)| /$ db") +axs[0].grid(True, "both") +axs[1].plot(w, phase) +axs[1].set_ylabel(r"$arg H (\omega) / $ deg") +axs[1].grid(True, "both") +axs[1].set_xlim([0, 2000]) +axs[1].set_xlabel("$\omega$") +plt.show() + + +# %% Cheychev filter F_N plot + +w = np.linspace(-1.1,1.1, 1000) +plt.figure(figsize=(5.5,2)) +for N in [3,6,11]: + # F_N = np.cos(N * np.arccos(w)) + F_N = scipy.special.eval_chebyt(N, w) + plt.plot(w, F_N, label=f"$N={N}$") +plt.xlim([-1.2,1.2]) +plt.ylim([-2,2]) +plt.grid() +plt.xlabel("$w$") +plt.ylabel("$C_N(w)$") +plt.legend() +plt.savefig("F_N_chebychev2.pdf") +plt.show() + +# %% Build Chebychev polynomials + +N = 11 + +zeros = (np.arange(N)+0.5) * np.pi +zeros = np.cos(zeros/N) + +x = np.linspace(-1.2,1.2,1000) +y = np.prod(x[:, None] - zeros[None, :], axis=-1)*2**(N-1) + +plt.plot(x, y) +plt.ylim([-1,1]) +plt.grid() +plt.show() diff --git a/buch/papers/ellfilter/python/elliptic.py b/buch/papers/ellfilter/python/elliptic.py new file mode 100644 index 0000000..9f209e9 --- /dev/null +++ b/buch/papers/ellfilter/python/elliptic.py @@ -0,0 +1,316 @@ + +# %% + +import scipy.special +import scipyx as spx +import numpy as np +import matplotlib.pyplot as plt +import matplotlib +from matplotlib.patches import Rectangle + +matplotlib.rcParams.update({ + "pgf.texsystem": "pdflatex", + 'font.family': 'serif', + 'font.size': 9, + 'text.usetex': True, + 'pgf.rcfonts': False, +}) + +def last_color(): + plt.gca().lines[-1].get_color() + +# %% Buttwerworth filter F_N plot + +w = np.linspace(0,1.5, 100) +plt.figure(figsize=(4,2.5)) + +for N in range(1,5): + F_N = w**N + plt.plot(w, F_N**2, label=f"$N={N}$") +plt.gca().add_patch(Rectangle( + (0, 0), + 1, 1, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.gca().add_patch(Rectangle( + (1, 1), + 0.5, 1, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.xlim([0,1.5]) +plt.ylim([0,2]) +plt.grid() +plt.xlabel("$w$") +plt.ylabel("$F^2_N(w)$") +plt.legend() +plt.savefig("F_N_butterworth.pdf") +plt.show() + +# %% Cheychev filter F_N plot + +w = np.linspace(0,1.5, 100) + +plt.figure(figsize=(4,2.5)) +for N in range(1,5): + # F_N = np.cos(N * np.arccos(w)) + F_N = scipy.special.eval_chebyt(N, w) + plt.plot(w, F_N**2, label=f"$N={N}$") +plt.gca().add_patch(Rectangle( + (0, 0), + 1, 1, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.gca().add_patch(Rectangle( + (1, 1), + 0.5, 1, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.xlim([0,1.5]) +plt.ylim([0,2]) +plt.grid() +plt.xlabel("$w$") +plt.ylabel("$F^2_N(w)$") +plt.legend() +plt.savefig("F_N_chebychev.pdf") +plt.show() + +# %% define elliptic functions + +def ell_int(k): + """ Calculate K(k) """ + m = k**2 + return scipy.special.ellipk(m) + +def sn(z, k): + return spx.ellipj(z, k**2)[0] + +def cn(z, k): + return spx.ellipj(z, k**2)[1] + +def dn(z, k): + return spx.ellipj(z, k**2)[2] + +def cd(z, k): + sn, cn, dn, ph = spx.ellipj(z, k**2) + return cn / dn + +# https://mathworld.wolfram.com/JacobiEllipticFunctions.html eq 3-8 + +def sn_inv(z, k): + m = k**2 + return scipy.special.ellipkinc(np.arcsin(z), m) + +def cn_inv(z, k): + m = k**2 + return scipy.special.ellipkinc(np.arccos(z), m) + +def dn_inv(z, k): + m = k**2 + x = np.sqrt((1-z**2) / k**2) + return scipy.special.ellipkinc(np.arcsin(x), m) + +def cd_inv(z, k): + m = k**2 + x = np.sqrt(((m - 1) * z**2) / (m*z**2 - 1)) + return scipy.special.ellipkinc(np.arccos(x), m) + + +k = 0.8 +z = 0.5 + +assert np.allclose(sn_inv(sn(z ,k), k), z) +assert np.allclose(cn_inv(cn(z ,k), k), z) +assert np.allclose(dn_inv(dn(z ,k), k), z) +assert np.allclose(cd_inv(cd(z ,k), k), z) + +# %% plot arcsin + +def lattice(a1, b1, c1, a2, b2, c2): + r1 = np.logspace(a1, b1, c1) + x1 = np.concatenate((-np.flip(r1), [0], r1), axis=0) + x1 = x1.astype(np.complex128) + r2 = np.logspace(a2, b2, c2) + x2 = np.concatenate((-np.flip(r2), [0], r2), axis=0) + x2 = x2.astype(np.complex128) + x = (x1[:, None] + (x2[None, :] * 1j)) + return x + +plt.figure(figsize=(12,12)) +y = np.arcsin(lattice(-1,6,1000, -1,5,10)) +plt.plot(np.real(y), np.imag(y), "-", color="red", lw=0.5) +y = np.arcsin(lattice(-1,6,10, -1,5,100)).T +plt.plot(np.real(y), np.imag(y), "-", color="red", lw=0.5) +y = np.arcsin(lattice(-1,6,10, -1,5,10)) +plt.plot(np.real(y), np.imag(y), ".", color="red", lw=0.5) +plt.show() + +# %% plot cd^-1 TODO complex cd^-1 missing + + +r = np.logspace(-1,8, 50) + + + +x = np.concatenate((-np.flip(r), [0], r), axis=0) +y = cd_inv(x, 0.99) + +plt.figure(figsize=(12,12)) +plt.plot(np.real(y), np.imag(y), "-") +plt.show() + +# %%plot cd +plt.figure(figsize=(10,6)) +z = np.linspace(-4,4, 500) +for k in [0, 0.9, 0.99, 0.999, 0.99999]: + w = cd(z*ell_int(k), k) + plt.plot(z, w, label=f"$k={k}$") +plt.grid() +plt.legend() +# plt.xlim([-4,4]) +plt.xlabel("$u$") +plt.ylabel("$cd(uK, k)$") +plt.show() + +# %% Test ???? + +N = 5 +k = 0.9 +k1 = k**N + +assert np.allclose(k**(-N), k1**(-1)) + +K = ell_int(k) +Kp = ell_int(np.sqrt(1-k**2)) + +K1 = ell_int(k1) +Kp1 = ell_int(np.sqrt(1-k1**2)) + +print(Kp * (K1 / K) * N, Kp1) + + +# %% + + +k = 0.9 +k_prim = np.sqrt(1 - k**2) +K = ell_int(k) +Kp = ell_int(k_prim) + +print(K, Kp) + +zs = [ + 0 + (K + 0j) * np.linspace(0,1,25), + K + (Kp*1j) * np.linspace(0,1,25), + (K + Kp*1j) + (-K) * np.linspace(0,1,25), +] + + +for z in zs: + plt.plot(np.real(z), np.imag(z)) +plt.show() + + + +for z in zs: + w = cd(z, k) + plt.plot(np.real(w), np.imag(w)) +plt.show() + + + + + +# %% + +for i in range(10): + x = np.linspace(i*1,i*1+1,10, dtype=np.complex64) + w = np.arccos(x) + + x2 = np.cos(w) + x4 = np.cos(w+ 2*np.pi) + x3 = np.cos(np.conj(w)) + + assert np.allclose(x2, x4, rtol=0.001, atol=1e-5) + + assert np.allclose(x2, x3) + assert np.allclose(x2, x, rtol=0.001, atol=1e-5) + + plt.plot(np.real(w), np.imag(w), ".-") + +for i in range(10): + x = -np.linspace(i*1,i*1+1,100, dtype=np.complex64) + w = np.arccos(x) + plt.plot(np.real(w), np.imag(w), ".-") + +plt.grid() +plt.show() + + + + +# %% + +plt.plot(omega, np.abs(G)) +plt.show() + + +def cd_inv(u, m): + return K(1/2) - F(np.arcsin()) + +def K(m): + return scipy.special.ellipk(m) + +def L(n, xi): + return 1 #TODO + +def R(n, xi, x): + cn(n*K(1/L(n, xi))/K(1/xi) * cd_inv(x, 1/xi, 1/L(n, xi))) + +epsilon = 0.1 +n = 3 +omega = np.linspace(0, np.pi, 1000) +omega_0 = 1 +xi = 1.1 + +G = 1 / np.sqrt(1 + epsilon**2 * R(n, xi, omega/omega_0)**2) + + +plt.plot(omega, np.abs(G)) +plt.show() + + + +# %% Chebychef + +epsilon = 0.5 +omega = np.linspace(0, np.pi, 1000) +omega_0 = 1 +n = 4 + +def chebychef_poly(n, x): + x = x.astype(np.complex64) + y = np.cos(n* np.arccos(x)) + return np.real(y) + +F_omega = chebychef_poly + +for n in (1,2,3,4): + plt.plot(omega, F_omega(n, omega/omega_0)**2) +plt.ylim([0,5]) +plt.xlim([0,1.5]) +plt.grid() +plt.show() + +for n in (1,2,3,4): + G = 1 / np.sqrt(1 + epsilon**2 * F_omega(n, omega/omega_0)**2) + plt.plot(omega, np.abs(G)) +plt.grid() +plt.show() diff --git a/buch/papers/ellfilter/python/elliptic2.py b/buch/papers/ellfilter/python/elliptic2.py new file mode 100644 index 0000000..92fefd9 --- /dev/null +++ b/buch/papers/ellfilter/python/elliptic2.py @@ -0,0 +1,78 @@ +# %% + +import matplotlib.pyplot as plt +import scipy.signal +import numpy as np +import matplotlib +from matplotlib.patches import Rectangle + + +def ellip_filter(N): + + order = N + passband_ripple_db = 3 + stopband_attenuation_db = 20 + omega_c = 1000 + + a, b = scipy.signal.ellip( + order, + passband_ripple_db, + stopband_attenuation_db, + omega_c, + btype='low', + analog=True, + output='ba', + fs=None + ) + + w, mag_db, phase = scipy.signal.bode((a, b), w=np.linspace(0*omega_c,2*omega_c, 4000)) + + mag = 10**(mag_db/20) + + passband_ripple = 10**(-passband_ripple_db/20) + epsilon2 = (1/passband_ripple)**2 - 1 + + FN2 = ((1/mag**2) - 1) + + return w/omega_c, FN2 / epsilon2 + + +plt.figure(figsize=(4,2.5)) + +for N in [5]: + w, FN2 = ellip_filter(N) + plt.semilogy(w, FN2, label=f"$N={N}$") + +plt.gca().add_patch(Rectangle( + (0, 0), + 1, 1, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.gca().add_patch(Rectangle( + (1, 1), + 0.01, 1e2-1, + fc ='green', + alpha=0.2, + lw = 10, +)) + +plt.gca().add_patch(Rectangle( + (1.01, 100), + 1, 1e6, + fc ='green', + alpha=0.2, + lw = 10, +)) +plt.xlim([0,2]) +plt.ylim([1e-4,1e6]) +plt.grid() +plt.xlabel("$w$") +plt.ylabel("$F^2_N(w)$") +plt.legend() +plt.savefig("F_N_elliptic.pdf") +plt.show() + + + diff --git a/buch/papers/ellfilter/references.bib b/buch/papers/ellfilter/references.bib index 81b3577..2b873af 100644 --- a/buch/papers/ellfilter/references.bib +++ b/buch/papers/ellfilter/references.bib @@ -4,32 +4,10 @@ % (c) 2020 Autor, Hochschule Rapperswil % -@online{ellfilter:bibtex, - title = {BibTeX}, - url = {https://de.wikipedia.org/wiki/BibTeX}, - date = {2020-02-06}, - year = {2020}, - month = {2}, - day = {6} -} - -@book{ellfilter:numerical-analysis, - title = {Numerical Analysis}, - author = {David Kincaid and Ward Cheney}, - publisher = {American Mathematical Society}, - year = {2002}, - isbn = {978-8-8218-4788-6}, - inseries = {Pure and applied undegraduate texts}, - volume = {2} -} - -@article{ellfilter:mendezmueller, - author = { Tabea Méndez and Andreas Müller }, - title = { Noncommutative harmonic analysis and image registration }, - journal = { Appl. Comput. Harmon. Anal.}, - year = 2019, - volume = 47, - pages = {607--627}, - url = {https://doi.org/10.1016/j.acha.2017.11.004} +@online{ellfilter:bib:orfanidis, + author = { Sophocles J. Orfanidis}, + title = { LECTURE NOTES ON ELLIPTIC FILTER DESIGN }, + year = 2006, + url = {https://www.ece.rutgers.edu/~orfanidi/ece521/notes.pdf} } diff --git a/buch/papers/ellfilter/teil0.tex b/buch/papers/ellfilter/teil0.tex index fd04ba9..6204bc0 100644 --- a/buch/papers/ellfilter/teil0.tex +++ b/buch/papers/ellfilter/teil0.tex @@ -3,20 +3,20 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 0\label{ellfilter:section:teil0}} -\rhead{Teil 0} -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua \cite{ellfilter:bibtex}. -At vero eos et accusam et justo duo dolores et ea rebum. -Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum -dolor sit amet. +% \section{Teil 0\label{ellfilter:section:teil0}} +% \rhead{Teil 0} +% Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +% nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam +% erat, sed diam voluptua \cite{ellfilter:bibtex}. +% At vero eos et accusam et justo duo dolores et ea rebum. +% Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum +% dolor sit amet. -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua. -At vero eos et accusam et justo duo dolores et ea rebum. Stet clita -kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit -amet. +% Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam +% nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam +% erat, sed diam voluptua. +% At vero eos et accusam et justo duo dolores et ea rebum. Stet clita +% kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit +% amet. diff --git a/buch/papers/ellfilter/teil1.tex b/buch/papers/ellfilter/teil1.tex index 7e62a2f..4760473 100644 --- a/buch/papers/ellfilter/teil1.tex +++ b/buch/papers/ellfilter/teil1.tex @@ -3,53 +3,53 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 1 -\label{ellfilter:section:teil1}} -\rhead{Problemstellung} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. -Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit -aut fugit, sed quia consequuntur magni dolores eos qui ratione -voluptatem sequi nesciunt -\begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{ellfilter:equation1} -\end{equation} -Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, -consectetur, adipisci velit, sed quia non numquam eius modi tempora -incidunt ut labore et dolore magnam aliquam quaerat voluptatem. +% \section{Teil 1 +% \label{ellfilter:section:teil1}} +% \rhead{Problemstellung} +% Sed ut perspiciatis unde omnis iste natus error sit voluptatem +% accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +% quae ab illo inventore veritatis et quasi architecto beatae vitae +% dicta sunt explicabo. +% Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit +% aut fugit, sed quia consequuntur magni dolores eos qui ratione +% voluptatem sequi nesciunt +% \begin{equation} +% \int_a^b x^2\, dx +% = +% \left[ \frac13 x^3 \right]_a^b +% = +% \frac{b^3-a^3}3. +% \label{ellfilter:equation1} +% \end{equation} +% Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, +% consectetur, adipisci velit, sed quia non numquam eius modi tempora +% incidunt ut labore et dolore magnam aliquam quaerat voluptatem. -Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis -suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? -Quis autem vel eum iure reprehenderit qui in ea voluptate velit -esse quam nihil molestiae consequatur, vel illum qui dolorem eum -fugiat quo voluptas nulla pariatur? +% Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis +% suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? +% Quis autem vel eum iure reprehenderit qui in ea voluptate velit +% esse quam nihil molestiae consequatur, vel illum qui dolorem eum +% fugiat quo voluptas nulla pariatur? -\subsection{De finibus bonorum et malorum -\label{ellfilter:subsection:finibus}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. +% \subsection{De finibus bonorum et malorum +% \label{ellfilter:subsection:finibus}} +% At vero eos et accusamus et iusto odio dignissimos ducimus qui +% blanditiis praesentium voluptatum deleniti atque corrupti quos +% dolores et quas molestias excepturi sint occaecati cupiditate non +% provident, similique sunt in culpa qui officia deserunt mollitia +% animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. -Et harum quidem rerum facilis est et expedita distinctio -\ref{ellfilter:section:loesung}. -Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil -impedit quo minus id quod maxime placeat facere possimus, omnis -voluptas assumenda est, omnis dolor repellendus -\ref{ellfilter:section:folgerung}. -Temporibus autem quibusdam et aut officiis debitis aut rerum -necessitatibus saepe eveniet ut et voluptates repudiandae sint et -molestiae non recusandae. -Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis -voluptatibus maiores alias consequatur aut perferendis doloribus -asperiores repellat. +% Et harum quidem rerum facilis est et expedita distinctio +% \ref{ellfilter:section:loesung}. +% Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil +% impedit quo minus id quod maxime placeat facere possimus, omnis +% voluptas assumenda est, omnis dolor repellendus +% \ref{ellfilter:section:folgerung}. +% Temporibus autem quibusdam et aut officiis debitis aut rerum +% necessitatibus saepe eveniet ut et voluptates repudiandae sint et +% molestiae non recusandae. +% Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis +% voluptatibus maiores alias consequatur aut perferendis doloribus +% asperiores repellat. diff --git a/buch/papers/ellfilter/teil2.tex b/buch/papers/ellfilter/teil2.tex index 71fdc6d..39dd5d7 100644 --- a/buch/papers/ellfilter/teil2.tex +++ b/buch/papers/ellfilter/teil2.tex @@ -3,38 +3,38 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 2 -\label{ellfilter:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? +% \section{Teil 2 +% \label{ellfilter:section:teil2}} +% \rhead{Teil 2} +% Sed ut perspiciatis unde omnis iste natus error sit voluptatem +% accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +% quae ab illo inventore veritatis et quasi architecto beatae vitae +% dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +% aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +% eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +% est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +% velit, sed quia non numquam eius modi tempora incidunt ut labore +% et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +% veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +% nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +% reprehenderit qui in ea voluptate velit esse quam nihil molestiae +% consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +% pariatur? -\subsection{De finibus bonorum et malorum -\label{ellfilter:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +% \subsection{De finibus bonorum et malorum +% \label{ellfilter:subsection:bonorum}} +% At vero eos et accusamus et iusto odio dignissimos ducimus qui +% blanditiis praesentium voluptatum deleniti atque corrupti quos +% dolores et quas molestias excepturi sint occaecati cupiditate non +% provident, similique sunt in culpa qui officia deserunt mollitia +% animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +% est et expedita distinctio. Nam libero tempore, cum soluta nobis +% est eligendi optio cumque nihil impedit quo minus id quod maxime +% placeat facere possimus, omnis voluptas assumenda est, omnis dolor +% repellendus. Temporibus autem quibusdam et aut officiis debitis aut +% rerum necessitatibus saepe eveniet ut et voluptates repudiandae +% sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +% sapiente delectus, ut aut reiciendis voluptatibus maiores alias +% consequatur aut perferendis doloribus asperiores repellat. diff --git a/buch/papers/ellfilter/teil3.tex b/buch/papers/ellfilter/teil3.tex index 79a5f3d..dad96ad 100644 --- a/buch/papers/ellfilter/teil3.tex +++ b/buch/papers/ellfilter/teil3.tex @@ -3,38 +3,38 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 3 -\label{ellfilter:section:teil3}} -\rhead{Teil 3} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? +% \section{Teil 3 +% \label{ellfilter:section:teil3}} +% \rhead{Teil 3} +% Sed ut perspiciatis unde omnis iste natus error sit voluptatem +% accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +% quae ab illo inventore veritatis et quasi architecto beatae vitae +% dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +% aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +% eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +% est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +% velit, sed quia non numquam eius modi tempora incidunt ut labore +% et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +% veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +% nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +% reprehenderit qui in ea voluptate velit esse quam nihil molestiae +% consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +% pariatur? -\subsection{De finibus bonorum et malorum -\label{ellfilter:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +% \subsection{De finibus bonorum et malorum +% \label{ellfilter:subsection:malorum}} +% At vero eos et accusamus et iusto odio dignissimos ducimus qui +% blanditiis praesentium voluptatum deleniti atque corrupti quos +% dolores et quas molestias excepturi sint occaecati cupiditate non +% provident, similique sunt in culpa qui officia deserunt mollitia +% animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +% est et expedita distinctio. Nam libero tempore, cum soluta nobis +% est eligendi optio cumque nihil impedit quo minus id quod maxime +% placeat facere possimus, omnis voluptas assumenda est, omnis dolor +% repellendus. Temporibus autem quibusdam et aut officiis debitis aut +% rerum necessitatibus saepe eveniet ut et voluptates repudiandae +% sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +% sapiente delectus, ut aut reiciendis voluptatibus maiores alias +% consequatur aut perferendis doloribus asperiores repellat. diff --git a/buch/papers/ellfilter/tikz/arccos.tikz.tex b/buch/papers/ellfilter/tikz/arccos.tikz.tex new file mode 100644 index 0000000..2bdcc2d --- /dev/null +++ b/buch/papers/ellfilter/tikz/arccos.tikz.tex @@ -0,0 +1,97 @@ +\begin{tikzpicture}[>=stealth', auto, node distance=2cm, scale=1.2] + + + \draw[gray, ->] (0,-2) -- (0,2) node[anchor=south]{Im $z$}; + \draw[gray, ->] (-5,0) -- (5,0) node[anchor=west]{Re $z$}; + + \begin{scope} + \draw[thick, ->, orange] (-1, 0) -- (0,0); + \draw[thick, ->, darkgreen] (0, 0) -- (0,1.5); + \draw[thick, ->, darkgreen] (0, 0) -- (0,-1.5); + \draw[thick, ->, orange] (1, 0) -- (0,0); + \draw[thick, ->, red] (2, 0) -- (1,0); + \draw[thick, ->, blue] (2,1.5) -- (2, 0); + \draw[thick, ->, blue] (2,-1.5) -- (2, 0); + \draw[thick, ->, red] (2, 0) -- (3,0); + + \node[anchor=south west] at (0,1.5) {$\infty$}; + \node[anchor=south west] at (0,-1.5) {$\infty$}; + \node[anchor=south west] at (0,0) {$1$}; + \node[anchor=south] at (1,0) {$0$}; + \node[anchor=south west] at (2,0) {$-1$}; + \node[anchor=south west] at (2,1.5) {$-\infty$}; + \node[anchor=south west] at (2,-1.5) {$-\infty$}; + \node[anchor=south west] at (3,0) {$0$}; + \end{scope} + + \begin{scope}[xshift=4cm] + \draw[thick, ->, orange] (-1, 0) -- (0,0); + \draw[thick, ->, darkgreen] (0, 0) -- (0,1.5); + \draw[thick, ->, darkgreen] (0, 0) -- (0,-1.5); + % \draw[thick, ->, orange] (1, 0) -- (0,0); + % \draw[thick, ->, red] (2, 0) -- (1,0); + % \draw[thick, ->, blue] (2,1.5) -- (2, 0); + % \draw[thick, ->, blue] (2,-1.5) -- (2, 0); + % \draw[thick, ->, red] (2, 0) -- (3,0); + + \node[anchor=south west] at (0,1.5) {$\infty$}; + \node[anchor=south west] at (0,-1.5) {$\infty$}; + \node[anchor=south west] at (0,0) {$1$}; + % \node[anchor=south] at (1,0) {$0$}; + % \node[anchor=south west] at (2,0) {$-1$}; + % \node[anchor=south west] at (2,1.5) {$-\infty$}; + % \node[anchor=south west] at (2,-1.5) {$-\infty$}; + % \node[anchor=south west] at (3,0) {$0$}; + \end{scope} + + \begin{scope}[xshift=-4cm] + % \draw[thick, ->, orange] (-1, 0) -- (0,0); + \draw[thick, ->, darkgreen] (0, 0) -- (0,1.5); + \draw[thick, ->, darkgreen] (0, 0) -- (0,-1.5); + \draw[thick, ->, orange] (1, 0) -- (0,0); + \draw[thick, ->, red] (2, 0) -- (1,0); + \draw[thick, ->, blue] (2,1.5) -- (2, 0); + \draw[thick, ->, blue] (2,-1.5) -- (2, 0); + \draw[thick, ->, red] (2, 0) -- (3,0); + + \node[anchor=south west] at (0,1.5) {$\infty$}; + \node[anchor=south west] at (0,-1.5) {$\infty$}; + \node[anchor=south west] at (0,0) {$1$}; + \node[anchor=south] at (1,0) {$0$}; + \node[anchor=south west] at (2,0) {$-1$}; + \node[anchor=south west] at (2,1.5) {$-\infty$}; + \node[anchor=south west] at (2,-1.5) {$-\infty$}; + \node[anchor=south west] at (3,0) {$0$}; + \end{scope} + + \node[gray, anchor=north west] at (-4,0) {$-2\pi$}; + \node[gray, anchor=north west] at (-2,0) {$-\pi$}; + \node[gray, anchor=north west] at (0,0) {$0$}; + \node[gray, anchor=north west] at (2,0) {$\pi$}; + \node[gray, anchor=north west] at (4,0) {$2\pi$}; + + + \node[gray, anchor=south east] at (0,-1.5) {$-\infty$}; + \node[gray, anchor=south east] at (0, 0) {$0$}; + \node[gray, anchor=south east] at (0, 1.5) {$\infty$}; + + + + \begin{scope}[yshift=-2.5cm] + + \draw[gray, ->] (-5,0) -- (5,0) node[anchor=west]{$w$}; + + \draw[thick, ->, blue] (-4, 0) -- (-2, 0); + \draw[thick, ->, red] (-2, 0) -- (0, 0); + \draw[thick, ->, orange] (0, 0) -- (2, 0); + \draw[thick, ->, darkgreen] (2, 0) -- (4, 0); + + \node[anchor=south] at (-4,0) {$-\infty$}; + \node[anchor=south] at (-2,0) {$-1$}; + \node[anchor=south] at (0,0) {$0$}; + \node[anchor=south] at (2,0) {$1$}; + \node[anchor=south] at (4,0) {$\infty$}; + + \end{scope} + +\end{tikzpicture} \ No newline at end of file diff --git a/buch/papers/ellfilter/tikz/arccos2.tikz.tex b/buch/papers/ellfilter/tikz/arccos2.tikz.tex new file mode 100644 index 0000000..dcf02fd --- /dev/null +++ b/buch/papers/ellfilter/tikz/arccos2.tikz.tex @@ -0,0 +1,46 @@ +\begin{tikzpicture}[>=stealth', auto, node distance=2cm, scale=1.2] + + \tikzstyle{zero} = [draw, circle, inner sep =0, minimum height=0.15cm] + + \tikzset{pole/.style={cross out, draw=black, minimum size=(0.15cm-\pgflinewidth), inner sep=0pt, outer sep=0pt}} + + \begin{scope}[xscale=0.5] + + \draw[gray, ->] (0,-2) -- (0,2) node[anchor=south]{Im $z$}; + \draw[gray, ->] (-10,0) -- (10,0) node[anchor=west]{Re $z$}; + + \begin{scope} + + \draw[>->, line width=0.05, thick, blue] (2, 1.5) -- (2,0.05) -- node[anchor=south, pos=0.5]{$N=1$} (0.1,0.05) -- (0.1,1.5); + \draw[>->, line width=0.05, thick, orange] (4, 1.5) -- (4,0) -- node[anchor=south, pos=0.25]{$N=2$} (0,0) -- (0,1.5); + \draw[>->, line width=0.05, thick, red] (6, 1.5) -- (6,-0.05) -- node[anchor=south, pos=0.1666]{$N=3$} (-0.1,-0.05) -- (-0.1,1.5); + + + \node[zero] at (-7,0) {}; + \node[zero] at (-5,0) {}; + \node[zero] at (-3,0) {}; + \node[zero] at (-1,0) {}; + \node[zero] at (1,0) {}; + \node[zero] at (3,0) {}; + \node[zero] at (5,0) {}; + \node[zero] at (7,0) {}; + + + \end{scope} + + \node[gray, anchor=north] at (-8,0) {$-4\pi$}; + \node[gray, anchor=north] at (-6,0) {$-3\pi$}; + \node[gray, anchor=north] at (-4,0) {$-2\pi$}; + \node[gray, anchor=north] at (-2,0) {$-\pi$}; + \node[gray, anchor=north] at (2,0) {$\pi$}; + \node[gray, anchor=north] at (4,0) {$2\pi$}; + \node[gray, anchor=north] at (6,0) {$3\pi$}; + \node[gray, anchor=north] at (8,0) {$4\pi$}; + + + \node[gray, anchor=east] at (0,-1.5) {$-\infty$}; + \node[gray, anchor=east] at (0, 1.5) {$\infty$}; + + \end{scope} + +\end{tikzpicture} \ No newline at end of file -- cgit v1.2.1