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