Как создать гладкий отфильтрованный конверт на данных EMG в Matlab - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в анализе данных EMG и был бы признателен за некоторую тщательно объясненную помощь.

Я хотел бы генерировать плавный линейный сигнал охвата моих данных EMG (частота дискретизации 50 кГц), подобный тому, который опубликован вэта статья: https://openi.nlm.nih.gov/detailedresult.php?img=PMC3480942_1743-0003-9-29-3&req=4

Моя конечная цель - уметь анализировать взаимосвязь между активностью ЭМГ (выходной) и потенциалами действия, запускаемыми восходящими нейронами (предполагаемый вход), записанными одновременно.

Несмотря на то, что в этом документе перечислены методы фильтрации довольно четко, я не понимаю, что они означают или как их выполнять в 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')

, я получаю это (что, похоже, тоже не волнует, чтоданные исправлены):

enter image description here

Даже если бы мне пришлось принять функцию конверта, я не уверен, как получить доступ только к обработанным данным конверта дляотрегулируйте график (т. е. измените диапазон y) или проанализируйте данные для определения включенного и выключенного сигнала, поскольку результаты этой функции, по-видимому, связаны с исходной кривой.

Iтакже наткнулся на 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!

1 Ответ

0 голосов
/ 19 февраля 2019

Для анализа сигналов EMG во временной области исследователь использует комбинацию выпрямления и фильтрации нижних частот, которая также называется нахождением «линейной огибающей» сигнала.
И, как упоминалось в приведенном выше предложении и в вашемПояснение к приложенному изображению статьи, для того чтобы построить наложенный сигнал, вы можете просто отфильтровать сигнал низких частот на определенной частоте.
В прикрепленной статье указанный сигнал был отфильтрован с частотой 8 Гц.

Чтобы лучше понять искусство анализа сигналов EMG, я думаю, этот документ может вам очень помочь ( ссылка )

...