I am reaching out to see if I can get some assistance. I am using the Signal Processing Toolbox to analyze RMS sEMG signals. Is it possible to have the Signal Processing Toolbox to average the peak amplitudes within a certain time period? Also, is it possible to obtain the slopes of all the peak amplitude to examine out the burst pattern changes over time? If so, how is this performed?
Thank you for any assistance anyone can provide.

 Accepted Answer

Star Strider
Star Strider on 9 Nov 2018

0 votes

To get the peaks (and their locations and some other characteristics on them) use the findpeaks (link) function. You can then do whatever statistics you want to on them.
The gradient (link) function can calculate the instantaneous derivatives of your data to get the slopes.
You might also find the envelope (link) function helpful.
I do not understand what you want with ‘the slopes of all the peak amplitude’. The peak amplitude of any given peak would be a point, so the slope would be undefined.

More Answers (1)

Chris Myers
Chris Myers on 10 Jan 2019
Edited: Chris Myers on 10 Jan 2019

0 votes

Thank you for the feed back.
Now that I am a little more familiar with the programming and such, this leads me into my next question.
The EMG files I am analyzing are from the lower extremeties while running on the treadmill. I have isolate the EMG signal I want to analyze and ran the RMS scripts. I was wondering how I can the Signal Processing Toolbox calculate the average mV of each burst (i.e. activation of the measured muscle) during the run?
For example, if the burst was .00036 in length, how can I calculate the average mV of the signal during that time period?
Thank you for any insight you might be able to provide.
Best,
Chris

3 Comments

As always, my pleasure.
The EMG has a mean of 0, if I remember correctly. So it seems to me that you want the RMS value over the burst. Squaring the energy in the burst to ‘rectify’ it, then integrating it and taking the square root would likely work.
Another option would be to take the absolute value of the burst (actual full-wave rectification), and then integrating it with the trapz function. Then divide by the length of the burst to get the mean amplitude.
A third option would be to either use a lowpass filter or the envelope function to detect the envelope of a full-wave rectified signal, then use the trapz function to integrate the derived envelope, and divide by the length of the burst to get the mean amplitude.
I’ve not done anything with EMG signals in a while, so perhaps looking through the literature to see how others did this would be best (especially if there’s a generally-accepted method that you could reference in your ‘Materials and Methods’ section). If you use a generally-accepted method, you would not also have to ‘prove’ that your method provides reliable data.
If you can find such a published method and need help programming it, attach the PDF of the paper that describes it in sufficient detail to a Comment here. I’ll do what I can to help you write code to implement it.
Thank you for the insight. Attached is a study similar to what i am trying to achieve. Essentially, I am want to measure the transformed EMG signal (via RMS) of the last 30s of each stage of our running protocol. By doing this, the stride rate and burst lengths are pretty stable and consistent.
Thank you for any assistance you can provide! I do truly appreciate it.
As always, my pleasure.
The essence of their signal processing appears to be in References 33-36. (The article in 36 is not available online for free. I cannot find any freely-available description of the Lee and Sung algorithm anywhere, so I cannot help you with it.)
Their signal; processing approach appears to be full-wave rectification and filtering, so I would use the techniques I outlined, along with the filter frequency parameters they used. (The elliptical filters created by the lowpass function are superior to the Butterworth designs they used.) I would use the lowpass function to do the filtering. Design the filter once (this is the second ‘d’ output of the function, so save it to the variable name of your choice), and then use it with the filtfilt function to filter your signals (not filter as suggested in the documentation).
I’m not sure I can help with the Lee and Sung algorithm even if I have it. I will nevertheless at least look at it of you can provide a detailed description of it and its application in this context.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!