{"id":17804,"date":"2017-06-15T09:00:55","date_gmt":"2017-06-15T14:00:55","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1001\/?p=747"},"modified":"2026-01-16T14:54:35","modified_gmt":"2026-01-16T19:54:35","slug":"series-fourier-funciones-periodicas","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/ss-u05\/series-fourier-funciones-periodicas\/","title":{"rendered":"5.1 Series de Fourier de se\u00f1ales peri\u00f3dicas con Sympy-Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"seriefourier\">1.  Serie de Fourier<\/h2>\n\n\n\n<p><strong><em>Referencia<\/em><\/strong>: Lathi 6.1 p593, Oppenheim 3.3 p186 Chapra 5ed 19.2 p546<\/p>\n\n\n\n<p>La serie de Fourier aproxima una se\u00f1al o funci\u00f3n cont\u00ednua mediante una serie infinita de sinusoides.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t) = a_0 + \\sum_{k=1}^{\\infty}[a_k \\cos( k \\omega_0 t) + b_k \\sin(k \\omega_0t)]<\/span>\n\n\n\n<p>donde los coeficientes de la ecuaci\u00f3n se calculan como:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a_k = \\frac{2}{T} \\int_0^T f(t) \\cos(k \\omega_0 t) \\delta t <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b_k = \\frac{2}{T} \\int_0^T f(t) \\sin(k \\omega_0 t) \\delta t <\/span>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Fourier Transform, Fourier Series, and frequency spectrum\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/r18Gi8lSkfM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">2. Ejercicio. Serie de Fourier de rect\u00e1ngulo(t) con Integral de Sympy<\/h2>\n\n\n\n<p><strong><em>Referencia<\/em><\/strong>: Lathi 6.5 p617, Chapra 5ed Ejemplo 19.2 p548<\/p>\n\n\n\n<p>Utilice la serie de Fourier continua para aproximar la funci\u00f3n de onda cuadrada o rectangular. Para el c\u00e1lculo del ejemplo se usar\u00e1 hasta 4 t\u00e9rminos de la serie.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t) = \\begin{cases} -1 &amp;&amp; -T\/2&lt;t&lt;-T\/4 \\\\ 1 &amp;&amp; -T\/4&lt;t&lt;T\/4 \\\\ -1 &amp;&amp; T\/4&lt;t&lt;T\/2 \\end{cases}<\/span>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"438\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/FourierCuadrado01.png\" alt=\"Fourier Cuadrado 01\" class=\"wp-image-20003\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"coeficientes\">3. Coeficientes a<sub>k<\/sub> y b<sub>k<\/sub><\/h2>\n\n\n\n<p>Para determinar las expresiones de los coeficientes, en Python se usa la librer\u00eda Sympy que nos facilita el desarrollo las f\u00f3rmulas simb\u00f3licas a<sub>k<\/sub> y b<sub>k<\/sub>.<\/p>\n\n\n\n<p>Si requiere revisar el concepto se adjunta el enlace:<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mnumericos\/mn-recursos\/resumen-sympy\/\" data-type=\"page\" data-id=\"12764\">Sympy \u2013 F\u00f3rmulas y funciones simb\u00f3licas<\/a><\/p>\n\n\n\n<p>El desarrollo a papel y l\u00e1piz se deja como tarea.<\/p>\n\n\n\n<p>Usando Python se obtiene los siguientes resultados:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> expresi\u00f3n ak:\n\/  \/     \/pi*k\\            \\                                                  \n|2*|2*sin|----| - sin(pi*k)|                                                  \n|  \\     \\ 2  \/            \/                                                  \n&lt;--------------------------- for And(k &gt; -oo, k &lt; oo, k != 0\n|            pi*k                                                             \n|                                                                             \n\\             0                                                     otherwise \n\n\n expresi\u00f3n bk:\n0\n<\/code><\/pre>\n\n\n\n<p>usando formato latex para la expresi\u00f3n, generado por Sympy se obtiene:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{cases} \\frac{2 \\cdot \\left(2 \\sin{\\left(\\frac{\\pi k}{2} \\right)} - \\sin{\\left(\\pi k \\right)}\\right)}{\\pi k} &amp; \\text{for}\\: \\left(k &gt; -\\infty \\vee k &gt; 0\\right) \\wedge \\left(k &gt; -\\infty \\vee k  0 \\vee k &lt; 0\\right) \\wedge \\left(k &lt; 0 \\vee k &lt; \\infty\\right) \\\\0 &amp; \\text{otherwise} \\end{cases}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> b_k = 0 <\/span>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Algoritmo a<sub>k<\/sub>, b<sub>k<\/sub> en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Serie de Fourier, con n coeficientes\n# Ref.Chapra 5ed Ejemplo 19.2 p548\/pdf572\nimport sympy as sym\n\n# INGRESO\nt = sym.Symbol('t')\n\nT0  = 2*sym.pi ; t0 = -T0\/2 # periodo ; t_inicio\nft = sym.Piecewise((-1,t &lt;-T0\/2),\n                   (-1,t &lt;-T0\/4),\n                   ( 1,t &lt; T0\/4),\n                   (-1,t &lt; T0\/2),\n                   (-1,True),)\nn = 4 # n\u00famero de coeficientes\n\n# PROCEDIMIENTO\nw0 = 2*sym.pi\/T0\nk  = sym.Symbol('k')\n\n# T\u00e9rminos ak para coseno()\nenintegral  = ft*sym.cos(k*w0*t)\nyaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))\nFak = (2\/T0)*yaintegrado\nFak = sym.simplify(Fak)\n\n# T\u00e9rminos bk para seno()\nenintegral = ft*sym.sin(k*w0*t)\nyaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))\nFbk = (2\/T0)*yaintegrado\nFbk = sym.simplify(Fbk)\n\n# SALIDA\nprint(' expresi\u00f3n ak:')\nsym.pprint(Fak)\nprint('\\n ak formato latex')\nprint(sym.latex(Fak))\n\nprint('\\n expresi\u00f3n bk:')\nsym.pprint(Fbk)\nprint('\\n bk formato latex')\nprint(sym.latex(Fbk))\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Evaluaci\u00f3n de coeficientes<\/h3>\n\n\n\n<p>Con las expresiones obtenidas en el bloque anterior, se eval\u00faan los <strong>n<\/strong> coeficientes a<sub>k<\/sub> y b<sub>k<\/sub>, substituyendo en las expresiones los valores en cada \u00edndice i y se obtiene como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> coeficientes ak,bk: \nk_i : &#091;0, 1, 2, 3]\nak : &#091;0, 4\/pi, 0, -4\/(3*pi)]\nbk : &#091;0, 0, 0, 0]]\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Algoritmo evalua coeficientes en Python<\/h3>\n\n\n\n<p>Las instrucciones son adicionales al bloque anterior. La evaluaci\u00f3n se mantiene usando las expresiones simb\u00f3licas usando la instrucci\u00f3n <code>.subs()<\/code><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 38; title: ; notranslate\" title=\"\">\n# evalua los coeficientes\na0  = Fak.subs(k,0)\/2\nb0  = Fbk.subs(k,0)\nak = &#x5B;a0] ; bk = &#x5B;b0] ; k_i = &#x5B;0]\ni = 1\nwhile not(i&gt;=n):\n    ak_valor = Fak.subs(k,i)\n    bk_valor = Fbk.subs(k,i)\n    ak.append(ak_valor)\n    bk.append(bk_valor)\n    k_i.append(i)\n    i = i+1\nprint('\\n coeficientes ak,bk: ')\nfor uncoef in coef_fourier:\n    print(uncoef,':',coef_fourier&#x5B;uncoef])\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"expresionfourier\">4. Expresi\u00f3n de la Serie de Fourier<\/h2>\n\n\n\n<p>Encontrados los coeficientes a<sub>k<\/sub> y b<sub>k<\/sub>, se los usa para construir la expresi\u00f3n principal<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(t) = a_0 + \\sum_{k=1}^{\\infty}[a_k \\cos( k \\omega_0 t) + b_k \\sin(k \\omega_0t)]<\/span>\n\n\n\n<p>obteniendo la siguiente expresi\u00f3n para la serie de Fourier&nbsp; como fs(t)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> serie de Fourier fs(t):\n\n4*cos(t)   4*cos(3*t)\n-------- - ----------\n   pi         3*pi  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Algoritmo expresi\u00f3n Fourier en Python<\/h3>\n\n\n\n<p>Las instrucciones se a\u00f1aden a continuaci\u00f3n de los bloques anteriores,<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 53; title: ; notranslate\" title=\"\">\n# serie de Fourier\nserieF = ak&#x5B;0] + 0*t \ni = 1\nwhile not(i&gt;=n):\n    serieF = serieF + ak&#x5B;i]*sym.cos(i*w0*t)\n    serieF = serieF + bk&#x5B;i]*sym.sin(i*w0*t)\n    i = i+1\n\nprint('\\n serie de Fourier f(t): ','\\n')\nsym.pprint(serieF)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">5. Gr\u00e1ficas de f(t) y Serie de Fourier<\/h2>\n\n\n\n<p>Para comparar la funci\u00f3n f(t) con la aproximaci\u00f3n en series de Fourier, se usa el intervalo [a,b] con una cantidad de <code>muestras<\/code> usando la instrucci\u00f3n <code>np.linspace()<\/code> y guardando el resultado en t<sub>i<\/sub>.<\/p>\n\n\n\n<p>Para evaluar los puntos t<sub>i<\/sub> en cada expresi\u00f3n, por simplicidad se convierte la expresi\u00f3n de su forma simb\u00f3lica a num\u00e9rica lambda, usando <code>sym.lambdify()<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Gr\u00e1fica de f(f) en Python<\/h3>\n\n\n\n<p>Las instrucciones para realizar la gr\u00e1fica de la serie de Fourier van a continuaci\u00f3n de las anteriores,<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; first-line: 93; title: ; notranslate\" title=\"\">\n# Grafica ---------------------\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Evaluaci\u00f3n para gr\u00e1fica\nf_t = sym.lambdify(t,ft)\nserie_ft = sym.lambdify(t,serieF)\nti = np.linspace(float(t_a),float(t_b),muestras)\nfi = f_t(ti)\nserie_fi = serie_ft(ti) \n\n# Grafica de Serie de Fourier\nplt.plot(ti,fi,label = 'f(t)')\netiqueta = 'coeficientes = '+ str(n)\nplt.plot(ti,serie_fi,label = etiqueta)\nplt.xlabel('ti')\nplt.legend()\nplt.grid()\nplt.title('Serie de Fourier f(t); T0='+str(T0))\nplt.show()\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"438\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/FourierCuadrado01.png\" alt=\"Fourier Cuadrado 01\" class=\"wp-image-20003\" \/><\/figure>\n\n\n\n<p><em><strong>Tarea<\/strong><\/em>: Realizar el ejercicio, aumentando el n\u00famero de t\u00e9rminos hasta 8<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 Gr\u00e1fica de Espectro de Fourier de amplitud y fase<\/h3>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Lathi 6.1 p599, Chapra 19.3 p551<\/p>\n\n\n\n<p>Los espectros ofrecen informaci\u00f3n que no aparece en el dominio del tiempo. La gr\u00e1fica de frecuencias ofrece una representaci\u00f3n r\u00e1pida de la estructura de arm\u00f3nicas, que son como las huellas dactilares que ayudan a caracterizar y entender la forma de una se\u00f1al complicada.<\/p>\n\n\n\n<p>La gr\u00e1fica considera todas las magnitudes como positivas.&nbsp; Posteriormente se puede observar&nbsp; como en algunos textos que se incorpora el signo en la gr\u00e1fica de magnitud. En la siguiente secci\u00f3n se trata m\u00e1s \u00e9ste detalle.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"582\" height=\"451\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/FourierCuadrado01_freq.png\" alt=\"Fourier Cuadrado 01 freq\" class=\"wp-image-20005\" \/><\/figure>\n\n\n\n<p>Para mostrar este espectro de frecuencias se increment\u00f3 el n\u00famero de t\u00e9rminos de la serie a n=11, para observar mejor la forma de la gr\u00e1fica.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; first-line: 61; title: ; notranslate\" title=\"\">\n# espectro de frecuencias k\nak_i = np.array(ak,dtype=float)\nbk_i = np.array(bk,dtype=float)\n\nck_mag = np.sqrt(ak_i**2 + bk_i**2)\nck_fase = np.arctan(-bk_i\/ak_i)\n\nrevisa0 = (abs(ak_i)&gt;=casicero)\npendiente = -bk_i&#x5B;revisa0]\/ak_i&#x5B;revisa0]\nck_fase&#x5B;revisa0] = np.arctan(pendiente)\n\ncoef_fourier&#x5B;'ck_mag']  = ck_mag\ncoef_fourier&#x5B;'ck_fase'] = ck_fase\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; first-line: 89; title: ; notranslate\" title=\"\">\nprint('\\n coeficientes ak,bk,Ck_mag,Ck_fase: ')\nfor uncoef in coef_fourier:\n    print(uncoef,':',coef_fourier&#x5B;uncoef])\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# grafica de espectro de frecuencia\nplt.subplot(211)\nplt.stem(k_i,ck_mag,label='|Ck|')\nplt.ylabel('ck_mag')\nplt.title('Espectro de frecuencia ; T0='+str(T0))\nplt.legend()\nplt.grid()\nplt.subplot(212)\nplt.stem(k_i,ck_fase,label='Ck_fase')\nplt.legend()\nplt.ylabel('ck_fase')\nplt.xlabel('k_i')\nplt.grid()\nplt.show()\n<\/pre><\/div>\n\n\n<p>El algoritmo final como una integraci\u00f3n de las partes presentadas se usa en la p\u00e1gina siguiente con algunos ejemplos tradicionales de la transformada de Fourier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">6. Algoritmo\u00a0Integrador de la serie de Fourier con n coeficientes en Python<\/h2>\n\n\n\n<p>Se integran todas las partes anteriores en un algoritmo<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Serie de Fourier, con n coeficientes\n# Ref.Chapra 5ed Ejemplo 19.2 p548\/pdf572\nimport sympy as sym\nimport numpy as np\n\n# INGRESO\nt = sym.Symbol('t')\n\nT0  = 2*sym.pi ; t0 = -T0\/2 # periodo ; t_inicio\nft = sym.Piecewise((-1,t &lt; -T0\/2),\n                   (-1,t &lt; -T0\/4),\n                   ( 1,t &lt; T0\/4),\n                   (-1,t &lt; T0\/2),\n                   (-1,True),)\nn = 11 # n\u00famero de coeficientes\n\nt_a = t0   # intervalo de t =&#x5B;t_a,t_b]\nt_b = t0 + T0\nmuestras = 101 # 51 resolucion grafica\ncasicero = 1e-10\n\n# PROCEDIMIENTO\nw0 = 2*sym.pi\/T0\nk  = sym.Symbol('k')\n\n# T\u00e9rminos ak para coseno()\nenintegral  = ft*sym.cos(k*w0*t)\nyaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))\nFak = (2\/T0)*yaintegrado\nFak = sym.simplify(Fak)\n\n# T\u00e9rminos bk para seno()\nenintegral = ft*sym.sin(k*w0*t)\nyaintegrado = sym.integrate(enintegral,(t,t0,t0 + T0))\nFbk = (2\/T0)*yaintegrado\nFbk = sym.simplify(Fbk)\n\n# evalua los coeficientes\na0  = Fak.subs(k,0)\/2\nb0  = Fbk.subs(k,0)\nak = &#x5B;a0] ; bk = &#x5B;b0] ; k_i = &#x5B;0]\ni = 1\nwhile not(i&gt;=n):\n    ak_valor = Fak.subs(k,i)\n    bk_valor = Fbk.subs(k,i)\n    ak.append(ak_valor)\n    bk.append(bk_valor)\n    k_i.append(i)\n    i = i+1\ncoef_fourier = {'k_i': k_i,\n                'ak' : ak, 'bk': bk}\n\n# serie de Fourier\nserieF = ak&#x5B;0] + 0*t \ni = 1\nwhile not(i&gt;=n):\n    serieF = serieF + ak&#x5B;i]*sym.cos(i*w0*t)\n    serieF = serieF + bk&#x5B;i]*sym.sin(i*w0*t)\n    i = i+1\n\n# espectro de frecuencias k\nak_i = np.array(ak,dtype=float)\nbk_i = np.array(bk,dtype=float)\n\nck_mag = np.sqrt(ak_i**2 + bk_i**2)\nck_fase = np.arctan(-bk_i\/ak_i)\n\nrevisa0 = (abs(ak_i)&gt;=casicero)\npendiente = -bk_i&#x5B;revisa0]\/ak_i&#x5B;revisa0]\nck_fase&#x5B;revisa0] = np.arctan(pendiente)\n\ncoef_fourier&#x5B;'ck_mag']  = ck_mag\ncoef_fourier&#x5B;'ck_fase'] = ck_fase\n\n# SALIDA\nprint(' expresi\u00f3n ak:')\nsym.pprint(Fak)\nprint('\\n ak formato latex')\nprint(sym.latex(Fak))\n\nprint('\\n expresi\u00f3n bk:')\nsym.pprint(Fbk)\nprint('\\n bk formato latex')\nprint(sym.latex(Fbk))\n\nprint('\\n serie de Fourier f(t): ')\nsym.pprint(serieF)\n\nprint('\\n coeficientes ak,bk,Ck_mag,Ck_fase: ')\nfor uncoef in coef_fourier:\n    print(uncoef,':',coef_fourier&#x5B;uncoef])\n\n# Grafica ---------------------\nimport matplotlib.pyplot as plt\n\n# Evaluaci\u00f3n para gr\u00e1fica\nf_t = sym.lambdify(t,ft)\nserie_ft = sym.lambdify(t,serieF)\nti = np.linspace(float(t_a),float(t_b),muestras)\nfi = f_t(ti)\nserie_fi = serie_ft(ti) \n\n# Grafica serie de Fourier\nfig_serieF, graf_sF = plt.subplots()\ngraf_sF.plot(ti,fi,label = 'f(t)')\netiqueta = 'coeficientes = '+ str(n)\ngraf_sF.plot(ti,serie_fi,label = etiqueta)\ngraf_sF.set_xlabel('ti')\ngraf_sF.legend()\ngraf_sF.grid()\ngraf_sF.set_title('Serie de Fourier f(t); T0='+str(T0))\n# plt.show()\n\n# grafica de espectro de frecuencia\nfig_espectro, graf_sptr = plt.subplots(2,1)\ngraf_sptr&#x5B;0].stem(k_i,ck_mag,label='|Ck|')\ngraf_sptr&#x5B;0].set_ylabel('ck_mag')\ngraf_sptr&#x5B;0].set_title('Espectro de frecuencia ; T0='+str(T0))\ngraf_sptr&#x5B;0].legend()\ngraf_sptr&#x5B;0].grid()\n\ngraf_sptr&#x5B;1].stem(k_i,ck_fase,label='Ck_fase')\ngraf_sptr&#x5B;1].legend()\ngraf_sptr&#x5B;1].set_ylabel('ck_fase')\ngraf_sptr&#x5B;1].set_xlabel('k_i')\ngraf_sptr&#x5B;1].grid()\nplt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"funcionsympy\">7. Funci\u00f3n en librer\u00eda Sympy para Serie de Fourier<\/h2>\n\n\n\n<p>Usando el ejercicio 1, se muestra el resultado obtenido usando la instrucci\u00f3n incorporada en Sympy.&nbsp; La funci\u00f3n truncate(n) aplicada a la serie, permite obtener los n t\u00e9rminos no cero. Existen operaciones adicionales para desplazamiento y escala en <code>x<\/code> que evitan tener que realizar las operaciones nuevamente y optimizan el tiempo del algoritmo<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> serie de Fourier f(t): \n4*cos(t)   4*cos(3*t)   4*cos(5*t)      \n-------- - ---------- + ---------- + ...\n   pi         3*pi         5*pi         \n\n serie de Fourier f(t), n t\u00e9rminos: \n             \/pi\\                  \/3*pi\\\n4*cos(t)*sinc|--|   4*cos(3*t)*sinc|----|\n             \\4 \/                  \\ 4  \/\n----------------- - ---------------------\n        pi                   3*pi        \n\n serie de Fourier f(t), k t\u00e9rminos no cero: \n4*cos(t)   4*cos(3*t)   4*cos(5*t)   4*cos(7*t)\n-------- - ---------- + ---------- - ----------\n   pi         3*pi         5*pi         7*pi   \n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Instrucciones en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Serie de Fourier, con n coeficientes\n# Ref.Chapra 5ed Ejemplo 19.2 p548\/pdf572\nimport sympy as sym\n\n# INGRESO\nt = sym.Symbol('t')\n\nT0  = 2*sym.pi ; t0 = 0 # periodo ; t_inicio\nft = sym.Piecewise((-1,t &lt;-T0\/2),\n                   (-1,t &lt;-T0\/4),\n                   ( 1,t &lt; T0\/4),\n                   (-1,t &lt; T0\/2),\n                   (-1,True),)\nn = 4 # n\u00famero de coeficientes\n\nt_a = t0   # intervalo de t =&#x5B;t_a,t_b]\nt_b = t0 + T0\n\n# PROCEDIMIENTO\nserieF = sym.fourier_series(ft,(t,t0,t0+T0))\nserieFn = sym.expand(serieF.sigma_approximation(n))\nserieFk = serieF.truncate(n)\n\n# SALIDA\nprint('\\n serie de Fourier f(t): ')\nsym.pprint(serieF)\n\nprint('\\n serie de Fourier f(t), n t\u00e9rminos: ')\nsym.pprint(serieFn)\n\nprint('\\n serie de Fourier f(t), k t\u00e9rminos no cero: ')\nsym.pprint(serieFk)\n<\/pre><\/div>\n\n\n<p>Adicionalmente incorpora otras operaciones para el dominio de la frecuencia como desplazamiento y escalamiento en x<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>&gt;&gt;&gt; sym.pprint(serieF)\n4*cos(t)   4*cos(3*t)   4*cos(5*t)      \n-------- - ---------- + ---------- + ...\n   pi         3*pi         5*pi         \n\n&gt;&gt;&gt; sym.pprint(serieF.scalex(2))\n4*cos(2*t)   4*cos(6*t)   4*cos(10*t)      \n---------- - ---------- + ----------- + ...\n    pi          3*pi          5*pi         \n\n&gt;&gt;&gt; sym.pprint(serieF.shiftx(2))\n4*cos(t + 2)   4*cos(3*t + 6)   4*cos(5*t + 10)      \n------------ - -------------- + --------------- + ...\n     pi             3*pi              5*pi           \n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Videos relacionados al tema que expresan gr\u00e1ficamente el concepto<\/p>\n\n\n\n<p>Pero, \u00bfqu\u00e9 es la transformada de Fourier? Una introducci\u00f3n visual. 3Blue1Brown. 26 Enero2018<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"But what is the Fourier Transform?  A visual introduction.\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/spUNpyF58BY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Dibujando en el plano (Re,Imag)<\/p>\n\n\n\n<p>\u00bfQu\u00e9 es una Serie de Fourier? Del Flujo de Calor al Arte con C\u00edrculos. 3Blue1Brown. 30 junio 2019<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"But what is a Fourier series?  From heat flow to drawing with circles | DE4\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/r6sGWTCMz2k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#seriefourier\">Fourier<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#coeficientes\">a<sub>k<\/sub>,b<sub>k<\/sub><\/a><\/p>\n\n\n\n<p><a href=\"#expresionfourier\">expresi\u00f3n<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcionsympy\">funci\u00f3n Sympy<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Fourier ejercicio ak,bk expresi\u00f3n gr\u00e1fica algoritmo funci\u00f3n Sympy 1. Serie de Fourier Referencia: Lathi 6.1 p593, Oppenheim 3.3 p186 Chapra 5ed 19.2 p546 La serie de Fourier aproxima una se\u00f1al o funci\u00f3n cont\u00ednua mediante una serie infinita de sinusoides. donde los coeficientes de la ecuaci\u00f3n se calculan como: Fourier ejercicio ak,bk expresi\u00f3n gr\u00e1fica algoritmo funci\u00f3n [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-ss-unidades","format":"standard","meta":{"footnotes":""},"categories":[175],"tags":[],"class_list":["post-17804","post","type-post","status-publish","format-standard","hentry","category-ss-u05"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=17804"}],"version-history":[{"count":9,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17804\/revisions"}],"predecessor-version":[{"id":20742,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/17804\/revisions\/20742"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=17804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=17804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=17804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}