{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# The $z$-Transform\n", "\n", "*This Jupyter notebook is part of a [collection of notebooks](../index.ipynb) in the bachelors module Signals and Systems, Comunications Engineering, Universität Rostock. Please direct questions and suggestions to [Sascha.Spors@uni-rostock.de](mailto:Sascha.Spors@uni-rostock.de).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Properties\n", "\n", "The $z$-transform has a number of specific properties which can be concluded directly from its definition. The most important ones in the context of signals and systems are reviewed in the following." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linearity\n", "\n", "As can be concluded from its definition, the $z$-transform is a linear operation. For two signals $x_1[k]$ and $x_2[k]$ with $z$-transforms $X_1(z) = \\mathcal{Z} \\{ x_1[k] \\}$ and $X_2(z) = \\mathcal{Z} \\{ x_2[k] \\}$ the following holds\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\{ A \\cdot x_1[k] + B \\cdot x_2[k] \\} = A \\cdot X_1(z) + B \\cdot X_2(z)\n", "\\end{equation}\n", "\n", "with $A, B \\in \\mathbb{C}$. The region of convergence (ROC) of the superposition $A x_1[k] + B x_2[k]$ is as least as large as the intersection of the ROCs of $x_1[k]$ and $x_2[k]$\n", "\n", "\\begin{equation}\n", "\\text{ROC} \\{ A \\cdot x_1[k] + B \\cdot x_2[k] \\} \\supseteq \\text{ROC} \\{ x_1[k] \\} \\cap \\text{ROC} \\{ x_2[k] \\}\n", "\\end{equation}\n", "\n", "The $z$-transform of a weighted superposition of signals is equal to the weighted superposition of the individual $z$-transforms. This property is useful to derive the transform of signals that can be expressed as superposition of other signals for which the $z$-transform is known or can be calculated easier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Transformation of the cosine and sine signal\n", "\n", "The Laplace transform of the causal cosine $\\epsilon[k] \\cdot \\cos(\\Omega_0 k)$ and sine $\\epsilon[k] \\cdot \\sin(\\Omega_0 k)$ signal with $\\Omega_0 \\in \\mathbb{R}$ is derived by expressing the cosine/sine as a superposition of harmonic exponential signals using [Euler's formula](https://en.wikipedia.org/wiki/Euler's_formula)\n", "\n", "\\begin{align}\n", "\\cos(\\Omega_0 k) &= \\frac{1}{2} \\left( e^{j \\Omega_0 k} + e^{-j \\Omega_0 k} \\right) \\\\\n", "\\sin(\\Omega_0 k) &= \\frac{1}{2j} \\left( e^{j \\Omega_0 k} - e^{-j \\Omega_0 k} \\right)\n", "\\end{align}\n", "\n", "The $z$-transform of the harmonic exponential signal can be derived from the spectrum of the [causal complex exponential signal](definition.ipynb#Transformation-of-the-Causal-Complex-Exponential-Signal) as\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\{ \\epsilon[k] \\cdot e^{j \\Omega_0 k} \\} = \\frac{z}{z - e^{j \\Omega_0}} \\qquad \\text{for } |z| > 1\n", "\\end{equation}\n", "\n", "Exploiting the linearity of the $z$-transform yields\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\{ \\epsilon[k] \\cdot \\cos(\\Omega_0 k) \\} = \n", "\\frac{1}{2} \\left( \\frac{z}{z - e^{j \\Omega_0}} + \\frac{z}{z - e^{-j \\Omega_0}} \\right) =\n", "\\frac{z ( z - \\cos(\\Omega_0))}{z^2 - 2 z \\cos(\\Omega_0) + 1}\n", "\\qquad \\text{for } |z| > 1\n", "\\end{equation}\n", "\n", "and\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\{ \\epsilon[k] \\cdot \\sin(\\Omega_0 k) \\} = \n", "\\frac{1}{2j} \\left( \\frac{z}{z - e^{j \\Omega_0}} - \\frac{z}{z - e^{-j \\Omega_0}} \\right) =\n", "\\frac{z \\sin(\\Omega_0)}{z^2 - 2 z \\cos(\\Omega_0) + 1}\n", "\\qquad \\text{for } |z| > 1\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Determine the zeros and poles of above $z$-transforms. What specific symmetries do the zeros and poles show in the $z$-plane?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Symmetry for Real-Valued Signals\n", "\n", "The $z$-transform of a conjugated signal $x^*[k]$ is given as\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\{ x^*[k] \\} = \\sum_{k = -\\infty}^{\\infty} x^*[k] \\, z^{-k} \n", "= \\left( \\sum_{k = -\\infty}^{\\infty} x[k] \\, (z^*)^{-k} \\right)^* \n", "= X^*(z^*)\n", "\\end{equation}\n", "\n", "where $X(z) = \\mathcal{Z} \\{ x[k] \\}$. The ROC of $x^*[k]$ is equal to the ROC of $x[k]$. Above result is used to derive the $z$-transform of the real part of the signal $x[k]$\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\left\\{ \\Re \\{ x[k] \\} \\right\\} = \\mathcal{Z} \\left\\{ \\frac{1}{2} ( x[k] + x^*[k] ) \\right\\} = \\frac{1}{2} \\left[ X(z) + X^*(z^*) \\right]\n", "\\end{equation}\n", "\n", "and imaginary part\n", "\n", "\\begin{equation}\n", "\\mathcal{Z} \\left\\{ \\Im \\{ x[k] \\} \\right\\} = \\mathcal{Z} \\left\\{ \\frac{1}{2j} ( x[k] - x^*[k] ) \\right\\} = \\frac{1}{2j} \\left[ X(z) - X^*(z^*) \\right]\n", "\\end{equation}\n", "\n", "For a real-valued signal $x[k] \\in \\mathbb{R}$ with $\\Im \\{ x[k] \\} = 0$ it follows that\n", "\n", "\\begin{equation}\n", "X(z) = X^*(z^*)\n", "\\end{equation}\n", "\n", "It can be concluded, that the $z$-transform of a real valued signal shows complex conjugate symmetry. \n", "\n", "The poles and zeros of a [$z$-transform which can be expressed as a rational function](definition.ipynb#Representation) in $z$ \n", "\n", "\\begin{equation}\n", "X(s) = \\frac{\\sum_{m=0}^{M} \\beta_m z^{-m}}{\\sum_{n=0}^{N} \\alpha_n z^{-n}} = K \\cdot \\frac{\\prod_{\\mu=0}^{Q} (z - z_{0 \\mu})}{\\prod_{\\nu=0}^{P} (z - z_{\\infty \\nu})}\n", "\\end{equation}\n", "\n", "with $Q=M-1$ and $P=N-1$ show also specific symmetries. From above condition for the $z$-transform of a real-valued signal $x[k] \\in \\mathbb{R}$, it can be concluded that the coefficients $\\alpha_n, \\beta_m$ of the numerator and denominator are real-valued. The [complex conjugate root theorem](https://en.wikipedia.org/wiki/Complex_conjugate_root_theorem) states that the roots of a polynomial with real valued coefficients are either real-valued or complex conjugate pairs. Hence, the zeros and poles of the $z$-transform $X(z)$ of a real-valued signal $x[k]$ are either real-valued or complex conjugate pairs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Example**\n", "\n", "As example for a real-valued signal, the poles and zeros of the $z$-transform $X(z) = \\mathcal{Z} \\{ \\epsilon[k] \\cos(\\Omega_0 k) \\}$ are investigated. First the transform, as derived above, is defined in `SymPy`" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{z \\left(z - \\cos{\\left(\\Omega_{0} \\right)}\\right)}{z^{2} - 2 z \\cos{\\left(\\Omega_{0} \\right)} + 1}$" ], "text/plain": [ " z⋅(z - cos(Ω₀)) \n", "────────────────────\n", " 2 \n", "z - 2⋅z⋅cos(Ω₀) + 1" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sympy as sym\n", "%matplotlib inline\n", "sym.init_printing()\n", "\n", "z = sym.symbols('z', complex=True)\n", "W0 = sym.symbols('Omega0', real=True)\n", "\n", "X = z * (z - sym.cos(W0)) / (z**2 - 2*z*sym.cos(W0) + 1)\n", "X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The roots of $X(z)$ are computed" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left\\{ - \\sqrt{\\left(\\cos{\\left(\\Omega_{0} \\right)} - 1\\right) \\left(\\cos{\\left(\\Omega_{0} \\right)} + 1\\right)} + \\cos{\\left(\\Omega_{0} \\right)} : 1, \\ \\sqrt{\\left(\\cos{\\left(\\Omega_{0} \\right)} - 1\\right) \\left(\\cos{\\left(\\Omega_{0} \\right)} + 1\\right)} + \\cos{\\left(\\Omega_{0} \\right)} : 1\\right\\}$" ], "text/plain": [ "⎧ _____________________________ ___________________________\n", "⎨- ╲╱ (cos(Ω₀) - 1)⋅(cos(Ω₀) + 1) + cos(Ω₀): 1, ╲╱ (cos(Ω₀) - 1)⋅(cos(Ω₀) + 1\n", "⎩ \n", "\n", "__ ⎫\n", ") + cos(Ω₀): 1⎬\n", " ⎭" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poles = sym.roots(sym.denom(X), z)\n", "poles" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "as well as its zeros" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left\\{ 0 : 1, \\ \\cos{\\left(\\Omega_{0} \\right)} : 1\\right\\}$" ], "text/plain": [ "{0: 1, cos(Ω₀): 1}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zeros = sym.roots(sym.numer(X), z)\n", "zeros" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally the pole-zero plot is plotted for $\\Omega = \\frac{\\pi}{4}$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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MCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAy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Z2h0IDAgPj4KZW5kb2JqCjE3IDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIwIDAgb2JqCjw8IC9JIDIxIDAgUiAvUCAyMiAwIFIgL1IgMjMgMCBSIC9aIDI0IDAgUiAvYSAyNSAwIFIgL2JyYWNlbGVmdCAyNiAwIFIKL2JyYWNlcmlnaHQgMjcgMCBSIC9kIDI4IDAgUiAvZSAyOSAwIFIgL2ZpdmUgMzAgMCBSIC9sIDMxIDAgUiAvbSAzMiAwIFIKL24gMzQgMCBSIC9vIDM1IDAgUiAvb25lIDM2IDAgUiAvcGVyaW9kIDM3IDAgUiAvciAzOCAwIFIgL3MgMzkgMCBSCi9zcGFjZSA0MCAwIFIgL3R3byA0MSAwIFIgL3plcm8gNDIgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxOSAwIFIgL0YyIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDAuNyAvVHlwZSAvRXh0R1N0YXRlIC9jYSAwLjcgPj4KL0EzIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0E0IDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDAgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0RlamFWdVNhbnMtbWludXMgMzMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9Db3VudCAxIC9LaWRzIFsgMTAgMCBSIF0gL1R5cGUgL1BhZ2VzID4+CmVuZG9iago0MyAwIG9iago8PCAvQ3JlYXRpb25EYXRlIChEOjIwMTkwNjI2MTQwMjE4KzAyJzAwJykKL0NyZWF0b3IgKG1hdHBsb3RsaWIgMy4wLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBiYWNrZW5kIDMuMC4zKSA+PgplbmRvYmoKeHJlZgowIDQ0CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDExNTQ5IDAwMDAwIG4gCjAwMDAwMTEyMzcgMDAwMDAgbiAKMDAwMDAxMTI4MCAwMDAwMCBuIAowMDAwMDExNDYxIDAwMDAwIG4gCjAwMDAwMTE0ODIgMDAwMDAgbiAKMDAwMDAxMTUwMyAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzOTkgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAxOTMzIDAwMDAwIG4gCjAwMDAwMDI2MzEgMDAwMDAgbiAKMDAwMDAwMjQyMyAwMDAwMCBuIAowMDAwMDAyMTA3IDAwMDAwIG4gCjAwMDAwMDM2ODQgMDAwMDAgbiAKMDAwMDAwMTk1NCAwMDAwMCBuIAowMDAwMDA5OTE2IDAwMDAwIG4gCjAwMDAwMDk3MTYgMDAwMDAgbiAKMDAwMDAwOTI3NyAwMDAwMCBuIAowMDAwMDEwOTY5IDAwMDAwIG4gCjAwMDAwMDM3MTYgMDAwMDAgbiAKMDAwMDAwMzgzNyAwMDAwMCBuIAowMDAwMDA0MDc1IDAwMDAwIG4gCjAwMDAwMDQzNzUgMDAwMDAgbiAKMDAwMDAwNDUyNCAwMDAwMCBuIAowMDAwMDA0OTAxIDAwMDAwIG4gCjAwMDAwMDUyNTMgMDAwMDAgbiAKMDAwMDAwNTYwMiAwMDAwMCBuIAowMDAwMDA1OTAyIDAwMDAwIG4gCjAwMDAwMDYyMjAgMDAwMDAgbiAKMDAwMDAwNjU0MCAwMDAwMCBuIAowMDAwMDA2NjU3IDAwMDAwIG4gCjAwMDAwMDY5ODUgMDAwMDAgbiAKMDAwMDAwNzE1NSAwMDAwMCBuIAowMDAwMDA3Mzg5IDAwMDAwIG4gCjAwMDAwMDc2NzYgMDAwMDAgbiAKMDAwMDAwNzgyOCAwMDAwMCBuIAowMDAwMDA3OTQ5IDAwMDAwIG4gCjAwMDAwMDgxNzkgMDAwMDAgbiAKMDAwMDAwODU4NCAwMDAwMCBuIAowMDAwMDA4NjczIDAwMDAwIG4gCjAwMDAwMDg5OTQgMDAwMDAgbiAKMDAwMDAxMTYwOSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDQzIDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSA0NCA+PgpzdGFydHhyZWYKMTE3NjMKJSVFT0YK\n", "image/svg+xml": [ "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pole_zero_plot import pole_zero_plot\n", "\n", "X2 = X.subs(W0, sym.pi/4)\n", "pole_zero_plot(sym.roots(sym.denom(X2), z), sym.roots(sym.numer(X2), z))" ] }, { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "**Copyright**\n", "\n", "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, Continuous- and Discrete-Time Signals and Systems - Theory and Computational Examples*." ] } ], "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": 1 }