├── LICENSE ├── README.md ├── demos ├── CT-Convolution-Example-L4.ipynb ├── Demos-Lecture08.ipynb ├── Demos-Lecture14.ipynb ├── Demos-Lecture24.ipynb └── Supplement-Square-Wave-L7.ipynb └── lectures ├── lecture_01_annotated.pdf ├── lecture_01_blank.pdf ├── lecture_02_annotated.pdf ├── lecture_02_blank.pdf ├── lecture_03_annotated.pdf ├── lecture_03_blank.pdf ├── lecture_04_annotated.pdf ├── lecture_04_blank.pdf ├── lecture_05_annotated.pdf ├── lecture_05_blank.pdf ├── lecture_06_annotated.pdf ├── lecture_06_blank.pdf ├── lecture_07_annotated.pdf ├── lecture_07_blank.pdf ├── lecture_08_annotated.pdf ├── lecture_08_blank.pdf ├── lecture_09_annotated.pdf ├── lecture_09_blank.pdf ├── lecture_10_annotated.pdf ├── lecture_10_blank.pdf ├── lecture_11_annotated.pdf ├── lecture_11_blank.pdf ├── lecture_12_annotated.pdf ├── lecture_12_blank.pdf ├── lecture_13_annotated.pdf ├── lecture_13_blank.pdf ├── lecture_14_annotated.pdf ├── lecture_14_blank.pdf ├── lecture_15_annotated.pdf ├── lecture_15_blank.pdf ├── lecture_16_annotated.pdf ├── lecture_16_blank.pdf ├── lecture_17_annotated.pdf ├── lecture_17_blank.pdf ├── lecture_18_annotated.pdf ├── lecture_18_blank.pdf ├── lecture_19_annotated.pdf ├── lecture_19_blank.pdf ├── lecture_20_annotated.pdf ├── lecture_20_blank.pdf ├── lecture_21_annotated.pdf ├── lecture_21_blank.pdf ├── lecture_22_annotated.pdf ├── lecture_22_blank.pdf ├── lecture_23_annotated.pdf ├── lecture_23_blank.pdf ├── lecture_24_annotated.pdf └── lecture_24_blank.pdf /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Olivia Di Matteo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ELEC 221 2 | Lecture materials for the ELEC 221 Signals and Systems course at UBC. 3 | 4 | Materials for the 2022 version of the course can be found under "Releases". 5 | 6 | ## Lecture contents 7 | 8 | 1. [2024-09-05] Overview and intro to signals and systems 9 | 1. [2024-09-10] LTI systems, DT impulse response and the convolution sum 10 | 1. [2024-09-12] DT impulse response and convolution sum; CT convolution integral 11 | 1. [2024-09-17] CT convolution integral; the impulse response and system properties 12 | 1. [2024-09-19] CT Fourier series 13 | 1. [2024-09-24] CT Fourier series coefficients and properties 14 | 1. [2024-09-26] CT and DT Fourier series 15 | 1. [2024-10-01] DT Fourier series 16 | 1. [2024-10-03] DT Fourier series coefficients; filters 17 | 1. [2024-10-10] Introducing the Fourier transform 18 | 1. [2024-10-15] Properties of the CT Fourier Transform 19 | 1. [2024-10-17] The CT Fourier transform properties: convolution and multiplication 20 | 1. [2024-10-22] Differentiation and integration properties; systems based on 21 | differential equations 22 | 1. [2024-10-24] Analysis of CT systems based on first- and second-order differential equations 23 | 1. [2024-10-29] The discrete-time Fourier transform 24 | 1. [2024-10-31] DT systems based on difference equations 25 | 1. [2024-11-07] The sampling theorem 26 | 1. [2024-11-14] CT/DT conversion and sampling DT signals 27 | 1. [2024-11-19] Amplitude modulation 28 | 1. [2024-11-21] Modulation and communication systems 29 | 1. [2024-11-26] The Laplace transform 30 | 1. [2024-11-28] The Laplace transform: properties and system analysis 31 | 1. [2024-12-03] The Laplace transform and feedback systems; introducing the $z$-transform 32 | 1. [2024-12-05] Feedback systems 33 | -------------------------------------------------------------------------------- /demos/CT-Convolution-Example-L4.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "e7cc6f07-2744-4c63-973b-dedd77f477a7", 6 | "metadata": {}, 7 | "source": [ 8 | "# Lecture 4: CT convolution clarification" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "id": "00d4b534-9e24-47cf-bbe5-a864e5c5f3e0", 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import matplotlib.pyplot as plt\n", 19 | "import numpy as np" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "id": "8c2e1680-3210-47e5-b58f-a05dcbc7d6eb", 25 | "metadata": {}, 26 | "source": [ 27 | "In class, we computed the convolution \n", 28 | "\n", 29 | "$$\n", 30 | "x(t) * h(t) = \\int_{-\\infty}^{\\infty} x(\\tau) h(t - \\tau) d\\tau\n", 31 | "$$\n", 32 | "\n", 33 | "for the signal $x(t) = e^{-2t} u(t)$, and $h(t) = u(t - 1)$. I drew a picture that ended up being confusing, so here is a code example that better shows what I intended.\n", 34 | "\n", 35 | "First, we define four functions." 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 2, 41 | "id": "0741eb2f-2df6-4f8f-aea3-091ce8ccd774", 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | "def u(t):\n", 46 | " \"\"\"Unit step\"\"\"\n", 47 | " if t > 0:\n", 48 | " return 1\n", 49 | " return 0\n", 50 | "\n", 51 | "def h(t):\n", 52 | " \"\"\"Impulse response\"\"\"\n", 53 | " return u(t - 1)\n", 54 | "\n", 55 | "def x(t):\n", 56 | " \"\"\"Our signal\"\"\"\n", 57 | " return np.exp(-2 * t) * u(t)\n", 58 | "\n", 59 | "def y(t):\n", 60 | " \"\"\"The answer we derived mathematically.\"\"\"\n", 61 | " if t > 1:\n", 62 | " return 0.5 * (1 - np.exp(-2 * (t - 1)))\n", 63 | " return 0" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "id": "4c9a170b-a1c2-4624-8cd6-6bd11505331e", 69 | "metadata": {}, 70 | "source": [ 71 | "These functions are plotted below." 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 3, 77 | "id": "9de31bec-d198-46ef-89bb-efeddd4b03be", 78 | "metadata": {}, 79 | "outputs": [ 80 | { 81 | "data": { 82 | "text/plain": [ 83 | "" 84 | ] 85 | }, 86 | "execution_count": 3, 87 | "metadata": {}, 88 | "output_type": "execute_result" 89 | }, 90 | { 91 | "data": { 92 | "image/png": "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\n", 93 | "text/plain": [ 94 | "
" 95 | ] 96 | }, 97 | "metadata": { 98 | "needs_background": "light" 99 | }, 100 | "output_type": "display_data" 101 | } 102 | ], 103 | "source": [ 104 | "t_range = np.linspace(-2, 3, 1000)\n", 105 | "\n", 106 | "plt.plot(t_range, [h(t) for t in t_range], c=\"red\", label=\"h(t)\")\n", 107 | "plt.plot(t_range, [x(t) for t in t_range], c=\"blue\", label=\"x(t)\")\n", 108 | "plt.plot(t_range, [y(t) for t in t_range], c=\"black\", linestyle='--', label=\"y(t)\")\n", 109 | "plt.xticks(fontsize=14)\n", 110 | "plt.yticks(fontsize=14)\n", 111 | "plt.legend(fontsize=14)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "id": "dde0b061-37ba-49e4-8e7f-083b216dc52e", 117 | "metadata": {}, 118 | "source": [ 119 | "What I was trying to get at in class was visualizing a very discretized version of the convolution, where at each time, the value of $x(\\tau)$ yields a copy of $h(t - \\tau)$, i.e., a scaled and shifted version of the impulse response.\n", 120 | "\n", 121 | "To show this in code, let's imagine discretizing the convolution integral (much like we did in lecture 3) into a bunch of tiny time steps of size $\\Delta$:\n", 122 | "\n", 123 | "$$\n", 124 | "x(t) * h(t) = \\int_{-\\infty}^{\\infty} x(\\tau) h(t - \\tau) d\\tau \\approx \\sum_{k=-\\infty}^{\\infty} x(k\\Delta) h(t - k\\Delta) \\Delta\n", 125 | "$$\n", 126 | "\n", 127 | "We can now visualize this as a superposition of signals using the code below:" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 4, 133 | "id": "fc34804a-57b0-49d7-9ba4-625cbdbba714", 134 | "metadata": {}, 135 | "outputs": [], 136 | "source": [ 137 | "Δ = 0.01\n", 138 | "k_range = np.arange(0, 500) # Start at 0 because x(t) does not exist below 0\n", 139 | "\n", 140 | "component_signals = np.array([[x(k * Δ) * h(t - k * Δ) * Δ for t in t_range] for k in k_range])" 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "id": "b5007985-eb88-41d7-bcb5-de54ccbb5de1", 146 | "metadata": {}, 147 | "source": [ 148 | "Let's plot a subset of these individually for each $k$:" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 5, 154 | "id": "85fac5d6-a7f8-441f-ba38-e7926d76c9db", 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "image/png": "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\n", 160 | "text/plain": [ 161 | "
" 162 | ] 163 | }, 164 | "metadata": { 165 | "needs_background": "light" 166 | }, 167 | "output_type": "display_data" 168 | } 169 | ], 170 | "source": [ 171 | "for idx in range(50):\n", 172 | " plt.plot(t_range, component_signals[idx])" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "id": "1adf235d-3a22-4bf2-952c-a8167be8bd3e", 178 | "metadata": {}, 179 | "source": [ 180 | "We can now sum up over $k$, and plot the full convolution. We find it matches with the plot of $y(t)$ above." 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 6, 186 | "id": "b7517c87-0192-49dc-913c-371cc49e59f9", 187 | "metadata": {}, 188 | "outputs": [ 189 | { 190 | "data": { 191 | "text/plain": [ 192 | "[]" 193 | ] 194 | }, 195 | "execution_count": 6, 196 | "metadata": {}, 197 | "output_type": "execute_result" 198 | }, 199 | { 200 | "data": { 201 | "image/png": "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\n", 202 | "text/plain": [ 203 | "
" 204 | ] 205 | }, 206 | "metadata": { 207 | "needs_background": "light" 208 | }, 209 | "output_type": "display_data" 210 | } 211 | ], 212 | "source": [ 213 | "plt.plot(t_range, np.sum(component_signals, axis=0))" 214 | ] 215 | }, 216 | { 217 | "cell_type": "markdown", 218 | "id": "3d27d392-e594-485f-8a6d-ed53e5fdd9e3", 219 | "metadata": {}, 220 | "source": [ 221 | "Note that we could also achieve the same thing by considering the opposite order in the convolution sum:\n", 222 | "\n", 223 | "$$\n", 224 | "h(t) * x(t) \\approx \\sum_{k=-\\infty}^{\\infty} x(t - k\\Delta) h(k\\Delta) \\Delta\n", 225 | "$$" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 7, 231 | "id": "16445cb9-b28d-4c6a-9d29-31c82a4b03b6", 232 | "metadata": {}, 233 | "outputs": [], 234 | "source": [ 235 | "# We must start at k = 1 / Δ here, because h(t) doesn't exist below 1\n", 236 | "k_range = np.arange(1 / Δ, 1 / Δ + 500) \n", 237 | "\n", 238 | "component_signals_v2 = np.array([[x(t - k * Δ) * h(k * Δ) * Δ for t in t_range] for k in k_range])" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 8, 244 | "id": "95d92531-3143-4027-b71c-1480ebc6b5b3", 245 | "metadata": {}, 246 | "outputs": [ 247 | { 248 | "data": { 249 | "image/png": "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\n", 250 | "text/plain": [ 251 | "
" 252 | ] 253 | }, 254 | "metadata": { 255 | "needs_background": "light" 256 | }, 257 | "output_type": "display_data" 258 | } 259 | ], 260 | "source": [ 261 | "for idx in range(100):\n", 262 | " plt.plot(t_range, component_signals_v2[idx])" 263 | ] 264 | }, 265 | { 266 | "cell_type": "markdown", 267 | "id": "4e649ff2-8fab-4197-9b2b-352898b25284", 268 | "metadata": {}, 269 | "source": [ 270 | "Again, we can plot the sum" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 9, 276 | "id": "2d7452c0-98e6-4ffa-b88f-264f97912f94", 277 | "metadata": {}, 278 | "outputs": [ 279 | { 280 | "data": { 281 | "text/plain": [ 282 | "[]" 283 | ] 284 | }, 285 | "execution_count": 9, 286 | "metadata": {}, 287 | "output_type": "execute_result" 288 | }, 289 | { 290 | "data": { 291 | "image/png": "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\n", 292 | "text/plain": [ 293 | "
" 294 | ] 295 | }, 296 | "metadata": { 297 | "needs_background": "light" 298 | }, 299 | "output_type": "display_data" 300 | } 301 | ], 302 | "source": [ 303 | "plt.plot(t_range, np.sum(component_signals_v2, axis=0))" 304 | ] 305 | }, 306 | { 307 | "cell_type": "markdown", 308 | "id": "68493392-a477-442c-8297-a2f6e28e042d", 309 | "metadata": {}, 310 | "source": [ 311 | "It takes a little more finessing to get it to converge because of how it is discretized, but you can see that it yields the same result." 312 | ] 313 | } 314 | ], 315 | "metadata": { 316 | "kernelspec": { 317 | "display_name": "Python 3 (ipykernel)", 318 | "language": "python", 319 | "name": "python3" 320 | }, 321 | "language_info": { 322 | "codemirror_mode": { 323 | "name": "ipython", 324 | "version": 3 325 | }, 326 | "file_extension": ".py", 327 | "mimetype": "text/x-python", 328 | "name": "python", 329 | "nbconvert_exporter": "python", 330 | "pygments_lexer": "ipython3", 331 | "version": "3.9.12" 332 | } 333 | }, 334 | "nbformat": 4, 335 | "nbformat_minor": 5 336 | } 337 | -------------------------------------------------------------------------------- /demos/Demos-Lecture14.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "42a30a4e-07e6-4d6d-83f2-68e8e6ac1516", 6 | "metadata": {}, 7 | "source": [ 8 | "# Lecture 14 Demos" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": null, 14 | "id": "7a170da0-b225-49d8-8581-6b72fe7c7107", 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import numpy as np\n", 19 | "import matplotlib.pyplot as plt" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "id": "3880b1f3-dabc-405a-91c8-20258ba86c5b", 25 | "metadata": {}, 26 | "source": [ 27 | "## Demo 1: impulse response of second-order CT system" 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "id": "e4fb1353-aab9-42b2-9303-04d9fabc363c", 33 | "metadata": {}, 34 | "source": [ 35 | "For the $\\zeta \\neq 1$ case, \n", 36 | "$$\n", 37 | " h(t) = \\frac{\\omega_{n}}{2\\sqrt{\\zeta^{2} -1}} \\left(e^{c_{+} t} -\n", 38 | " e^{c_{-}t}\\right) u(t), \\quad \\quad c_{\\pm} = -\\zeta \\omega_{n} \\pm \\omega_n \\sqrt{\\zeta^{2}-1}\n", 39 | "$$ \n", 40 | "\n", 41 | "When $\\zeta = 1$, \n", 42 | "\n", 43 | "$$\n", 44 | " h(t) = \\omega_{n}^{2} t e^{-\\omega_{n} t} u(t)\n", 45 | "$$" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": null, 51 | "id": "2132440c-8a4f-426f-a2d8-5269f4d77b8d", 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "def compute_impulse_response(ζ, ω_n):\n", 56 | " if ζ == 1:\n", 57 | " def impulse_response(t): \n", 58 | " return (ω_n ** 2) * t * np.exp(-ω_n * t) \n", 59 | " return impulse_response\n", 60 | " \n", 61 | " # ζ != 1 cases can be considered together\n", 62 | " if ζ < 1:\n", 63 | " ζ = ζ + 0j\n", 64 | " c_p = -ζ * ω_n + ω_n * np.sqrt(ζ ** 2 - 1)\n", 65 | " c_m = -ζ * ω_n - ω_n * np.sqrt(ζ ** 2 - 1)\n", 66 | "\n", 67 | " def impulse_response(t):\n", 68 | " return ω_n / (2 * np.sqrt(ζ ** 2 - 1)) * (np.exp(c_p * t) - np.exp(c_m * t))\n", 69 | "\n", 70 | " return impulse_response" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "id": "f575106b-ca1b-411c-b4ba-33752888b675", 77 | "metadata": {}, 78 | "outputs": [], 79 | "source": [ 80 | "times = np.linspace(0, 2, 1000)\n", 81 | "ζ_values = [0.2, 0.4, 0.8, 1.0, 1.2, 1.4, 1.8]\n", 82 | "ω_n = 10" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "id": "6b95415d-2bc3-40af-9753-802b2c2aaa42", 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "for ζ in ζ_values:\n", 93 | " impulse_response = compute_impulse_response(ζ, ω_n)\n", 94 | " plt.plot(times, impulse_response(times).real, label=f\"ζ={ζ}\")\n", 95 | " \n", 96 | "plt.ylabel(\"h(t)\")\n", 97 | "plt.xlabel(\"t\")\n", 98 | "plt.legend()" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "id": "26707579-ec5d-4a35-838e-a3163eb67f25", 104 | "metadata": {}, 105 | "source": [ 106 | "## Demo 2: step response of second-order CT system" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "id": "aaf7c113-4a8f-4c7c-ae72-476f1dd92551", 112 | "metadata": {}, 113 | "source": [ 114 | "For the $\\zeta \\neq 1$ case, \n", 115 | "$$\n", 116 | " s(t) = \\left[1 + \\frac{\\omega_{n}}{2\\sqrt{\\zeta^{2} -1}} \\left(\\frac{e^{c_+ t}}{c_+} - \\frac{e^{c_- t}}{c_-} \\right) \\right] u(t)\n", 117 | "$$\n", 118 | "\n", 119 | "When $\\zeta = 1$, \n", 120 | "\n", 121 | "$$\n", 122 | " s(t) = \\left(1 - e^{-\\omega_{n}t} - \\omega_n t e^{-\\omega_{n} t}\\right) u(t)\n", 123 | "$$" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "id": "88ef1e58-c68d-409b-98cd-85d221d63abc", 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "def compute_step_response(ζ, ω_n):\n", 134 | " if ζ == 1:\n", 135 | " def step_response(t): \n", 136 | " return 1 - np.exp(-ω_n * t) * (1 + ω_n * t)\n", 137 | " return step_response\n", 138 | " \n", 139 | " if ζ < 1:\n", 140 | " ζ = ζ + 0j\n", 141 | " c_p = -ζ * ω_n + ω_n * np.sqrt(ζ ** 2 - 1)\n", 142 | " c_m = -ζ * ω_n - ω_n * np.sqrt(ζ ** 2 - 1)\n", 143 | "\n", 144 | " def step_response(t):\n", 145 | " return 1 + (ω_n / (2 * np.sqrt(ζ ** 2 - 1))) * (np.exp(c_p * t)/c_p - np.exp(c_m * t)/c_m)\n", 146 | "\n", 147 | " return step_response" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "id": "fc106356-9acd-4b37-b0a2-9714b043c986", 154 | "metadata": {}, 155 | "outputs": [], 156 | "source": [ 157 | "for ζ in ζ_values:\n", 158 | " step_response = compute_step_response(ζ, ω_n)\n", 159 | " plt.plot(times, step_response(times).real, label=f\"ζ={ζ}\")\n", 160 | " \n", 161 | "plt.ylabel(\"s(t)\")\n", 162 | "plt.xlabel(\"t\")\n", 163 | "plt.legend()" 164 | ] 165 | }, 166 | { 167 | "cell_type": "markdown", 168 | "id": "962a5379-c78a-4fbf-80b3-c5ea9ada555d", 169 | "metadata": {}, 170 | "source": [ 171 | "## Demo 3: Bode plots" 172 | ] 173 | }, 174 | { 175 | "cell_type": "markdown", 176 | "id": "a464a907-a701-4833-83bc-0e03ceff64dc", 177 | "metadata": {}, 178 | "source": [ 179 | "For the $\\zeta \\neq 1$ case, \n", 180 | "$$\n", 181 | " H(j\\omega) = \\frac{\\omega_{n}}{2\\sqrt{\\zeta^{2} -1}}\\frac{1}{j\\omega - c_{+}} - \\frac{\\omega_{n}}{2\\sqrt{\\zeta^{2} -1}} \\frac{1}{j\\omega - c_{-}}\n", 182 | "$$\n", 183 | "\n", 184 | "When $\\zeta = 1$, \n", 185 | "\n", 186 | "$$\n", 187 | " H(j\\omega) = \\frac{\\omega_{n}^{2}}{(j\\omega + \\omega_{n})^{2}}\n", 188 | "$$" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "id": "e95e9cc8-a04e-4c9b-8f94-e5b27d8e8cb3", 195 | "metadata": {}, 196 | "outputs": [], 197 | "source": [ 198 | "def compute_frequency_response(ζ, ω_n):\n", 199 | " if ζ == 1:\n", 200 | " def frequency_response(ω): \n", 201 | " return ω_n ** 2 / (1j * ω + ω_n) ** 2\n", 202 | " return frequency_response\n", 203 | " \n", 204 | " if ζ < 1:\n", 205 | " ζ = ζ + 0j\n", 206 | " \n", 207 | " prefactor = ω_n / (2 * np.sqrt(ζ ** 2 - 1))\n", 208 | " c_p = -ζ * ω_n + ω_n * np.sqrt(ζ ** 2 - 1)\n", 209 | " c_m = -ζ * ω_n - ω_n * np.sqrt(ζ ** 2 - 1)\n", 210 | "\n", 211 | " def frequency_response(ω):\n", 212 | " return prefactor * ( (1 / (1j * ω - c_p)) - (1 / (1j * ω - c_m)) )\n", 213 | "\n", 214 | " return frequency_response" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": null, 220 | "id": "1210dbd0-814c-4f17-9637-1e3d743d3f08", 221 | "metadata": {}, 222 | "outputs": [], 223 | "source": [ 224 | "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n", 225 | "ω_n = 10\n", 226 | "omega_range = np.linspace(0, 100 * ω_n, 10000)\n", 227 | "\n", 228 | "for ζ in ζ_values:\n", 229 | " frequency_response = compute_frequency_response(ζ, ω_n)\n", 230 | " ax[0].plot(omega_range, np.abs(frequency_response(omega_range)), label=f\"ζ={ζ}\")\n", 231 | " ax[1].plot(omega_range, np.angle(frequency_response(omega_range)), label=f\"ζ={ζ}\") \n", 232 | " \n", 233 | "ax[0].set_xlabel(\"ω\")\n", 234 | "ax[0].set_ylabel(\"|H(jω)|\")\n", 235 | "\n", 236 | "ax[1].set_xlabel(\"ω\")\n", 237 | "ax[1].set_ylabel(\"Phase(H(jω))\")\n", 238 | "\n", 239 | "plt.legend()" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": null, 245 | "id": "d6967b8e-7cac-49fb-a858-fe772261f19a", 246 | "metadata": {}, 247 | "outputs": [], 248 | "source": [ 249 | "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n", 250 | "ω_n = 10\n", 251 | "omega_range = np.linspace(0, 100 * ω_n, 10000)\n", 252 | "\n", 253 | "for ζ in ζ_values:\n", 254 | " frequency_response = compute_frequency_response(ζ, ω_n)\n", 255 | " ax[0].plot(omega_range, 20 * np.log10(np.abs(frequency_response(omega_range))), label=f\"ζ={ζ}\")\n", 256 | " ax[1].plot(omega_range, np.angle(frequency_response(omega_range)), label=f\"ζ={ζ}\") \n", 257 | " \n", 258 | "ax[0].set_xlabel(\"ω\")\n", 259 | "ax[0].set_ylabel(\"20 log10 |H(jω)|\")\n", 260 | "ax[0].set_xscale(\"log\")\n", 261 | "\n", 262 | "ax[1].set_xlabel(\"ω\")\n", 263 | "ax[1].set_ylabel(\"Phase(H(jω))\")\n", 264 | "ax[1].set_xscale(\"log\")\n", 265 | "\n", 266 | "plt.legend()" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": null, 272 | "id": "9aae5643-04c9-42df-bdb3-c268faad8597", 273 | "metadata": {}, 274 | "outputs": [], 275 | "source": [] 276 | } 277 | ], 278 | "metadata": { 279 | "kernelspec": { 280 | "display_name": "Python 3 (ipykernel)", 281 | "language": "python", 282 | "name": "python3" 283 | }, 284 | "language_info": { 285 | "codemirror_mode": { 286 | "name": "ipython", 287 | "version": 3 288 | }, 289 | "file_extension": ".py", 290 | "mimetype": "text/x-python", 291 | "name": "python", 292 | "nbconvert_exporter": "python", 293 | "pygments_lexer": "ipython3", 294 | "version": "3.12.3" 295 | } 296 | }, 297 | "nbformat": 4, 298 | "nbformat_minor": 5 299 | } 300 | -------------------------------------------------------------------------------- /lectures/lecture_01_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_01_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_01_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_01_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_02_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_02_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_02_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_02_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_03_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_03_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_03_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_03_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_04_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_04_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_04_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_04_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_05_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_05_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_05_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_05_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_06_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_06_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_06_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_06_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_07_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_07_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_07_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_07_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_08_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_08_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_08_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_08_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_09_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_09_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_09_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_09_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_10_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_10_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_10_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_10_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_11_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_11_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_11_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_11_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_12_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_12_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_12_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_12_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_13_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_13_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_13_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_13_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_14_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_14_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_14_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_14_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_15_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_15_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_15_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_15_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_16_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_16_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_16_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_16_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_17_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_17_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_17_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_17_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_18_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_18_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_18_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_18_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_19_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_19_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_19_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_19_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_20_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_20_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_20_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_20_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_21_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_21_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_21_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_21_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_22_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_22_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_22_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_22_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_23_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_23_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_23_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_23_blank.pdf -------------------------------------------------------------------------------- /lectures/lecture_24_annotated.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_24_annotated.pdf -------------------------------------------------------------------------------- /lectures/lecture_24_blank.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/glassnotes/ELEC-221/b60c48586123c93d06e3909c1f3cfeb3826a20bd/lectures/lecture_24_blank.pdf --------------------------------------------------------------------------------