Está en la página 1de 5

Marc Molina i Marc Pallarès

PSB
Estimación de la velocidad de conducción
Introducción:
En este estudio, pretendemos estudiar una señal electromiográfica (EMG). En esa
ocasión se registraron 7 canales diferenciales mediante una matriz lineal de 8 electrodos
un paciente con epicondilitis del músculo Extensor Carpi Radialis (ECR) del antebrazo.
En el estudio de señales EMG la amplitud del señal comúnmente se ha relacionado con
la fuerza pero se ha demostrado en varias investigaciones que la diferencia de potencial
medida por el sensor puede verse afectado por un gran conjunto de sucesos . De esta
manera, el parámetro muscular de mayor interés gracias a su asociación fisiológica con
la contracción (nivel y fatiga) es la Velocidad de conducción (VC). Esta va a ser
calculada de dos formas. Por un lado, estudiaremos la VC en el dominio temporal y por
otro, des del dominio frecuencial. Concretamente se estudiara la señal diferencial de
EMG siguiente.

Figura 1- Señales diferenciales rectificadas


(“read_atenea_signal.m”)
Dominio temporal :
Para calcular la VC utilizaremos la función de correlación cruzada. Esta se obtendrá
para intervalos de 500ms de duración. Con el fin de tener una resolución adecuada la
señal será muestreada a una frecuencia de 40960 Hz.
El valor máxima de la función resultante será de 1 y este sería el caso para la función de
correlación de dos señales que tengan como única diferencia un retardo temporal
determinado. Con tal de estimar la VC se ha utilizado una rutina de MATLAB llamada
“estimvc.m”.
Dicho script nos permite obtener VC en función del tiempo. Como vemos en la figura, a
medida que pasa el tiempo la VC se va decrementando. Esto es un signo claro de la
aparición de la fatiga ya que a medida que pasa el tiempo y el músculo esta contraído
cada vez la activación de este tarda más haciendo que la media de la VC decaiga.
Domini frecuencial:
Código MATLAB:
Práctica 4: %% gràficos %%
t2=(1:120)'/2;
function [velcond,coefcor] = estimvc(s1,s2,s3,fm)
muestras = (1:120);

dd1=S_2-S_3;
dd2=S_3-S_4; % Coeficiente de correlación en dominio
frecuencial y temporal
figure(1)
for i=0:119, plot(t2, coefCorf,'b', t2, cofcor,'k')
dd1int = detrend(interp(dd1(0.5*i*fm+1:.5*fm*(i+1)),20), 'constant'); xlabel('tiempo (s)')
dd2int = detrend(interp(dd2(0.5*i*fm+1:.5*fm*(i+1)),20), 'constant');
ylabel('Coef.corr')
title('Coeficiente de correlación')
% Calcular la función de correlación cruzada legend('Temp.', 'Freq.')
[correl,lags]=xcorr(dd1int,dd2int);
% Normalizar la función de correlación
Edd1int=sum(dd1int.^2); % Velocidad de conducción en dominio frecuencial
Edd2int=sum(dd2int.^2); y temporal%
corrnorm=correl/sqrt(Edd1int*Edd2int);
figure(2)
% Detectar el lag en que se encuentra el máximo de la correlación,
[cofcor(i+1), index]=max(corrnorm); plot(t2,velCondf, 'b',t2, velcond,'k')
% así como su valor (denominado coeficiente de correlación cruzada) xlabel('tiempo (s)')
retard=abs(lags(index))/(20*fm); ylabel('VC(m/s)')
% Pasar el valor de retardo (lag) obtenido a tiempo (segundos) title('Velocidad de conducción')
legend('Temp.', 'Freq.')
% Calcular la velocidad de conducción
velcond(i+1)=5.e-3/retard;
% Valor medio rectificado en dominio temporal
N=(0:119)/2;
plot(N,velcond) figure(3)
xlabel('tiempo (s)') plot(t2,ARV,'m')
ylabel('VC(m/s)') xlabel('tiempo (s)')
title('Velocidad de conducción') ylabel('ARV')
end title('ARV')

Práctica 7: % Mediana cuadrática en dominio temporal%


%%Dominio Frecuencial %% figure(4)
load varEMGecr.mat plot(t2,RMS,'m')
IED=5.e-3; xlabel('t (s)')
fm=2048; %Fmuestreo ylabel('RMS')
VDFT=4096; %F ventana hanning/DFT% title('RMS')

dd1=S_2-S_3; % Frec.media en dom.temp


dd2=S_3-S_4; figure(5)
plot(muestras,Fmedia)
xlabel('muestras')
for i=0:119 ylabel('Frecuencia (Hz)')
title('Frec.Media')
dd1int = detrend(interp(dd1(0.5*i*fm+1:.5*fm*(i+1)),20), 'constant');
dd2int = detrend(interp(dd2(0.5*i*fm+1:.5*fm*(i+1)),20), 'constant');
% Calcular la función de correlación cruzada
[c,lags]=xcorr(dd1int,dd2int, 500,'coef'); % Frec.mediana en dom.temp
%Detectar valor màximo valor de correl% figure(6)
[cc, samp] =max(c); plot(muestras,Fmedian)
%Valor de retraso del maximo de correlación%
vmr = lags(samp);
%Del valor a tiempo (s)%
retraso= abs(vmr)/(fm*20);
%Velcond%
vc= IED/retraso;
velcond(i+1)=vc;
coefCorrelacion(i+1)=cc;
%Vcond calculada frecuencialmente segmentos dde 0.5s%
s_2=S_2(0.5*i*fm+1:.5*fm*(i+1))';
s_3=S_3(0.5*i*fm+1:.5*fm*(i+1))';
s_4=S_4(0.5*i*fm+1:.5*fm*(i+1))';
s3 = [s_2;s_3;s_4];
[velCond,coefCor] = mcgill(s3,IED,fm);
coefCorf(i+1) = coefCor; %coef.correlación dominio frecuencial
velCondf(i+1) = velCond;
dd1f=s_2-s_3;
LongSen = length(dd1f);%longitud s.dif Ventana hanning
factor= sum(hann(LongSen))/LongSen; %factor ventana
VHann = hann (LongSen)/factor; %función hanning
dd1fh = dd1f.*VHann';%se multiplica la ventana por la señal diferencial 1
DFT= fft(dd1fh, VDFT); % DFT
DFTmitad = DFT(1:(VDFT/2)+1); % simetria par
Fven=[0:VDFT/2]*fm/VDFT; %frecuencias resultantes
Energia = sum(abs(DFTmitad).^2)/VDFT/2; %energía de la mitad de la señal
DEE =(abs(DFTmitad).^2)/(fm*Energia); %densidad espectral de energía con 1024 muestras
[fmean, fmed] = fmnmd(DEE, Fven); %para calcular la frecuencia media y mediana
Fmedia(i+1) = fmean;
Fmedian(i+1) = fmed;
ARV(i+1) = sum(abs(dd1f))/LongSen; % ARV
RMS(i+1) = sqrt(sum(dd1f.^2)/LongSen); %rms
end

También podría gustarte