Está en la página 1de 32

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/271273652

Filtrado Básico de Señales Biomédicas

Technical Report · May 2014


DOI: 10.13140/2.1.1757.2168

CITATIONS READS

0 12,665

1 author:

John Jaiber González Murillo


University of Barcelona
12 PUBLICATIONS   7 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Micro-Flow Cytometry on a chip for Single-cell analysis by Electrical Impedance Spectroscopy and Optical Spectroscopy View project

All content following this page was uploaded by John Jaiber González Murillo on 25 January 2015.

The user has requested enhancement of the downloaded file.


Trabajo Práctico 2: Filtrado de Señales

John Jaiber González Murillo


Máster en Ingeniería Biomédica
Análisis y Procesado Avanzado de Señales Biomédicas
Mayo - 2014

Contenido
Objetivos ...............................................................................................................................................................................1
1. Selección y descripción de la señal a filtrar ................................................................................................................2
1.1. Selección de la señal ...................................................................................................................................... 2
1.2. Caracterización de la señal ........................................................................................................................... 3
1.3. Valoración estrategias de filtrado ................................................................................................................ 3
2. Filtros clásicos ................................................................................................................................................................4
2.1. Filtrado componente DC .............................................................................................................................. 4
2.2. Moving Average o filtro de media móvil ................................................................................................... 5
2.3. Filtro Derivador de Savitzky-Golay ............................................................................................................ 6
2.4. Filtro FIR ......................................................................................................................................................... 6
2.5. Filtro Butterworth .......................................................................................................................................... 7
2.6. Filtro Chebyshev............................................................................................................................................ 8
2.7. Comparación de los filtrados clásicos ......................................................................................................... 9
3. Filtrado óptimo............................................................................................................................................................10
4. Filtros Adaptativos .....................................................................................................................................................11
4.1. Eliminación de ruido de red....................................................................................................................... 12
4.2. Filtrado de señales relacionadas con un evento....................................................................................... 14
5. Filtro promediado .......................................................................................................................................................16
6. Conclusiones ................................................................................................................................................................17
7. Bibliografía ...................................................................................................................................................................18

Objetivos

• Analizar señales biomédicas de las bases de datos Physionet (de las seleccionadas
en el TP1).
• Valorar y aplicar diversas técnicas de filtrado y cancelación de ruido.
• Utilizar y proponer diversos algoritmos en MATLAB, para el procesado de esas
señales.

Página 1
Trabajo Práctico 1: Tipos de Señales

1. Selección y descripción de la señal a filtrar


