Вы находитесь на странице: 1из 38

Introducción

Filtros FIR

Filtros Digitales

M. en C. Rogelio Manuel Higuera Gonzalez

TECNOLÓGICO DE ESTUDIOS SUPERIORES DE IXTAPALUCA

16 de junio de 2019

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

1 Introducción

2 Filtros FIR
Diseño de filtros FIR de fase lineal utilizando ventanas

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

Transformada rápida de Fourier

Para realizar el análisis en frecuencia de una señal discreta en el


tiempo x(n), convertimos la secuencia en el dominio del tiempo
en una representación equivalente en el dominio de la frecuencia.
Sabemos que tal representación está dada por la transformada de
Fourier X (ω) de la secuencia x(n). Una representación en el dominio
de la frecuencia como ésta nos lleva a la transformada discreta de
Fourier (DFT, discrete Fourier transform), la cual es una potente
herramienta de cálculo para llevar a cabo el análisis en frecuencia de
señales discretas en el tiempo.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

Transformada discreta de Fourier de una dimension

La FFT y [k] de longitud N de la secuencia de N longitud de x[n]


esta definido como:
kn
!
N−1
X − 2πj
y [k] = e N x[n] (1)
n=0

Y la transformada inversa esta definida como:


kn
!
N−1
X − 2πj
1 N y [k]
x[n] = e (2)
N
k=0

Esas transformadas pueden ser calculadas con la librerı́a SciPy por


medio de fft y ifft respectivamente.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

Transformada discreta de Fourier (ejemplo)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

Diseño de filtros

Los filtros electrónicos se definen en tiempo continuo, tiempo dis-


creto y filtros digitales. La función de un filtro es alterar o manipular
la forma de una señal, energı́a, distribución y otros atributos. En
muchos casos los filtros digitales son utilizados para remplazar la
tecnologı́a de los filtros analógicos. Los filtros digitales han madu-
rado hasta el punto de mostrar una larga lista de atributos, entre
los que se incluyen: alta precision y exactitud, programabilidad y
adaptabilidad, control preciso de fase y latencia, rendimiento robus-
to en una amplia gama de frecuencias, bajo costo y bajo consumo
de potencia, alta fiabilidad y repetibilidad.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Filtros FIR

Filtros digitales

Los filtros digitales de lı́nea base han evolucionado a lo largo de dos


caminos principales llamados filtros de respuesta al impulso finito
(FIR) y filtros de respuesta al impulso infinito (IIR). La más simple
y, en muchos casos, la más importante de estas clases de filtros es
el FIR. SciPy proporciona funciones para diseñar ambos filtros.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Filtros FIR

Matemáticamente, la respuesta de salida de un filtro FIR lineal de


orden-N, teniendo una respuesta al impulso h[k] a una serie de tiem-
po de entrada x[k], es definida por la suma convolución lineal.
N−1
X N−1
X
y [k] = h[m]x[k − m] = x[m]h[k − m] (3)
m=0 m=0

En el dominio de la transformada Z, la función de transferencia del


filtro puede ser expresada como:
N−1
X
H(z) = hk z −k (4)
k=0

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Filtros FIR

El proceso de diseño de filtros FIR comienza con un conjunto de es-


pecificaciones que pueden ser articuladas en una variedad de formas
y dominios. La forma más común es un conjunto de especificaciones
en el dominio de la frecuencia las cuales se describen en la Figura.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuesta al impulso unidad


En este metodo, a partir de la especificación de la respuesta en fre-
cuencia deseada Hd (ω) determinamos la correspondiente respuesta
al impulso unidad hd (n). Asi, hd (n) esta relacionada con Hd (ω) por
la transformada de Fourier

X
Hd (ω) = hd (n)e −jωn
n=0

donde Z π
1
hd (n) = Hd (ω)e jωn dω
2π −π

Por lo tanto, dada Hd (ω), podemos determinar la respuesta al im-


pulso unidad hd (n) evaluando la integral.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuesta al impulso unidad (truncada)


