Diseño de Filtros Digitales Con Fdatool

10
Debido a una falla en la conexión, la señal de un electrocardiógrafo digital se ve contaminada con interferencia de 60Hz proveniente de la alimentación eléctrica. (Esta señal está en el archivo proporcionado). Esta señal fue muestreada a 500Hz. Dado que 60Hz también existen componentes de frecuencia del electrocardiograma, se le pide que implemente un filtro que elimine la interferencia alterando lo menos posible la señal. Presentar: la señal original en tiempo y frecuencia, la respuesta en frecuencia del filtro y aplicarlo a la señal y la señal filtrada graficada en tiempo y frecuencia. (Recomendación: utilice fdatool para diseñar el filtro deseado). Señal Original en tiempo y en frecuencia >> load('tema1.mat') >> spectrogram(ecg,128,120,128,500,'yaxis');

description

Diseño de filtros digitales con FDATOOL filtro Notchingfiltro pasa bajo filtro pasa banda

Transcript of Diseño de Filtros Digitales Con Fdatool

Page 1: Diseño de Filtros Digitales Con Fdatool

Debido a una falla en la conexión, la señal de un electrocardiógrafo digital se ve contaminada con interferencia de 60Hz proveniente de la alimentación eléctrica. (Esta señal está en el archivo proporcionado). Esta señal fue muestreada a 500Hz. Dado que 60Hz también existen componentes de frecuencia del electrocardiograma, se le pide que implemente un filtro que elimine la interferencia alterando lo menos posible la señal. Presentar: la señal original en tiempo y frecuencia, la respuesta en frecuencia del filtro y aplicarlo a la señal y la señal filtrada graficada en tiempo y frecuencia. (Recomendación: utilice fdatool para diseñar el filtro deseado).

Señal Original en tiempo y en frecuencia

>> load('tema1.mat')>> spectrogram(ecg,128,120,128,500,'yaxis');

Implementación del filtro Notching con los parámetros Fs=500 Y Fnotch=60

Page 2: Diseño de Filtros Digitales Con Fdatool

Una vez creado el filtro lo exportamos a codigo de MATLAB, automaticamente lo guarda como una funcion lo guardo como notch.

function Hd = notch%NOTCH Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 8.5 and the DSP System Toolbox 9.0.% Generated on: 06-Dec-2015 11:49:17 % IIR Notching filter designed using the IIRNOTCH function. % All frequency values are in Hz.Fs = 500; % Sampling Frequency Fnotch = 60; % Notch FrequencyBW = 10; % BandwidthApass = 1; % Bandwidth Attenuation [b, a] = iirnotch(Fnotch/(Fs/2), BW/(Fs/2), Apass);Hd = dfilt.df2(b, a); % [EOF]Ahora utilizo esta funcion que hace referencia el filtro notch, para aplicarselo a la señal ecg de esta manera limpio el ruido que esta en la señal. Con la siguiente codificacion.>> filtro=notch();>> y=filter(filtro,ecg);>> plot(y)

Page 3: Diseño de Filtros Digitales Con Fdatool

Se quiere construir un sistema de comunicación de voz que utilice una señal digital que se muestree a 16KHz. En esta señal se trasmitirá la voz en la banda de 0 a 4000 Hz y la señalización se trasmitirá fuera de banda, entre las frecuencias de 6000 a 7000 Hz. Se le pide que diseñe un conjunto de filtros que sean capaces de tomar la señal combinada y separar las dos componentes (voz y señalización). Primero deberá revisar si la señal en efecto contiene estas dos componentes de frecuencia y adjuntar el gráfico que lo pruebe. Luego deberá diseñar los filtros necesarios para extraer cada una de las señales. Luego deberá presentar el gráfico de frecuencias de estas dos señales por separado.

Cargamos la señal load('tema2.mat') >> spectrogram(senal,128,120,128,16000,'yaxis');