La base de datos seleccionada para analizar es la de las señales electroencefalográficas
(EEG) de movimientos motores e imágenes motrices (EEG Motor Movement/Imagery
Dataset), tomada de http://www.physionet.org/physiobank/database/eegmmidb/. La base
de datos está compuesta por más de 1.500 grabaciones de señales EEG obtenidas de 109
voluntarios. Los sujetos realizaron diferentes tareas de movimientos motrices e imágenes
motrices, mientras que 64 canales de EEG se registraron utilizando el sistema BCI2000
(Brain Computer Interface 2000 http://www.bci2000.org ).

1.1. Selección de la señal

Los datos descargados para filtrar las señales son los del sujeto 13 mientras realizaba la
tarea 13 (S013R13). Un objetivo aparece en la parte superior o la parte inferior de la
pantalla. El sujeto abre y se cierra bien los puños si el objetivo está en la parte superior o
los dos pies si el destino se encuentra en la parte inferior hasta que desaparezca el
objetivo. A continuación, el sujeto se relaja [1].

Cada anotación incluye uno de los tres códigos (T0, T1, T2) o:

• T0 corresponde a descansar.
• T1 corresponde al inicio del movimiento real de ambos puños.
• T2 corresponde al inicio del movimiento real de ambos pies.

De los 64 canales del EEG, en este trabajo se va a filtrar la señal correspondiente al


electrodo CZ (ver Figura 2. Posición de los electrodos en el experimento del TP1) cuyo
nombre de ahora en adelante va a ser S013R13CH11. Este electrodo se encuentra en el
centro del córtex cerebral, parte del cerebro encargada del control y análisis de los
movimientos voluntarios como se puede apreciar en la Figura 1.

Figura 1. Vista frontal del córtex cerebral. Tomada de http://goo.gl/hwRswo.

John Jaiber González Murillo – 2014 Página 2


Trabajo Práctico 1: Tipos de Señales

1.2. Caracterización de la señal

Las señales EEG se caracterizan por estar en el rango de los 10µV y los 100µV (150 µV en
algunos estudios como máximo) de amplitud y los 0.5Hz y 150Hz de frecuencia [2, p. 5].
El rango de frecuencia se ha dividido en varios anchos de banda que son caracterizados
por las Ondas Delta ( f < 4 Hz), las ondas Theta (4 – 7 Hz), las ondas Alpha (8 – 15 Hz), las
ondas Beta (16 – 31 Hz), las ondas Gamma (f > 32 Hz) y las ondas Mu (8 - 12 Hz) 1. Las
ondas Mu provienen de ritmos sensomotores y son patrones de la actividad eléctrica que
implican un gran número de neuronas, probablemente de tipo piramidal, en la parte del
cerebro que controla el movimiento voluntario, y son las que se analizan principalmente
en los estudios de desarrollo de BCI [3].

1.3. Valoración estrategias de filtrado

La Figura 2 muestra la señal seleccionada para el filtrado con una ampliación de los
componentes frecuenciales que comúnmente se suelen trabajar primero para
acondicionar la señal. Para facilitar la visualización y el procesado de señales EEG se
suelen utilizan filtros pasa banda con la finalidad de reducir el ruido existente. A nivel de
ruido no fisiológico, se puede observar que hay una componente DC que es mucho más
alta que el resto de los componentes frecuenciales. Para filtrar este tipo de ruido se
utilizan filtros paso-alto con frecuencia de corte entre 0.5 y 1 Hz para eliminar actividades
de muy baja frecuencia tales como las señales electrogalvánicas de los electrodos o
artefactos de movimiento. También se debe aplicar un filtro paso-bajo con frecuencia de
corte entre 35 y 70 Hz para evitar artefactos de elevada frecuencia como la actividad
muscular. Para evitar los artefactos de 50/60Hz producidos por la red eléctrica se pueden
usar filtros notch, aunque observando la amplitud de la FFT de la señal en 50Hz es nula y
en 60Hz es baja. Adicionalmente se deben usar los filtros expuestos en la sección 2.7.
Análisis de ruido y posibles técnicas de procesado y filtrado del TP1.

Figura 2. Señal S013R13CH11 y su espectro de frecuencias ampliado en la componente DC y


60Hz.

1 http://en.wikipedia.org/wiki/Electroencephalography

John Jaiber González Murillo – 2014 Página 3


Trabajo Práctico 1: Tipos de Señales

2. Filtros clásicos
Lo primero que se debe hacer para analizar una señal es acondicionarla. Los filtros juegan
un papel muy importante en ésta etapa ya que permiten eliminar información que no
tiene que ver con los análisis o permite ser más selectivos a la hora de hacerlos. Las
siguientes secciones muestran como aplicando distintos filtros se obtienen resultados
distintos.

2.1. Filtrado componente DC

Al tener una alta resolución frecuencial Δ𝑓 y una frecuencia de muestreo de 160Hz, se


pueden hacer filtros más selectivos.

𝟏 𝟏
𝚫𝒇 = = = 𝟎. 𝟎𝟎𝟖𝑯𝒛 Ecuación ①
𝑫𝒖𝒓𝒂𝒄𝒊ó𝒏 𝒔𝒆ñ𝒂𝒍 𝟏𝟐𝟑𝒔

Para filtrar la componente DC de la señal se creó un filtro pasa alto tipo Butterworth .

%Filtro Pasa alto eliminación compnente DC

W_hp = 0.05/(Fs/2); % Normalización de la frecuencia de corte


[bhp,ahp]= butter(2,W_hp, 'high'); % Filtro pasa alto de segundo orden 2.
hfvt= fvtool(bhp,ahp, 'Analysis','freq');
S11_hp=filter(bhp,ahp,S11);

Figura 3. Diagrama de Bode Filtro pasa alto con Fc = 0.05Hz para eliminar componente DC

Figura 4. Resultado de la señal después de aplicar filtrado de la componente DC

John Jaiber González Murillo – 2014 Página 4


Trabajo Práctico 1: Tipos de Señales

La Figura 3 muestra el análisis de magnitud y fase del filtro implementado y la Figura 4


el resultado de aplicar el filtro a la señal que estamos trabajando.

2.2. Moving Average o filtro de media móvil

Los filtros de media móvil o Moving Average se usan para suavizar las señales
adquiridas. Al suaviza una señal se están eliminando los componentes de alta frecuencia
de la misma.

%% Filtro de media Móvil - Moving Average


N_ma= 2
coeff_ma = ones(1,N_ma)/(N_ma);
hfvt= fvtool(coeff_ma, 'Analysis','freq');
S11_avg= filter(coeff_ma, 1, S11_hp);

Figura 5. Diagrama de Bode Filtro media móvil o Moving Average pasa bajo con N=2

Figura 6. Resultado de la señal después de aplicar filtrado de media móvil

La Figura 5 muestra el diagrama de Bode del filtro implementado en donde se puede


observar que el filtro no es muy selectivo. Empieza a filtrar a señal desde frecuencias en
dónde hay información útil para analizar las EEG. La Figura 6 muestra el resultado de

John Jaiber González Murillo – 2014 Página 5


Trabajo Práctico 1: Tipos de Señales

aplicar el filtro de media móvil. Al hacer una ampliación de la señal se observó que el
filtro de media móvil genera un retraso de la señal.

2.3. Filtro Derivador de Savitzky-Golay

La principal ventaja de esta aproximación es que tiende a preservar características de la


distribución inicial tales como los máximos y mínimos relativos, así como el ancho de los
picos, que normalmente desaparecen con otras técnicas de promediado como el filtrado
de media móvil de la sección anterior.

%% Fitro dervativo Savitzky-Golay


N_g = 8; % Órden del polinomio
F_g = 11; % Tamaño de la Ventana
S11_gly = sgolayfilt(S11_hp, N_g, F_g);
hfvt= fvtool(S11_gly, 'Analysis','freq');

Luego de aplicar el filtro, se puede apreciar en la Figura 7 los resultados. El filtro


disminuyó la potencia de las componentes frecuenciales de 50Hz en adelante. Sin
embargo presenta un rizado a partir de 68Hz, que al ser analizado con otros órdenes N
del polinomio es periódico.

Figura 7. Resultado de la señal después de aplicar filtrado derivativo Savitzky-Golay

2.4. Filtro FIR

Los filtros FIR tienen la gran ventaja por tener una fase lineal. Son filtros estables pero
tienen la desventaja de necesitar un orden mayor respecto a los filtros IIR para cumplir
las mismas características. Esto se traduce en un mayor gasto computacional 2.
%% Filtro FIR

W_lp = 70/(Fs/2); % Normalización de la frecuencia de corte


f_fir = fir1(10,W_lp);
hfvt= fvtool(f_fir, 'Analysis','freq');
S11_fir= filter(f_fir,1,S11_hp);

2 http://es.wikipedia.org/wiki/Finite_impulse_response

John Jaiber González Murillo – 2014 Página 6


Trabajo Práctico 1: Tipos de Señales

Figura 8. Diagrama de Bode del filtro FIR pasa bajo N=10, Fc = 70Hz

Figura 9. Resultado de la señal después de aplicar filtrado FIR

La Figura 8 muestra el diagrama de Bode del filtro implementado en donde se puede


observar que a partir de 50Hz empieza a atenuar las señales. La Figura 9 muestra el
resultado de aplicar el filtro FIR. Al igual que el filtro de media móvil, el filtro FIR genera
un retraso de la señal.

2.5. Filtro Butterworth

La mayoría de los filtros usados anteriormente tenían una fase lineal. De ahora en
adelante se van a usar los filtros IIR que son más selectivos con un orden inferior, pero
como desventaja tiene que su fase no es lineal como se puede apreciar en el filtro
Butterworth de orden 2 que se muestra en la Figura 10. Para linealizar la fase del filtro, se
aplica doble vez a la señal. La Figura 11 muestra el resultado de aplicar el filtro en donde
se ven una mayor atenuación de las componentes frecuenciales de más de 50Hz. Cuando
se amplía la señal filtrada solo con una pasada del filtro se ve un poco desfasada. Sin
embargo, cuando se aplica el filtro doble vez la señal no presenta retraso.

John Jaiber González Murillo – 2014 Página 7


Trabajo Práctico 1: Tipos de Señales

%% Filtro Butterworth Pasa Bajo 70Hz

W_blp = 70/(Fs/2); % Normalización de la frecuencia de corte


[blp,alp]= butter(2,W_blp, 'low'); % Filtro pasa bajo de segundo orden.
hfvt= fvtool(blp,alp, 'Analysis','freq');
S11_lp70=filter(blp,alp,S11_hp);
S11_lp70d=filtfilt(blp,alp,S11_hp); % Doble pasada del filtro

Figura 10. Diagrama de Bode del filtro Butterworth pasa bajo N=2, Fc = 70Hz

Figura 11. Resultado de aplicar filtro Butterworth pasa bajo

2.6. Filtro Chebyshev

Al igual que los filtros Butterworth, los filtros Chebyshev son filtros IIR. En este caso el
filtro es más selectivo pero presenta rizado en la banda de paso o la banda de rechazo
segun su configuración. En la Figura 12 y Figura 13 se puede apreciar que a partir de la
frecuencia de corte de 70Hz es cuando empieza atenuar las componentes frecuenciales de
la señal.

John Jaiber González Murillo – 2014 Página 8


Trabajo Práctico 1: Tipos de Señales

%% Filtro Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz

W_blpc = 70/(Fs/2); % Normalización de la frecuencia de corte


[blp_c,alp_c]= cheby1(4,1,W_blpc, 'low'); % Filtro pasa bajo de 4 orden.
hfvt= fvtool(blp_c,alp_c, 'Analysis','freq');
S11_lp70c=filter(blp_c,alp_c,S11_hp);
S11_lp70cd=filtfilt(blp_c,alp_c,S11_hp); % Doble pasada del filtro

Figura 12. Diagrama de Bode Filtro Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz

Figura 13. Resultado de aplicar filtro Chebyshev pasa bajo

2.7. Comparación de los filtrados clásicos

La Figura 14 muestra la comparación temporal de los filtrados clásicos, ya que en cada


una de las secciones anteriores se hizo el análisis frecuencial. El filtro que da una mejor
respuesta para eliminar el ruido de alta frecuencia de la señal EEG analizada es el la
doble pasada del filtro Butterworth de orden 2 a una frecuencia de corte de 70Hz, el cual

John Jaiber González Murillo – 2014 Página 9


Trabajo Práctico 1: Tipos de Señales

se puede utilizar para eliminar el ruido proveniente de movimientos musculares y de alta


frecuencia manteniendo la integridad de la señal sin afectar su forma de onda y sin
presentar retrasos en la misma.

Figura 14. Comparación temporal de los filtrados clásicos

3. Filtrado óptimo

El filtro de Wiener es un filtro lineal que se aplica de forma adaptativa a la varianza local
de los datos. Cuando la variación es grande, se realiza poco suavizado y cuando la
variación es pequeña se realiza. A menudo produce mejores resultados que el filtrado
lineal. Éste filtro es más selectivo que los filtros de la sección 2 ya que permite la
preservación de los bordes y otras partes de alta frecuencia. El filtro funciona mejor
cuando el ruido aditivo blanco de potencia constante, tal como un ruido blanco
Gaussiano.

% Simulación Ruido de la red a 50Hz


sn_50 = 100e-6*sin(2*pi*50*t); % Señal de 50Hz
% Suma de ruido de red a la Señal
S11_noise = S11_hp + sn_50; %
SNR_S11_noise_dB = snr(S11_noise,sn_50)

%Filtrado Wiener
hw = wienerfilter(S11_noise,sn_50,30,1);
S11_wf = filter1(S11_noise,hw,1);

La Figura 15 muestra el resultado de aplicar el filtrado Wiener a la señal S013R13CH11


sin componente DC, luego de haberle añadido ruido de red a 50Hz con un SNR de 2.15dB.
Se puede ver que el filtro únicamente elimina la componente de 50Hz de la señal y no
afecta las demás componentes, así que comparado con los filtros de la sección anterior es
más selectivo porque no está definido por una banda de paso ni de rechazo. El algoritmo
se ha entrenado para que reconozca una componente frecuencial específica, en este caso
la de 50Hz y luego genera los coeficientes para detectarla. Se probó el mismo método con
la señal sin el ruido añadido, y encontró muy poca componente de 50Hz como se puede
ver en la Figura 16.

John Jaiber González Murillo – 2014 Página 10


Trabajo Práctico 1: Tipos de Señales

Figura 15. Resultados de aplicar el filtrado Wiener N=30

Figura 16. Detección de ruido de 50Hz con el filtro de Wiener

4. Filtros Adaptativos

En la cancelación de ruido, filtros adaptativos permiten eliminar el ruido de una señal en


tiempo real. En este caso, la señal deseada, la de limpiar, combina el ruido y la
información deseada. Para eliminar el ruido, se ingresa una señal de referencia x(k) en el
filtro adaptativo que representa el ruido que está correlacionado con el ruido que se
desea eliminar de la señal deseada. Mientras que el ruido de entrada al filtro sigue
siendo correlacionado con el ruido no deseado que acompaña a la señal deseada, el filtro
adaptativo ajusta sus coeficientes para reducir el valor de la diferencia entre y(k) y d(k),
la eliminación del ruido resulta en una señal limpia en e(k) [4].

John Jaiber González Murillo – 2014 Página 11


Trabajo Práctico 1: Tipos de Señales

Figura 17. Diagrama de bloques de un filtro adaptativo. Tomada de [4].

4.1. Eliminación de ruido de red

La Figura 18 muestra la señal d(k) que va a ser filtrada del ruido de red de 50Hz añadido.
Su relación señal a ruido es de SNR=0.11dB.

Figura 18. Señal S013R13CH11 con ruido de 50Hz

La Figura 19 y la Figura 20 muestran el resultado de aplicar el filtro adaptativo LMS


luego de ingresar una señal con ruido de 50Hz como referencia y la señal S11R013CH11
con ruido de 50Hz añadido, ya que no presentaba componentes de esta frecuencia en su
espectro. Luego de probar el algoritmo varias veces y teniendo en cuenta que se
recomienda en [4] un valor de µ como se muestra en la Ecuación 2, se cambiaron los
valores a unos mucho más grandes y se obtuvieron buenos resultados.

𝟏
𝟎<µ< Ecuación ②
𝑵{𝒎𝒖𝒆𝒔𝒕𝒓𝒂𝒔 𝒅𝒆 𝒍𝒂 𝒔𝒆ñ𝒂𝒍}

También se puede apreciar en las figuras que a mayor valor de µ el filtro es más selectivo
y da una respuesta más rápida. La Figura 21 muestra el resultado de cambiar los
coeficientes del filtro adaptativo. En este caso se disminuyó el número de coeficientes y se

John Jaiber González Murillo – 2014 Página 12


Trabajo Práctico 1: Tipos de Señales

observó que la respuesta del filtro era más lenta y no eliminaba el ruido completamente
de la señal. De las tres opciones implementadas, la que mejor brinda respuesta es la de la
Figura 20.

Figura 19. Filtro adaptativo LMS con N=50 y µ=50

Figura 20. Filtro adaptativo LMS con N=50 y µ=150

Figura 21. Filtro adaptativo LMS con N=20 y µ=150

Una vez se ha identificado el funcionamiento del filtro se procede a realizar un análisis de


la señal original con la señal filtrada para mirar si hay cambios en otros componentes
espectrales. En la Figura 22 se observa el resultado de aplicar un filtrado adaptativo LMS
a la señal contaminada con ruido con un SNR de 0.1108dB. Como resultado se observa
una señal que al principio está contaminada con algo de ruido y luego filtrada totalmente

John Jaiber González Murillo – 2014 Página 13


Trabajo Práctico 1: Tipos de Señales

del ruido de 50Hz. Su relación SNR es de 21,71dB, lo que indica un buen filtrado de la
señal respecto a la que se ingresó.

%% Filtrado adaptativo LMS

x = 5*sn_50; %Entrada al filtro de ruido de la red


s = S11_hp; %Señal de ruido de observación
d = s+x; % Señal deseada
SNR_S11_noised_dB = snr(d,x) %SNR
mu = 1500; % tamaño de pasos LMS
Na = 50; % Coeficientes
[y,e] = lmsadaptativo(Na,mu,x,s,d,t,t_ann,v_ann);
ruido = e-s;
SNR_e = snr(y,ruido)

Figura 22. Resultados de aplicar el filtrado adaptativo LMS N=50 y µ=1500

4.2. Filtrado de señales relacionadas con un evento

En este caso se toman las anotaciones de la señal S013R13CH11 como señal de referencia
para el filtro adaptativo.

%% Filtro LMS para señales relacionadas a un evento

alms=0*ones([1,length(t)]);
indt = t_ann*160;

for i=1:length(indt)
alms(indt(i))=1;
end;

x = alms; %Entrada de referencia de anotaciones


s = S11_hp; %Señal de observación
d = s; % Señal deseada
mu = 1/3; % tamaño de pasos LMS
Na = 20 % Coeficientes

tit1 = ['Filtro adaptativo con N =', num2str(Na),' Coeficientes y µ = ',num2str(mu) ];


ha = adaptfilt.lms(Na,mu);
[y,e]= filter(ha,x,d);

John Jaiber González Murillo – 2014 Página 14


Trabajo Práctico 1: Tipos de Señales

Como respuesta se obtuvo a la salida del filtro adaptativo y(k) las siguientes gráficas:

Figura 23. Salida del filtro adaptativo a eventos relacionados con anotaciones. a) con N=20, b) con
N=50 y c) con N=100 coeficientes.

