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