Skip to content

Commit dab75d4

Browse files
committed
Equation environment, copyright
1 parent f65d1b8 commit dab75d4

File tree

5 files changed

+77
-86
lines changed

5 files changed

+77
-86
lines changed

recursive_filters/cascaded_structures.ipynb

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"source": [
77
"# Realization of Recursive Filters\n",
88
"\n",
9-
"*This jupyter/Python notebook is part of a [collection of notebooks](../index.ipynb) in the masters module [Digital Signal Processing](http://www.int.uni-rostock.de/Digitale-Signalverarbeitung.48.0.html), Comunications Engineering, Universität Rostock. Please direct questions and suggestions to <mailto:[email protected]>.*"
9+
"*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [[email protected]](mailto:[email protected]).*"
1010
]
1111
},
1212
{
@@ -26,7 +26,9 @@
2626
"\n",
2727
"The rational transfer function $H(z)$ of a linear time-invariant (LTI) recursive system can be [expressed by its zeros and poles](introduction.ipynb#Transfer-Function) as\n",
2828
"\n",
29-
"$$ H(z) = \\frac{b_M}{a_N} \\cdot \\frac{\\prod_{\\mu=1}^{P} (z - z_{0\\mu})^{m_\\mu}}{\\prod_{\\nu=1}^{Q} (z - z_{\\infty\\nu})^{n_\\nu}} $$\n",
29+
"\\begin{equation}\n",
30+
"H(z) = \\frac{b_M}{a_N} \\cdot \\frac{\\prod_{\\mu=1}^{P} (z - z_{0\\mu})^{m_\\mu}}{\\prod_{\\nu=1}^{Q} (z - z_{\\infty\\nu})^{n_\\nu}}\n",
31+
"\\end{equation}\n",
3032
"\n",
3133
"where $z_{0\\mu}$ and $z_{\\infty\\nu}$ denote the $\\mu$-th zero and $\\nu$-th pole of degree $m_\\mu$ and $n_\\nu$ of $H(z)$, respectively. The total number of zeros and poles is denoted by $P$ and $Q$.\n",
3234
"\n",
@@ -37,12 +39,16 @@
3739
"\n",
3840
"Decomposing the transfer function into these two types by grouping the poles and zeros into single poles/zeros and conjugate complex pairs of poles/zeros results in\n",
3941
"\n",
40-
"$$ H(z) = K \\cdot \\prod_{\\eta=1}^{S_1} \\frac{(z - z_{0\\eta})}{(z - z_{\\infty\\eta})} \n",
41-
"\\cdot \\prod_{\\eta=1}^{S_2} \\frac{(z - z_{0\\eta}) (z - z_{0\\eta}^*)} {(z - z_{\\infty\\eta})(z - z_{\\infty\\eta}^*)} $$\n",
42+
"\\begin{equation}\n",
43+
"H(z) = K \\cdot \\prod_{\\eta=1}^{S_1} \\frac{(z - z_{0\\eta})}{(z - z_{\\infty\\eta})} \n",
44+
"\\cdot \\prod_{\\eta=1}^{S_2} \\frac{(z - z_{0\\eta}) (z - z_{0\\eta}^*)} {(z - z_{\\infty\\eta})(z - z_{\\infty\\eta}^*)}\n",
45+
"\\end{equation}\n",
4246
"\n",
4347
"where $K$ denotes a constant and $S_1 + 2 S_2 = N$ with $N$ denoting the order of the system. The cascade of two systems results in a multiplication of their transfer functions. Above decomposition represents a cascade of first- and second-order recursive systems. The former can be treated as a special case of second-order recursive systems. The decomposition is therefore known as decomposition into second-order sections (SOSs) or [biquad filters](https://en.wikipedia.org/wiki/Digital_biquad_filter). Using a cascade of SOSs the transfer function of the recursive system can be rewritten as\n",
4448
"\n",
45-
"$$ H(z) = \\prod_{\\mu=1}^{S} \\frac{b_{0, \\mu} + b_{1, \\mu} \\, z^{-1} + b_{2, \\mu} \\, z^{-2}}{1 + a_{1, \\mu} \\, z^{-1} + a_{2, \\mu} \\, z^{-2}} $$\n",
49+
"\\begin{equation}\n",
50+
"H(z) = \\prod_{\\mu=1}^{S} \\frac{b_{0, \\mu} + b_{1, \\mu} \\, z^{-1} + b_{2, \\mu} \\, z^{-2}}{1 + a_{1, \\mu} \\, z^{-1} + a_{2, \\mu} \\, z^{-2}}\n",
51+
"\\end{equation}\n",
4652
"\n",
4753
"where $S = \\lceil \\frac{N}{2} \\rceil$ denotes the total number of SOSs. These results state that any real valued system of order $N > 2$ can be decomposed into SOSs. This has a number of benefits\n",
4854
"\n",
@@ -217,17 +223,7 @@
217223
"source": [
218224
"**Copyright**\n",
219225
"\n",
220-
"<p xmlns:dct=\"http://purl.org/dc/terms/\">\n",
221-
" <a rel=\"license\"\n",
222-
" href=\"http://creativecommons.org/publicdomain/zero/1.0/\">\n",
223-
" <img src=\"http://i.creativecommons.org/p/zero/1.0/88x31.png\" style=\"border-style: none;\" alt=\"CC0\" />\n",
224-
" </a>\n",
225-
" <br />\n",
226-
" To the extent possible under law,\n",
227-
" <span rel=\"dct:publisher\" resource=\"[_:publisher]\">the person who associated CC0</span>\n",
228-
" with this work has waived all copyright and related or neighboring\n",
229-
" rights to this work.\n",
230-
"</p>"
226+
"This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples, 2016*."
231227
]
232228
}
233229
],