La Figura 23 muestra el resultado de aplicar el filtro adaptativo con referencia de señal a


eventos de las anotaciones con distintos coeficientes. El efecto de los coeficientes en este

John Jaiber González Murillo – 2014 Página 15


Trabajo Práctico 1: Tipos de Señales

caso determina el ancho de la señal que va a ser filtrada. A mayor número de coeficientes,
el tiempo de la señal de salida después de detectar un evento aumenta. Si tomamos un
filtro con 640 coeficientes, la salida del filtro equivaldría únicamente a la señal que tiene
anotaciones.

5. Filtro promediado

La señal analizada no cumple con la hipótesis para realizar un promediado de la señal


que dependa de las anotaciones de la base de datos, ya que a estímulos idénticos la
repuesta es variante en cada realización y el retardo entre la aplicación del estímulo no es
constante en cada realización, ya que varía de 4.2s a 4.1 segundos dependiendo del
estímulo. Sin embargo, se separaron cada uno de los estímulos de la señal en sus
respectivos grupos de anotaciones TP0, TP1 y TP2 como se explicó en la sección 1.1.

%% Filtro promediado

X1= S11_hp(indt(1): indt(2));


X2= S11_hp(indt(2): indt(3));
X3= S11_hp(indt(3): indt(4));
X4= S11_hp(indt(4): indt(5));
X5= S11_hp(indt(5): indt(6));
X6= S11_hp(indt(6): indt(7));
X7= S11_hp(indt(7): indt(8));
X8= S11_hp(indt(8): indt(9));
X9= S11_hp(indt(9): indt(10));
X10= S11_hp(indt(10): indt(11));
X11= S11_hp(indt(11): indt(12));
X12= S11_hp(indt(12): indt(13));
X13= S11_hp(indt(13): indt(14));
X14= S11_hp(indt(14): indt(15));
X15= S11_hp(indt(15): indt(16));
X16= S11_hp(indt(16): indt(17));
X17= S11_hp(indt(17): indt(18));
X18= S11_hp(indt(18): indt(19));
X19= S11_hp(indt(19): indt(20));
X20= S11_hp(indt(20): indt(21));
X21= S11_hp(indt(21): indt(22));

