Commit bed481f2 by Christian Rohlfing

### - split elementar signals into two notebooks (one new for demo)

- renamed discrete fourier transform notebook
parent 51d30994
 ... ... @@ -24,7 +24,7 @@ " \n", "\n", "\n", "# Diskrete Faltung" "# Diskrete Fourier-Transformation" ] }, { ... ...
 ... ... @@ -54,7 +54,7 @@ "metadata": {}, "outputs": [], "source": [ "fig,ax = plt.subplots(1,1); ax.plot(t, gauss(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, gauss(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)=\\mathrm{e}^{-\\pi t^2}$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.75, 2.75]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -79,7 +79,7 @@ "metadata": {}, "outputs": [], "source": [ "fig,ax = plt.subplots(1,1); ax.plot(t, unitstep(t)); \n", "fig,ax = plt.subplots(1,1); ax.plot(t, unitstep(t), 'rwth'); \n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)=\\epsilon(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -102,7 +102,7 @@ "metadata": {}, "outputs": [], "source": [ "fig,ax = plt.subplots(1,1); ax.plot(t, rect(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, rect(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)=\\mathrm{rect}(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -125,7 +125,7 @@ "metadata": {}, "outputs": [], "source": [ "fig,ax = plt.subplots(1,1); ax.plot(t, tri(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, tri(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)=\\Lambda(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -134,8 +134,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ "### Si-Funktion\n", "Die Si-Funktion ist definiert als $\\displaystyle \\mathrm{si}(t) = \\frac{\\sin(t)}{t}$\n", "### si-Funktion\n", "Die si-Funktion ist definiert als $\\displaystyle \\mathrm{si}(t) = \\frac{\\sin(t)}{t}$\n", "\n", "Die si-Funktion ist auch als Spaltfunktion bekannt, da in optischen Systemen und Antennensystemen ein Spalt als räumliche rect-Funktion beschrieben werden kann (Bracewell, 1986). Sie hat außerdem die besondere Eigenschaft, sich bei Faltung mit sich selbst zu reproduzieren: $\\mathrm{si*\\pi}(t)=\\mathrm{si*\\pi}(t)*\\mathrm{si*\\pi}(t)$." ] ... ... @@ -146,7 +146,7 @@ "metadata": {}, "outputs": [], "source": [ "fig,ax = plt.subplots(1,1); ax.plot(t, si(np.pi*t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, si(np.pi*t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)=\\mathrm{si}(\\pi t)$', bbox=ient_wbbox)\n", "ax.set_xlim([-5.5,5.5]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -182,7 +182,7 @@ "s = lambda t: rect(t-1/2)\n", "\n", "# Plot\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -214,7 +214,7 @@ "s = lambda t: rect(t/2)\n", "\n", "# Plot\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -236,7 +236,7 @@ "s = lambda t: rect(t-0.5)*t\n", "\n", "# Plot\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -255,7 +255,7 @@ "outputs": [], "source": [ "# Plot\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(-t));\n", "fig,ax = plt.subplots(1,1); ax.plot(t, s(-t), 'rwth');\n", "ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s(-t)$', bbox=ient_wbbox)\n", "ax.axis('equal'); ax.set_xlim([-2.25,2.25]); ient_grid(ax); ient_axis(ax);" ] ... ... @@ -264,52 +264,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ "### Demo: Zeitverschiebung, -dehnung und -spiegelung\n", "Die Demo fasst nun alle diese Funktionen interaktiv zusammen. Das allgemeine Signal ist weiterhin\n", "$\\displaystyle s\\left(\\pm\\frac{t-t_0}{T}\\right)$.\n", "Mit den Schiebereglern können unterschiedliche Werte für den Dehnungsfaktor $T$ und die Zeitverschiebung $t_0$ ausgewählt werden. Die Spiegelung kann über den entsprechenden Button ein- und ausgeschaltet werden. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s = lambda t: rect(t-0.5)*t\n", "\n", "# Plot & demo\n", "fig, ax = plt.subplots(1, 1, figsize=(8, 4))\n", "@widgets.interact(T=widgets.FloatSlider(min=-4, max=4, value=1, step=.1, description=r'Dehnung $T$', style=ient_wdgtl_style), \n", " t0=widgets.FloatSlider(min=-2, max=2, value=0, step=.1, description=r'Verschiebung $t_0$', style=ient_wdgtl_style),\n", " reflection=widgets.Checkbox(value=False, description='Spiegelung', style=ient_wdgtl_style))\n", "def update_signals(T, t0, reflection):\n", " T = 0.1 if T==0 else T\n", " T = -T if reflection else T\n", " \n", " s_plot = s((t-t0)/T)\n", " \n", " if not ax.lines: # plot s(t) and g(t)\n", " ax.plot(t, s_plot, 'rwth');\n", " ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s\\left(\\pm\\frac{t-t_0}{T}\\right)$')\n", " ax.axis('equal'); ax.set_xlim([-4.75, 4.75]); ient_axis(ax); ient_grid(ax); ax.minorticks_on()\n", " \n", " else: # update lines\n", " ax.lines[0].set_ydata(s_plot); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgaben\n", "* Verändere den Wert für $t_0$. In welche Richtung bewegt sich das Signal?\n", "* Verändere nun den Dehnungsfaktor $T$. Was passiert für $T<0$? Was passiert für Werte $T>0$? \n", "* Setze die Werte zurück auf $T=1$ und $t_0=0$. Dies kann entweder über den Schieberegler oder durch erneutes Ausführen der Cell erfolgen.\n", "* Aktiviere und deaktivere die Spiegelung und beobachte, was passiert.\n", "* Verschiebe nun das Signal mit $t_0=1$. Aktiviere und deaktiviere die Spiegelung. Wie lässt sich dieses Verhalten erklären?\n", "* Ändere nun $T$. Wie ändert sich das Signal? Aktiviere nun die Spiegelung. Was passiert nun bei einer Änderung von $T$?\n", "* Teste abschließend verschiedene Kombinationen von $T$, $t_0$ und der Spiegelung und beobachte, welche Unterschiede die Reihenfolge der Ausführung der Operationen auf das Signal hat." "Zur Verdeutlichung von Zeitspiegelung, -dehnung und -spiegelung ist zusätzlich eine [interaktive Demo](GDET3%20Zeitverschiebung-Dehnung%20GUI.ipynb) verfügbar." ] }, { ... ...
 { "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "# Copyright 2019 Institut für Nachrichtentechnik, RWTH Aachen University\n", "%matplotlib widget\n", "\n", "from ipywidgets import interact, interactive\n", "import ipywidgets as widgets\n", "\n", "from ient_nb.ient_plots import *\n", "from ient_nb.ient_signals import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Demo Zeitverschiebung & Zeitdehnung\n", "\n", "Jedes Signal $s(t)$ kann verschoben, gedehnt/gestaucht und/oder gespiegelt werden. Im Folgenden werden die Effekte dieser Operationen auf das Signal verdeutlicht. Als grundlegende Form wird \n", "$\\displaystyle s\\left(\\pm\\frac{t-t_0}{T}\\right)$\n", "gewählt. Hierbei steht $t_0$ für die Verschiebung des Signals, $T$ für die Dehnung/Stauchung und $\\pm$ beschreibt die Spiegelung.\n", "\n", "Das Ausgangssignal ist\n", "$s(t) = t \\cdot \\mathrm{rect}\\left(t-\\frac{1}{2}\\right)$.\n", "\n", "Mit den Schiebereglern können unterschiedliche Werte für den Dehnungsfaktor $T$ und die Zeitverschiebung $t_0$ ausgewählt werden. Die Spiegelung kann über den entsprechenden Button ein- und ausgeschaltet werden. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "jupyter": { "source_hidden": true } }, "outputs": [], "source": [ "s = lambda t: rect(t-0.5)*t\n", "\n", "# Plot & demo\n", "fig, ax = plt.subplots(1, 1, figsize=(8, 4))\n", "@widgets.interact(T=widgets.FloatSlider(min=-4, max=4, value=1, step=.1, description=r'Dehnung $T$', style=ient_wdgtl_style), \n", " t0=widgets.FloatSlider(min=-2, max=2, value=0, step=.1, description=r'Verschiebung $t_0$', style=ient_wdgtl_style),\n", " reflection=widgets.Checkbox(value=False, description='Spiegelung', style=ient_wdgtl_style))\n", "def update_signals(T, t0, reflection):\n", " T = 0.1 if T==0 else T\n", " T = -T if reflection else T\n", " \n", " s_plot = s((t-t0)/T)\n", " \n", " if not ax.lines: # plot s(t) and g(t)\n", " ax.plot(t, s_plot, 'rwth');\n", " ax.set_xlabel(r'$\\rightarrow t$'); ax.set_ylabel(r'$\\uparrow s\\left(\\pm\\frac{t-t_0}{T}\\right)$')\n", " ax.axis('equal'); ax.set_xlim([-4.75, 4.75]); ient_axis(ax); ient_grid(ax); ax.minorticks_on()\n", " \n", " else: # update lines\n", " ax.lines[0].set_ydata(s_plot); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgaben\n", "* Verändere den Wert für $t_0$. In welche Richtung bewegt sich das Signal?\n", "* Verändere nun den Dehnungsfaktor $T$. Was passiert für $T<0$? Was passiert für Werte $T>0$? \n", "* Setze die Werte zurück auf $T=1$ und $t_0=0$. Dies kann entweder über den Schieberegler oder durch erneutes Ausführen der Cell erfolgen.\n", "* Aktiviere und deaktivere die Spiegelung und beobachte, was passiert.\n", "* Verschiebe nun das Signal mit $t_0=1$. Aktiviere und deaktiviere die Spiegelung. Wie lässt sich dieses Verhalten erklären?\n", "* Ändere nun $T$. Wie ändert sich das Signal? Aktiviere nun die Spiegelung. Was passiert nun bei einer Änderung von $T$?\n", "* Teste abschließend verschiedene Kombinationen von $T$, $t_0$ und der Spiegelung und beobachte, welche Unterschiede die Reihenfolge der Ausführung der Operationen auf das Signal hat." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources) (OER). Feel free to use the notebook for your own purposes. The code is licensed under the [MIT license](https://opensource.org/licenses/MIT). \n", "\n", "Please attribute the work as follows: \n", "*Christian Rohlfing, Übungsbeispiele zur Vorlesung \"Grundgebiete der Elektrotechnik 3 - Signale und Systeme\"*, gehalten von Jens-Rainer Ohm, 2019, Institut für Nachrichtentechnik, RWTH Aachen University." ] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }
 ... ... @@ -19,7 +19,8 @@ "## Inhaltsverzeichnis\n", "\n", "1. Determinierte Signale in linearen zeitinvarianten Systemen\n", " * [Elementarsignale](GDET3%20Elementarsignale.ipynb) (Elementarsignale sowie Zeitverschiebung, Spiegelung, Dehnung)\n", " * [Elementarsignale](GDET3%20Elementarsignale.ipynb) (Elementarsignale sowie Zeitverschiebung, -spiegelung, -dehnung)\n", " * [Demo Zeitverschiebung, -spiegelung, -dehnung](GDET3%20Zeitverschiebung-Dehnung%20GUI.ipynb)\n", " * [Beispiel zur Berechnung des Faltungsintegrals](GDET3%20Faltungsbeispiel.ipynb)\n", " * [Demo Faltungsintegral](GDET3%20Faltung%20GUI.ipynb)\n", "2. Laplace-Transformation\n", ... ...
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!