{"id":308,"date":"2024-12-27T10:25:45","date_gmt":"2024-12-27T15:25:45","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1034\/?p=308"},"modified":"2026-04-06T10:30:28","modified_gmt":"2026-04-06T15:30:28","slug":"fir-respuesta-de-frecuencia","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-unidades\/fir-respuesta-de-frecuencia\/","title":{"rendered":"4.3 FIR - Respuesta de frecuencia y superposici\u00f3n"},"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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>Para sistemas lineales invariantes en el tiempo, LTI, las entradas senoidales complejas tienen como respuesta otra se\u00f1al senoidal de la misma frecuencia pero con diferente magnitud y fase. TODOS los sistemas LTI tienen la propiedad \"entrada-sinusoide\" genera una \"salida-sinusoide\".<\/p>\n\n\n\n<p>Para un filtro <strong>FIR LTI<\/strong>, ante una <strong>entrada discreta<\/strong> en tiempo tipo se\u00f1al <strong>exponencial compleja<\/strong>, la <strong>salida<\/strong> tambi\u00e9n es una se\u00f1al <strong>discreta<\/strong> en tiempo, tipo <strong>exponencial compleja<\/strong> con diferente amplitud, de la misma frecuencia.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |H(e^{j \\omega})| = \\sum _{k=0}^{M} b_k e^{-j\\omega k} = \\sum _{k=0}^{M} h[k] e^{-j\\omega k}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y[n] = |H(e^{j \\omega})| x[n] \\text{ ; para } x[n] = A e^{j\\varphi}e^{-j\\omega n} <\/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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/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=\"ejerciciobk\">1. Ejercicio bk<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan Ejemplo 6.1 y 6.2 p217<\/p>\n\n\n\n<p>Considere un sistema LTI con coeficientes de la ecuaci\u00f3n de diferencias b<sub>k<\/sub> = [1,2,1]. Al convertirlo en la funci\u00f3n <strong>respuesta de frecuencias<\/strong> del sistema H(\u03c9) se tiene:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> H(e^{j \\omega}) = 1 + 2 e^{-j\\omega} + e^{-j \\omega 2}<\/span>\n\n\n\n<p>como b<sub>k<\/sub> es sim\u00e9trico, se obtiene como factor com\u00fan e<sup>(-j\u03c9)<\/sup> para simplificar la expresi\u00f3 con un coseno.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = e^{-j \\omega} \\Big( e^{j \\omega} + 2 + e^{-j \\omega} \\Big)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = e^{-j \\omega} \\Big( 2 +2 \\cos(\\omega) \\Big)<\/span>\n\n\n\n<p>donde la magnitud es:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |H(e^{j \\omega})|= \\Big( 2 +2 \\cos(\\omega) \\Big) <\/span>\n\n\n\n<p>y la fase:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\angle H(e^{j \\omega})= e^{-j \\omega} <\/span>\n\n\n\n<p>Al disponer de una se\u00f1al de entrada con una frecuencia de \u03c9=\u03c0\/3:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[n] = 2 e^{j \\pi \/4} e^{j(\\pi \/3)n} <\/span>\n\n\n\n<p>se eval\u00faa la magnitud&nbsp; de |H|:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |H(e^{j \\pi \/3})|= \\Big( 2 +2 \\cos(\\pi \/3) \\Big) = 3 <\/span>\n\n\n\n<p>y la fase de \u2220H:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\angle H(e^{j \\pi \/3 })= e^{-j \\pi\/3} <\/span>\n\n\n\n<p>siendo y[n] = (H)(x[n])<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y[n] = 3 e^{-j\\pi \/3}\\Big( 2 e^{j \\pi \/4} e^{j(\\pi \/3)n} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = (3)(2) e^{j \\pi \/4-j\\pi \/3} e^{j\\pi \/3 n} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = 6 e^{-j \\pi \/12} e^{j\\pi \/3 n} = 6 e^{j \\pi \/4} e^{j\\pi(n-1) \/3} <\/span>\n\n\n\n<p>la salida del sistema es igual a la entrada, multiplicada por 3 y un cambio de fase a -\u03c0\/3 que es un retraso de una muestra. Recordando que esto <strong>aplica cuando bk es sim\u00e9trico y la entrada es una exponencial compleja<\/strong>.<\/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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/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=\"algoritmobk\">2. Algoritmo bk en Python<\/h2>\n\n\n\n<p>Primero se analiza la simetr\u00eda del vector <strong>bk<\/strong>, invirtiendo el vector y restando de su forma original, si todos los resulados son ceros, el vector <strong>es sim\u00e9trico<\/strong>.<\/p>\n\n\n\n<p>Acorde con la simetr\u00eda de <code>bk<\/code> se procede a la creaci\u00f3n de <code>H<\/code> y luego <code>yn<\/code> a partir de xn.<\/p>\n\n\n\n<p>Para <strong>xn<\/strong> en el algoritmo, se requiere usar la <code>dsp.euler_args_one_term()<\/code> para dominio del tiempo cont\u00ednuo <code>t<\/code> de la Unidad 1.4 Espectro \u2013 Suma de sinusoides y la f\u00f3rmula de Euler. <\/p>\n\n\n\n<p>La funci\u00f3n en <code>telg1034.py<\/code> ampl\u00eda el uso al dominio de tiempo discreto <code>n<\/code> al sustituir la variable independiente con las siguientes instrucciones y se obtiene el resultado esperado.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>    <span style=\"color: #ff0000\"># revisa si unasenal es discreta con n, Unidad 4 Filtros Digitales<\/span>\n    esdiscreta = <span style=\"color: #d35400\">False<\/span>\n    varindepend = X.free_symbols\n    <span style=\"color: #d35400\">if<\/span> (n <span style=\"color: #d35400\">in<\/span> varindepend) <span style=\"color: #d35400\">and<\/span> <span style=\"color: #d35400\">not<\/span>(t <span style=\"color: #d35400\">in<\/span> varindepend):\n        X = X.subs(n,t)\n        esdiscreta = <span style=\"color: #d35400\">True<\/span>\n    <span style=\"color: #ff0000\"># analiza unasenal con t<\/span>\n<\/code><\/pre>\n\n\n\n<p>El resultado con el algoritmo es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bk_simetrico: True\nH_magn  : exp(I*w) + 2 + exp(-I*w)\nH_magcos: 2*cos(w) + 2\nH_fase  : -w\n  H : (2*cos(w) + 2)*exp(-I*w)\nx&#091;n]: 2*exp(I*pi\/4)*exp(I*pi*n\/3)\nwk  : pi\/3\ny&#091;n]: 6*exp(I*pi\/4)*exp(I*pi*(n - 1)\/3)\n&gt;&gt;&gt;<\/code><\/pre>\n\n\n\n<p>Instrucciones en Python<\/p>\n\n\n\n<p>Algoritmos y funciones: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-senales\/dsp-algoritmos-telg1034-py\/\" data-type=\"page\" data-id=\"18266\">telg1034.py<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejemplo 6.1 p217 FIR - Respuesta de frecuencias\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\nimport telg1034 as dsp\n\n# variables continuas\nfrom telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes\n# variables discretas\nfrom telg1034 import n\n\n# INGRESO\nbk = &#x5B;1,2,1]\n#bk = &#x5B;1,-2,4,-2,1]\n\nxn = 2*sym.exp(I*pi\/4)*sym.exp(I*(pi\/3)*n)\n\n# PROCEDIMIENTO\nM = len(bk)-1\n# revisa simetria bk\nbk = np.array(bk)\nH_factor = 0\nsumainvertida = np.sum(np.abs(bk-np.flip(bk)))\nbk_simetrico = False\nif sumainvertida == 0 and M&gt;1:\n    bk_simetrico = True\n    H_factor = sym.sympify(M)\/2\n\n# respuesta de frecuencia\nH = sym.S.Zero\nfor k in range(0,M+1,1):\n    H = H + bk&#x5B;k]*sym.exp(-I*w*(k))\n\n# H cuando bk es simetrico.\nH_magn = H ; H_magcos = 0 ; H_fase = 0\nif bk_simetrico:\n    H_magn = sym.expand(H\/sym.exp(-I*w*H_factor))\n    H_magcos = H_magn.rewrite(sym.cos)\n    H_fase = -w*H_factor\n    H = H_magcos*sym.exp(I*H_fase)\n\n# se\u00f1al de entrada x&#x5B;n]\nxn_arg = dsp.euler_args_one_term(xn)\nwk = xn_arg&#x5B;'freq_rad']\n\n# se\u00f1al de salida y&#x5B;n]\nif bk_simetrico:\n    n_veces = H_fase\/w\n    Ampl = H_magcos.subs(w,wk)*xn_arg&#x5B;'amplitud'] \n    yn = Ampl*sym.exp(I*xn_arg&#x5B;'fase'])*sym.exp(I*wk*(n+n_veces))\nelse:\n    yn = xn*H.subs(w,wk)\n    \n# SALIDA\nprint('bk_simetrico:',bk_simetrico)\nprint('H_magn  :',H_magn)\nprint('H_magcos:',H_magcos)\nprint('H_fase  :',H_fase)\nprint('  H :',H)\nprint('x&#x5B;n]:',xn)\nprint('wk  :',wk)\nprint('y&#x5B;n]:',yn)\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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/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=\"ejercicioxn\">3. Ejercicio x[n] de varias sinusoides<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan Ejemplo 6.4 p220<\/p>\n\n\n\n<p>Para el filtro FIR con coeficientes b[k] = [1,2,1] , encuentre la se\u00f1al de salida cuando la se\u00f1al de entrada tiene varios componentes.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x[n] = 4 + 3 \\cos \\left( \\frac{\\pi}{3} n - \\frac{\\pi}{2} \\right) + 3 \\cos \\left(\\frac{7\\pi}{8}n \\right) <\/span>\n\n\n\n<p>El ejercicio se desarrolla t\u00e9rmino a t\u00e9rmino por tener diferentes frecuencias. Se aplica el principio de superposici\u00f3n.<\/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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/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=\"algoritmoxn\">4. Algoritmo X[n] en Python<\/h2>\n\n\n\n<p>Para el ejercicio, <code>xn<\/code> tiene una se\u00f1al senoidal mas general y de varios componentes. Por lo que el procedimiento del algoritmo anterior se ampl\u00eda para cada uno de los componentes.<\/p>\n\n\n\n<p>La se\u00f1al de entrada se debe revisar sus componentes sumas, procediendo de forma semejante a lo realizado en la Unidad 1.2 Se\u00f1al \u2013 Periodo y Desplazamiento en tiempo. La funci\u00f3n <code>dsp.x_list_term_Add()<\/code> para separar los t\u00e9rminos suma entrega su resultado tanto para la variable <code>t<\/code> \u00f3 <code>n<\/code>.<\/p>\n\n\n\n<p>Sin embargo la obtenci\u00f3n de los par\u00e1metros de cada t\u00e9rmino suma de xn con la funci\u00f3n <code>dsp.cos_args_one_term()<\/code>,&nbsp; debe ampliar la funci\u00f3n de <code>t<\/code> a <code>n<\/code>, semejante al ejercicio que precede con las siguientes instrucciones.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>    <span style=\"color: #ff0000\"># revisa si unasenal es discreta con n, Unidad 4. Filtros digitales<\/span>\n    esdiscreta = <span style=\"color: #d35400\">False<\/span>\n    varindepend = x.free_symbols\n    <span style=\"color: #d35400\">if<\/span> (n <span style=\"color: #d35400\">in<\/span> varindepend) <span style=\"color: #d35400\">and<\/span> <span style=\"color: #d35400\">not<\/span>(t <span style=\"color: #d35400\">in<\/span> varindepend):\n        x = x.subs(n,t)\n        esdiscreta = <span style=\"color: #d35400\">True<\/span>\n    <span style=\"color: #ff0000\"># analiza unasenal con t<\/span><\/code><\/pre>\n\n\n\n<p>Aplicando H en <strong>cada t\u00e9rmino<\/strong> xn acorde a la <strong>simetr\u00eda<\/strong> de <strong>bk<\/strong>, se tiene el siguiente resultado con el algoritmo es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>H_magn  : exp(I*w) + 2 + exp(-I*w)\nH_magcos: 2*cos(w) + 2\nH_fase  : -w\n  H : (2*cos(w) + 2)*exp(-I*w)\nx&#091;n]: 3*cos(7*pi*n\/8) + 3*cos(pi*n\/3 - pi\/2) + 4\ny&#091;n]: 0.456722804932279*cos(pi*(7*n\/8 - 7\/8)) + 9*cos(pi*(n - 1)\/3 - pi\/2) + 16\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# ejemplo 6.4 p220 FIR - Respuesta de frecuencias a varias senoidales\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\nimport telg1034 as dsp\n\n# variables continuas\nfrom telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes\n# variables discretas\nfrom telg1034 import n\n\n# INGRESO\nbk = &#x5B;1,2,1]\n#bk = &#x5B;1,-2,4,-2,1]\n\n#xn = 3*sym.cos(n*pi\/3 - pi\/2)\nxn = 4 + 3*sym.cos(n*pi\/3 - pi\/2) + 3*sym.cos(7*pi*n\/8)\n\n# PROCEDIMIENTO\nM = len(bk)-1\n# revisa simetria bk\nbk = np.array(bk)\nH_factor = 0\nsumainvertida = np.sum(np.abs(bk-np.flip(bk)))\nbk_simetrico = False\nif sumainvertida == 0 and M&gt;1:\n    bk_simetrico = True\n    H_factor = sym.sympify(M)\/2\n\n# respuesta de frecuencia\nH = sym.S.Zero\nfor k in range(0,M+1,1):\n    H = H + bk&#x5B;k]*sym.exp(-I*w*(k))\n\n# H cuando bk es simetrico.\nH_magn = H ; H_magcos = 0 ; H_fase = 0\nif bk_simetrico:\n    H_magn = sym.expand(H\/sym.exp(-I*w*H_factor))\n    H_magcos = H_magn.rewrite(sym.cos)\n    H_fase = -w*H_factor\n    H = H_magcos*sym.exp(I*H_fase)\n\n# se\u00f1al de entrada x&#x5B;n]\nx_senal = dsp.x_list_term_Add(xn) # t\u00e9rminos suma\nx_conteo = len(x_senal)\nyn = sym.S.Zero\nfor i in range(0,x_conteo,1):\n    unasenal = x_senal&#x5B;i]\n    cond1 = unasenal.has(sym.cos) or unasenal.has(sym.sin)\n    cond2 = not(unasenal.has(n))\n    if cond1 or cond2:\n        xn_arg = dsp.cos_args_one_term(unasenal)\n        Ak = xn_arg&#x5B;'amplitud']\n        wk = xn_arg&#x5B;'freq_rad']\n        fk = xn_arg&#x5B;'fase']\n        if bk_simetrico:\n            H_magnk = dsp._float_is_int(H_magcos.subs(w,wk).evalf())\n            H_fasek = H_fase.subs(w,wk)\n            if wk!=sym.S.Zero:\n                n_veces = H_fasek\/wk\n                yk = H_magnk*Ak*sym.cos(wk*(n+n_veces) + fk)\n            else:\n                yk = H_magnk*Ak\n        else:\n            yk = H.subs(w,wk)*unasenal\n    else: # no es senoidal o constante\n        yk = H*unasenal\n        print(' ____revisar t\u00e9rmino:',unasenal.subs(t,n))\n    # principio de superposici\u00f3n\n    yn = yn +yk\n\n# SALIDA\nprint('H_magn  :',H_magn)\nprint('H_magcos:',H_magcos)\nprint('H_fase  :',H_fase)\nprint('  H :',H)\nprint('x&#x5B;n]:',xn)\nprint('y&#x5B;n]:',yn)\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=\"#ejerciciobk\">ejercicio bk<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmobk\">algoritmo_bk<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioxn\">ejercicio_xn<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmoxn\">algoritmo_xn<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>ejercicio bk algoritmo_bk ejercicio_xn algoritmo_xn Para sistemas lineales invariantes en el tiempo, LTI, las entradas senoidales complejas tienen como respuesta otra se\u00f1al senoidal de la misma frecuencia pero con diferente magnitud y fase. TODOS los sistemas LTI tienen la propiedad \"entrada-sinusoide\" genera una \"salida-sinusoide\". Para un filtro FIR LTI, ante una entrada discreta en tiempo [&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-308","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\/308","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=308"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/308\/revisions"}],"predecessor-version":[{"id":24095,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/308\/revisions\/24095"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}