{"id":137,"date":"2024-10-15T20:09:58","date_gmt":"2024-10-16T01:09:58","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/telg1034\/?p=137"},"modified":"2026-04-06T10:35:03","modified_gmt":"2026-04-06T15:35:03","slug":"espectro-producto-de-sinusoides","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-unidades\/espectro-producto-de-sinusoides\/","title":{"rendered":"1.5 Espectro - Producto de sinusoides, AM y BW 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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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=\"productocos\">1. Producto de Se\u00f1ales<\/h2>\n\n\n\n<p>Un modelo de se\u00f1al de gran utilidad es el producto de dos sinusoides, usada en difusi\u00f3n radial conocida como Modulaci\u00f3n de Amplitud (AM).<\/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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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. Ejemplo \u2013 Espectro de Producto de sinusoides<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan ejemplo 3.2 p75<\/p>\n\n\n\n<p>Realice el espectro de frecuencias para una se\u00f1al resultado del producto de dos sinusoides con frecuencias 1\/2 Hz y 5 Hz.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\cos (\\pi t) \\sin(10 \\pi t) <\/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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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=\"analitico\">3. Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>Lo primero es convertir x(t) usando la f\u00f3rmula de Euler:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = \\Big( \\frac{e^{j \\pi t} +e^{-j \\pi t}}{2} \\Big)\\Big( \\frac{e^{j 10 \\pi t} - e^{-j 10 \\pi t}}{2j} \\Big) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{4}e^{-j \\pi \/2}e^{j 11 \\pi t} + \\frac{1}{4}e^{-j \\pi \/2}e^{j 9 \\pi t} + \\frac{1}{4}e^{j \\pi \/2}e^{-j 9 \\pi t} + \\frac{1}{4}e^{j \\pi \/2}e^{-j 11 \\pi t} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> = \\frac{1}{2}\\cos (11 \\pi t - pi\/2) +\\frac{1}{2}\\cos(9 \\pi t - \\pi\/2) <\/span>\n\n\n\n<p>Se observa que para el espectro de frecuencias se tienen 4 componentes, que las frecuencias originales de 5 Hz y 1\/2 Hz ya no se muestran en el espectro<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos01.png\" alt=\"espectro Se\u00f1ales Producto Cos() 01\" class=\"wp-image-20568\" \/><\/figure>\n\n\n\n<p>La gr\u00e1fica de domino en tiempo con los componentes individuales es:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos_t02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"442\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos_t02.png\" alt=\"espectro Senales Producto Cos t 02\" class=\"wp-image-141\" \/><\/a><\/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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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\">4. Algoritmo en Python<\/h2>\n\n\n\n<p>El algoritmo para el ejercicio reutiliza las funciones descritas en la secci\u00f3n anterior para el espectro de frecuencias. Por lo que \u00e9ste caso&nbsp; es una aplicaci\u00f3n del concepto.<\/p>\n\n\n\n<p>El resultado del algoritmo es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>x(t): cos(pi*t)*cos(10*pi*t)\nx_senales: \nsenal:   cos(pi*t)*cos(10*pi*t)\n  euler: exp(11*I*pi*t)\/4 + exp(9*I*pi*t)\/4 + exp(-9*I*pi*t)\/4 + exp(-11*I*pi*t)\/4\nx_expand: \n  cos(9*pi*t)\/2 + cos(11*pi*t)\/2\nx_espectro:\nfreq : &#091;-5.5 -4.5  4.5  5.5]\nampl : &#091;1\/4 1\/4 1\/4 1\/4]\nfase : &#091;0 0 0 0]\netiq : &#091;'1\/4' '1\/4' '1\/4' '1\/4']\n<\/code><\/pre>\n\n\n\n<p>Instrucciones en Python con <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-senales\/dsp-algoritmos-telg1034-py\/\" data-type=\"page\" data-id=\"18266\">telg1034.py<\/a>, en men\u00fa de <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-senales\/dsp-recursos\/\" data-type=\"page\" data-id=\"21446\">recursos<\/a>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejemplo 3.2 p75 Espectro de dos lados\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-senales\/\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\nimport telg1034 as dsp\n\n# variables\nfrom telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes\n\n# INGRESO\nx0 = 0\nx1 = sym.cos(pi*t)\nx2 = sym.cos(10*pi*t)\nx  = x1*x2\n\n# PROCEDIMIENTO\nx_senales = dsp.x_list_term_Add(x)\nx_conteo = len(x_senales)\nXe_senales = dsp.cos_to_euler_one_term(x_senales)\nXe_espectro = dsp.cos_spectrum_list(x_senales)\n\nx_senales en t\u00e9rminos cos simplificados\nXe_conteo = len(Xe_senales)\nx_senales_simple = &#x5B;]\nx_expand = sym.S.Zero\nfor i in range(Xe_conteo):\n    unaSenal = Xe_senales&#x5B;i]\n    Xe_to_cos = unaSenal.rewrite(sym.cos)\n    x_expand = x_expand + Xe_to_cos\n\n# SALIDA\nprint('x(t):',x)\nprint('x_senales: ')\nfor i in range(x_conteo):\n    print('senal:  ',x_senales&#x5B;i])\n    print('  euler:',Xe_senales&#x5B;i])\nprint('x_expand: ')\nprint(' ',x_expand)\nprint('x_espectro:')\nfor unparam in Xe_espectro:\n    print(unparam,':',Xe_espectro&#x5B;unparam])\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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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\u00e1fica de espectro de frecuencias<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"565\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos01.png\" alt=\"espectro Se\u00f1ales Producto Cos() 01\" class=\"wp-image-20568\" \/><\/figure>\n\n\n\n<p>Instrucciones adicionales para la gr\u00e1fica de espectro son las mismas que en la secci\u00f3n anterior<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICAS de espectro de frecuencias ---------\nfreq = Xe_espectro&#x5B;'freq']\nmagnitud = Xe_espectro&#x5B;'ampl']\netiqueta = Xe_espectro&#x5B;'etiq']\nmag_max = float(max(magnitud))\nfreq_max = float(max(freq))\n\n# grafica \ngraf_dx = 0.12\nfig_espectro = plt.figure()\ngraf_fasor = fig_espectro.add_subplot()\n# grafica magnitud\ngraf_fasor.set_xlim(&#x5B;-freq_max*(1+graf_dx),freq_max*(1+graf_dx)])\ngraf_fasor.set_ylim(&#x5B;0,mag_max*(1+graf_dx*2)])\ngraf_fasor.axhline(0,color='black')\ngraf_fasor.axvline(0,linestyle='dotted',color='grey')\ngraf_fasor.stem(freq,magnitud)\n# etiquetas de fasor\nfor k in range(0,len(freq),1):\n    texto = etiqueta&#x5B;k]\n    x_text = freq&#x5B;k]\n    y_text = magnitud&#x5B;k]\n    plt.annotate(texto,xy=(x_text,y_text), xytext=(0,5),\n                 textcoords='offset points',ha='center')\ngraf_fasor.grid()\ngraf_fasor.set_xlabel('freq Hz')\ngraf_fasor.set_ylabel('amplitud')\ngraf_fasor.set_title('Espectro: x_senales')\n\n#plt.show()\n<\/pre><\/div>\n\n\n<p>La gr\u00e1fica de tiempo, permite observar el efecto del producto se se\u00f1ales.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos_t02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"442\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoCos_t02.png\" alt=\"espectro Senales Producto Cos t 02\" class=\"wp-image-141\" \/><\/a><\/figure>\n\n\n\n<p>Se reutilizan las instrucciones de la secci\u00f3n 1.3, a\u00f1adiendo las variantes de estilo de l\u00ednea para destacar la se\u00f1al resultante del producto.<\/p>\n\n\n\n<p>En este caso se est\u00e1 usando la lista de frecuencias del espectro de se\u00f1ales, lo que no incluye las frecuencias individuales de cada componente al desaparecer en el resultado las frecuencia originales. por lo que la \"envolvente\" de menor frecuencia no domina sobre las dem\u00e1s.<\/p>\n\n\n\n<p>Considerar el caso presentado para completar el algoritmo si se requiere mayor precisi\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICAR x(t) ---------------------------\n# INGRESO\nx_senales_graf = &#x5B;x1,x2,x] # para graficar\nx_etiqueta = &#x5B;'x1(t)','x2(t)','x1(t)x2(t)']\nx_tipolinea = &#x5B;'dashed','dotted','solid']\n\ntramos_T = 20       # tramos por periodo\nperiodos_graf = 2   # periodos en una grafica\n\n# PROCEDIMIENTO GRAFICA\nx_conteo_graf = len(x_senales_graf)\n# etiquetas si est\u00e1n vacias\nif len(x_etiqueta)==0: \n    if x_conteo_graf &gt; 1:\n        for i in range(0,x_conteo_graf-1,1):\n            x_etiqueta.append('x'+str(i)+'(t)')\n            x_tipolinea.append('dotted')\n    x_etiqueta.append('x(t)')\n    x_tipolinea.append('solid')\n    \n&#x5B;T_min,T_max] = dsp.periodo_minmax(freq)\nx_conteo = len(x_senales_graf)\n\nmuestras_T = tramos_T + 1\n# intervalo de t entre &#x5B;a,b] en pasos dt\na = 0\nb = T_max*periodos_graf\ndt = T_min\/tramos_T # tama\u00f1o de paso,tramo, muestreo\nti = np.arange(a,b+dt,dt)\n\nxi_k = &#x5B;] # muestras de cada se\u00f1al x\nfor unasenal in x_senales_graf:\n    # x(t) a forma num\u00e9rica lambda t:\n    if unasenal.has(t):\n        xk = sym.lambdify(t,unasenal)\n    else: # es constante\n        xk = lambda t: unasenal + 0*t\n    xki = xk(ti) # eval\u00faa en intervalo\n    xi_k.append(np.copy(xki))\n\n# graficar\nfig_x = plt.figure()\ngraf_x = fig_x.add_subplot()\nfor i in range(0,x_conteo_graf,1):\n    color_i = dsp._graf_lineacolor_i(i)\n    graf_x.plot(ti,xi_k&#x5B;i], color=color_i,\n                linestyle=x_tipolinea&#x5B;i],\n                label=x_etiqueta&#x5B;i])\n    graf_x.axhline(0,color='black')\ngraf_x.set_title('Se\u00f1ales xk(t)')\ngraf_x.set_xlabel('t (segundos)')\ngraf_x.set_ylabel('x_senales')\ngraf_x.grid()\ngraf_x.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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/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=\"ambw\">6. Modulaci\u00f3n de Amplitud y Ancho de Banda<\/h2>\n\n\n\n<p>En comunicaci\u00f3n por radio difusi\u00f3n se conoce el t\u00e9rmino <strong>Modulaci\u00f3n de amplitud<\/strong> AM (amplitude modulation). AM es el proceso de multiplicar una se\u00f1al sinusoidal de alta frecuencia f<sub>c<\/sub> (portadora) con una se\u00f1al de baja frecuencia como la voz o m\u00fasica (envolvente)<\/p>\n\n\n\n<p class=\"has-text-align-center\">x(t) = envolvente (portadora)<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x(t) = v(t) \\cos ( 2 \\pi f_c t) <\/span>\n\n\n\n<p>El concepto de ancho de banda se usa con la representaci\u00f3n del espectro de frecuencias de la se\u00f1al y destaca una de sus caracter\u00edsticas. Para el caso de AM cuyo espectro tiene como frecuencia mas alta (f<sub>c<\/sub> + f\u0394 ) y referenciada a la frecuencia de la portadora f<sub>c<\/sub> , se considera importante el grupo de frecuencias positivas&nbsp; en el intervalo entre la mas alta y las mas baja conocidas como ancho de banda o BW (Bandwitdth) de la se\u00f1al.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> (f_c + f_{\\Delta})-(f_c - f_{\\Delta}) = 2f_{\\Delta} <\/span>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Ejercicio<\/h3>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: McClellan ejemplo 3.4 p78 y ejercicio 3.3 p80<\/p>\n\n\n\n<p>Realice el espectro de frecuencias para una se\u00f1al AM con portadora cos(400\u03c0t) y envolvente (5+4cos(40 \u03c0t)).<\/p>\n\n\n\n<p>La se\u00f1al envolvente tiene un t\u00e9rmino DC suficientemente grande que la mantiene en la parte superior (positiva)&nbsp; para todo 't'. El t\u00e9rmino DC de la envolvente permite simplificar la implementaci\u00f3n de un circuito detector de envolvente en el radio-receptor, la envolvente es la voz o m\u00fasica que se quiere escuchar.<\/p>\n\n\n\n<p>Observe&nbsp; que la se\u00f1al de la portadora es de 200Hz y la envolvente es 20Hz, con una relaci\u00f3n 1\/10. En el espectro de frecuencia, la mas alta es 220 Hz y la mas baja es 180 Hz, la frecuencia central o portadora es 200 Hz. El ancho de banda es (220-180) = 40 Hz. que es la frecuencia de la envolvente.<\/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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 Algoritmo con Python<\/h3>\n\n\n\n<p>A partir del algoritmo del producto de se\u00f1ales,&nbsp; se a\u00f1ade el c\u00e1lculo de las frecuencia m\u00e1xima y m\u00ednima de x(t).<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><span style=\"color: #ff0000\"># ancho de banda<\/span>\nfreq = Xe_espectro&#091;<span style=\"color: #008000\">'freq'<\/span>]\nfreq_max = float(max(freq))\nfreq_min = float(min(freq&#091;freq&gt;0])) <span style=\"color: #ff0000\"># freq positivas &#091;freq&gt;0]<\/span>\nfreq_centro = (freq_max+freq_min)\/2\nBW = freq_max-freq_min<\/code><\/pre>\n\n\n\n<p>con lo que se obtiene como resultado<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>x(t): (4*cos(40*pi*t) + 5)*cos(400*pi*t)\nx_senales: \nsenal:   5*cos(400*pi*t)\n  euler: 5*exp(400*I*pi*t)\/2 + 5*exp(-400*I*pi*t)\/2\nsenal:   4*cos(40*pi*t)*cos(400*pi*t)\n  euler: exp(440*I*pi*t) + exp(360*I*pi*t) + exp(-360*I*pi*t) + exp(-440*I*pi*t)\nx_expand: \n  2*cos(360*pi*t) + 5*cos(400*pi*t) + 2*cos(440*pi*t)\n   freq_min: 180.0\nfreq_centro: 200.0\n   freq_max: 220.0\nancho de banda BW: 40.0\nx_espectro:\nfreq : &#091;-220. -200. -180.  180.  200.  220.]\nampl : &#091;1 5\/2 1 1 5\/2 1]\nfase : &#091;0 0 0 0 0 0]\netiq : &#091;'1' '5\/2' '1' '1' '5\/2' '1']<\/code><\/pre>\n\n\n\n<p>con gr\u00e1ficas de espectro de frecuencia y x(t)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoAM01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"555\" height=\"438\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoAM01.png\" alt=\"espectro Senales Producto AM 01\" class=\"wp-image-161\" \/><\/a><\/figure>\n\n\n\n<p>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoAM02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"443\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2024\/11\/espectroSenalesProductoAM02.png\" alt=\"Senales Producto AM 02\" class=\"wp-image-162\" \/><\/a><\/figure>\n\n\n\n<p>Algoritmo en Python con gr\u00e1ficas<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# ejemplo 3.4 p78 Modulaci\u00f3n de Amplitud (AM) o Amplitud Modulada\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/dsp-senales\/\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport sympy as sym\nimport telg1034 as dsp\n\n# variables\nfrom telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes\n\n# INGRESO\nx1 = 5+4*sym.cos(40*pi*t)\nx2 = sym.cos(400*pi*t)\nx = x1*x2\n\n# PROCEDIMIENTO\nx_senales = dsp.x_list_term_Add(x)\nx_conteo = len(x_senales)\nXe_senales = dsp.cos_to_euler_one_term(x_senales)\nXe_espectro = dsp.cos_spectrum_list(x_senales)\n\nx_senales en t\u00e9rminos cos simplificados\nXe_conteo = len(Xe_senales)\nx_senales_simple = &#x5B;]\nx_expand = sym.S.Zero\nfor i in range(Xe_conteo):\n    unaSenal = Xe_senales&#x5B;i]\n    Xe_to_cos = unaSenal.rewrite(sym.cos)\n    x_expand = x_expand + Xe_to_cos\n\n# ancho de banda\nfreq = Xe_espectro&#x5B;'freq']\nfreq_max = float(max(freq))\nfreq_min = float(min(freq&#x5B;freq&gt;0])) # freq positivas &#x5B;freq&gt;0]\nfreq_centro = (freq_max+freq_min)\/2\nBW = freq_max-freq_min\n\n# SALIDA\nprint('x(t):',x)\nprint('x_senales: ')\nfor i in range(x_conteo):\n    print('senal:  ',x_senales&#x5B;i])\n    print('  euler:',Xe_senales&#x5B;i])\nprint('x_expand: ')\nprint(' ',x_expand)\nprint('   freq_min:',freq_min)\nprint('freq_centro:',freq_centro)\nprint('   freq_max:',freq_max)\nprint('ancho de banda BW:',BW)\nprint('x_espectro:')\nfor unparam in Xe_espectro:\n    print(unparam,':',Xe_espectro&#x5B;unparam])\n\n# GRAFICAS de espectro de frecuencias ---------\nfreq = Xe_espectro&#x5B;'freq']\nmagnitud = Xe_espectro&#x5B;'ampl']\netiqueta = Xe_espectro&#x5B;'etiq']\nmag_max = float(max(magnitud))\nfreq_max = float(max(freq))\n\n# grafica \ngraf_dx = 0.12\nfig_espectro = plt.figure()\ngraf_fasor = fig_espectro.add_subplot()\n# grafica magnitud\ngraf_fasor.set_xlim(&#x5B;-freq_max*(1+graf_dx),freq_max*(1+graf_dx)])\ngraf_fasor.set_ylim(&#x5B;0,mag_max*(1+graf_dx*2)])\ngraf_fasor.axhline(0,color='black')\ngraf_fasor.axvline(0,linestyle='dotted',color='grey')\ngraf_fasor.stem(freq,magnitud)\n# etiquetas de fasor\nfor k in range(0,len(freq),1):\n    texto = etiqueta&#x5B;k]\n    x_text = freq&#x5B;k]\n    y_text = magnitud&#x5B;k]\n    plt.annotate(texto,xy=(x_text,y_text), xytext=(0,5),\n                 textcoords='offset points',ha='center')\ngraf_fasor.grid()\ngraf_fasor.set_xlabel('freq Hz')\ngraf_fasor.set_ylabel('amplitud')\ngraf_fasor.set_title('Espectro: x_senales')\n\n#plt.show()\n\n# GRAFICAR x(t) ---------------------------\n# INGRESO\nx_senales_graf = &#x5B;x1,x2,x_expand] # para graficar\nx_etiqueta = &#x5B;'x1(t)','x2(t)','x(t)']\nx_tipolinea = &#x5B;'dashed','dotted','solid']\n\ntramos_T = 20       # tramos por periodo\nperiodos_graf = 4   # periodos en una grafica\n\n# PROCEDIMIENTO GRAFICA\nx_conteo_graf = len(x_senales_graf)\n# etiquetas si est\u00e1n vacias\nif len(x_etiqueta)==0: \n    if x_conteo_graf &gt; 1:\n        for i in range(0,x_conteo_graf-1,1):\n            x_etiqueta.append('x'+str(i)+'(t)')\n            x_tipolinea.append('dotted')\n    x_etiqueta.append('x(t)')\n    x_tipolinea.append('solid')\n    \n&#x5B;T_min,T_max] = dsp.periodo_minmax(freq)\nx_conteo = len(x_senales_graf)\n\nmuestras_T = tramos_T + 1\n# intervalo de t entre &#x5B;a,b] en pasos dt\na = 0\nb = T_max*periodos_graf\ndt = T_min\/tramos_T # tama\u00f1o de paso,tramo, muestreo\nti = np.arange(a,b+dt,dt)\n\nxi_k = &#x5B;] # muestras de cada se\u00f1al x\nfor unasenal in x_senales_graf:\n    # x(t) a forma num\u00e9rica lambda t:\n    if unasenal.has(t):\n        xk = sym.lambdify(t,unasenal)\n    else: # es constante\n        xk = lambda t: unasenal + 0*t\n    xki = xk(ti) # eval\u00faa en intervalo\n    xi_k.append(np.copy(xki))\n\n# graficar\nfig_x = plt.figure()\ngraf_x = fig_x.add_subplot()\nfor i in range(0,x_conteo_graf,1):\n    color_i = dsp._graf_lineacolor_i(i)\n    graf_x.plot(ti,xi_k&#x5B;i], color=color_i,\n                linestyle=x_tipolinea&#x5B;i],\n                label=x_etiqueta&#x5B;i])\n    graf_x.axhline(0,color='black')\ngraf_x.set_title('Se\u00f1ales xk(t)')\ngraf_x.set_xlabel('t (segundos)')\ngraf_x.set_ylabel('x_senales')\ngraf_x.grid()\ngraf_x.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-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<p><a href=\"#productocos\">producto cos<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#analitico\">anal\u00edtico<\/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\n\n\n<p><a href=\"#ambw\">AM y BW<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>producto cos ejercicio anal\u00edtico algoritmo gr\u00e1fica AM y BW 1. Producto de Se\u00f1ales Un modelo de se\u00f1al de gran utilidad es el producto de dos sinusoides, usada en difusi\u00f3n radial conocida como Modulaci\u00f3n de Amplitud (AM). producto cos ejercicio anal\u00edtico algoritmo gr\u00e1fica AM y BW 2. Ejemplo \u2013 Espectro de Producto de sinusoides Referencia: McClellan [&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-137","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\/137","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=137"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/137\/revisions"}],"predecessor-version":[{"id":24099,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/137\/revisions\/24099"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}