Commit bed481f2 authored by Christian Rohlfing's avatar Christian Rohlfing

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

- renamed discrete fourier transform notebook
parent 51d30994
......@@ -24,7 +24,7 @@
" <img src=\"ient_nb/figures/rwth_ient_logo@2x.png\" style=\"float: right;height: 5em;\">\n",
"</div>\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": [
"<div>\n",
" <img src=\"ient_nb/figures/rwth_ient_logo@2x.png\" style=\"float: right;height: 5em;\">\n",
"</div>\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!
Please register or to comment