GDET3 Weißes Rauschen.ipynb 8.41 KB
Newer Older
1
2
3
4
5
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
6
7
8
9
10
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
11
12
   "outputs": [],
   "source": [
13
    "# Copyright 2020 Institut für Nachrichtentechnik, RWTH Aachen University\n",
14
    "%matplotlib widget\n",
15
16
17
18
19
20
21
22
23
    "\n",
    "from ipywidgets import interact, interactive, fixed\n",
    "import ipywidgets as widgets\n",
    "from IPython.display import clear_output, display, HTML, Audio\n",
    "\n",
    "import numpy as np\n",
    "from scipy import signal\n",
    "\n",
    "from ient_nb.ient_plots import *\n",
24
    "from ient_nb.ient_signals import *\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
25
    "from ient_nb.ient_audio import *\n",
26
27
28
29
    "    \n",
    "fs = 22050 # Samplingrate\n",
    "(t,deltat) = np.linspace(0,10, 10*fs, retstep=True) # Zeitachse\n",
    "(tau,deltatau) = np.linspace(-10,10, 2*len(t)-1, retstep=True) # Korrelation"
30
31
   ]
  },
Christian Rohlfing's avatar
Christian Rohlfing committed
32
33
34
35
36
37
38
39
  {
   "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",
40
41
42
43
44
    "# Weißes Rauschen\n",
    "*Weißes Rauschen* nennt man einen Zufallsprozess, dessen Leistungsdichtespektrum in einem großen Frequenzbereich näherungsweise konstant ist. \n",
    "Idealisierend setzt man \n",
    "$$\\phi_{ss}(f)=N_0$$\n",
    "und nennt Zufallsprozesse mit einem solchen für alle Frequenzen konstanten Leistungsdichtespektrum mittelwertfreies weißes Rauschen.\n",
45
    "Störsignale werden häufig als Musterfunktion eines solchen stationären oder schwach stationären Prozesses modelliert. \n"
Christian Rohlfing's avatar
Christian Rohlfing committed
46
47
   ]
  },
48
49
50
51
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
52
    "## Autokorrelationsfunktion (AKF):\n",
53
    "Ein idealer Rauschprozess $n(t)$ ist mit sich selbst unkorreliert und hat somit die Autokorrelationsfunktion  \n",
Iris Heisterklaus's avatar
Iris Heisterklaus committed
54
    "$$\\varphi_{nn}(\\tau) = \\mathcal{E}\\{n(t)\\cdot n(t+\\tau)\\} = N_0\\delta(\\tau)\\text{.}$$ \n"
55
56
57
58
59
60
61
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Verteilungsdichtefunktion\n",
Iris Heisterklaus's avatar
Iris Heisterklaus committed
62
    "Im Folgenden werden zwei verschiedene Rauschprozesse betrachtet. Diese unterscheiden sich in der Verteilungsdichte des Prozesses, der erste Prozess hat Gauß-verteilte Werte, die Werte des zweiten Prozesses sind gleichverteilt.\n",
63
    "\n",
64
    "## Gauß-verteilter Prozess\n",
Iris Heisterklaus's avatar
Iris Heisterklaus committed
65
    "Für die Verteilungsdichtefunktion eines Gauß-verteilten Prozesses gilt\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
66
    "$$p_n(x) = \\frac{1}{\\sqrt{2 \\pi \\sigma_n^2}}\\exp\\left(-\\frac{(x-m_n)^2}{2\\sigma_n^2}\\right)$$\n",
67
68
    "mit Mittelwert $m_n$ und Varianz $\\sigma_n^2$.\n",
    "Das nachfolgende Bild zeigt eine Realisation, auch Musterfunktion genannt, von Gauß-verteiltem weißen Rauschen. Ebenso ist ein Hörbeispiel gegeben."
69
70
71
72
73
74
75
76
77
78
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "m_n = 0 # Mittelwert\n",
    "sigma_n = 1 # Varianz\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
