我刚开始分析EMG数据,希望能得到一些经过仔细解释的帮助。
我想用我的EMG数据生成平滑,线性的包络信号(采样率为50kHz),就像本文中发布的信号一样:https://openi.nlm.nih.gov/detailedresult.php?img=PMC3480942_1743-0003-9-29-3&req=4
我的最终目标是能够分析EMG活动(输出)与同时记录的上游神经元(假定输入)激发的动作电位之间的关系。
尽管本文非常清楚地列出了过滤方法,但我不了解它们的含义或如何在matlab(这是我可以使用的分析工具)中执行这些方法。
在到目前为止编写的代码中,我可以进行直流偏移以及纠正数据:
x = EMGtime_data
y = EMGvoltage_data
%dc offset
y2=detrend(y)
% Rectification of the EMG signal
rec_y=abs(y2);
plot(x, rec_y)
但是我不确定如何继续。 我已经尝试过信封功能,但是它不像我想要的那么平滑: 例如,如果我使用以下内容:
envelope(y_rec,2000,'rms')
我明白了(这似乎也不在乎数据是否已纠正):
即使我接受包络功能,也不确定如何仅访问已处理的包络数据来调整绘图(即更改y范围),或者进一步分析数据的起落点信号集,因为此功能的结果似乎与原始轨迹有关。
我也遇到了fastrms.m,这似乎很有希望。不幸的是,我不了解如何实现此功能,因为一般性的解释已经超出了我的理解,并且示例代码缺少任何已定义的变量(因此我不知道在哪里集成我自己的数据!) 这里是来自fastrms.m文件交换的示例代码
Fs = 200; T = 5; N = T*Fs; t = linspace(0,T,N);
noise = randn(N,1);
[a,b] = butter(5, [9 12]/(Fs/2));
x = filtfilt(a,b,noise);
window = gausswin(0.25*Fs);
rms = fastrms(x,window,[],1);
plot(t,x,t,rms*[1 -1],'LineWidth',2);
xlabel('Time (sec)'); ylabel('Signal')
title('Instantaneous amplitude via RMS')
我将非常感谢您了解如何过滤和平滑EMG数据!
答案 0 :(得分:0)
为了在时域上分析EMG信号,研究人员使用了整流和低通滤波的组合,也称为寻找信号的“线性包络”。
并且如上一句话和所附图片说明中所述,为了绘制叠加信号,您可以简单地对特定频率的信号进行低通滤波。
在您的随附文章中,上述信号已在8 HZ处过滤。
为了更好地了解EMG信号分析的技巧,我认为本文档可以为您提供很多帮助(link)