La respuesta al impulso unidad hd (n) es infinita en duración y tiene
que truncarse en algún punto, por ejemplo n = M − 1, para pro-
porcionar un filtro FIR de longitud M. Truncar hd (n) a una longitud
M − 1 es equivalente a multiplicar hd (n) por una ventana rectangu-
lar, definida como

1, n = 0, 1, ..., M − 1
w (n) =
0, en otro caso

La respuesta al impulso unidad del filtro FIR es



hd (n), n = 0, 1, ..., M − 1
h(n) = hd (n)w (n) =
0, en otro caso

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuesta en frecuencia deseada Hd (ω)


Multiplicar la funcion de ventana w (n) por hd (n) es equivalente a
convolucionar Hd (ω) con W (ω), donde W (ω) es la representación
en el dominio de la frecuencia (transformada de Fourier) de la fun-
ción de ventana, es decir,
M−1
X
W (ω) = w (n)e −jωn
n=0

La convolución de Hd (ω) con W (ω) proporciona la respuesta en


frecuencia del filtro FIR (truncado). Es decir,
Z π
1
H(ω) = Hd (v )W (ω − v )dv
2π −π

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Funciones de ventanas

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Funciones de ventanas

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Función rectangular

M=11
0 M=31
M=61
Normalized magnit de [dB]

−20

−40

−60

−80

0.0 0.1 0.2 0.3 0.4 0.5


Normalized freq ency [cycles per sample]

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Función rectangular

La anchura del lóbulo principal [la anchura que se mide en el pri-


mer cero de W (ω)] es 4π/M. Luego, cuando M aumenta, el lóbulo
principal se hace más estrecho. Las caracterı́sticas de la ventana rec-
tangular desempeñan un papel importante en la determinación de la
respuesta en frecuencia resultante del filtro FIR obtenido por trunca-
miento de hd (n) a una longitud M. Especı́ficamente, la convolución
de Hd (ω) con W (ω) tiene el efecto de suavizar Hd (ω). Cuando M
aumenta, W (ω) se hace más estrecha y el suavizado proporcionado
por W (ω) se reduce.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Función rectangular

Por otro lado, los grandes lóbulos secundarios de W (ω) dan lugar
a una serie de efectos de rizado no deseados en la respuesta en
frecuencia del filtro FIR H(ω), y también en los relativamente gran-
des lóbulos de secundarios de H(ω). Estos efectos no deseados se
eliminan bien utilizando ventanas que no contengan discontinuida-
des abruptas en sus caracterı́sticas en el dominio en el tiempo y los
correspondientes lóbulos secundarios más pequeños en sus carac-
terı́sticas en el dominio de la frecuencia.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Comportamiento de las ventanas

Todas las funciones de ventana tienen lóbulos secundarios significa-


tivamente más pequeños comparados con los de la ventana rectan-
gular. Sin embargo, para el mismo valor de M, la anchura del lóbulo
principal también es mayor para estas ventanas si se comparan con
la ventana rectangular. En consecuencia, estas funciones de ventana
proporcionan más suavizado a través de la operación de convolu-
ción en el dominio de la frecuencia y, como resultado, la región de
transición de la respuesta del filtro FIR es más ancha. ara reducir
la anchura de esta región de transición, podemos simplemente au-
mentar la longitud de la ventana, lo que da lugar a un filtro más
grande.

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Caracterı́sticas en el dominio de la frecuencia de algunas


funciones de ventana

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Formas de varias funciones de ventana (M=61)

1.0

0.8

0.6
Amplitude

Rectangular
Bartlett
0.4 Blackman
Bohman
Hanning
0.2 Tukey

0.0
0 10 20 30 40 50 60
Sample

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia utilizando varias funciones de


ventana (M=61)
0

−50
Normalized magni ude [dB]

−100

−150

−200 Rec angular


Bar le
−250 Blackman
Bohman
Hanning
−300 Tukey

0.0 0.1 0.2 0.3 0.4 0.5


