{"id":343,"date":"2024-12-18T14:48:33","date_gmt":"2024-12-18T19:48:33","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1034\/?p=343"},"modified":"2026-03-27T21:23:32","modified_gmt":"2026-03-28T02:23:32","slug":"dft-transformada-fourier-discreta-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-unidades\/dft-transformada-fourier-discreta-python\/","title":{"rendered":"3.1 DFT\/IDFT - Transformada de Fourier Discreta con 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=\"#dft\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmodft\">Algoritmo DFT<\/a><\/p>\n\n\n\n<p><a href=\"#idft\">IDFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoidft\">Algoritmo IDFT<\/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=\"dft\">1. La Transformada de Fourier&nbsp;Discreta&nbsp;- DFT<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan 8.1 p302<\/p>\n\n\n\n<p>La ecuaci\u00f3n para la <em><strong>transformada de Fourier&nbsp;discreta <\/strong><\/em> o <strong>DFT<\/strong>, discreta en tiempo y discreta en frecuencia<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[k] = \\sum_{n=0}^{N-1} x[n] e^{-j(2\\pi\/N) k n} <\/span>\n\n\n\n<p class=\"has-text-align-center\">k = 0,1, ... <strong>N<\/strong>-1<\/p>\n\n\n\n<p>que toma N muestras en el dominio del tiempo y la transforma en N valores de X[k] en el dominio de la frecuencia. Los valores de X[k] son de tipo complejo, mientras que los valores de x[n] son reales la mayor\u00eda de las veces.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.1. DFT - ejemplo para&nbsp; x[n] de pocas muestras<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan ejemplo 8.1 p303<\/p>\n\n\n\n<p>Para calcular la DFT de la secuencia x[n] = [1,1,0,0] se aplica la expresi\u00f3n para k=0,1,2,3,&nbsp; siendo N=4, todos los exponentes son m\u00faltiplos de \u03c0\/2.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[0] = x[0] e^{-j(2\\pi\/4) (0) (0)} + x[1] e^{-j(2\\pi\/4) (0) (1)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + x[2] e^{-j(2\\pi\/4) (0) (2)} + x[3] e^{-j(2\\pi\/4) (0) (3)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1 e^{-j0} + 1 e^{-j0} + 0 e^{-j0} + 0 e^{-j0} = 2<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[1] = x[0] e^{-j(2\\pi\/4) (1) (0)} + x[1] e^{-j(2\\pi\/4) (1) (1)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + x[2] e^{-j(2\\pi\/4) (1) (2)} + x[3] e^{-j(2\\pi\/4) (1) (3)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1 e^{-j0} + 1 e^{-j\\pi\/2} + 0e^{-j\\pi} + 0 e^{-j(3\\pi\/2) }<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1-j <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[2] = x[0] e^{-j(2\\pi\/4) (2) (0)} + x[1] e^{-j(2\\pi\/4) (2) (1)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + x[2] e^{-j(2\\pi\/4) (2) (2)} + x[3] e^{-j(2\\pi\/4) (2) (3)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1 e^{-j0} + 1 e^{-j\\pi} + 0e^{-j2\\pi} + 0 e^{-j(3\\pi) } <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1+(-1) = 0<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[3] = x[0] e^{-j(2\\pi\/4) (3) (0)} + x[1] e^{-j(2\\pi\/4) (3) (1)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + x[2] e^{-j(2\\pi\/4) (3) (2)} + x[3] e^{-j(2\\pi\/4) (3) (3)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1 e^{-j0} + 1 e^{-j3\\pi\/2} + 0e^{-j3\\pi} + 0 e^{-j(9\\pi\/2) }<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 1+j <\/span>\n\n\n\n<p>Coeficientes resultantes en el dominio de la frecuencia:<\/p>\n\n\n\n<p class=\"has-text-align-center\">X[k] = [2, 1-j, 0,1+j]<\/p>\n\n\n\n<p>Se presenta el resultado en forma polar:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[k] = [2,\\sqrt{2} e^{-j\\pi\/4}, 0 , \\sqrt{2} e^{-j\\pi\/4}] <\/span>\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=\"#dft\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmodft\">Algoritmo DFT<\/a><\/p>\n\n\n\n<p><a href=\"#idft\">IDFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoidft\">Algoritmo IDFT<\/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=\"algoritmodft\">1.2 Algoritmo DFT con Python<\/h2>\n\n\n\n<p>Para el algoritmo,&nbsp;el bloque de ingreso de datos es el vector con las muestras num\u00e9ricas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># INGRESO<\/span>\nxn = &#091;1,1,0,0]<\/code><\/pre>\n\n\n\n<p>En Python se obtiene los coeficientes de la DFT con la instrucci\u00f3n <code>np.fft.fft(xn)<\/code>. El resultado para el ejercicio anterior se muestra como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>X&#091;k]:\n&#091;2.+0.j 1.-1.j 0.+0.j 1.+1.j]\nMagnitud X&#091;k]:\n&#091;2.         1.41421356 0.         1.41421356]\nFase X&#091;k]:\n&#091; 0.         -0.78539816  0.          0.78539816]\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>detalle de las instrucciones:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejemplo 8.1 p302 DFT de x&#x5B;n]\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\n\n# INGRESO\nxn = &#x5B;1,1,0,0]\n\n# PROCEDIMIENTO\nX_k = np.fft.fft(xn)\nmagnk = np.abs(X_k)\nfasek = np.angle(X_k)\n\n# SALIDA\nprint('X&#x5B;k]:')\nprint(X_k)\nprint('Magnitud X&#x5B;k]:')\nprint(magnk)\nprint('Fase X&#x5B;k]:')\nprint(fasek)\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=\"#dft\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmodft\">Algoritmo DFT<\/a><\/p>\n\n\n\n<p><a href=\"#idft\">IDFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoidft\">Algoritmo IDFT<\/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=\"idft\">2. Transformada Inversa de Fourier Discreta - IDFT<\/h2>\n\n\n\n<p>La <strong>transformada inversa de Fourier&nbsp;discreta <\/strong> convierte la secuencia X[k] en el dominio de la frecuencia a x[n] en el dominio del tiempo<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[n] = \\frac{1}{N} \\sum_{k=0}^{N-1} X[k] e^{j(2\\pi\/N) k n} <\/span>\n\n\n\n<p class=\"has-text-align-center\">n = 0, 1, ... <strong>N<\/strong>-1<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2.1 IDFT - Ejemplo para&nbsp; X[k] de pocas muestras<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan ejemplo 8.2 p305<\/p>\n\n\n\n<p>Para calcular la IDFT de la secuencia X[k] obtenida en el ejercicio anterior, se aplica la f\u00f3rmula con n=0,1,2,3,&nbsp; siendo N=4, todos los exponentes son m\u00faltiplos de \u03c0\/2.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X[k] = [2,\\sqrt{2} e^{-j\\pi\/4}, 0 , \\sqrt{2} e^{-j\\pi\/4}] <\/span>\n\n\n\n<p>siendo:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[0] = \\frac{1}{4} \\Big( X[0] e^{j(2\\pi\/4) (0) (0)} + X[1] e^{j(2\\pi\/4) (1) (0)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + X[2] e^{j(2\\pi\/4) (2) (0)} + X[3] e^{j(2\\pi\/4) (3) (0)} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 e^{j0} + \\sqrt{2} e^{-j\\pi\/4} e^{j0}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + 0 e^{j0} + \\sqrt{2} e^{-j\\pi\/4} e^{j0} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 +(1-j)+0+(1+j) \\Big) = 1 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[1] = \\frac{1}{4} \\Big( X[0] e^{j(2\\pi\/4) (0) (1)} + X[1] e^{j(2\\pi\/4) (1) (1)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + X[2] e^{j(2\\pi\/4) (2) (1)} + X[3] e^{j(2\\pi\/4) (3) (1)} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 e^{j0} + \\sqrt{2} e^{-j\\pi\/4} e^{j\\pi\/2}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + 0 e^{j\\pi\/2} + \\sqrt{2} e^{-j\\pi} e^{j3\\pi\/2} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 +(1+j)+0+(1-j) \\Big) = 1 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[2] = \\frac{1}{4} \\Big( X[0] e^{j(2\\pi\/4) (0) (2)} + X[1] e^{j(2\\pi\/4) (1) (2)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + X[2] e^{j(2\\pi\/4) (2) (2)} + X[3] e^{j(2\\pi\/4) (3) (2)} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 e^{j0} + \\sqrt{2} e^{-j\\pi\/4} e^{j\\pi}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + 0 e^{j2\\pi} + \\sqrt{2} e^{-j\\pi} e^{j3\\pi} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 +(-1+j)+0+(-1-j) \\Big) = 0 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[3] = \\frac{1}{4} \\Big( X[0] e^{j(2\\pi\/4) (0) (3)} + X[1] e^{j(2\\pi\/4) (1) (3)} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + X[2] e^{j(2\\pi\/4) (2) (3)} + X[3] e^{j(2\\pi\/4) (3) (3)} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 e^{j0} + \\sqrt{2} e^{-j\\pi\/4} e^{j3\\pi\/2} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> + 0 e^{j3\\pi} + \\sqrt{2} e^{-j\\pi} e^{j9\\pi\/2} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4} \\Big( 2 +(-1-j)+0+(-1+j) \\Big) = 0 <\/span>\n\n\n\n<p>Coeficientes resultantes en el dominio del tiempo:<\/p>\n\n\n\n<p class=\"has-text-align-center\">x[n] = [1, 1, 0,0]<\/p>\n\n\n\n<p>Con lo que se verifica que es la inversa del ejercicio anterior.<\/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=\"#dft\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmodft\">Algoritmo DFT<\/a><\/p>\n\n\n\n<p><a href=\"#idft\">IDFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoidft\">Algoritmo IDFT<\/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=\"algoritmoidft\">2.2 Algoritmo IDFT con Python<\/h2>\n\n\n\n<p>Para el ejercicio, la secuencia de entrada es X[k] = [2, 1 + j, 0, 1 - j]. Usando la librer\u00eda Numpy, la parte compleja de un n\u00famero se expresa como 1j&nbsp; el vector de ingreso se expresa como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># INGRESO<\/span>\nXk = &#091;2, 1 - 1j, 0, 1 + 1j]<\/code><\/pre>\n\n\n\n<p>el resultado del algoritmo obtenido es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x&#091;n]:\n&#091;1. 1. 0. 0.]<\/code><\/pre>\n\n\n\n<p>Las instrucciones se desarrollan de forma semejante a las usadas para DFT. La inversa de la transformada, se obtiene con:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejemplo 8.2 p306 IDFT de X&#x5B;k]\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\n\n# INGRESO\nXk = &#x5B;2, 1 - 1j, 0, 1 + 1j]\n\n# PROCEDIMIENTO\nxn = np.fft.ifft(Xk)\n\n# simplifica xn si es solo real\nxn_re = np.real(xn)\nxn_im = np.imag(xn)\n\nif np.sum(xn_im)==0:\n    xn= xn_re\n\n# SALIDA\nprint('x&#x5B;n]:')\nprint(xn)\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=\"#dft\">DFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmodft\">Algoritmo DFT<\/a><\/p>\n\n\n\n<p><a href=\"#idft\">IDFT<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoidft\">Algoritmo IDFT<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>DFT Algoritmo DFT IDFT Algoritmo IDFT 1. La Transformada de Fourier&nbsp;Discreta&nbsp;- DFT Referencia: McClellan 8.1 p302 La ecuaci\u00f3n para la transformada de Fourier&nbsp;discreta o DFT, discreta en tiempo y discreta en frecuencia k = 0,1, ... N-1 que toma N muestras en el dominio del tiempo y la transforma en N valores de X[k] en [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-dsp-unidades","format":"standard","meta":{"footnotes":""},"categories":[193],"tags":[],"class_list":["post-343","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\/343","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=343"}],"version-history":[{"count":2,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/343\/revisions"}],"predecessor-version":[{"id":20626,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/343\/revisions\/20626"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}