How to proper filter an EMG?
Show older comments
How can I plot the signal from the file "sigtest230504.mat" in MATLAB with a sampling frequency of 1000Hz and identify any artifacts present in the signal? Once artifacts are detected, please suggest appropriate filtering techniques to remove them.
Furthermore, what physiological information can be extracted from the estimated spectrum, and what parameters are associated with this information? Please calculate at least one parameter in the frequency domain, explain its physiological significance, and provide commentary on the numerical value obtained.
THANK YOU VERY MUCH FOR THE HELP
9 Comments
Star Strider
on 10 Jun 2023
See my answer to your previous Question: How can I distinguish from an unfiltered signal an eeg signal from an emg one?
I have no idea what sort of ‘parameters’ you want to derive.
HelpAStudent
on 10 Jun 2023
Star Strider
on 10 Jun 2023
The idea of a ‘parameter’ implies some sort of model or at least criteria (such as power at a specific frequency or band of frequencies). There could be several to choose from, depending on how you want to analyse the data.
HelpAStudent
on 10 Jun 2023
It depends on what these represent (surface or intramuscular EMG), normal or pathological, and other characteristics. There is nothing in these signals to suggest a specific approach to analysing them.
LD = load('sigtest230504.mat');
s = LD.sig;
L = numel(s)
Fs = 1E+3;
Fn = Fs/2;
t = linspace(0, L-1, L)/Fs;
figure
plot(t, s)
grid
xlabel('Time')
ylabel('Amplitude')
figure
plot(t, s)
grid
xlabel('Time')
ylabel('Amplitude')
xlim([0 0.25])
.
HelpAStudent
on 10 Jun 2023
That is difficult to determine, since the purpose of getting the EMG is to derive specific information from it, and that information depends on the clinical indication for it or the experimental design.
In the absence of any other infomration, one way to explore it is with a spectrogram plot —
LD = load('sigtest230504.mat');
s = LD.sig;
L = numel(s)
Fs = 1E+3;
Fn = Fs/2;
t = linspace(0, L-1, L)/Fs;
figure
pspectrum(s, Fs, 'spectrogram')
colormap(turbo)
[sp,fp,tp] = pspectrum(s, Fs, 'spectrogram');
figure
waterfall(fp,tp,sp')
set(gca,XDir="reverse",View=[60 60])
ylabel("Time (s)")
xlabel("Frequency (Hz)")
zlabel("Magnitude (mV ?)")
colormap(turbo)
colorbar
xlim([0 500])
[az,el] = view;
view(-45, 45)
Unfortunately, this does not provide much information. It demonstrates fatigue (decrease in the higher frequencies with respect to time), however not much else.
.
HelpAStudent
on 15 Jun 2023
Star Strider
on 15 Jun 2023
The 'spectrogram' plot pspectrum calculates and plots express the power (in decibels) of the signal at each frequency and time.
The waterfall plot indicate the magnitudes (not power, which would be magnitude²) at each frequency and time.
A different biopotential signal would likely have different time-frequency chartacteristics, so that depends on the signal and the context of what you are searching for.
Answers (0)
Categories
Find more on Spectral Measurements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