79
80
81
    "n = np.random.normal(m_n, sigma_n, len(t))\n",
    "\n",
    "# Plot\n",
82
83
84
    "fig,ax = plt.subplots(1,1); ax.plot(1000*t, n, 'rwth');\n",
    "ax.set_ylabel(r'$\\uparrow {}^k n(t)$'); ax.set_xlabel(r'$\\rightarrow t$ [ms]', bbox=ient_wbbox);\n",
    "ax.set_xlim([0,11]); ient_axis(ax);\n",
85
    "\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
86
    "# Audio\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
87
    "ient_audio_play(n, fs)"
88
89
   ]
  },
Christian Rohlfing's avatar
Christian Rohlfing committed
90
91
92
93
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
94
95
96
97
    "Für diese Musterfunktion wird nun die Verteilungsdichtefunktion betrachtet. \n",
    "\n",
    "Die nachfolgende Abbildung zeigt die Verteilungsdichtefunktion als Plot der Funktion (schwarz gestrichelte Linie) und als gemessene Verteilungsdichtefunktion in Form eines Histogramms einer Musterfunktion (blaue Linie). Die gemessene Verteilungsdichtefunktion bildet die ideale Verteilungsdichtefunktion gut ab.\n",
    "Ebenso dargestellt ist die Autokorrelationsfunktion $\\varphi_{nn}(\\tau)$ des Prozesses. Diese zeigt, wie aus der oben angegebenen Formel erwartbar, einen starken Impuls bei $\\tau=0$. Ebenso kann erahnt werden, dass der Prozess nicht ideal ist, es sind auch jenseits von $\\tau=0$ Werte zu erkennen, diese sind jedoch vernachlässigbar klein. "
Christian Rohlfing's avatar
Christian Rohlfing committed
98
99
   ]
  },
100
101
102
103
104
105
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
106
107
    "# Gemessene Verteilungsdichtefunktion\n",
    "pn_meas,bins = np.histogram(n, bins=100,range=(-5,5),density=True)\n",
108
109
    "x = (bins[:-1] + bins[1:]) / 2\n",
    "\n",
110
    "# Wahre Verteilungsdichtefunktion\n",
111
112
113
114
115
116
117
    "pn = 1/np.sqrt(2*np.pi*sigma_n**2)*np.exp(-(x-m_n)**2/(2*sigma_n**2))\n",
    "\n",
    "# Autokorrelationsfunktion\n",
    "phi_nn = signal.correlate(n,n, mode='full')\n",
    "\n",
    "# Plot\n",
    "fig,axs = plt.subplots(1,2,figsize=(9,4)); \n",
118
    "ax = axs[0]; ax.plot(x, pn_meas, 'rwth'); ax.plot(x,pn,'k--');\n",
119
120
    "ax.set_ylabel(r'$\\uparrow p_n(x)$'); ax.set_xlabel(r'$\\rightarrow x$'); ient_axis(ax);\n",
    "\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
121
    "ax = axs[1]; ax.plot(tau, phi_nn, 'rwth');\n",
122
123
124
125
126
127
128
129
    "ax.set_ylabel(r'$\\uparrow \\varphi_{nn}(\\tau)$'); ax.set_xlabel(r'$\\rightarrow \\tau$'); \n",
    "ax.set_xlim([-10,12]); ient_axis(ax);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Christian Rohlfing's avatar
Christian Rohlfing committed
130
    "## 2. Gleichverteilung:\n",
131
    "Für die Verteilungsdichtefunktion eines gleichverteilten Prozesses gilt\n",
132
133
    "$$p_n(x) = \\frac{1}{a} \\mathrm{rect}\\left(\\frac{x-m_n}{a}\\right)$$\n",
    "\n",
134
135
    "mit Mittelwert $m_n$ und Varianz $\\sigma_n^2=\\frac{a^2}{12}$.\n",
    "Die nachfolgende Abbildung zeigt wieder eine Musterfunktion dieses Prozesses und gibt das zugehörige Hörbeispiel."