%Creación del espacio para el análisis espectral


L_X = length(X1);
N_X= 2^nextpow2(L_X); % Puntos de la DFT
f_X = Fs/2*linspace(0,1,(N_X/2)+1); %Para visualizar hasta la frecuencia Nyquist

XTP0_11 = (X1+X3+X5+X7+X9+X11+X13+X15+X17+X19+X21)/11;
XTP0_7 = (X1+X3+X5+X7+X9+X11+X13)/7;
XTP0_4 = (X1+X3+X5+X7)/4;
XTP0_0 = S11_hp(indt(3): indt(4))
figure('Color',[1 1 1]);
subplot(4,2,[1,3,5,7]); plot(t(indt(1): indt(2)),[XTP0_11;XTP0_7;XTP0_4;XTP0_0])
legend('Promedio de señales M = 11','Promedio de señales M = 7','Promedio de señales M =
4','Señal Original')
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
grid on;
title('Promediado de señales TP0 o en descanso')
Xf_1= fft(XTP0_11,N_X)/L_X;
subplot(4,2,2); plot(f_X,2*abs(Xf_1(1:N_X/2+1)));
title('FFT Promedio de señales M = 11')
axis([0,80,0,3e-5]); grid on;
Xf_2= fft(XTP0_7,N_X)/L_X;
subplot(4,2,4); plot(f_X,2*abs(Xf_2(1:N_X/2+1)));
title('FFT Promedio de señales M = 7')
axis([0,80,0,3e-5]); grid on;
Xf_3= fft(XTP0_4,N_X)/L_X;
subplot(4,2,6); plot(f_X,2*abs(Xf_3(1:N_X/2+1)));
title('FFT Promedio de señales M = 4')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]');
axis([0,80,0,3e-5]); grid on;

John Jaiber González Murillo – 2014 Página 16


Trabajo Práctico 1: Tipos de Señales

Xf_4= fft(XTP0_0,N_X)/L_X;
subplot(4,2,8); plot(f_X,2*abs(Xf_4(1:N_X/2+1)));
title('FFT Señal Original')
xlabel('Frecuencia [Hz]');
axis([0,80,0,3e-5]); grid on;

