[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
Operaciones en dominio de tiempo y frecuencia
Referencia: McClellan 3.3 p81
Uno de los beneficios de uso del espectro de frecuencias es que las operaciones sobre x(t) se muestran como resultados simples en la gráfica de espectro. Estos cambios relacionados en el dominio de t y f se denominan propiedades de la representación espectral. Para los ejemplos se usará el algoritmo de producto de sinusoides.
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
..
1. Escalar o sumar con una constante
Referencia: McClellan 3.3.1 y 3.3.2 p81
Multiplicar una señal por un factor ‘c
‘ constante cambia la escala de amplitud en el espectro por el mismo factor ‘c
‘, pero deja las frecuencias sin cambios.
Sumar una constante a una señal x(t)+c, cambia la amplitud compleja de solo del componente constante o frecuencia f=0
1.1 Ejemplo
Para la señal x(t) mostrada
realizar las operaciones
La amplitud de las señales en f=±3 y ±7 se duplican en el factor 2, El valor de la constante a la frecuencia cero, también se duplica por el factor 2 y se añade la constante 6 dando como resultado 2(1.5) +6 = 9
1.2 Resultado con algoritmo
Ingreso
# INGRESO x1 = 3/2 + 6*sym.cos(6*pi*t - pi/3) + 4*sym.cos(14*pi*t + pi/4) x2 = 2*x1 x3 = 6 x4 = x2+x3 # Para espectro de frecuencias y fasores x_senales = [x1,x2,x3,x4] x_etiqueta = ['x1(t)','(2)x1(t)','x3(t)','(2)x1(t)+x3(t)']
Resultado
senal: 6*sin(6*pi*t + pi/6) + 4*cos(14*pi*t + pi/4) + 1.5 espectro: freq : [-7. -3. 0. 3. 7.] ampl : [2. 3. 1.5 3. 2. ] fase : [-pi/4 pi/3 0 -pi/3 pi/4] etiq : ['$2$$ e^j(- \\frac{\\pi}{4})$' '$3$$ e^j(\\frac{\\pi}{3})$' '$1.5$' '$3$$ e^j(- \\frac{\\pi}{3})$' '$2$$ e^j(\\frac{\\pi}{4})$'] x_expand : 6*sin(6*pi*t + pi/6) + 4*cos(14*pi*t + pi/4) + 1.5 freq_max : 7.0 freq_min : 3.0 BW : 4.0 senal: 12*sin(6*pi*t + pi/6) + 8*cos(14*pi*t + pi/4) + 3.0 espectro: freq : [-7. -3. 0. 3. 7.] ampl : [4 6 3 6 4] fase : [-pi/4 pi/3 0 -pi/3 pi/4] etiq : ['$4$$ e^j(- \\frac{\\pi}{4})$' '$6$$ e^j(\\frac{\\pi}{3})$' '$3$' '$6$$ e^j(- \\frac{\\pi}{3})$' '$4$$ e^j(\\frac{\\pi}{4})$'] x_expand : 12*sin(6*pi*t + pi/6) + 8*cos(14*pi*t + pi/4) + 3 freq_max : 7.0 freq_min : 3.0 BW : 4.0 senal: 6 espectro: freq : [0.] ampl : [6] fase : [0] etiq : ['$6$'] x_expand : 6 freq_max : 0.0 freq_min : 0 BW : 0.0 senal: 12*sin(6*pi*t + pi/6) + 8*cos(14*pi*t + pi/4) + 9.0 espectro: freq : [-7. -3. 0. 3. 7.] ampl : [4 6 9 6 4] fase : [-pi/4 pi/3 0 -pi/3 pi/4] etiq : ['$4$$ e^j(- \\frac{\\pi}{4})$' '$6$$ e^j(\\frac{\\pi}{3})$' '$9$' '$6$$ e^j(- \\frac{\\pi}{3})$' '$4$$ e^j(\\frac{\\pi}{4})$'] x_expand : 12*sin(6*pi*t + pi/6) + 8*cos(14*pi*t + pi/4) + 9 freq_max : 7.0 freq_min : 3.0 BW : 4.0
gráfica de espectro de frecuencias
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
..
2. Desplazamiento en tiempo o multiplicar por exponencial complejo
Referencia: McClellan 3.3.3 p84
Para desplazamiento en el tiempo, las frecuencias no cambia, solo hay cambio de fase en las amplitudes complejas del espectro.
dado que
2.1 Ejemplo
Considere x(t) con un retraso τd que es 1/4 de su periodo.
2.2 Resultado con algoritmo
Ingreso
# INGRESO x0 = 6*sym.cos(250*pi*t) x1 = x0.subs(t,t-0.002) # Para espectro de frecuencias y fasores x_senales = [x0,x1] x_etiqueta = ['x(t)','x(t-0.002)']
Resultado
x_senales: senal: 6*cos(250*pi*t) espectro: freq : [-125. 125.] ampl : [3 3] fase : [0 0] etiq : ['$3$' '$3$'] x_expand : 6*cos(250*pi*t) freq_max : 125.0 freq_min : 125.0 BW : 0.0 senal: 6*cos(pi*(250*t - 0.5)) espectro: freq : [-125. 125.] ampl : [3 3] fase : [0.5*pi -0.5*pi] etiq : ['$3$$ e^j(0.5 \\pi)$' '$3$$ e^j(- 0.5 \\pi)$'] x_expand : 3*I*cos(250*pi*t) + 3*I*cos(250*pi*t - 1.0*pi) + 6*cos(250*pi*t - 0.5*pi) freq_max : 125.0 freq_min : 125.0 BW : 0.0
gráfica de espectro de frecuencias
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
..
3. Diferenciación en tiempo
Referencia: McClellan 3.3.4 p84
La derivada de una señal x(t) no realiza cambios en las frecuencias, las amplitudes en el espectro de frecuencia se modifican como
dado que
3.1 Ejemplo
Derivar x(t) que tiene sin() y una constante.
La frecuencia f=0 tiene magnitud 7 que es (j 2 π (0)) = 0 que se elimina de la expresión. En la frecuencia de 125 Hz el término se multiplica por (j 2 π (125))
3.2 Resultados con el algoritmo
Ingreso
# INGRESO x0 = 7 + 6*sym.sin(250*pi*t) x1 = sym.diff(x0,t) # Para espectro de frecuencias y fasores x_senales = [x0,x1] x_etiqueta = ['x(t)',"x'(t)"]
Resultado
x_senales: senal: 6*cos(250*pi*t) espectro: freq : [-125. 125.] ampl : [3 3] fase : [0 0] etiq : ['$3$' '$3$'] x_expand : 6*cos(250*pi*t) freq_max : 125.0 freq_min : 125.0 BW : 0.0 senal: 6*cos(pi*(250*t - 0.5)) espectro: freq : [-125. 125.] ampl : [3 3] fase : [0.5*pi -0.5*pi] etiq : ['$3$$ e^j(0.5 \\pi)$' '$3$$ e^j(- 0.5 \\pi)$'] x_expand : 3*I*cos(250*pi*t) + 3*I*cos(250*pi*t - 1.0*pi) + 6*cos(250*pi*t - 0.5*pi) freq_max : 125.0 freq_min : 125.0 BW : 0.0 >>>
gráfica de espectro de frecuencias
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
..
4. Desplazamiento de frecuencia
Referencia: McClellan 3.3.5 p85
Multiplicar una señal x(t) por una sinusoide o una exponencial compleja tiene como resultado que las frecuencias en el espectro se desplazan.
que es el resultado observado en el producto de sinusoides y tema tratado para AM
Que se interpreta en el espectro de frecuencias, cada frecuencia en x(t) se desplaza por fc, suponiendo que fc>0. Todas las amplitudes complejas se multiplican por la amplitud compleja del exponencial complejo.
4.1 Ejemplo
Para una señal x(t) con varios componentes mostrada en la gráfica de espectro de frecuencias, añadir a la gráfica los resultados de las operaciones indicadas:
Siendo
4.2 Resultados con el algoritmo
Ingreso
# INGRESO x0 = 8 + 4*sym.cos(DosPi*t) + 4*sym.cos(DosPi*2*t)+ 12*sym.cos(DosPi*3*t + pi/2) x1 = x0*sym.cos(DosPi*9*t) x2 = x0*sym.sin(DosPi*9*t) # Para espectro de frecuencias y fasores x_senales = [x0,x1,x2] x_etiqueta = ['x(t)','x(t)*cos(2*pi*9*t)','x(t)*sin(2*pi*9*t)']
Resultado
x_senales: senal: 8 - 12*sin(3*t*(2*pi)) + 4*cos(t*(2*pi)) + 4*cos(2*t*(2*pi)) espectro: freq : [-3. -2. -1. 0. 1. 2. 3.] ampl : [6 2 2 8 2 2 6] fase : [-pi/2 0 0 0 0 0 pi/2] etiq : ['$6$$ e^j(- \\frac{\\pi}{2})$' '$2$' '$2$' '$8$' '$2$' '$2$' '$6$$ e^j(\\frac{\\pi}{2})$'] x_expand : -6*I*(-I*sin(6*pi*t) + cos(6*pi*t)) + 6*I*(I*sin(6*pi*t) + cos(6*pi*t)) + 4*cos(2*pi*t) + 4*cos(4*pi*t) + 8 freq_max : 3.0 freq_min : 1.0 BW : 2.0 senal: (8 - 12*sin(3*t*(2*pi)) + 4*cos(t*(2*pi)) + 4*cos(2*t*(2*pi)))*cos(9*t*(2*pi)) espectro: freq : [-12. -11. -10. -9. -8. -7. -6. 6. 7. 8. 9. 10. 11. 12.] ampl : [3 1 1 4 1 1 3 3 1 1 4 1 1 3] fase : [-pi/2 0 0 0 0 0 pi/2 -pi/2 0 0 0 0 0 pi/2] etiq : ['$3$$ e^j(- \\frac{\\pi}{2})$' '$1$' '$1$' '$4$' '$1$' '$1$' '$3$$ e^j(\\frac{\\pi}{2})$' '$3$$ e^j(- \\frac{\\pi}{2})$' '$1$' '$1$' '$4$' '$1$' '$1$' '$3$$ e^j(\\frac{\\pi}{2})$'] x_expand : 3*I*(-I*sin(12*pi*t) + cos(12*pi*t)) - 3*I*(I*sin(12*pi*t) + cos(12*pi*t)) - 3*I*(-I*sin(24*pi*t) + cos(24*pi*t)) + 3*I*(I*sin(24*pi*t) + cos(24*pi*t)) + 8*cos(18*pi*t) freq_max : 12.0 freq_min : 6.0 BW : 6.0 senal: (8 - 12*sin(3*t*(2*pi)) + 4*cos(t*(2*pi)) + 4*cos(2*t*(2*pi)))*sin(9*t*(2*pi)) espectro: freq : [-12. -11. -10. -9. -8. -7. -6. 6. 7. 8. 9. 10. 11. 12.] ampl : [3 1 1 4 1 1 3 3 1 1 4 1 1 3] fase : [0 pi/2 pi/2 pi/2 pi/2 pi/2 pi pi -pi/2 -pi/2 -pi/2 -pi/2 -pi/2 0] etiq : ['$3$' '$1$$ e^j(\\frac{\\pi}{2})$' '$1$$ e^j(\\frac{\\pi}{2})$' '$4$$ e^j(\\frac{\\pi}{2})$' '$1$$ e^j(\\frac{\\pi}{2})$' '$1$$ e^j(\\frac{\\pi}{2})$' '$3$$ e^j(\\pi)$' '$3$$ e^j(\\pi)$' '$1$$ e^j(- \\frac{\\pi}{2})$' '$1$$ e^j(- \\frac{\\pi}{2})$' '$4$$ e^j(- \\frac{\\pi}{2})$' '$1$$ e^j(- \\frac{\\pi}{2})$' '$1$$ e^j(- \\frac{\\pi}{2})$' '$3$'] x_expand : I*(-I*sin(14*pi*t) + cos(14*pi*t)) - I*(I*sin(14*pi*t) + cos(14*pi*t)) + I*(-I*sin(16*pi*t) + cos(16*pi*t)) - I*(I*sin(16*pi*t) + cos(16*pi*t)) + 4*I*(-I*sin(18*pi*t) + cos(18*pi*t)) - 4*I*(I*sin(18*pi*t) + cos(18*pi*t)) + I*(-I*sin(20*pi*t) + cos(20*pi*t)) - I*(I*sin(20*pi*t) + cos(20*pi*t)) + I*(-I*sin(22*pi*t) + cos(22*pi*t)) - I*(I*sin(22*pi*t) + cos(22*pi*t)) - 6*cos(12*pi*t) + 6*cos(24*pi*t) freq_max : 12.0 freq_min : 6.0 BW : 6.0
gráfica de espectro de frecuencias
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]
..
5. Algoritmo en Python
La instrucciones en Python para cada ejercicio a observar en el dominio de la frecuencia requiere actualiar la sección de INGRESO que fué proporcinada en cada sección anterior. El algoritmo se presenta como ejemplo la escala o suma de una constante.
# ejemplo 3-3.1 p82 escala o suma con una constante # telg1034 DSP fiec-espol edelros@espol.edu.ec import numpy as np import matplotlib.pyplot as plt import sympy as sym import telg1034 as dsp # variables from telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes # INGRESO x1 = 3/2 + 6*sym.cos(6*pi*t - pi/3) + 4*sym.cos(14*pi*t + pi/4) x2 = 2*x1 x3 = 6 x4 = x2+x3 # Para espectro de frecuencias y fasores x_senales = [x1,x2,x3,x4] x_etiqueta = ['x1(t)','(2)x1(t)','x3(t)','(2)x1(t)+x3(t)'] # PROCEDIMIENTO x_conteo = len(x_senales) x_espectro = [] ; freq_max_graf = 1; freq_min_graf = 0 for unasenal in x_senales: # operaciones para espectro x_term = dsp.x_list_term_Add(unasenal) Xe_term = dsp.cos_to_euler_one_term(x_term) x_term_expand = dsp.euler_to_cos_list(Xe_term) Xe_term_spectr = dsp.cos_spectrum_list(x_term) # espectro de cada señal un_espectro = {} freq = Xe_term_spectr['freq'] ampl = Xe_term_spectr['ampl'] fase = Xe_term_spectr['fase'] un_espectro['freq'] = freq un_espectro['ampl'] = ampl un_espectro['fase'] = fase un_espectro['etiq'] = Xe_term_spectr['etiq'] un_espectro['x_expand'] = x_term_expand # ancho de banda freq_max = float(max(freq)) if len(freq[freq>0])>0: freq_min = float(min(freq[freq>0])) else: freq_min = 0 un_espectro['freq_max'] = freq_max un_espectro['freq_min'] = freq_min freq_centro = (freq_max+freq_min)/2 un_espectro['BW'] = freq_max-freq_min x_espectro.append(un_espectro) # freq_max para grafica, eje unificado x_senales if freq_max>freq_max_graf: freq_max_graf = freq_max # SALIDA print('x_senales: ') for i in range(x_conteo): print('senal: ',x_senales[i]) print(' espectro:') unespectro = x_espectro[i] for unparam in unespectro: print(' ',unparam,':',unespectro[unparam]) # GRAFICAS de espectro de frecuencias --------- graf_dx = 0.14 fig_espectro = plt.figure() for i in range(0,x_conteo,1): unespectro = x_espectro[i] freq = unespectro['freq'] ampl = unespectro['ampl'] etiqueta = unespectro['etiq'] ampl_max = float(max(ampl)) # grafica graf_sub = x_conteo*100+10+i+1 graf_fasor = fig_espectro.add_subplot(graf_sub) if freq_max_graf!=0: graf_fasor.set_xlim([-freq_max_graf*(1+graf_dx), freq_max_graf*(1+graf_dx)]) else: graf_fasor.set_xlim([-1,1]) graf_fasor.set_ylim([0,ampl_max*(1+graf_dx*2)]) graf_fasor.grid() graf_fasor.axhline(0,color='black') graf_fasor.axvline(0,linestyle='dotted',color='grey') graf_fasor.stem(freq,ampl) # grafica magnitud for k in range(0,len(freq),1): # etiquetas de fasor plt.annotate(etiqueta[k],xy=(freq[k],ampl[k]), xytext=(0,5),textcoords='offset points', ha='center') graf_fasor.set_ylabel(x_etiqueta[i]) if i == 0: graf_fasor.set_title('Espectro: x_senales') if i ==(x_conteo-1): graf_fasor.set_xlabel('freq Hz') plt.show()
[ Escala o sumar ‘c’ ] [ desplaza t ] [ derivada ] [ desplaza_f ] [ algoritmo ]