[ convolución ] [ ejercicio ] [ algoritmo ]
..
Referencia: McClellan 5.4.3 p181
Una expresión general para salidas de Filtros FIR se obtienen de los términos de respuesta al impulso. Si los coeficientes de bk son los mismos valores de respuesta al impulso se puede expresar como una suma de convolución, que es una operación entre dos secuencias.
y[n] = \sum_{k=0}^{M} h[k] x[n-k] y[n] =h[k] * x[n] =\sum_{k=-\infty}^{\infty} h[k] x[n-k]Lo que expresa que la secuencia de salida y[n] se obtiene al aplicar la convolución de la respuesta al impulso h[n] con la señal de entrada x[n]
[ convolución ] [ ejercicio ] [ algoritmo ]
..
1. Ejercicio
Referencia: McClellan 5-4.3.3 p184
Evaluar la convolución de hn
que es una secuencia de 11 puntos, con xn
que es una secuencia de 51 puntos. Use el vector hn
como respuesta al impulso de un sistema de medias móviles de 11 puntos.
y[n] = x[n]*h[n]
Al aplicar el algoritmo de media móvil se compara el resultado con el algoritmo de convolución.
muestreo: 51 ; tamaño ki: 73 x[n]: (Heaviside(n) - Heaviside(n - 51))*sin(0.07*pi*n) h[n]: Heaviside(n)/11 - Heaviside(n - 11)/11 >>>
[ convolución ] [ ejercicio ] [ algoritmo ]
2. Algoritmo en Python
Referencia: [1] LTI DT – Convolución de sumas – Python. Blog Señales y Sistemas. [2] https://numpy.org/doc/stable/reference/generated/numpy.convolve.html
# ejemplo 5-4.3.3 p184 FIR - Media Móvil y convolución # 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 continuas from telg1034 import t,A,w,f,p,pi,DosPi,I,equivalentes # variables discretas from telg1034 import n # INGRESO u = sym.Heaviside(n) # señal como suma de las partes muestrasN = 50 + 1 # # intervalo [0,50] gn = (u-u.subs(n,n-muestrasN)) xn = sym.sin(0.07*pi*n)*gn # FIR Media Móvil ventana = 10 + 1 # intervalo [0,10] hn = (u-u.subs(n,n-ventana))/ventana # PROCEDIMIENTO ---------------- # muestreo x[n] ki = np.arange(-ventana,muestrasN + ventana,1,dtype=int) xni = sym.lambdify(n,xn, modules=equivalentes) xki = xni(ki) hni = sym.lambdify(n,hn, modules=equivalentes) hki = hni(ki) # FIR Media Móvil yki = np.convolve(hki,xki) yki = yki[ventana:len(xki)+ventana] # intervalo ki # SALIDA print('muestreo:',muestrasN,' ; tamaño ki:',len(ki)) print('x[n]:',xn) print('h[n]:',hn) # GRAFICA FIR plt.subplot(311) # x[n] plt.stem(ki,xki,linefmt = 'C0:', label='x[n]') plt.xlabel('n') plt.ylabel('x[n]') plt.title('FIR Media Móvil con convolución') plt.legend() plt.subplot(312) # h[n] plt.stem(ki,hki,linefmt = 'C1:',label='h[n]') plt.xlabel('n') plt.ylabel('h[n]') plt.legend() plt.subplot(313) # y[n] plt.stem(ki,yki,linefmt = 'C2:',label='y[n]') plt.xlabel('n') plt.ylabel('y[n]') plt.legend() plt.show()
[ convolución ] [ ejercicio ] [ algoritmo ]