136
137
138
139
140
141
142
143
144
145
146
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.sqrt(12)*sigma_n\n",
    "n = np.random.uniform(-0.5*a+m_n, 0.5*a+m_n, len(t))\n",
    "\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
147
    "# Plot\n",
148
149
150
    "fig,ax = plt.subplots(1,1); ax.plot(1000*t, n, 'rwth');\n",
    "ax.set_ylabel(r'$\\uparrow {}^k n(t)$'); ax.set_xlabel(r'$\\rightarrow t$ [ms]', bbox=ient_wbbox);\n",
    "ax.set_xlim([0,11]); ient_axis(ax);\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
151
    "\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
152
    "ient_audio_play(n, fs)"
153
154
   ]
  },
Christian Rohlfing's avatar
Christian Rohlfing committed
155
156
157
158
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
159
160
161
    "Nachfolgend wird auch hier die Verteilungsdichtefunktion und die Autokorrelationsfunktion betrachtet. Die schwarz gestrichelte Linie gibt die ideale Verteilungsdichtefunktion an, die blaue wieder die aus der Musterfunktion berechnete. Hier ist eine deutlich größere Abweichung der realen von der idealen Verteilungsdichtefunktion erkennbar. \n",
    "\n",
    "Die Autokorrelationsfunktion zeigt auch hier einen ausgeprägten Impuls bei $\\tau=0$. "
Christian Rohlfing's avatar
Christian Rohlfing committed
162
163
   ]
  },
164
165
166
167
168
169
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
170
    "# Gemessene Verteilungsdichtefunktion\n",
171
172
173
    "pn_meas,bins = np.histogram(n,bins=200,range=(-5,5),density=True)\n",
    "x = (bins[:-1] + bins[1:]) / 2\n",
    "\n",
174
    "# Wahre Verteilungsdichtefunktion\n",
175
176
177
178
179
180
181
    "pn = 1/a*rect((x-m_n)/a)\n",
    "\n",
    "# Autokorrelationsfunktion\n",
    "phi_nn = signal.correlate(n,n, mode='full')\n",
    "\n",
    "# Plot\n",
    "fig,axs = plt.subplots(1,2,figsize=(9,4)); \n",
182
    "ax = axs[0]; ax.plot(x, pn_meas, 'rwth'); ax.plot(x,pn,'k--');\n",
183
184
    "ax.set_ylabel(r'$\\uparrow p_n(x)$'); ax.set_xlabel(r'$\\rightarrow x$'); ient_axis(ax);\n",
    "\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
185
    "ax = axs[1]; ax.plot(tau, phi_nn, 'rwth');\n",
186
187
188
189
    "ax.set_ylabel(r'$\\uparrow \\varphi_{nn}(\\tau)$'); ax.set_xlabel(r'$\\rightarrow \\tau$'); \n",
    "ax.set_xlim([-10,12]); ient_axis(ax);"
   ]
  },
Christian Rohlfing's avatar
Christian Rohlfing committed
190
191
  {
   "cell_type": "markdown",
192
   "metadata": {},
Christian Rohlfing's avatar
Christian Rohlfing committed
193
   "source": [
194
    "___\n",
Christian Rohlfing's avatar
Christian Rohlfing committed
195
196
197
    "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",
198
    "*Christian Rohlfing, Übungsbeispiele zur Vorlesung \"Grundgebiete der Elektrotechnik 3 - Signale und Systeme\"*, gehalten von Jens-Rainer Ohm, 2020, Institut für Nachrichtentechnik, RWTH Aachen University."
Christian Rohlfing's avatar
Christian Rohlfing committed
199
   ]
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
  }
 ],
 "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",
218
   "version": "3.8.1"
219
220
221
  }
 },
 "nbformat": 4,
222
 "nbformat_minor": 4
223
}