{"id":24519,"date":"2024-12-17T11:02:00","date_gmt":"2024-12-17T16:02:00","guid":{"rendered":"https:\/\/blog.espol.edu.ec\/algoritmos101\/?p=24519"},"modified":"2026-05-07T12:31:55","modified_gmt":"2026-05-07T17:31:55","slug":"dft-transformada-fourier-discreta","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-unidades\/dft-transformada-fourier-discreta\/","title":{"rendered":"3.1 DFT - Transformada de Fourier Discreta -"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#grafica\">gr\u00e1fica<\/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=\"concepto\">1. Transformada de Fourier Discreta<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Chapra 19.5 p556<\/p>\n\n\n\n<p>Una funci\u00f3n representada por valores muestra o discretos se puede dividir en intervalos de 0 a t en N sub-intervalos de igual tama\u00f1o \u0394t=T\/N.<\/p>\n\n\n\n<p>La transformada discreta de Fourier se escribe como:<\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\"><div class=\"wp-block-media-text__content\">\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> F_k = \\sum_{n=0}^{N-1} f_n e^{-i \\omega_0 n}<\/span>\n\n\n\n<p class=\"has-text-align-center\">k = 0 a N-1<\/p>\n\n\n\n<p>y la transformada inversa como:<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f_n = \\frac{1}{N}\\sum_{k=0}^{N-1} F_k e^{i \\omega_0 n}<\/span>\n\n\n\n<p class=\"has-text-align-center\">n = 0 a N-1<\/p>\n\n\n\n<p class=\"has-text-align-center\">donde \u03c9<sub>0<\/sub>= 2\u03c0\/N<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2026\/05\/DFT_Muestrasfx_01.gif\" alt=\"Muestras de f(t) como f[n] en un periodo T\" class=\"wp-image-24521 size-full\" \/><\/figure><\/div>\n\n\n\n<p>La DTF requiere N<sup>2<\/sup> operaciones complejas. Observe que el factor 1\/N es un factor de escala que se puede incluir en una ecuaci\u00f3n pero <strong>No en ambas<\/strong>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">2. Ejercicio para DTF<\/h2>\n\n\n\n<p>Para las muestras de la funci\u00f3n coseno, realizar la transformada discreta de Fourier.<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">  f_n = cos(2 \\pi 12.5 t)<\/span>\n\n\n\n<p>considere  f<sub>0<\/sub>=12.5, \u0394t=0.01, N=16.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">3. Algoritmo<\/h2>\n\n\n\n<p>El algoritmo calcula las muestras para f(t) que se usan en el procedimiento de la transformada seg\u00fan la f\u00f3rmula dada.<\/p>\n\n\n\n<p>El factor 1\/N se usar\u00e1 en la primer expresi\u00f3n, para que el primer coeficiente F0 sea igual a la media aritm\u00e9tica de las muestras.<\/p>\n\n\n\n<p>El resultado a mostrar para el ejemplo es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>&#091;&#091; k, fi&#091;k], k_real, k_imag ]]\n&#091;&#091; 0.          1.          0.          0.        ]\n &#091; 1.          0.70710678  0.          0.        ]\n &#091; 2.          0.          0.5         0.        ]\n &#091; 3.         -0.70710678  0.          0.        ]\n &#091; 4.         -1.          0.          0.        ]\n &#091; 5.         -0.70710678  0.          0.        ]\n &#091; 6.          0.          0.          0.        ]\n &#091; 7.          0.70710678  0.          0.        ]\n &#091; 8.          1.          0.          0.        ]\n &#091; 9.          0.70710678  0.          0.        ]\n &#091;10.          0.          0.          0.        ]\n &#091;11.         -0.70710678  0.          0.        ]\n &#091;12.         -1.          0.          0.        ]\n &#091;13.         -0.70710678  0.          0.        ]\n &#091;14.          0.          0.5         0.        ]\n &#091;15.          0.70710678  0.          0.        ]]<\/code><\/pre>\n\n\n\n<p>Las instrucciones en Python son:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n DFT Transformada Discreta de Fourier\n# Ref. Chapra 5ed 19.5 p556\nimport sympy as sym\nimport numpy as np\n \n# INGRESO\nN = 16\nf0 = 12.5\nfx = lambda t: np.cos(2*np.pi*f0*t)\ndt = 0.01\n\n# fx Discreta, N muestras, tramos dt\nti = np.arange(0,N*dt,dt)\nfi = fx(ti)\n\n# PROCEDIMIENTO\ncasicero = 1e-14 # valores son cero\nverdigitos = 4 # ver digitos en la tabla\n#np.set_printoptions(4,legacy=&quot;1.25&quot;) # no muestra tipo datos\n\nw0 = 2*np.pi\/N\ntabla = &#x5B;]\nfor k in range(0,N,1): # &#x5B;0,N)=&#x5B;0,N-1]\n    k_real = 0\n    k_imag = 0\n    for n in range(0,N,1): # &#x5B;0,N)=&#x5B;0,N-1]\n        angulo = k*w0*n\n        k_real = k_real + fi&#x5B;n]*np.cos(angulo)\/N\n        k_imag = k_imag + fi&#x5B;n]*np.sin(angulo)\/N\n    tabla.append(&#x5B;k,fi&#x5B;k],k_real,k_imag])\n\ntabla = np.array(tabla,dtype=float)\n# revisa casicero\ntabla = np.where(abs(tabla) &lt; casicero, 0, tabla)\n\n# SALIDA\nprint(&quot;&#x5B;&#x5B; k, fi&#x5B;k], k_real, k_imag ]]&quot;)\nprint(tabla)\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"grafica\">4. Gr\u00e1fica<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2026\/05\/DFT_Muestrasfx_02.gif\" alt=\"DFT transformada discreta de Fourier gr\u00e1fica\" class=\"wp-image-24531\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA ---------\nimport matplotlib.pyplot as plt\nfs_veces = 10 # suavizar x(t), sobremuestreo\n# muestreo x(t)\ndtc = dt\/fs_veces # sobremuestreo para x(t)\ntj = np.arange(0,N*dt + dtc, dtc)\nfj = fx(tj)\n\nplt.subplot(211)\nplt.plot(tj,fj,color=&quot;gray&quot;,label='f(t)')\nplt.stem(ti,fi,linefmt = 'C0:', label='f&#x5B;n]')\nplt.xlabel('t')\nplt.legend()\n\nplt.subplot(212)\nplt.stem(tabla&#x5B;:,2], linefmt = 'C1:',label='k_real')\nplt.stem(tabla&#x5B;:,3], linefmt = 'C2:',label='k_imag')\nplt.xlabel('n')\nplt.ylabel('|k|')\nplt.legend()\n<\/pre><\/div>\n\n\n<p><br>El Algoritmo M\u00e1s Importante De Todos Los Tiempos. Veritasium. 21 enero 2023.<\/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=\"El Algoritmo M\u00e1s Importante De Todos Los Tiempos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/2Xkv-W9tOXU?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","protected":false},"excerpt":{"rendered":"<p>DFT ejercicio algoritmo gr\u00e1fica 1. Transformada de Fourier Discreta Referencia: Chapra 19.5 p556 Una funci\u00f3n representada por valores muestra o discretos se puede dividir en intervalos de 0 a t en N sub-intervalos de igual tama\u00f1o \u0394t=T\/N. La transformada discreta de Fourier se escribe como: k = 0 a N-1 y la transformada inversa como: [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"wp-custom-template-entrada-dsp-unidades","format":"standard","meta":{"footnotes":""},"categories":[193],"tags":[],"class_list":["post-24519","post","type-post","status-publish","format-standard","hentry","category-dsp-unidades"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/24519","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=24519"}],"version-history":[{"count":14,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/24519\/revisions"}],"predecessor-version":[{"id":24546,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/24519\/revisions\/24546"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=24519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=24519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=24519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}