Normalized frequency [cycles per sample]

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro pasa-banda (ventana


rectangular)
M=11
1.0 M=31
M=61
0.8 M=101
Magnitude

0.6

0.4

0.2

0.0
0 200 400 600 800 1000
Frequency (Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro pasa-banda utilizando


diferentes ventanas (M=61)

1.0 Rectangular
Bartlett
Blackman
0.8 Bohman
Hanning
Tukey
Magnitude

0.6

0.4

0.2

0.0
0 200 400 600 800 1000
Frequency (Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuesta de la ventana Kaiser (M=61)

1.0

0.8

0.6
Amplitude

0.4 Beta=0
Beta=2
Beta=6
0.2
Beta=8.6
Bata=14
0.0
0 10 20 30 40 50
Sample

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuesta en frecuencia utilizando la ventana Kaiser


(M=61)
0
−25
Normalized magnit de [dB]

−50
−75
−100
−125
Beta=0
−150 Beta=2
−175 Beta=6
Beta=8.6
−200 Beta=14
0.0 0.1 0.2 0.3 0.4 0.5
Normalized freq ency [cycles per sample]

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro pasa-banda utilizando la


ventana Kaiser (M=61)

1.0

0.8
Magnitude

0.6

0.4 Beta=0
Beta=2
0.2 Beta=6
Beta=8.5
Beta=14
0.0
0 100 200 300 400
Frequency(Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro rechaza-banda


utilizando la ventana Kaiser (M=61)

1.0

0.8
Magnitude

0.6
Beta=0
0.4 Beta=2
Beta=6
Beta=8.5
0.2
Beta=14

0.0
0 100 200 300 400
Frequency(Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro pasa-baja utilizando la


ventana Kaiser (M=61)

1.0

0.8
Magnitude

0.6
Beta=0
0.4 Beta=2
Beta=6
Beta=8.5
0.2 Beta=14

0.0
0 100 200 300 400
Frequency(Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


Introducción
Diseño de filtros FIR de fase lineal utilizando ventanas
Filtros FIR

Respuestas en frecuencia del filtro pasa-alta utilizando la


ventana Kaiser (M=61)

1.0

0.8
Magnitude

0.6
Beta=0
0.4 Beta=2
Beta=6
Beta=8.5
0.2
Beta=14

0.0
0 100 200 300 400
Frequency(Hz)

M. en C. Rogelio Manuel Higuera Gonzalez Filtros Digitales


# -*- coding: utf-8 -*-
"""
Created on Sat May 4 13:55:56 2019
FIR (ventanas frecuencia)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
from scipy import signal
from scipy.fftpack import fft, fftshift
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
window1 = signal.boxcar(11)
window2 = signal.boxcar(31)
window3 = signal.boxcar(61)
A1 = fft(window1, 2048) / (len(window1)/2.0)
A2 = fft(window2, 2048) / (len(window2)/2.0)
A3 = fft(window3, 2048) / (len(window3)/2.0)
response1 = 20 * np.log10(np.abs(fftshift(A1 / abs(A1).max())))
response2 = 20 * np.log10(np.abs(fftshift(A2 / abs(A2).max())))
response3 = 20 * np.log10(np.abs(fftshift(A3 / abs(A3).max())))
freq = np.linspace(-0.5, 0.5, len(A1))
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot(freq,response1,label='M=11',linewidth=2)
axes1.plot(freq,response2,label='M=31',linewidth=2)
axes1.plot(freq,response3,label='M=61',linewidth=2)
axes1.set_xlim([0,0.5])
axes1.set_ylim([min(response3-5),10])
axes1.set_ylabel('Normalized magnitude [dB]',fontsize=16)
axes1.set_xlabel('Normalized frequency [cycles per sample]',fontsize=16)
plt.legend(bbox_to_anchor=(0.82,1),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('ventanarect_f.eps',dpi=500,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sat May 4 13:55:56 2019
FIR (ventanas frecuencia)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
from scipy import signal
from scipy.fftpack import fft, fftshift
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
window1 = signal.boxcar(61)
window2 = signal.bartlett(61)
window3 = signal.blackman(61)
window4 = signal.bohman(61)
window5 = signal.hanning(61)
window6 = signal.tukey(61)
A1 = fft(window1, 2048) / (len(window1)/2.0)
A2 = fft(window2, 2048) / (len(window2)/2.0)
A3 = fft(window3, 2048) / (len(window3)/2.0)
A4 = fft(window4, 2048) / (len(window4)/2.0)
A5 = fft(window5, 2048) / (len(window5)/2.0)
A6 = fft(window6, 2048) / (len(window6)/2.0)
response1 = 20 * np.log10(np.abs(fftshift(A1 / abs(A1).max())))
response2 = 20 * np.log10(np.abs(fftshift(A2 / abs(A2).max())))
response3 = 20 * np.log10(np.abs(fftshift(A3 / abs(A3).max())))
response4 = 20 * np.log10(np.abs(fftshift(A4 / abs(A4).max())))
response5 = 20 * np.log10(np.abs(fftshift(A5 / abs(A5).max())))
response6 = 20 * np.log10(np.abs(fftshift(A6 / abs(A6).max())))
freq = np.linspace(-0.5, 0.5, len(A1))
fig,axes=plt.subplots(figsize=(11, 6))
axes.plot(window1,label='Rectangular',linewidth=2)
axes.plot(window2,label='Bartlett',linewidth=2)
axes.plot(window3,label='Blackman',linewidth=2)
axes.plot(window4,label='Bohman',linewidth=2)
axes.plot(window5,label='Hanning',linewidth=2)
axes.plot(window6,label='Tukey',linewidth=2)
axes.set_ylabel('Amplitude',fontsize=16)
axes.set_xlabel('Sample',fontsize=16)
plt.legend(bbox_to_anchor=(0.40,0.55),loc=2,borderaxespad=0.1,fontsize=14)
plt.grid(True)
plt.savefig('ventanasample1.eps',dpi=1000,bbox_inches='tight')
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot(freq,response1,label='Rectangular',linewidth=2)
axes1.plot(freq,response2,label='Bartlett',linewidth=2)
axes1.plot(freq,response3,label='Blackman',linewidth=2)
axes1.plot(freq,response4,label='Bohman',linewidth=2)
axes1.plot(freq,response5,label='Hanning',linewidth=2)
axes1.plot(freq,response6,label='Tukey',linewidth=2)
axes1.set_xlim([0,0.5])
axes1.set_ylabel('Normalized magnitude [dB]',fontsize=16)
axes1.set_xlabel('Normalized frequency [cycles per sample]',fontsize=16)

1
plt.legend(bbox_to_anchor=(0.35,0.45),loc=2,borderaxespad=0.1,fontsize=14)
plt.grid(True)
plt.savefig('ventanasfreq1.eps',dpi=1000,bbox_inches='tight')

2
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 17:08:34 2019
Filtro FIR (Prueba1)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=50 #Frecuencia de la señal 1
f2=200 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000 #Numero de muestras
t=np.linspace(0,250*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
Vin=V1+V2
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=100 #Frecuencia de corte 1
fc2=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
wn2=fc2/(fs/2) #Frecuencia Normalizada 2
M1=11 #Orden del Filtro
M2=31 #Orden del Filtro
M3=61 #Orden del Filtro
M4=101 #Orden del Filtro
taps1 = signal.firwin(M1,[wn1,wn2],pass_zero=False, window=('boxcar'))
taps2 = signal.firwin(M2,[wn1,wn2],pass_zero=False, window=('boxcar'))
taps3 = signal.firwin(M3,[wn1,wn2],pass_zero=False, window=('boxcar'))
taps4 = signal.firwin(M4,[wn1,wn2],pass_zero=False, window=('boxcar'))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='M=11', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='M=31', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='M=61', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='M=101', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency (Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.80,0.98),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven2.eps',dpi=1000,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 17:08:34 2019
Filtro FIR (Ventanas)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=50 #Frecuencia de la señal 1
f2=200 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000 #Numero de muestras
t=np.linspace(0,250*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
Vin=V1+V2
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=100 #Frecuencia de corte 1
fc2=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
wn2=fc2/(fs/2) #Frecuencia Normalizada 2
M=61 #Orden del Filtro
taps1 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('boxcar'))
taps2 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('bartlett'))
taps3 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('blackman'))
taps4 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('bohman'))
taps5 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('hanning'))
taps6 = signal.firwin(M,[wn1,wn2],pass_zero=False, window=('tukey',1))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
w_5, h_5 = signal.freqz(taps5, worN=8000)
w_6, h_6 = signal.freqz(taps4, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='Boxcar', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='Bartlett', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='Blackman', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='Bohman', linewidth=2)
axes1.plot((w_5/np.pi)*(fs/2), np.absolute(h_5), label='Hanning', linewidth=2)
axes1.plot((w_6/np.pi)*(fs/2), np.absolute(h_6), label='Tukey', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency (Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.80,0.98),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven1.eps',dpi=1000,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 18:51:37 2019
Filtro FIR (Prueba2)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=0.1 #Frecuencia de la señal 1
f2=100 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000000 #Numero de muestras
t=np.linspace(0,1200*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
noise=np.random.normal(0,1,n)
Vin=V1+V2+noise
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=100 #Frecuencia de corte 1
fc2=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
wn2=fc2/(fs/2) #Frecuencia Normalizada 2
N=61 #Orden del Filtro
taps1 = signal.firwin(N,[wn1,wn2],pass_zero=False, window=('kaiser',0))
taps2 = signal.firwin(N,[wn1,wn2],pass_zero=False, window=('kaiser',2))
taps3 = signal.firwin(N,[wn1,wn2],pass_zero=False, window=('kaiser',6))
taps4 = signal.firwin(N,[wn1,wn2],pass_zero=False, window=('kaiser',8.5))
taps5 = signal.firwin(N,[wn1,wn2],pass_zero=False, window=('kaiser',14))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
w_5, h_5 = signal.freqz(taps5, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='Beta=0', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='Beta=2', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='Beta=6', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='Beta=8.5', linewidth=2)
axes1.plot((w_5/np.pi)*(fs/2), np.absolute(h_5), label='Beta=14', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency(Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.38,0.41),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven3.eps',dpi=1000,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 18:51:37 2019
Filtro FIR (Prueba2)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=0.1 #Frecuencia de la señal 1
f2=100 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000000 #Numero de muestras
t=np.linspace(0,1200*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
noise=np.random.normal(0,1,n)
Vin=V1+V2+noise
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=100 #Frecuencia de corte 1
fc2=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
wn2=fc2/(fs/2) #Frecuencia Normalizada 2
N=61 #Orden del Filtro
taps1 = signal.firwin(N,[wn1,wn2],pass_zero=True, window=('kaiser',0))
taps2 = signal.firwin(N,[wn1,wn2],pass_zero=True, window=('kaiser',2))
taps3 = signal.firwin(N,[wn1,wn2],pass_zero=True, window=('kaiser',6))
taps4 = signal.firwin(N,[wn1,wn2],pass_zero=True, window=('kaiser',8.5))
taps5 = signal.firwin(N,[wn1,wn2],pass_zero=True, window=('kaiser',14))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
w_5, h_5 = signal.freqz(taps5, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='Beta=0', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='Beta=2', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='Beta=6', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='Beta=8.5', linewidth=2)
axes1.plot((w_5/np.pi)*(fs/2), np.absolute(h_5), label='Beta=14', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency(Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.38,0.51),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven4.eps',dpi=1000,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 18:51:37 2019
Filtro FIR (Prueba2)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=0.1 #Frecuencia de la señal 1
f2=100 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000000 #Numero de muestras
t=np.linspace(0,1200*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
noise=np.random.normal(0,1,n)
Vin=V1+V2+noise
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
N=61 #Orden del Filtro
taps1 = signal.firwin(N,wn1,pass_zero=True, window=('kaiser',0))
taps2 = signal.firwin(N,wn1,pass_zero=True, window=('kaiser',2))
taps3 = signal.firwin(N,wn1,pass_zero=True, window=('kaiser',6))
taps4 = signal.firwin(N,wn1,pass_zero=True, window=('kaiser',8.5))
taps5 = signal.firwin(N,wn1,pass_zero=True, window=('kaiser',14))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
w_5, h_5 = signal.freqz(taps5, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='Beta=0', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='Beta=2', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='Beta=6', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='Beta=8.5', linewidth=2)
axes1.plot((w_5/np.pi)*(fs/2), np.absolute(h_5), label='Beta=14', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency(Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.38,0.51),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven5.eps',dpi=1000,bbox_inches='tight')

1
# -*- coding: utf-8 -*-
"""
Created on Sun May 5 18:51:37 2019
Filtro FIR (Prueba2)
Tecnológico Nacional de México
Tecnológico de Estudios Superiores de Ixtapaluca
División de Ingeniería Electrónica
@author: M. en C. Rogelio Manuel Higuera Gonzalez
"""
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import matplotlib as mpl
params = {'xtick.labelsize': 14, 'ytick.labelsize': 14}
mpl.rcParams.update(params)
f1=0.1 #Frecuencia de la señal 1
f2=100 #Frecuencia de la señal 2
A1=1 #Amplitud de la señal 1
A2=0.5 #Amplitud de la señal 2
w1=2*np.pi*f1 #Frecuencia angular señal 1
w2=2*np.pi*f2 #Frecuencia angulae señal 2
T=1/f1 #Periodo de la señal 1
n=10000000 #Numero de muestras
t=np.linspace(0,1200*T,n) #Vector de tiempo
V1=A1*np.sin(w1*t) #Señal 1
V2=A2*np.sin(w2*t) #Señal 2
noise=np.random.normal(0,1,n)
Vin=V1+V2+noise
fs=1/(t[10]-t[9]) #Frecuencia de muestreo
fc1=300 #Frecuencia de corte 2
wn1=fc1/(fs/2) #Frecuencia Normalizada 1
N=61 #Orden del Filtro
taps1 = signal.firwin(N,wn1,pass_zero=False, window=('kaiser',0))
taps2 = signal.firwin(N,wn1,pass_zero=False, window=('kaiser',2))
taps3 = signal.firwin(N,wn1,pass_zero=False, window=('kaiser',6))
taps4 = signal.firwin(N,wn1,pass_zero=False, window=('kaiser',8.5))
taps5 = signal.firwin(N,wn1,pass_zero=False, window=('kaiser',14))
w_1, h_1 = signal.freqz(taps1, worN=8000)
w_2, h_2 = signal.freqz(taps2, worN=8000)
w_3, h_3 = signal.freqz(taps3, worN=8000)
w_4, h_4 = signal.freqz(taps4, worN=8000)
w_5, h_5 = signal.freqz(taps5, worN=8000)
fig,axes1=plt.subplots(figsize=(11, 6))
axes1.plot((w_1/np.pi)*(fs/2), np.absolute(h_1), label='Beta=0', linewidth=2)
axes1.plot((w_2/np.pi)*(fs/2), np.absolute(h_2), label='Beta=2', linewidth=2)
axes1.plot((w_3/np.pi)*(fs/2), np.absolute(h_3), label='Beta=6', linewidth=2)
axes1.plot((w_4/np.pi)*(fs/2), np.absolute(h_4), label='Beta=8.5', linewidth=2)
axes1.plot((w_5/np.pi)*(fs/2), np.absolute(h_5), label='Beta=14', linewidth=2)
axes1.set_ylabel('Magnitude',fontsize=16)
axes1.set_xlabel('Frequency(Hz)',fontsize=16)
plt.legend(bbox_to_anchor=(0.38,0.51),loc=2,borderaxespad=0.1,fontsize=16)
plt.grid(True)
plt.savefig('FIRven6.eps',dpi=1000,bbox_inches='tight')

Вам также может понравиться