Como respuesta se obtuvo la Figura 24 en donde se puede apreciar que se pierden


muchas componentes frecuenciales importantes a medida que se aumenta el número de
promediados de la señal. Esto se debe a que las señales son variantes en el tiempo y no
hay un patrón regularizado que permita hallar secciones de la señal idénticas para hacer
el promediado. Lo que se puede hacer en un experimento posterior, es tomar las señales
de los otros sujetos analizados y con ellas armar un promedio del experimento total en un
solo canal.

Figura 24. Respuesta del Promediado de la Señal en los instantes TP0.

6. Conclusiones

De los filtros implementados, el más práctico y útil para analizar las señales es el filtro
adaptativo, siempre y cuando se conozca como es el ruido que está afectando la señal. Un
ejemplo de aplicación es la determinación de cómo afecta la señal ECG a la EEG,
tomando como señal de referencia la medición paralela del ECG y comparándola con el
filtro adaptativo para que genere la salida filtrada sin el ruido de los movimientos del
corazón. Lo mismo se puede usar con el movimiento ocular y el parpadeo, señales que
afectan mucho más la EEG para su análisis.

En cuanto a la reducción de ruido o señal en un ancho de banda determinado, los filtros


IIR brindan una mejor respuesta, siempre y cuando se apliquen doble vez para mejorar la
linealidad de la fase de su respuesta. Sin embargo, los mejores resultados se pueden
obtener combinando las técnicas, orientándolas a los resultados que se desean.

John Jaiber González Murillo – 2014 Página 17


Trabajo Práctico 1: Tipos de Señales

7. Bibliografía

[1] PhysioNet, «EEG Motor Movement/Imagery Dataset,» PhysioNet, [En línea]. Available:
http://www.physionet.org/physiobank/database/eegmmidb/. [Último acceso: Mayo 2014].
[2] Rezaul Begg, Daniel T.H. Lai, and Marimuthu Palaniswami, Computational Intelligence in Biomedical
Engineering, Boca Raton, Florida: CRC Press, 2008.
[3] BCI2000 Wiki, «User Tutorial:Mu Rhythm BCI Tutorial,» [En línea]. Available:
http://www.bci2000.org/wiki/index.php/User_Tutorial:Mu_Rhythm_BCI_Tutorial. [Último acceso: 20 Mayo
2014].
[4] © 1994-2014 The MathWorks, Inc., «Noise or Interference Cancellation,» [En línea]. Available:
http://www.mathworks.es/es/help/dsp/ug/overview-of-adaptive-filters-and-applications.html#bqud8rg.
[Último acceso: 23 Mayo 2014].
[5] J. Muthuswamy, «Chapter 18. Biomedical Signal Analysis,» de Standard Handbook of Biomedical Engineering
and Design, New York, NY, McGraw-Hill, 2003.
[6] Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-
K, Stanley HE., «PhysioBank, PhysioToolkit, and PhysioNet: Components of a New Research Resource for
Complex Physiologic Signals. Circulation 101(23):e215-e220.,» 13 Junio 2000. [En línea]. Available:
http://circ.ahajournals.org/cgi/content/full/101/23/e215. [Último acceso: Mayo 2014].
[7] Gerwin Schalk, Member, IEEE, Dennis J. McFarland, Thilo Hinterberger, Niels Birbaumer, and Jonathan
R.Wolpaw, «BCI2000: A General-Purpose Brain-Computer Interface (BCI) System,» IEEE Transactions on
Biomedical Engineering, vol. 51, nº 6, pp. 1034-1043, 2004.

John Jaiber González Murillo – 2014 Página 18


26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 1 of 10

%%
%%
%% TP2 Filtrado de Señales

% Programa Principal
% TP2 - Filtrado de Señales
% John Jaiber González Murillo
% Análisis y procesado avanzado de señales Biomédicas
% Máster en Ingeniería Biomédica
% Mayo - 2014

%% Filtrado DC

%Filtro Pasa alto eliminación componente DC

W_hp = 0.05/(Fs/2); % Normalización de la frecuencia de corte


[bhp,ahp]= butter(2,W_hp, 'high'); % Filtro pasa alto de segundo orden 2.
hfvt= fvtool(bhp,ahp, 'Analysis','freq');
S11_hp=filter(bhp,ahp,S11);

%% Filtro de media Móvil - Moving Average


N_ma= 2;
coeff_ma = ones(1,N_ma)/(N_ma);
hfvt= fvtool(coeff_ma, 'Analysis','freq');
S11_avg= filter(coeff_ma, 1, S11_hp);

%% Fitro dervativo Savitzky-Golay

N_g = 8; % Órden del polinomio


F_g = 11; % Tamaño de la Ventana
S11_gly = sgolayfilt(S11_hp, N_g, F_g);
%hfvt= fvtool(S11_gly, 'Analysis','freq');

% Gráfica temporal
figure('Color',[1 1 1]);
subplot(2,2,[1,3]),plot(t_S11,S11,'red');
legend(labels{11});
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
annV_edfm(t_ann,v_ann);
grid on, hold on
plot(t_S11,S11_gly);
legend('S013R13CH11 filtrada con Butterworth pasa alto Fc = 0.05Hz', 'Anotaciones','FFT
S013R13CH11 filtrada con derivador Savitzky-Golay N = 8', 'Location','NorthOutside');
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
axis([33,34,-250e-6,350e-6]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 2 of 10

Xf_S11_hp= fft(S11_hp,N)/L;
subplot(2,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1))),
title('FFT S013R13CH11 componente DC filtrada')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([10,80,0,3e-6]);
grid on
% Grafica del espectro frecuencial con filtro derivador Savitzky-Golay N = 8'
Xf_S11_gly= fft(S11_gly,N)/L;
subplot(2,2,4), plot(f,2*abs(Xf_S11_gly(1:N/2+1))),
title('FFT S013R13CH11 con filtro derivador Savitzky-Golay N = 8')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([10,80,0,3e-6]);
grid on
%%
%% Filtro FIR

W_lp = 70/(Fs/2); % Normalización de la frecuencia de corte


f_fir = fir1(10,W_lp);
hfvt= fvtool(f_fir, 'Analysis','freq');
S11_fir= filter(f_fir,1,S11_hp);