Primero necesitamos crear un filtro pasa bajo para filtrar la señal de la voz

Page 4: Diseño de Filtros Digitales Con Fdatool

Ahora lo exportamos a codigo de Matlab con el nombre de kernel_lowpass

function Hd = kernel_lowpass%KERNEL_LOWPASS Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 8.5 and the Signal Processing Toolbox 7.0.% Generated on: 12-Dec-2015 20:45:08% Equiripple Lowpass filter designed using the FIRPM function.% All frequency values are in Hz.Fs = 16000; % Sampling FrequencyFpass = 4000; % Passband FrequencyFstop = 4150; % Stopband FrequencyDpass = 0.057501127785; % Passband RippleDstop = 3.1622776602e-08; % Stopband Attenuationdens = 20; % Density Factor% Calculate the order from the parameters using FIRPMORD.[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);% Calculate the coefficients using the FIRPM function.b = firpm(N, Fo, Ao, W, {dens});Hd = dfilt.dffir(b);% [EOF]

Ahora aplicamos el filtro pasa bajo a la señalfiltro=kernel_lowpass();

Page 5: Diseño de Filtros Digitales Con Fdatool

>> y=filter(filtro,senal);>> fvtool(y)>>plot(y)

Ahora creamos un filtro pasa banda para filtrar las frecuencias de 6000 a 7000 Hz

Page 6: Diseño de Filtros Digitales Con Fdatool

Exportamos el filtro a matlab con el nombre de kernel_bandpass

function Hd = kernel_bandpass%KERNEL_BANDPASS Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 8.5 and the Signal Processing Toolbox 7.0.% Generated on: 12-Dec-2015 22:03:44% Equiripple Bandpass filter designed using the FIRPM function.% All frequency values are in Hz.Fs = 16000; % Sampling FrequencyFstop1 = 4150; % First Stopband FrequencyFpass1 = 6000; % First Passband FrequencyFpass2 = 7000; % Second Passband FrequencyFstop2 = 8000; % Second Stopband FrequencyDstop1 = 3.1622776602e-08; % First Stopband AttenuationDpass = 0.057501127785; % Passband RippleDstop2 = 0.0031622776602; % Second Stopband Attenuationdens = 20; % Density Factor% Calculate the order from the parameters using FIRPMORD.[N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 ... 0], [Dstop1 Dpass Dstop2]); % Calculate the coefficients using the FIRPM function.b = firpm(N, Fo, Ao, W, {dens});Hd = dfilt.dffir(b);% [EOF]

Page 7: Diseño de Filtros Digitales Con Fdatool

Aplicamos el filtro pasa banda a la señal

filtro=kernel_bandpass();>> z=filter(filtro,senal);>> plot(z)>> fvtool(z)

Page 8: Diseño de Filtros Digitales Con Fdatool

Se desea compensar el daño ocasionado por un canal de transmisión. Para esto trasmitimos una señal aleatoria (Fs=8000Hz) conocida a través del canal (original) y luego capturamos la señal luego de ser transmitida (modificada). Diseñe un filtro adaptivo que pueda aprender a deshacer el daño ocasionado por el canal. Presentar: Coeficientes del filtro aprendido, la respuesta en frecuencia del filtro y error de la ecualización. El filtro debe tener la cantidad necesaria de puntos para que el error converja hacia 0. (La señal original ya se encuentra desplazada la cantidad de tiempo que toma a la señal atravesar el canal de comunicación). Recomendación: utilizar el algoritmo LMS para el filtro adaptivo con una salto de 0.005.

>> x=original;

>> X=modificada;

>> mu=0.005;

>> ha=adaptfilt.lms(500,mu); no se cuáles son los puntos exactos los prolongo para coger el mejor

>> [y,e]= filter(ha,x,X);

>> h=ha.coefficients;

>> stem(h)

>> plot(h)

Page 9: Diseño de Filtros Digitales Con Fdatool