recursive_filters/direct_forms.ipynb

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"source": [
77
"# Realization of Recursive Filters\n",
88
"\n",
9-
"*This jupyter/Python notebook is part of a [collection of notebooks](../index.ipynb) in the masters module [Digital Signal Processing](http://www.int.uni-rostock.de/Digitale-Signalverarbeitung.48.0.html), Comunications Engineering, Universität Rostock. Please direct questions and suggestions to <mailto:[email protected]>.*"
9+
"*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [[email protected]](mailto:[email protected]).*"
1010
]
1111
},
1212
{
@@ -17,7 +17,9 @@
1717
"\n",
1818
"The output signal $y[k] = \\mathcal{H} \\{ x[k] \\}$ of a recursive linear-time invariant (LTI) system is given by\n",
1919
"\n",
20-
"$$ y[k] = \\frac{1}{a_0} \\left( \\sum_{m=0}^{M} b_m \\; x[k-m] - \\sum_{n=1}^{N} a_n \\; y[k-n] \\right) $$\n",
20+
"\\begin{equation}\n",
21+
"y[k] = \\frac{1}{a_0} \\left( \\sum_{m=0}^{M} b_m \\; x[k-m] - \\sum_{n=1}^{N} a_n \\; y[k-n] \\right)\n",
22+
"\\end{equation}\n",
2123
"\n",
2224
"where $a_n$ and $b_m$ denote constant coefficients and $N$ the order. Note that systems with $M > N$ are in general not stable. The computational realization of above equation requires additions, multiplications, the actual and past samples of the input signal $x[k]$, and the past samples of the output signal $y[k]$. Technically this can be realized by\n",
2325
"\n",
@@ -38,7 +40,9 @@
3840
"\n",
3941
"The [direct form I](https://en.wikipedia.org/wiki/Digital_filter#Direct_Form_I) is derived by rearranging above equation for $a_0 = 1$\n",
4042
"\n",
41-
"$$ y[k] = \\sum_{m=0}^{M} b_m \\; x[k-m] + \\sum_{n=1}^{N} - a_n \\; y[k-n] $$\n",
43+
"\\begin{equation}\n",
44+
"y[k] = \\sum_{m=0}^{M} b_m \\; x[k-m] + \\sum_{n=1}^{N} - a_n \\; y[k-n]\n",
45+
"\\end{equation}\n",
4246
"\n",
4347
"It is now evident that we can realize the recursive filter by a superposition of a non-recursive and a recursive part. With the elements given above, this results in the following block-diagram\n",
4448
"\n",
@@ -94,7 +98,9 @@
9498
"\n",
9599
"The output signal of the transposed direct form II is given as\n",
96100
"\n",
97-
"$$ y[k] = b_0 x[k] + \\sum_{m=1}^{M} b_m x[k-n] - \\sum_{n=1}^{N} a_n y[k-n]$$\n",
101+
"\\begin{equation}\n",
102+
"y[k] = b_0 x[k] + \\sum_{m=1}^{M} b_m x[k-n] - \\sum_{n=1}^{N} a_n y[k-n]\n",
103+
"\\end{equation}\n",
98104
"\n",
99105
"Using the signal before the $n$-th delay unit as internal state $w_n[k]$ we can reformulate this into a set of difference equations for computation of the output signal\n",
100106
"\n",
@@ -168,17 +174,7 @@
168174
"source": [
169175
"**Copyright**\n",
170176
"\n",
171-
"<p xmlns:dct=\"http://purl.org/dc/terms/\">\n",
172-
" <a rel=\"license\"\n",
173-
" href=\"http://creativecommons.org/publicdomain/zero/1.0/\">\n",
174-
" <img src=\"http://i.creativecommons.org/p/zero/1.0/88x31.png\" style=\"border-style: none;\" alt=\"CC0\" />\n",
175-
" </a>\n",
176-
" <br />\n",
177-
" To the extent possible under law,\n",
178-
" <span rel=\"dct:publisher\" resource=\"[_:publisher]\">the person who associated CC0</span>\n",
179-
" with this work has waived all copyright and related or neighboring\n",
180-
" rights to this work.\n",
181-
"</p>"
177+
"This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples, 2016*."
182178
]
183179
}
184180
],