% Gráfica temporal
figure('Color',[1 1 1]);
subplot(2,2,[1,3]),plot(t_S11,S11,'red');
legend(labels{11});
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
annV_edfm(t_ann,v_ann);
grid on, hold on
plot(t_S11,S11_fir);
legend('S013R13CH11 filtrada con Butterworth pasa alto Fc = 0.05Hz', 'Anotaciones','FFT
S013R13CH11 filtrada con FIR pasa bajo orden 10, Fc = 70Hz', 'Location','NorthOutside');
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
title('Comparación señales filtradas');
axis([33,34,-250e-6,350e-6]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(2,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1))),
title('FFT S013R13CH11 componente DC filtrada')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([50,80,0,1e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con filtro FIR
Xf_S11_fir= fft(S11_fir,N)/L;
subplot(2,2,4), plot(f,2*abs(Xf_S11_fir(1:N/2+1))),
title('FFT S013R13CH11 con filtro FIR pasa bajo orden 10, Fc = 70Hz')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([50,80,0,1e-6]);
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 3 of 10

grid on

%% Filtro Butterworth Pasa Bajo 70Hz

W_blp = 70/(Fs/2); % Normalización de la frecuencia de corte


[blp,alp]= butter(2,W_blp, 'low'); % Filtro pasa bajo de segundo orden.
hfvt= fvtool(blp,alp, 'Analysis','freq');
S11_lp70=filter(blp,alp,S11_hp);
S11_lp70d=filtfilt(blp,alp,S11_hp); % Doble pasada del filtro

% Gráfica temporal
figure('Color',[1 1 1]);
subplot(3,2,[1,3,5]),plot(t_S11,S11,'red');
legend(labels{11});
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
annV_edfm(t_ann,v_ann);
grid on, hold on
plot(t_S11,S11_lp70,t_S11,S11_lp70d);
legend('S013R13CH11 filtrada con Butterworth N=2 pasa alto Fc = 0.05Hz',
'Anotaciones','S013R13CH11 filtrada con Butterworth pasa bajo N=2 Fc = 70Hz','S013R13CH11
Doble pasada Butterworth', 'Location','NorthOutside');
title('Comparación señales filtradas');
axis([33,34,-250e-6,350e-6]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(3,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1))),
title('FFT S013R13CH11 componente DC filtrada')
axis([50,80,0,1e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con filtro Butterworth
Xf_S11_lp70= fft(S11_lp70,N)/L;
subplot(3,2,4), plot(f,2*abs(Xf_S11_lp70(1:N/2+1))),
title('FFT S013R13CH11 Butterworth pasa bajo N=2 Fc = 70Hz')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]');
axis([50,80,0,1e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con filtro Butterworth doble
% pasada
Xf_S11_lp70d= fft(S11_lp70d,N)/L;
subplot(3,2,6), plot(f,2*abs(Xf_S11_lp70d(1:N/2+1))),
title('FFT S013R13CH11 Butterworth Doble pasada')
xlabel('Frecuencia [Hz]');
axis([50,80,0,1e-6]);
grid on

%% Filtro Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz

W_blpc = 70/(Fs/2); % Normalización de la frecuencia de corte


26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 4 of 10

[blp_c,alp_c]= cheby1(4,1,W_blpc, 'low'); % Filtro pasa bajo de 4 orden.


hfvt= fvtool(blp_c,alp_c, 'Analysis','freq');
S11_lp70c=filter(blp_c,alp_c,S11_hp);
S11_lp70cd=filtfilt(blp_c,alp_c,S11_hp); % Doble pasada del filtro

% Gráfica temporal
figure('Color',[1 1 1]);
subplot(3,2,[1,3,5]),plot(t_S11,S11,'red');
legend(labels{11});
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
annV_edfm(t_ann,v_ann);
grid on, hold on
plot(t_S11,S11_lp70c,t_S11,S11_lp70cd);
legend('S013R13CH11 filtrada con Butterworth N=2 pasa alto Fc = 0.05Hz',
'Anotaciones','S013R13CH11 filtrada con Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz','S013R13CH11
Doble pasada Chebyshev', 'Location','NorthOutside');
title('Comparación señales filtradas');
axis([33,34,-250e-6,350e-6]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(3,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1))),
title('FFT S013R13CH11 componente DC filtrada')
axis([50,80,0,1e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con filtro Chebyshev
Xf_S11_lp70c= fft(S11_lp70c,N)/L;
subplot(3,2,4), plot(f,2*abs(Xf_S11_lp70c(1:N/2+1))),
title('FFT S013R13CH11 Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]');
axis([50,80,0,1e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con filtro Chebyshev doble
% pasada
Xf_S11_lp70cd= fft(S11_lp70cd,N)/L;
subplot(3,2,6), plot(f,2*abs(Xf_S11_lp70cd(1:N/2+1))),
title('FFT S013R13CH11 Chebyshev Doble pasada')
xlabel('Frecuencia [Hz]');
axis([50,80,0,1e-6]);
grid on

%% Comparación tipos de filtrado clásicos

S11_l2 = cell(1,7)
S11_l2{1} = 'S013R13CH11';
S11_l2{2} = 'S013R13CH11 filtrada con Butterworth N=2 pasa alto Fc=0.05Hz';
S11_l2{3} = 'S013R13CH11 filtrada con media Móvil - Moving Average N=2';
S11_l2{4} = 'S013R13CH11 filtrada con dervativo Savitzky-Golay N=8';
S11_l2{5} = 'S013R13CH11 filtrada con FIR pasa bajo N=10, Fc=70Hz ';
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 5 of 10

S11_l2{6} = 'S013R13CH11 filtrada con doble pasada Butterworth Pasa bajo N=2 Fc = 70Hz';
S11_l2{7} = 'S013R13CH11 filtrada con doble pasada Chebyshev Pasa bajo N=4, R=1, Fc =
70Hz';

% Gráfica temporal
figure('Color',[1 1 1]);
plot(t_S11,S11,t_S11,S11_hp,t_S11,S11_avg,t_S11,S11_gly,t_S11,S11_fir,t_S11,S11_lp70d,
t_S11,S11_lp70cd,'lineWidth',2);
grid on; hold on;
legend(S11_l2,'Location','SouthOutside');
title('Comparación temporal de los filtrados clásicos');
annV_edfm(t_ann,v_ann);
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
axis([34,35,-250e-6,250e-6]);

%% Filtrado óptimo Wiener


%% Weiner

% Simulación Ruido de la red a 50Hz


sn_50 = 100e-6*sin(2*pi*50*t); % Señal de 50Hz
% Suma de ruido de red a la Señal
S11_noise = S11_hp + sn_50; %
SNR_S11_noise_dB = snr(S11_noise,sn_50)

%Filtrado Weiner
hw = wienerfilter(S11_noise,sn_50,30,1);
S11_wf = filter1(S11_noise,hw,1);

% Gráfica temporal
figure('Color',[1 1 1]);
subplot(3,2,[1,3,5]), plot(t_S11,S11_hp,'red','lineWidth',2);
hold on; plot(t_S11,S11_noise,t_S11, S11_noise-S11_wf);
title('S013R13CH11 con ruido de 50Hz añadido');grid on;
legend('S013R13CH11 con componente DC filtrada', 'S013R13CH11 con ruido de 50Hz añadido',
'S013R13CH11 después de filtrado');
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
axis([34,35,-250e-6,250e-6]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(3,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1))),
title('FFT S013R13CH11 componente DC filtrada')
%axis([10,80,0,3e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con Filtro Óptimo Wiener
Xf_S11_noise= fft(S11_noise,N)/L;
subplot(3,2,4), plot(f,2*abs(Xf_S11_noise(1:N/2+1))),
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 6 of 10

title('FFT S013R13CH11 con ruido de 60Hz SNR = 2.15 dB' )


ylabel('Potencia/Frecuencia [Vrms^2/Hz]');
%axis([10,80,0,3e-6]);
grid on
% Grafica del espectro frecuencial S013R13CH11 con Filtro Óptimo Wiener
Xf_S11_wi= fft(S11_noise-S11_wf,N)/L;
subplot(3,2,6), plot(f,2*abs(Xf_S11_wi(1:N/2+1))),
title('FFT S013R13CH11 Filtro Óptimo Wiener N=30')
xlabel('Frecuencia [Hz]');
%axis([10,80,0,3e-6]);
grid on

%% Comparación wiener

S11_wf2 = filter1(S11_hp,hw,1);
% Gráfica temporal
figure('Color',[1 1 1]);
plot(t_S11,S11_hp,'red','lineWidth',2);
hold on; plot(t_S11,S11_wf2,t_S11, S11_hp-S11_wf2);
title('Búsqueda de ruido de 50Hz en S013R13CH11');grid on;
legend('S013R13CH11 con componente DC filtrada', 'Ruido de 50Hz detectado', 'S013R13CH11
después de filtrado');
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
axis([34,35,-250e-6,250e-6]);

%% Señal con ruido de red aditivo

% Simulación Ruido de la red a 50Hz


sn_50 = 100e-6*sin(2*pi*50*t); % Señal de 50Hz
% Suma de ruido de red a la Señal
S11_noise = S11_hp + 5*sn_50; % Ruido añadido a la señal
SNR_S11_noisein_dB = snr(S11_noise,5*sn_50) %SNR

figure('Color',[1 1 1]);
subplot(2,2,[1,3]), plot(t_S11,S11_hp,'red','lineWidth',2);
hold on; plot(t_S11,S11_noise);
title('S013R13CH11 con ruido de 50Hz añadido');grid on;
legend('S013R13CH11 con componente DC filtrada', 'S013R13CH11 con ruido de 50Hz
añadido');
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
axis([34,35,-Inf,Inf]);

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(2,2,2), plot(f,2*abs(Xf_S11_hp(1:N/2+1)));
title('FFT S013R13CH11 con componente DC filtrada');
grid on;
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 7 of 10

% Grafica del espectro frecuencial S013R13CH11 con Ruido 50Hz


Xf_S11_noise= fft(S11_noise,N)/L;
subplot(2,2,4), plot(f,2*abs(Xf_S11_noise(1:N/2+1))),
title('FFT S013R13CH11 con ruido de 50Hz')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
grid on

%% LMS1
%
% [e,w]=lmsadap(100,L,S11_noise,sn_50);
% S11_lms = filter(w,1,S11_noise);
%
% figure('Color',[1 1 1]);
% plot(t_S11,S11_noise,'red','lineWidth',1);
% hold on; plot(t_S11,S11_lms,t_S11,sn_50);
% title('S013R13CH11 con ruido de 50Hz añadido');grid on;
% %legend('S013R13CH11 con componente DC filtrada', 'S013R13CH11 con ruido de 50Hz
añadido');
% xlabel('Tiempo [s]');
% ylabel('Amplitud [V]');
% axis([34,35,-250e-6,250e-6]);
%
% figure('Color',[1 1 1]);
% plot(t_S11,S11_lms,t_S11,sn_50,t_S11,e);

%% Filtrado adaptativo LMS

x = 5*sn_50; %Entrada al filtro de ruido de la red


s = S11_hp; %Señal de ruido de observación
d = s+x; % Señal deseada
SNR_S11_noised_dB = snr(d,x) %SNR
mu = 1500; % tamaño de pasos LMS
Na = 50; % Coeficientes
[y,e] = lmsadaptativo(Na,mu,x,s,d,t,t_ann,v_ann);
ruido = e-s;
SNR_e = snr(y,ruido)
%lmsadaptativo(50,50,x,s,d,t,t_ann,v_ann);
%lmsadaptativo(20,150,x,s,d,t,t_ann,v_ann);

% Grafica de la señal filtrada de ruido de 50Hz con filtro adaptativo


figure('Color',[1 1 1]);
tit2 = ['Señal filtrada con adaptativo N =', num2str(Na),' Coeficientes y µ = ',num2str
(mu) ];
subplot(2,3,[1,2,3]);plot(t,e); hold on; plot(t,s,'k');
title(tit2);
legend(tit2,'S013R13CH11 original')
annV_edfm(t_ann,v_ann);
axis([0,123,-Inf,Inf]); grid on;
xlabel('Tiempo [s]'); ylabel('Amplitud [V]');
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 8 of 10

% Graficas frecuenciales
% Grafica del espectro frecuencial S013R13CH11 sin componente DC
Xf_S11_hp= fft(S11_hp,N)/L;
subplot(2,3,4), plot(f,2*abs(Xf_S11_hp(1:N/2+1)));
title('FFT S013R13CH11 sin ruido de red');
axis([40,60,-Inf,Inf]); grid on;
% Grafica del espectro frecuencial S013R13CH11 con ruido 50Hz
Xf_S11_d= fft(d,N)/L;
subplot(2,3,5), plot(f,2*abs(Xf_S11_d(1:N/2+1))),
title('FFT S013R13CH11 con ruido de 50Hz')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([40,60,-Inf,Inf]); grid on;

Xf_S11_lmsg= fft(e,N)/L;
subplot(2,3,6), plot(f,2*abs(Xf_S11_lmsg(1:N/2+1))),
title('FFT S013R13CH11 filtrada con adaptativo LMS N=50 µ=1500')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]'); xlabel('Frecuencia [Hz]');
axis([40,60,-Inf,Inf]); grid on;

%% Filtro LMS para señales relacionadas a un evento

alms=0*ones([1,length(t)]);
indt = t_ann*160;

for i=1:length(indt)
alms(indt(i))=1;
end;

x = alms; %Entrada de referencia de anotaciones


s = S11_hp; %Señal de observación
d = s; % Señal deseada
mu = 1/3; % tamaño de pasos LMS
Na = 100 % Coeficientes

tit1 = ['Filtro adaptativo con N =', num2str(Na),' Coeficientes y µ = ',num2str(mu) ];


ha = adaptfilt.lms(Na,mu);
[y,e]= filter(ha,x,d);

figure('Color',[1 1 1]);
plot(t,[y]);
title(tit1);
axis([0,123,-100e-6,200e-6]);
grid on;
annV_edfm(t_ann,v_ann);
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
legend('Salida Filtro Adaptativo y(k)')
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 9 of 10

%% Filtro promediado

X1= S11_hp(indt(1): indt(2));


X2= S11_hp(indt(2): indt(3));
X3= S11_hp(indt(3): indt(4));
X4= S11_hp(indt(4): indt(5));
X5= S11_hp(indt(5): indt(6));
X6= S11_hp(indt(6): indt(7));
X7= S11_hp(indt(7): indt(8));
X8= S11_hp(indt(8): indt(9));
X9= S11_hp(indt(9): indt(10));
X10= S11_hp(indt(10): indt(11));
X11= S11_hp(indt(11): indt(12));
X12= S11_hp(indt(12): indt(13));
X13= S11_hp(indt(13): indt(14));
X14= S11_hp(indt(14): indt(15));
X15= S11_hp(indt(15): indt(16));
X16= S11_hp(indt(16): indt(17));
X17= S11_hp(indt(17): indt(18));
X18= S11_hp(indt(18): indt(19));
X19= S11_hp(indt(19): indt(20));
X20= S11_hp(indt(20): indt(21));
X21= S11_hp(indt(21): indt(22));

%Creación del espacio para el análisis espectral


L_X = length(X1);
N_X= 2^nextpow2(L_X); % Puntos de la DFT
f_X = Fs/2*linspace(0,1,(N_X/2)+1); %Para visualizar hasta la frecuencia Nyquist

XTP0_11 = (X1+X3+X5+X7+X9+X11+X13+X15+X17+X19+X21)/11;
XTP0_7 = (X1+X3+X5+X7+X9+X11+X13)/7;
XTP0_4 = (X1+X3+X5+X7)/4;
XTP0_0 = S11_hp(indt(3): indt(4))
figure('Color',[1 1 1]);
subplot(4,2,[1,3,5,7]); plot(t(indt(1): indt(2)),[XTP0_11;XTP0_7;XTP0_4;XTP0_0])
legend('Promedio de señales M = 11','Promedio de señales M = 7','Promedio de señales M =
4','Señal Original')
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
grid on;
title('Promediado de señales TP0 o en descanso')
Xf_1= fft(XTP0_11,N_X)/L_X;
subplot(4,2,2); plot(f_X,2*abs(Xf_1(1:N_X/2+1)));
title('FFT Promedio de señales M = 11')
axis([0,80,0,3e-5]); grid on;
Xf_2= fft(XTP0_7,N_X)/L_X;
subplot(4,2,4); plot(f_X,2*abs(Xf_2(1:N_X/2+1)));
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA\P...\TP2.m 10 of 10

title('FFT Promedio de señales M = 7')


axis([0,80,0,3e-5]); grid on;
Xf_3= fft(XTP0_4,N_X)/L_X;
subplot(4,2,6); plot(f_X,2*abs(Xf_3(1:N_X/2+1)));
title('FFT Promedio de señales M = 4')
ylabel('Potencia/Frecuencia [Vrms^2/Hz]');
axis([0,80,0,3e-5]); grid on;
Xf_4= fft(XTP0_0,N_X)/L_X;
subplot(4,2,8); plot(f_X,2*abs(Xf_4(1:N_X/2+1)));
title('FFT Señal Original')
xlabel('Frecuencia [Hz]');
axis([0,80,0,3e-5]); grid on;

%
% XTP1 = (X4+X6+X12+X14+X20)/5;
% figure('Color',[1 1 1]);
% plot(t(indt(4): indt(5)),[X4;X6;X12;X14;X20])
% hold on ; plot(t(indt(4): indt(5)),XTP1,'k','lineWidth',2);
%
% XTP2 = (X2+X8+X10+X16+X18)/5;
% figure('Color',[1 1 1]); plot(t(indt(2): indt(3)),[X2;X8;X10;X16;X18])
% hold on ; plot(t(indt(2): indt(3)),XTP2,'k','lineWidth',2);
26/05/14 21:14 D:\MASTER INGENIERIA BIOM...\wienerfilter.m 1 of 1

%h=mmsefilter(x,d,n,a)
% x Recorded signal
% d Desired signal
% n Number of filter coefficients
% a Delay=look-ahead samples, floor((n-1)/2) if not specified
%
%Construct minimum mean square error (MMSE) filter.
%
% 2002-10-04 | Michael Vinther | s973971@student.dtu.dk
function h = wienerfilter(x,d,nw,a)
if nargin<4
a = floor((nw-1)/2);
end

x = x(:)';
d = d(:);
if size(x,2)~=size(d,1)
error('x and d must have same length');
end

r = size(d,1)-nw+1;
if r<nw
error('Too few known samples for specified filter order.');
end

X = zeros(r,nw);
for i=1:r
X(i,:) = x(i:i+nw-1);
end

h = X\d(nw-a:nw-a-1+r);
26/05/14 21:13 D:\MASTER INGENIERIA BIOMÉDICA...\filter1.m 1 of 1

%x=filter1(s,h,a)
% s Data sequance
% h Filter
% a Filter delay=look-ahead samples, floor((n-1)/2) if not specified
%
%1D digital filter. h is not mirrored as with conv,
%and length(x) = length(s).
%
% 2002-9-29 | Michael Vinther | s973971@student.dtu.dk
function x = filter1(s,h,a)
if nargin<3
a = floor((length(h)-1)/2);
end
x = conv(s,flipud(h(:)));
x = x(1+a:a+length(s)); % Crop
26/05/14 21:13 D:\MASTER INGENIERIA BIO...\lmsadaptativo.m 1 of 1

function [y,e] = lmsadaptativo(Na,mu,x,n,d,t,t_ann,v_ann)

tit1 = ['Filtro adaptativo con N =', num2str(Na),' Coeficientes y µ = ',num2str(mu) ];


ha = adaptfilt.lms(Na,mu);
[y,e]= filter(ha,x,d);

figure('Color',[1 1 1]);
plot(t,[d;y;e]);
title(tit1);
axis([0,123,-Inf,Inf]);grid on;
xlabel('Tiempo [s]');
ylabel('Amplitud [V]');
legend('S013R13CH11 con ruido 50Hz d(k)','Salida Filtro Adaptativo y(k)','Error e(k)')

View publication stats

También podría gustarte