{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "26f927b6", "metadata": {}, "outputs": [], "source": [ "import sympy as s\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 26, "id": "82f81ed0", "metadata": {}, "outputs": [], "source": [ "n = s.symbols('n', integer=True, positive=True)" ] }, { "cell_type": "code", "execution_count": 27, "id": "5e8da925", "metadata": {}, "outputs": [], "source": [ "t,d = s.symbols('t d', real=True)" ] }, { "cell_type": "code", "execution_count": 28, "id": "f280bb7c", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{\\sin{\\left(\\pi d n \\right)}}{\\pi n}$" ], "text/plain": [ "sin(pi*d*n)/(pi*n)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_n = 1/s.pi*s.integrate(s.cos(n*t), (t, 0, d*s.pi))\n", "a_n" ] }, { "cell_type": "code", "execution_count": 30, "id": "f625ed37", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{1 - \\cos{\\left(\\pi d n \\right)}}{\\pi n}$" ], "text/plain": [ "(1 - cos(pi*d*n))/(pi*n)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_n = s.simplify(1/s.pi*s.integrate(s.sin(n*t), (t, 0, d*s.pi)))\n", "b_n" ] }, { "cell_type": "code", "execution_count": 31, "id": "9483ca25", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_n.subs(d,1)" ] }, { "cell_type": "code", "execution_count": 32, "id": "4375f87e", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{1 - \\left(-1\\right)^{n}}{\\pi n}$" ], "text/plain": [ "(1 - (-1)**n)/(pi*n)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_n.subs(d,1)" ] }, { "cell_type": "code", "execution_count": 33, "id": "7317e89b", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{\\sin{\\left(\\pi d n \\right)}}{\\pi n}$" ], "text/plain": [ "sin(pi*d*n)/(pi*n)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = a_n\n", "e1" ] }, { "cell_type": "code", "execution_count": 34, "id": "59cb7e11", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{1 - \\cos{\\left(\\pi d n \\right)}}{\\pi n}$" ], "text/plain": [ "(1 - cos(pi*d*n))/(pi*n)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e2 = b_n\n", "e2" ] }, { "cell_type": "code", "execution_count": 35, "id": "31fb92e7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(d, n)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d,n" ] }, { "cell_type": "code", "execution_count": 36, "id": "7e4d79a6", "metadata": {}, "outputs": [], "source": [ "an = s.lambdify([d,n],e1)" ] }, { "cell_type": "code", "execution_count": 37, "id": "4eb33c10", "metadata": {}, "outputs": [], "source": [ "bn = s.lambdify([d,n], e2)" ] }, { "cell_type": "code", "execution_count": 87, "id": "ea0c597c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Fourier Sum')" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "x = np.linspace(0,6*np.pi,1000 )\n", "# a0 = d so the first term of the Fourier Series is a0/2\n", "d = 1\n", "y = np.ones(1000)*d/2\n", "\n", "for n in np.arange(1,40):\n", " y += an(d, n)*np.cos(n*x)+bn(d,n)*np.sin(n*x)\n", " \n", "xpi = x/np.pi\n", "ax.plot(xpi,y)\n", "ax.grid()\n", "ax.set_xlabel(\"x*$\\pi$\")\n", "ax.set_ylabel(\"Sum\")\n", "ax.set_title(\"Fourier Sum\")" ] }, { "cell_type": "code", "execution_count": 60, "id": "cf84db5b", "metadata": {}, "outputs": [], "source": [ "from matplotlib.ticker import MaxNLocator" ] }, { "cell_type": "code", "execution_count": 88, "id": "3656fc95", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Harmonic Decomposition')" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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2iXVLNbt+ilJdSg/wukXwHTPJEsaBBGxAjih4qazduU7m1cB+2X5xTYtyHMN8NLM/E3TefSEfvkyEkmSpNYozx7vNO6KPVLm+dOmc2htDiORJEmSauIwEkmSJKkmntmWJEmSamKzLUmSJNVkyl4gucUWW+S8efPGXP7AAw+w8cYb9y7QONqUp01ZoF152pQFzNNNm7JcccUVd2Xmlk3nmIrGqvVt+v2DecZjnu7M010b8nSt85k5JW/z58/PbpYsWdJ1ea+1KU+bsmS2K0+bsmSap5s2ZQGWZQvq4lS8jVXr2/T7zzTPeMzTnXm6a0OebnXeYSSSJElSTWy2JUmSpJrYbEuSJEk1mbIXSEpqv0ceeYSVK1fy0EMPVb7tWbNmceONN1a+3W5mzJjB3LlzmT59ek/3K0lqL5ttSY1ZuXIlm2yyCfPmzSMiKt326tWr2WSTTSrdZjeZyd13383KlSvZbrvterZfSVK7OYxEUmMeeughNt9888ob7SZEBJtvvnktZ+klSf3LZltSo6ZCoz1kKj0WSVI1HEbSzemzRkzf30wOSVJl5p3ytWHTK848uKEkkgaBzbak1hjZBK0vmyhJUtMcRiJpoH32s59ll112Ydddd+XYY49lxYoV7Lvvvuyyyy7st99+/OpXvwLg/PPP53nPex677rorL33pSxtOLUnqF57ZljSwbrjhBt7znvfwgx/8gC222IJ77rmH44477vHbpz71Kd70pjdx0UUXccYZZ7B48WLmzJnDfffd13R0SVKf8My2pIF12WWX8apXvYotttgCgM0224wf/vCHHH300QAce+yxfP/73wfgRS96Eccffzwf//jHeeyxxxrLLEnqLzbbkjQBH/nIR3jPe97Dbbfdxvz587n77rubjiRJ6gM225IG1r777sv555//eON8zz338MIXvpBFixYB8PnPf56XvOQlANxyyy3stddenHHGGWy55ZbcdtttjeWWJPWPVozZjogDgX8HpgGfyMwzR1nn1cDpQALXZObRPQ0pacp57nOfy2mnncbLXvYypk2bxu67785//Md/8Fd/9VecddZZbLnllnz6058G4OSTT+bmm28mM9lvv/3YddddG07ff6z1kgZR4812REwDzgb+DFgJXB4RF2fmTzvW2R44FXhRZt4bEU9vJq2kOlX5UX2rV6+e0HpDF0N2uuyyy9Za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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ((ax, ax2), (ax3, ax4)) = plt.subplots(2,2, figsize=(12,8))\n", "plt.subplots_adjust(wspace=0.3, hspace=0.3)\n", "d = 1\n", "n = np.arange(1,31)\n", "y = np.array((np.vectorize(an)(d,n),np.vectorize(bn)(d,n)))\n", "dk = np.sqrt(y[0]**2 +y[1]**2) \n", "ax.xaxis.set_major_locator(MaxNLocator(integer=True))\n", "ax.bar(n-0.2,y[0], width=0.4, label='cos')\n", "ax.bar(n+0.2,y[1], width=0.4, label='sin')\n", "\n", "\n", "ax2.bar(n,dk, width=0.4, label='norm')\n", "ax2.grid()\n", "ax2.xaxis.set_major_locator(MaxNLocator(integer=True))\n", "ax2.set_title(\"Amplitude (Norm)\")\n", "ax2.set_xlabel(\"N\")\n", "\n", "phase = np.arctan2(y[0],y[1])/np.pi\n", "ax3.scatter(n, phase)\n", "ax3.set_title(\"Phase vs N\")\n", "ax3.set_xlabel(\"N\")\n", "ax3.set_ylabel(\"$\\pi$ radians\")\n", "ax3.grid()\n", "ax3.xaxis.set_major_locator(MaxNLocator(integer=True))\n", "\n", "ax4.scatter(dk, phase)\n", "ax4.set_title(\"Amplitude vs Phase\")\n", "ax4.grid()\n", "ax4.set_ylabel(\"$\\pi$ radians\")\n", "ax4.set_xlabel(\"Amplitude\")\n", "\n", "ax.grid()\n", "ax.legend()\n", "\n", "ax.set_xlabel(\"N\")\n", "ax.set_ylabel(\"Amplitude\")\n", "ax.set_title(\"Harmonic Decomposition\")\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "c1671137", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }