Как создать гладкий отфильтрованный конверт на данных EMG в Matlab

Я новичок в анализе данных ЭМГ и был бы признателен за помощь.

Я хотел бы сгенерировать плавный линейный огибающий сигнал из моих данных 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')

Я получаю это (который также, кажется, не заботится, что данные исправлены):

Даже если бы мне пришлось принять функцию огибающей, я не уверен, как получить доступ только к обработанным данным огибающей, чтобы скорректировать график (т. Е. Изменить диапазон 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')

Я буду вечно благодарен за помощь в понимании того, как фильтровать и сглаживать данные ЭМГ!

1 ответ

Решение

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

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

Другие вопросы по тегам