如何在 Matlab 中的 EMG 数据上生成平滑的滤波包络

How to generate smooth filtered envelope on EMG data in Matlab

我是分析 EMG 数据的新手,希望得到一些仔细解释的帮助。

我想为我的 EMG 数据(50kHz 采样率)生成一个平滑的线性包络信号,就像这篇论文中发表的那样:https://openi.nlm.nih.gov/detailedresult.php?img=PMC3480942_1743-0003-9-29-3&req=4

我的最终目标是能够分析 EMG activity(输出)与同时记录的上游神经元(假定输入)激发的动作电位之间的关系。

尽管这篇论文把过滤方法列出的很清楚,但我不明白它们是什么意思,也不知道如何在我可用的分析工具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 数据!

为了在时域中分析肌电信号,研究人员使用整流和低通滤波的组合,也称为寻找信号的“线性包络线”。
正如上面的句子和你所附文章图片的解释中提到的,为了绘制叠加信号,你可以简单地以特定频率对你的信号进行低通滤波。
在您所附的文章中,所述信号以 8 HZ 过滤。

为了更好地理解 EMG 信号分析的艺术,我认为这篇文档对您有很大帮助(link)