{"id":18269,"date":"2024-10-23T20:55:40","date_gmt":"2024-10-24T01:55:40","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1034\/?p=470"},"modified":"2026-03-27T21:22:56","modified_gmt":"2026-03-28T02:22:56","slug":"aliasing-con-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-unidades\/aliasing-con-python\/","title":{"rendered":"2.2 Aliasing 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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/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=\"alias\">1. Concepto de alias<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Downey 2.1 p21<\/p>\n\n\n\n<p>Una definici\u00f3n simplificada de \"alias\" es de dos nombres para una persona: \"Pancho\" y \"Francisco\".&nbsp; De forma semejante, Dos se\u00f1ales diferentes en su forma discreta pueden tener la misma secuencia de valores.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2025\/04\/muestreoAlias_cos02_animate.gif\" alt=\"muestreo alias cos animate\" class=\"wp-image-16181\" \/><\/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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejemplo\">2. Ejemplo<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan 4.1.2 p127<\/p>\n\n\n\n<p>Considere las siguientes se\u00f1ales y compare sus gr\u00e1ficas.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1[n] = \\cos(0.4\\pi n) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2[n] = \\cos(2.4\\pi n) = cos(0.4\\pi n + 2\\pi n ) = cos(0.4\\pi n) <\/span>\n\n\n\n<p>dado que 2\u03c0n es un n\u00famero entero de periodos de la se\u00f1al coseno.<\/p>\n\n\n\n<p>Con Python se realiza las gr\u00e1ficas obteniendo las muestras usando fs para observar los puntos sobre x1(t) de \u03c9=0.4\u03c0. Para suavizar la curva x(t) se usa fs_veces como sobre-muestreo de la se\u00f1al y crear la linea azul.<br>Se compara con x2(t) realizando el mismo proceso, que al unificar las gr\u00e1ficas se observa que los puntos&nbsp; de muestra son v\u00e1lidos para ambas se\u00f1ales x1(t), x2(t).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>muestreo: 12\n tama\u00f1o ki: 12\n tama\u00f1o ti: 133\nfs: 10  ; dt: 0.1  ; fs_veces: 12\ncos((0.4*pi)*n)\ncos((2.4*pi)*n)<\/code><\/pre>\n\n\n\n<p>La gr\u00e1fica permite mostrar que las muestras son iguales cuando se repite n veces el valor de tiempo de muestreo dt=1\/fs para ambas se\u00f1ales.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias02_coseno.png\" alt=\"muestreo Alias 02 coseno\" class=\"wp-image-20594\" \/><\/figure>\n\n\n\n<p>Si la frecuencia de x2[n] fuese solamente \u03c0, la gr\u00e1fica muestra la diferencia de valores para x1[n] y x2[n]<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1[n] = \\cos(0.4\\pi n) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2[n] = \\cos(\\pi n) = cos(0.4\\pi n + 0.6\\pi n ) = cos(\\pi n) <\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>muestreo: 12\n tama\u00f1o ki: 12\n tama\u00f1o ti: 133\nfs: 10  ; dt: 0.1  ; fs_veces: 12\ncos((0.4*pi)*n)\ncos((1.0*pi)*n)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias03_coseno.png\" alt=\"muestreo Alias coseno 03\" class=\"wp-image-513\" \/><\/figure>\n\n\n\n<p>En la gr\u00e1fica se destaca la diferencia de valores para cada se\u00f1al luego del primer dt.<\/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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/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\">3. Algoritmo en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejercicio 4.2 p128 Muestreo de se\u00f1ales sinusoidales\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\n\n# variables continuas\nt = sym.Symbol('t', real=True)\n# variables discretas\nn = sym.Symbol('n', integer=True, positive=True)\n\npi = sym.pi\nDosPi = sym.UnevaluatedExpr(2*sym.pi)\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n# INGRESO\n# usar sym.UnevaluatedExpr() para no simplificar\n#   automaticamente freq angular w&gt;(2*pi) en Sympy\nwith sym.evaluate(False): # no simplificar freq angular w &gt;2*pi\n    w1 = 0.4\n    w2 = 0.4+2\n    x1 = sym.cos(w1*pi*n) \n    x2 = sym.cos(w2*pi*n)\n\nxn = &#x5B;x1,x2]\nxn_etiqueta  = &#x5B;'x1&#x5B;n]','x2&#x5B;n]']\nxt_etiqueta = &#x5B;'x1(t)]','x2(t)']\ntitulo = 'x1&#x5B;n] = '+str(x1)+'  ||  x2&#x5B;n] = '+str(x2)\n\nnT = 2.25 # periodos a graficar\nfs = 10   # muestreo discreto\nfs_veces = 12   # suavizar x(t), sobremuestreo\n\n# PROCEDIMIENTO\nmuestras_n = int(nT*(2\/w1))+1\nx_conteo = len(xn)\n# muestreo x&#x5B;n]\ndt = 1\/fs # tama\u00f1o de paso con fs\nki = np.arange(0,muestras_n,1,dtype=int)\n\n# muestreo x(t)\ndtc = dt\/fs_veces # suavizar x(t), sobremuestreo\nti = np.arange(0,(muestras_n-1)*dt+dtc, dtc)\nxn_muestras = {}\n\nfor i in range(0,x_conteo,1):\n    unasenal = xn&#x5B;i]\n    xtk = unasenal.subs(n,t*fs)\n    xt = sym.lambdify(t,xtk, modules=equivalentes)\n    \n    xki = xt(ki*dt) \n    xti = xt(ti)\n    xn_muestras&#x5B;i] = {'ki':ki,'xki':xki,\n                      'ti':ti,'xti':xti,}\n\n# SALIDA\nprint('muestreo:',muestras_n)\nprint(' tama\u00f1o ki:',len(ki))\nprint(' tama\u00f1o ti:',len(ti))\nprint('fs:',fs,' ; dt:',dt, ' ; fs_veces:',fs_veces)\nfor unasenal in xn:\n    print(unasenal)\n\n# GRAFICA\ndef _graf_lineacolor_i(i):\n    ''' funci\u00f3n auxiliar, asigna el color en la paleta \n    de matplotlib acorde al n\u00famero i entre 0 y 9\n    '''\n    if (i&lt;=9): # color de la l\u00ednea\n        lineacolor = 'C'+str(i)\n    else:\n        numcolor = i%10\n        lineacolor = 'C'+str(numcolor)\n    return(lineacolor)\n\nfor i in range(0,len(xn_muestras),1):\n    color_i = _graf_lineacolor_i(i)\n    estilo_i = ':' # estilo de la l\u00ednea\n    if i%2 == 0:  #es impar\n        estilo_i = '--'\n    # muestreo x&#x5B;n]\n    ki = xn_muestras&#x5B;i]&#x5B;'ki']\n    xki = xn_muestras&#x5B;i]&#x5B;'xki']\n    puntofmt = color_i + estilo_i\n    plt.stem(ki*dt, xki, linefmt = puntofmt,\n             label=xn_etiqueta&#x5B;i])\n    # muestreo x(t)\n    ti = xn_muestras&#x5B;i]&#x5B;'ti']\n    xti = xn_muestras&#x5B;i]&#x5B;'xti']\n    plt.plot(ti,xti, '-', color = color_i,\n             label=xt_etiqueta&#x5B;i])\n#plt.axhline(0,color='black')\nplt.xlabel('t')\nplt.ylabel('amplitud')\nplt.title(titulo)\n\nplt.tight_layout()\nplt.legend()\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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/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=\"ejercicioalias\">4. Ejercicios con alias<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan ejercicio 42 p128<\/p>\n\n\n\n<p>Muestre que x2[n] es un alias de x1[n] y encuentre dos frecuencias que sean alias de 0.4\u03c0 rad.<\/p>\n\n\n\n<p>x1[n] = 7 cos(0.4\u03c0 n - 0.2\u03c0)<\/p>\n\n\n\n<p>x2[n] = 7 cos(8.4\u03c0 n - 0.2\u03c0) = cos(0.4\u03c0 n + 4(2\u03c0 n) - 0.2\u03c0 )&nbsp; = cos(0.4\u03c0 n- 0.2\u03c0)<\/p>\n\n\n\n<p>Usando el algoritmo del numeral anterior se realiza la gr\u00e1fica.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>muestreo: 7\n tama\u00f1o ki: 7\n tama\u00f1o ti: 272\nfs: 10  ; dt: 0.1  ; fs_veces: 45\ncos((0.4*pi)*n - 0.2*pi)\ncos((8.4*pi)*n - 0.2*pi)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias04_coseno.png\" alt=\"muestreo Alias 04 coseno\" class=\"wp-image-20595\" \/><\/figure>\n\n\n\n<p>Usando los par\u00e1metros de entrada:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"color: #ff0000\"># INGRESO<\/span>\n<span style=\"color: #ff0000\"># usar sym.UnevaluatedExpr() para no simplificar<\/span>\n<span style=\"color: #ff0000\">#   automaticamente freq angular w&gt;(2*pi) en Sympy<\/span>\n<span style=\"color: #d35400\">with<\/span> sym.evaluate(<span style=\"color: #d35400\">False<\/span>): <span style=\"color: #ff0000\"># no simplificar freq angular w &gt;2*pi<\/span>\n    w1 = 0.4\n    w2 = 0.4+8\n    x1 = sym.cos(w1*pi*n-0.2*pi) \n    x2 = sym.cos(w2*pi*n-0.2*pi)\n\nxn = &#091;x1,x2]\nxn_etiqueta  = &#091;<span style=\"color: #008000\">'x1&#091;n]'<\/span>,<span style=\"color: #008000\">'x2&#091;n]'<\/span>]\nxt_etiqueta = &#091;<span style=\"color: #008000\">'x1(t)]'<\/span>,<span style=\"color: #008000\">'x2(t)'<\/span>]\ntitulo = <span style=\"color: #008000\">'x1&#091;n] = '<\/span>+<span style=\"color: #ff00ff\">str<\/span>(x1)+<span style=\"color: #008000\">'  ||  x2&#091;n] = '<\/span>+<span style=\"color: #ff00ff\">str<\/span>(x2)\n\nnT = 1.25 <span style=\"color: #ff0000\"># periodos a graficar<\/span>\nfs = 10   <span style=\"color: #ff0000\"># muestreo discreto<\/span>\nfs_veces = 45   <span style=\"color: #ff0000\"># suavizar x(t), sobremuestreo<\/span><\/code><\/pre>\n\n\n\n<p>Para los alias se usa la frecuencia normalizada en radianes: \u03c9<sub>rad<\/sub> , considerando que si se suma varias veces 2\u03c0 se obtiene un alias.<\/p>\n\n\n\n<p>\u03c9<sub>alias<\/sub>= 0.4\u03c0 + 2\u03c0 k&nbsp;&nbsp; ; donde k = 0,1,2,3...<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Alias Principal<\/h2>\n\n\n\n<p>El alias principal se define como la frecuencia&nbsp;\u03c9 \u00fanica en el intervalo entre<br>-\u03c0 &lt;\u03c9<sub>alias<\/sub> &lt; \u03c0 , que para el ejercicio es 0.4\u03c0 por lo que se propone usar como alias:<\/p>\n\n\n\n<p>x0[n] = 7 cos((0.4\u03c0 + <strong>0<\/strong>(2\u03c0) )n - 0.2\u03c0)<\/p>\n\n\n\n<p>x1[n] = 7 cos((0.4\u03c0 + <strong>1<\/strong>(2\u03c0) )n - 0.2\u03c0)<\/p>\n\n\n\n<p>x2[n] = 7 cos((0.4\u03c0 + <strong>2<\/strong>(2\u03c0) )n - 0.2\u03c0)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias05_coseno.png\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias05_coseno.png\" alt=\"muestreo Alias coseno 05\" class=\"wp-image-499\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>muestreo: 7\n tama\u00f1o ki: 7\n tama\u00f1o ti: 272\nfs: 10  ; dt: 0.1  ; fs_veces: 45\ncos((0.4*pi)*n - 0.2*pi)\ncos((2.4*pi)*n - 0.2*pi)\ncos((4.4*pi)*n - 0.2*pi)<\/code><\/pre>\n\n\n\n<p>El bloque de ingreso para el algoritmo y el n\u00famero de muestras para el periodo de la se\u00f1al de menor frecuencia angular es referenciado a \u03c90.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# INGRESO\n# usar sym.UnevaluatedExpr() para no simplificar\n#   automaticamente freq angular w&gt;(2*pi) en Sympy\nwith sym.evaluate(False): # no simplificar freq angular w &gt;2*pi\n    w0 = 0.4\n    w1 = 0.4+2\n    w2 = 0.4+4\n    x0 = sym.cos(w0*pi*n - 0.2*pi) \n    x1 = sym.cos(w1*pi*n - 0.2*pi)\n    x2 = sym.cos(w2*pi*n - 0.2*pi)\n\nxn = &#x5B;x0,x1,x2]\nxn_etiqueta  = &#x5B;'x0&#x5B;n]','x1&#x5B;n]','x2&#x5B;n]']\nxt_etiqueta = &#x5B;'x0(t)','x1(t)','x2(t)']\ntitulo = 'xk&#x5B;n]= sym.cos(0.4*pi*n + k*2*pi*n- 0.2*pi)'\n\nnT = 1.25 # periodos a graficar\nfs = 10   # muestreo discreto\nfs_veces = 45   # suavizar x(t), sobremuestreo\n\n# PROCEDIMIENTO\nmuestras_n = int(nT*(2\/w0))+1\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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/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=\"graficointeractivo\">5. Gr\u00e1fico interactivo<\/h2>\n\n\n\n<p>Se a\u00f1ade en la f\u00f3rmula de la se\u00f1al&nbsp;<code>x2[n]<\/code> el valor de <strong>k<\/strong> como control para el gr\u00e1fico:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1[n] = \\cos(0.4\\pi n) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2[n] = \\cos(2.4\\pi n) = cos(0.4\\pi n +k( 2\\pi n )) = cos(0.4\\pi n) <\/span>\n\n\n\n<p>El gr\u00e1fico interactivo resultante se actualiza x2[n] y el <em>t\u00edtulo<\/em>, tambi\u00e9n se muestra en los resultados si hay el \"alias\".<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias06_coseno.png\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/muestreoAlias06_coseno.png\" alt=\"\" class=\"wp-image-541\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>muestras: 12\n tama\u00f1o ki: 12\n tama\u00f1o ti: 606\nfs: 10  ; dt: 0.1  ; fs_veces: 55\ncos((0.4*pi)*n)\ncos((2.4*pi)*n)\nk: 1 x2&#091;n] NO es alias de x1&#091;n]\nk: 2 x2&#091;n] es alias de x1&#091;n]\nk: 3 x2&#091;n] NO es alias de x1&#091;n]\nk: 4 x2&#091;n] es alias de x1&#091;n]\nk: 5 x2&#091;n] NO es alias de x1&#091;n]\nk: 6 x2&#091;n] es alias de x1&#091;n]\nk: 7 x2&#091;n] NO es alias de x1&#091;n]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Algoritmo interactivo en Python<\/h3>\n\n\n\n<p>Se actualiza la parte gr\u00e1fica a la forma de objetos <code>fig, graf<\/code> para crear los objetos interactivos de barra de desplazamiento (slider) <strong>k<\/strong> , bot\u00f3n <strong>Reset<\/strong> y cuadro de texto para la observaci\u00f3n si es o no alias.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejercicio 4.2 p128 Muestreo de se\u00f1ales sinusoidales\n# grafico interactivo con k\n# telg1034 DSP fiec-espol edelros@espol.edu.ec\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\n\n# variables continuas\nt = sym.Symbol('t', real=True)\n# variables discretas\nn = sym.Symbol('n', integer=True, positive=True)\n\npi = sym.pi\nDosPi = sym.UnevaluatedExpr(2*sym.pi)\nequivalentes = &#x5B;{'DiracDelta': lambda x: 1*(x==0)},\n                {'Heaviside': lambda x,y: np.heaviside(x, 1)},\n                'numpy',]\n# INGRESO\n# usar sym.UnevaluatedExpr() para no simplificar\n#   automaticamente freq angular w&gt;(2*pi) en Sympy\nwith sym.evaluate(False): # no simplificar freq angular w &gt;2*pi\n    w1 = 0.4\n    k = 2 \n    w2 = 0.4+k\n    x1 = sym.cos(w1*pi*n) \n    x2 = sym.cos(w2*pi*n)\n\nxn = &#x5B;x1,x2]\nxn_etiqueta = &#x5B;'x1&#x5B;n]','x2&#x5B;n]']\nxt_etiqueta = &#x5B;'x1(t)]','x2(t)']\ntitulo = 'x1&#x5B;n] = '+str(x1)+'  ||  x2&#x5B;n] = '+str(x2)\n\nnT = 2.25 # periodos a graficar\nfs = 10   # muestreo discreto\nfs_veces = 55   # suavizar x(t), sobremuestreo\n\n# PROCEDIMIENTO\nmuestras_n = int(nT*(2\/w1))+1\nx_conteo = len(xn)\n# muestreo x&#x5B;n]\ndt = 1\/fs # tama\u00f1o de paso con fs\nki = np.arange(0,muestras_n,1,dtype=int)\n\n# muestreo x(t)\ndtc = dt\/fs_veces # para x(t)\nti = np.arange(0,(muestras_n-1)*dt+dtc, dtc)\nxn_muestras = {}\n\nfor i in range(0,x_conteo,1):\n    unasenal = xn&#x5B;i]\n    xtk = unasenal.subs(n,t*fs)\n    xt = sym.lambdify(t,xtk, modules=equivalentes)\n    \n    xki = xt(ki*dt) \n    xti = xt(ti)\n    xn_muestras&#x5B;i] = {'ki':ki,'xki':xki,\n                     'ti':ti,'xti':xti,}\nif k%2==0:\n    observa = 'x2&#x5B;n] es alias de x1&#x5B;n]'\nelse:\n    observa = 'x2&#x5B;n] NO es alias de x1&#x5B;n]'\n\n# SALIDA\nprint('muestras:',muestras_n)\nprint(' tama\u00f1o ki:',len(ki))\nprint(' tama\u00f1o ti:',len(ti))\nprint('fs:',fs,' ; dt:',dt, ' ; fs_veces:',fs_veces)\nfor unasenal in xn:\n    print(unasenal)\n\n# GRAFICA interactiva\nfrom matplotlib.widgets import Slider, Button, TextBox\ndef _graf_lineacolor_i(i):\n    ''' funci\u00f3n auxiliar, asigna el color en la paleta\n    de matplotlib acorde al n\u00famero i entre 0 y 9\n    '''\n    if (i&lt;=9): # color de la l\u00ednea\n        lineacolor = 'C'+str(i)\n    else:\n        numcolor = i%10\n        lineacolor = 'C'+str(numcolor)\n    return(lineacolor)\n\nfig, grf = plt.subplots()\npuntos = &#x5B;] ; lineas = &#x5B;]\nfor i in range(0,len(xn_muestras),1):\n    color_i = _graf_lineacolor_i(i)\n    estilo_i = ':' # estilo de la l\u00ednea\n    if i%2 == 0:  #es impar\n        estilo_i = '--'\n    # muestreo x&#x5B;n]\n    ki = xn_muestras&#x5B;i]&#x5B;'ki']\n    xki = xn_muestras&#x5B;i]&#x5B;'xki']\n    puntofmt = color_i + estilo_i\n    puntoi = grf.stem(ki*dt, xki, linefmt = puntofmt,\n                      label=xn_etiqueta&#x5B;i])\n    # muestreo x(t)\n    ti = xn_muestras&#x5B;i]&#x5B;'ti']\n    xti = xn_muestras&#x5B;i]&#x5B;'xti']\n    lineai, = grf.plot(ti,xti, '-', color = color_i,\n             label=xt_etiqueta&#x5B;i])\n    puntos.append(puntoi)\n    lineas.append(lineai)\n#plt.axhline(0,color='black')\ngrf.set_xlabel('t')\ngrf.set_ylabel('amplitud')\ngrf.set_title(titulo)\n\nplt.tight_layout()\nplt.legend()\n#plt.show()\n\n# grafica elementos interactivos\nplt.subplots_adjust(bottom=0.25) # espacio widgets\n\n# slider: barras para valores \n# amplitud slider &#x5B;x,y,ancho,alto]\nk_donde = plt.axes(&#x5B;0.2, 0.10, 0.65, 0.03])\nk_slider = Slider(k_donde, 'k',\n                   0, 8,\n                   valinit=k,valstep= 1,\n                   orientation='horizontal')\ntxt_donde = plt.axes(&#x5B;0.2, 0.02, 0.4, 0.045])\ntxt_observa = TextBox(txt_donde, &quot;Observaci\u00f3n: &quot;,\n                   initial=observa)\n#text_box.on_submit(submit)\n\ndef stem_update(puntos,xdata,ydata,grafico):\n    '''actualiza puntos\/tallos de plt.stem\n    con los datos de cada eje en un gr\u00e1fico\n    '''\n    puntos.markerline.set_xdata(xdata)\n    puntos.markerline.set_ydata(ydata)\n    segmentos=&#x5B;] # tallos o troncos\n    for j in range(0,len(xdata),1):\n        segmentos.append(&#x5B;&#x5B;xdata&#x5B;j],0],\n                          &#x5B;xdata&#x5B;j],ydata&#x5B;j]]])\n    puntos.stemlines.set_segments(segmentos)\n    puntos.baseline.set_xdata(&#x5B;xdata&#x5B;0],xdata&#x5B;-1]])\n    grafico.relim()\n    grafico.autoscale_view()\n    return(puntos,grafico)\n\ndef grafico_actualiza(val):\n    \n    # actualiza valores x,y\n    k = k_slider.val\n    with sym.evaluate(False):\n        w2 = 0.4+k \n        x2 = sym.cos(w2*pi*n)\n    xn&#x5B;1] = x2\n    titulo = 'x1&#x5B;n] = '+str(x1)+'  ||  x2&#x5B;n] = '+str(x2)\n    \n    i = 1\n    unasenal = xn&#x5B;i]\n    xtk = unasenal.subs(n,t*fs)\n    xt = sym.lambdify(t,xtk, modules=equivalentes)\n    \n    xki = xt(ki*dt) \n    xti = xt(ti)\n    xn_muestras&#x5B;i] = {'ki':ki,'xki':xki,\n                     'ti':ti,'xti':xti,}\n\n    # actualiza grafico\n    stem_update(puntos&#x5B;1],ki*dt,xki,grf)\n    lineas&#x5B;i].set_ydata(xti)\n    grf.set_title(titulo)\n    fig.canvas.draw_idle() # actualiza figura\n\n    # observaci\u00f3n\n    if k%2==0:\n        observa = 'x2&#x5B;n] es alias de x1&#x5B;n]'\n    else:\n        observa = 'x2&#x5B;n] NO es alias de x1&#x5B;n]'\n    txt_observa.set_val(observa)\n    print('k:',k,observa)\n    \n# boton reinicio de gr\u00e1fica\nbtn_rstdonde = plt.axes(&#x5B;0.8, 0.025, 0.1, 0.04])\nbtn_rst = Button(btn_rstdonde, 'Reset',\n                 hovercolor='0.975')\ndef grafico_reinicia(event):\n    k_slider.reset()\n    return()\n\n# objetos interactivos\nk_slider.on_changed(grafico_actualiza)\nbtn_rst.on_clicked(grafico_reinicia)\n\nplt.show()\n\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=\"#alias\">alias<\/a><\/p>\n\n\n\n<p><a href=\"#ejemplo\">ejemplo<\/a> <\/p>\n\n\n\n<p><a href=\"#algoritmo\">algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicioalias\"> ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#graficointeractivo\">gr\u00e1fico interactivo<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>alias ejemplo algoritmo ejercicio gr\u00e1fico interactivo 1. Concepto de alias Referencia: Downey 2.1 p21 Una definici\u00f3n simplificada de \"alias\" es de dos nombres para una persona: \"Pancho\" y \"Francisco\".&nbsp; De forma semejante, Dos se\u00f1ales diferentes en su forma discreta pueden tener la misma secuencia de valores. alias ejemplo algoritmo ejercicio gr\u00e1fico interactivo 2. Ejemplo Referencia: [&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-18269","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\/18269","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=18269"}],"version-history":[{"count":3,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/18269\/revisions"}],"predecessor-version":[{"id":20596,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/18269\/revisions\/20596"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=18269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=18269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=18269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}