recursive_filters/introduction.ipynb

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"source": [
77
"# Realization of Recursive Filters\n",
88
"\n",
9-
"*This jupyter/Python notebook is part of a [collection of notebooks](../index.ipynb) in the masters module [Digital Signal Processing](http://www.int.uni-rostock.de/Digitale-Signalverarbeitung.48.0.html), Comunications Engineering, Universität Rostock. Please direct questions and suggestions to <mailto:[email protected]>.*"
9+
"*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [[email protected]](mailto:[email protected]).*"
1010
]
1111
},
1212
{
@@ -26,11 +26,15 @@
2626
"\n",
2727
"Linear difference equations with constant coefficients represent linear-time invariant (LTI) systems\n",
2828
"\n",
29-
"$$ \\sum_{n=0}^{N} a_n \\; y[k-n] = \\sum_{m=0}^{M} b_m \\; x[k-m] $$\n",
29+
"\\begin{equation}\n",
30+
"\\sum_{n=0}^{N} a_n \\; y[k-n] = \\sum_{m=0}^{M} b_m \\; x[k-m]\n",
31+
"\\end{equation}\n",
3032
"\n",
3133
"where $y[k] = \\mathcal{H} \\{ x[k] \\}$ denotes the response of the system to the input signal $x[k]$, $N$ the order, $a_n$ and $b_m$ constant coefficients, respectively. Above equation can be rearranged with respect to the output signal $y[k]$ by extracting the first element ($n=0$) of the left hand sum\n",
3234
"\n",
33-
"$$ y[k] = \\frac{1}{a_0} \\left( \\sum_{m=0}^{M} b_m \\; x[k-m] - \\sum_{n=1}^{N} a_n \\; y[k-n] \\right) $$\n",
35+
"\\begin{equation}\n",
36+
"y[k] = \\frac{1}{a_0} \\left( \\sum_{m=0}^{M} b_m \\; x[k-m] - \\sum_{n=1}^{N} a_n \\; y[k-n] \\right)\n",
37+
"\\end{equation}\n",
3438
"\n",
3539
"It is evident that the output signal $y[k]$ at time instant $k$ is given as a linear combination of past output samples $y[k-n]$ superimposed by a linear combination of the actual $x[k]$ and past $x[k-m]$ input samples. Hence, the actual output $y[k]$ is composed from the two contributions\n",
3640
"\n",
@@ -39,7 +43,9 @@
3943
"\n",
4044
"The impulse response of the system is given as the response of the system to a Dirac impulse at the input $h[k] = \\mathcal{H} \\{ \\delta[k] \\}$. Using above result and the properties of the discrete Dirac impulse we get\n",
4145
"\n",
42-
"$$ h[k] = \\frac{1}{a_0} \\left( b_k - \\sum_{n=1}^{N} a_n \\; h[k-n] \\right) $$\n",
46+
"\\begin{equation}\n",
47+
"h[k] = \\frac{1}{a_0} \\left( b_k - \\sum_{n=1}^{N} a_n \\; h[k-n] \\right)\n",
48+
"\\end{equation}\n",
4349
"\n",
4450
"Due to the feedback, the impulse response will in general be of infinite length. The impulse response is termed as [infinite impulse response](https://en.wikipedia.org/wiki/Infinite_impulse_response) (IIR) and the system as recursive system/filter."
4551
]
@@ -52,19 +58,27 @@
5258
"\n",
5359
"Applying a $z$-transform to the left and right hand side of the difference equation and rearranging terms yields the transfer function $H(z)$ of the system\n",
5460
"\n",
55-
"$$ H(z) = \\frac{Y(z)}{X(z)} = \\frac{\\sum_{m=0}^{M} b_m \\; z^{-m}}{\\sum_{n=0}^{N} a_n \\; z^{-n}} $$\n",
61+
"\\begin{equation}\n",
62+
"H(z) = \\frac{Y(z)}{X(z)} = \\frac{\\sum_{m=0}^{M} b_m \\; z^{-m}}{\\sum_{n=0}^{N} a_n \\; z^{-n}}\n",
63+
"\\end{equation}\n",
5664
"\n",
5765
"The transfer function is given as a [rational function](https://en.wikipedia.org/wiki/Rational_function) in $z$. The polynominals of the numerator and denominator can expressed alternatively by their roots as\n",
5866
"\n",
59-
"$$ H(z) = \\frac{b_M}{a_N} \\cdot \\frac{\\prod_{\\mu=1}^{P} (z - z_{0\\mu})^{m_\\mu}}{\\prod_{\\nu=1}^{Q} (z - z_{\\infty\\nu})^{n_\\nu}} $$\n",
67+
"\\begin{equation}\n",
68+
"H(z) = \\frac{b_M}{a_N} \\cdot \\frac{\\prod_{\\mu=1}^{P} (z - z_{0\\mu})^{m_\\mu}}{\\prod_{\\nu=1}^{Q} (z - z_{\\infty\\nu})^{n_\\nu}}\n",
69+
"\\end{equation}\n",
6070
"\n",
6171
"where $z_{0\\mu}$ and $z_{\\infty\\nu}$ denote the $\\mu$-th zero and $\\nu$-th pole of degree $m_\\mu$ and $n_\\nu$ of $H(z)$, respectively. The total number of zeros and poles is denoted by $P$ and $Q$. Due to the symmetries of the $z$-transform, the transfer function of a real-valued system $h[k] \\in \\mathbb{R}$ exhibits complex conjugate symmetry\n",
6272
"\n",
63-
"$$ H(z) = H^*(z^*) $$\n",
73+
"\\begin{equation}\n",
74+
"H(z) = H^*(z^*)\n",
75+
"\\end{equation}\n",
6476
"\n",
6577
"Poles and zeros are either real valued or conjugate complex pairs for real-valued systems ($b_m\\in\\mathbb{R}$, $a_n\\in\\mathbb{R}$). For the poles of a causal and stable system $H(z)$ the following condition has to hold\n",
6678
"\n",
67-
"$$ \\max_{\\nu} | z_{\\infty\\nu} | < 1 $$\n",
79+
"\\begin{equation}\n",
80+
"\\max_{\\nu} | z_{\\infty\\nu} | < 1\n",
81+
"\\end{equation}\n",
6882
"\n",
6983
"Hence all poles have to be located inside the unit circle $|z| = 1$. Amongst others, this implies that $M \\leq N$."
7084
]
@@ -212,17 +226,7 @@
212226
"source": [
213227
"**Copyright**\n",
214228
"\n",
215-
"<p xmlns:dct=\"http://purl.org/dc/terms/\">\n",
216-
" <a rel=\"license\"\n",
217-
" href=\"http://creativecommons.org/publicdomain/zero/1.0/\">\n",
218-
" <img src=\"http://i.creativecommons.org/p/zero/1.0/88x31.png\" style=\"border-style: none;\" alt=\"CC0\" />\n",
219-
" </a>\n",
220-
" <br />\n",
221-
" To the extent possible under law,\n",
222-
" <span rel=\"dct:publisher\" resource=\"[_:publisher]\">the person who associated CC0</span>\n",
223-
" with this work has waived all copyright and related or neighboring\n",
224-
" rights to this work.\n",
225-
"</p>"
229+
"This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples, 2016*."
226230
]
227231
}
228232
],

