Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Filtrado Básico de Señales Biomédicas
Filtrado Básico de Señales Biomédicas
net/publication/271273652
CITATIONS READS
0 12,665
1 author:
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.
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
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.
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].
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.
1 http://en.wikipedia.org/wiki/Electroencephalography
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.
𝟏 𝟏
𝚫𝒇 = = = 𝟎. 𝟎𝟎𝟖𝑯𝒛 Ecuación ①
𝑫𝒖𝒓𝒂𝒄𝒊ó𝒏 𝒔𝒆ñ𝒂𝒍 𝟏𝟐𝟑𝒔
Para filtrar la componente DC de la señal se creó un filtro pasa alto tipo Butterworth .
Figura 3. Diagrama de Bode Filtro pasa alto con Fc = 0.05Hz para eliminar componente DC
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.
Figura 5. Diagrama de Bode Filtro media móvil o Moving Average pasa bajo con N=2
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.
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
2 http://es.wikipedia.org/wiki/Finite_impulse_response
Figura 8. Diagrama de Bode del filtro FIR pasa bajo N=10, Fc = 70Hz
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.
Figura 10. Diagrama de Bode del filtro Butterworth pasa bajo N=2, Fc = 70Hz
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.
Figura 12. Diagrama de Bode Filtro Chebyshev Pasa Bajo N=4 R=1 Fc=70Hz
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.
%Filtrado Wiener
hw = wienerfilter(S11_noise,sn_50,30,1);
S11_wf = filter1(S11_noise,hw,1);
4. Filtros Adaptativos
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.
𝟏
𝟎<µ< 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
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.
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ó.
En este caso se toman las anotaciones de la señal S013R13CH11 como señal de referencia
para el filtro adaptativo.
alms=0*ones([1,length(t)]);
indt = t_ann*160;
for i=1:length(indt)
alms(indt(i))=1;
end;
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.
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
%% Filtro promediado
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;
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;
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.
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.
%%
%%
%% 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
% 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
% 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
% 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
% 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
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 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
%% 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]);
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
%% 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);
% 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;
alms=0*ones([1,length(t)]);
indt = t_ann*160;
for i=1:length(indt)
alms(indt(i))=1;
end;
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
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
%
% 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
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)')