recursive_filters/quantization_of_coefficients.ipynb

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"source": [
77
"# Realization of Recursive Filters\n",
88
"\n",
9-
"*This jupyter/Python notebook is part of a [collection of notebooks](../index.ipynb) in the masters module [Digital Signal Processing](http://www.int.uni-rostock.de/Digitale-Signalverarbeitung.48.0.html), Comunications Engineering, Universität Rostock. Please direct questions and suggestions to <mailto:[email protected]>.*"
9+
"*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [[email protected]](mailto:[email protected]).*"
1010
]
1111
},
1212
{
@@ -19,11 +19,15 @@
1919
"\n",
2020
"A recursive filter of order $N \\geq 2$ can be [decomposed into second-order sections (SOS)](../recursive_filters/cascaded_structures.ipynb). Due to the grouping of poles/zeros to filter coefficients with a limited amplitude range, a realization by cascaded SOS is favorable in practice. We therefore limit our investigation of quantization effects to SOS. The transfer function of a SOS is given as\n",
2121
"\n",
22-
"$$ H(z) = \\frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}} $$\n",
22+
"\\begin{equation}\n",
23+
"H(z) = \\frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}}\n",
24+
"\\end{equation}\n",
2325
"\n",
2426
"This can be [split into a non-recursive part and a recursive part](../recursive_filters/introduction.ipynb#Recursive-Filters). The quantization effects of non-recursive filters have already been discussed. We therefore focus here on the recursive part given by the transfer function\n",
2527
"\n",
26-
"$$ H(z) = \\frac{1}{1 + a_1 z^{-1} + a_2 z^{-2}} $$\n",
28+
"\\begin{equation}\n",
29+
"H(z) = \\frac{1}{1 + a_1 z^{-1} + a_2 z^{-2}}\n",
30+
"\\end{equation}\n",
2731
"\n",
2832
"This section investigates the consequences of quantization in recursive filters. As for non-recursive filters, we first take a look at the quantization of filter coefficients. The structure used for the realization of the filter has impact on the quantization effects. We begin with the direct form followed by the coupled form, as example for an alternative structure."
2933
]
@@ -36,7 +40,9 @@
3640
"\n",
3741
"Above transfer function of the recursive part of a SOS can be rewritten in terms of its complex conjugate poles $z_{\\infty}$ and $z_{\\infty}^*$ as\n",
3842
"\n",
39-
"$$ H(z) = \\frac{1}{(z-z_{\\infty}) (z-z_{\\infty}^*)} = \\frac{z^{-2}}{ 1 \\underbrace{- 2 r \\cos(\\varphi)}_{a_1} \\; z^{-1} + \\underbrace{r^2}_{a_2} \\; z^{-2} }$$\n",
43+
"\\begin{equation}\n",
44+
"H(z) = \\frac{1}{(z-z_{\\infty}) (z-z_{\\infty}^*)} = \\frac{z^{-2}}{ 1 \\underbrace{- 2 r \\cos(\\varphi)}_{a_1} \\; z^{-1} + \\underbrace{r^2}_{a_2} \\; z^{-2} }\n",
45+
"\\end{equation}\n",
4046
"\n",
4147
"where $r = |z_{\\infty}|$ and $\\varphi = \\arg \\{z_{\\infty}\\}$ denote the absolute value and phase of the pole $z_{\\infty}$, respectively. Let's assume a [linear uniform quantization](../quantization/linear_uniform_quantization_error.ipynb#Quantization-Error-of-a-Linear-Uniform-Quantizer) of the coefficients $a_1$ and $a_2$ with quantization step $Q$. Discarding clipping, the following relations for the locations of the poles can be found\n",
4248
"\n",
@@ -153,7 +159,9 @@
153159
"\n",
154160
"and its transfer function as\n",
155161
"\n",
156-
"$$ H(z) = \\frac{\\Im\\{z_\\infty\\} \\; z^{-1}}{ 1 - 2 \\Re\\{z_\\infty\\} \\; z^{-1} + (\\Re\\{z_\\infty\\}^2 + \\Im\\{z_\\infty\\}^2) \\; z^{-2} }$$\n",
162+
"\\begin{equation}\n",
163+
"H(z) = \\frac{\\Im\\{z_\\infty\\} \\; z^{-1}}{ 1 - 2 \\Re\\{z_\\infty\\} \\; z^{-1} + (\\Re\\{z_\\infty\\}^2 + \\Im\\{z_\\infty\\}^2) \\; z^{-2} }\n",
164+
"\\end{equation}\n",
157165
"\n",
158166
"Note that the numerator of the transfer function differs from the recursive only SOS given above. However, this can be considered in the design of the transfer function of a general SOS.\n",
159167
"\n",
@@ -335,17 +343,7 @@
335343
"source": [
336344
"**Copyright**\n",
337345
"\n",
338-
"<p xmlns:dct=\"http://purl.org/dc/terms/\">\n",
339-
" <a rel=\"license\"\n",
340-
" href=\"http://creativecommons.org/publicdomain/zero/1.0/\">\n",
341-
" <img src=\"http://i.creativecommons.org/p/zero/1.0/88x31.png\" style=\"border-style: none;\" alt=\"CC0\" />\n",
342-
" </a>\n",
343-
" <br />\n",
344-
" To the extent possible under law,\n",
345-
" <span rel=\"dct:publisher\" resource=\"[_:publisher]\">the person who associated CC0</span>\n",
346-
" with this work has waived all copyright and related or neighboring\n",
347-
" rights to this work.\n",
348-
"</p>"
346+
"This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples, 2016*."
349347
]
350348
}
351349
],

0 commit comments

Comments
 (0)