Electromyography analysis module

electromyography.analyzeEMG(rawEMGSignal, samplerate, preprocessing=True, lowpass=50, highpass=20, threshold=0.01, nseg=3, phasic_seconds=4)[source]

This functions acts as entrypoint for the EMG Analysis.

  • Input:
    • rawEMGSignal = raw signal as list
    • samplerate = samplerate of the signal
    • lowpass = lowpass cutoff in Hz
    • highpass = highpass cutoff in Hz
    • threshold for the evaluation of ZC,MYOP,WAMP,SSC
    • nseg = number of segments for MAVSLPk, MHW,MTW
  • Output:
    • results dictionary
electromyography.butter_highpass(cutoff, fs, order=5)[source]

This functions generates a higpass butter filter

Parameters:
  • cutoff (float) – cutoff frequency
  • cutoff – cutoff frequency
  • fs (float) – samplerate of the signal
  • order (int) – order of the Butter Filter
Returns:

butter highpass filter

Return type:

list

electromyography.butter_highpass_filter(data, cutoff, fs, order)[source]

This functions apply a butter highpass filter to a signal

Parameters:
  • data (list) – ECG signal
  • cutoff (float) – cutoff frequency
  • cutoff – cutoff frequency
  • fs (float) – samplerate of the signal
  • order (int) – order of the Butter Filter
Returns:

highpass filtered ECG signal

Return type:

list

electromyography.butter_lowpass(cutoff, fs, order=5)[source]

This functions generates a lowpass butter filter

Parameters:
  • cutoff (float) – cutoff frequency
  • cutoff – cutoff frequency
  • fs (float) – samplerate of the signal
  • order (int) – order of the Butter Filter
Returns:

butter lowpass filter

Return type:

list

electromyography.butter_lowpass_filter(data, cutoff, fs, order)[source]

This functions apply a butter lowpass filter to a signal

Parameters:
  • data (list) – ECG signal
  • cutoff (float) – cutoff frequency
  • cutoff – cutoff frequency
  • fs (float) – samplerate of the signal
  • order (int) – order of the Butter Filter
Returns:

lowpass filtered ECG signal

Return type:

list

electromyography.getAAC(rawEMGSignal)[source]

Get the Average amplitude change.:

AAC = 1/N * sum(|x(i+1) - xi|) for i = 1 --> N-1
  • Input:
    • raw EMG Signal as list
  • Output:
    • Average amplitude change of the signal
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:Average Amplitude Change of the signal
Return type:float
electromyography.getAFB(rawEMGSignal, samplerate, windowSize=32)[source]

Get the amplitude at first Burst.

Reference: Du, S., & Vuskovic, M. (2004, November). Temporal vs. spectral approach to feature extraction from prehensile EMG signals. In Information Reuse and Integration, 2004. IRI 2004. Proceedings of the 2004 IEEE International Conference on (pp. 344-350). IEEE.

  • Input:
    • rawEMGSignal as list
    • samplerate of the signal in Hz (sample / s)
    • windowSize = window size in ms
  • Output:
    • amplitude at first burst
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • samplerate (int) – samplerate of the signal int Hz
  • windowSize – window size in ms to use for the analysis
Returns:

Amplitute ad first Burst

Return type:

float

electromyography.getDASDV(rawEMGSignal)[source]

Get the standard deviation value of the the wavelength.:

DASDV = sqrt( (1 / (N-1)) * sum((x[i+1] - x[i])**2 ) for i = 1 --> N - 1    
  • Input:
    • raw EMG Signal
  • Output:
    • DASDV
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:standard deviation value of the the wavelength
Return type:float
electromyography.getFR(rawEMGPowerSpectrum, frequencies, llc=30, ulc=250, lhc=250, uhc=500)[source]

This functions evaluate the frequency ratio of the power spectrum.

Cut-off value can be decidec experimentally or from the MNF Feature See: Oskoei, M.A., Hu, H. (2006). GA-based feature subset selection for myoelectric classification.

  • Input:
    • raw EMG power spectrum as list,
    • frequencies as list,
    • llc = lower low cutoff
    • ulc = upper low cutoff
    • lhc = lower high cutoff
    • uhc = upper high cutoff
  • Output:
    • Frequency Ratio
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
  • llc (float) – lower cutoff frequency for the low frequency components
  • ulc (float) – upper cutoff frequency for the low frequency components
  • lhc (float) – lower cutoff frequency for the high frequency components
  • uhc (float) – upper cutoff frequency for the high frequency components
Returns:

frequencies ratio of the EMG power spectrum

Return type:

float

electromyography.getHIST(rawEMGSignal, nseg=9, threshold=50)[source]

Histograms is an extension version of ZC and WAMP features.

  • Input:
    • raw EMG Signal as list
    • nseg = number of segment to analyze
    • threshold = threshold to use to avoid DC fluctuations
  • Output:
    • get zc/wamp for each segment
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • nseg (int) – number of segments to analyze
  • threshold (int) – value to sum / substract to the zero when evaluating the crossing.
Returns:

Willison amplitude

Return type:

float

electromyography.getIEMG(rawEMGSignal)[source]

This function compute the sum of absolute values of EMG signal Amplitude.:

IEMG = sum(|xi|) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • integrated EMG
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:the IEMG of the EMG Signal
Return type:float
electromyography.getLOG(rawEMGSignal)[source]

LOG is a feature that provides an estimate of the muscle contraction force.:

LOG = e^((1/N) * sum(|xi|)) for x i = 1 --> N
  • Input:
    • raw EMG Signal
  • Output = * LOG
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:LOG feature of the EMG Signal
Return type:float
electromyography.getMAV(rawEMGSignal)[source]

Thif functions compute the average of EMG signal Amplitude.:

MAV = 1/N * sum(|xi|) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • Mean Absolute Value
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:the MAV of the EMG Signal
Return type:float
electromyography.getMAV1(rawEMGSignal)[source]

This functoin evaluate Average of EMG signal Amplitude, using the modified version n°.1.:

IEMG = 1/N * sum(wi|xi|) for i = 1 --> N
wi = {
      1 if 0.25N <= i <= 0.75N,
      0.5 otherwise
      }
  • Input:
    • raw EMG Signal as list
  • Output:
    • Mean Absolute Value
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:the MAV (modified version n. 1) of the EMG Signal
Return type:float
electromyography.getMAV2(rawEMGSignal)[source]

This functoin evaluate Average of EMG signal Amplitude, using the modified version n°.2.:

IEMG = 1/N * sum(wi|xi|) for i = 1 --> N
wi = {
      1 if 0.25N <= i <= 0.75N,
      4i/N if i < 0.25N
      4(i-N)/N otherwise
      }
  • Input:
    • raw EMG Signal as list
  • Output:
    • Mean Absolute Value
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:the MAV (modified version n. 2) of the EMG Signal
Return type:float
electromyography.getMAVSLPk(rawEMGSignal, nseg)[source]

Mean Absolute value slope is a modified versions of MAV feature.

The MAVs of adiacent segments are determinated.

MAVSLPk = MAV[k+1] - MAV[k]; k = 1,..,k+1
  • Input:
    • raw EMG signal as list
    • nseg = number of segments to evaluate
  • Output:
    • list of MAVs
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • nseg (int) – number of segments to evaluate
Returns:

Mean absolute slope value

Return type:

float

electromyography.getMDF(rawEMGPowerSpectrum, frequencies)[source]

Obtain the Median Frequency of the PSD.

MDF is a frequency at which the spectrum is divided into two regions with equal amplitude, in other words, MDF is half of TTP feature

  • Input:
    • raw EMG Power Spectrum
    • frequencies
  • Output:
    • Median Frequency (Hz)
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
Returns:

median frequency of the EMG power spectrum

Return type:

float

electromyography.getMNF(rawEMGPowerSpectrum, frequencies)[source]

Obtain the mean frequency of the EMG signal, evaluated as the sum of product of the EMG power spectrum and the frequency divided by total sum of the spectrum intensity:

MNF = sum(fPj) / sum(Pj) for j = 1 -> M 
M = length of the frequency bin
Pj = power at freqeuncy bin j
fJ = frequency of the spectrum at frequency bin j
  • Input:
    • rawEMGPowerSpectrum: PSD as list
    • frequencies: frequencies of the PSD spectrum as list
  • Output:
    • Mean Frequency of the PSD
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
Returns:

mean frequency of the EMG power spectrum

Return type:

float

electromyography.getMNP(rawEMGPowerSpectrum)[source]

This functions evaluate the mean power of the spectrum.:

Mean Power = sum(Pj) / M, j = 1 --> M, M = len of the spectrum
  • Input:
    • EMG power spectrum
  • Output:
    • mean power
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
Returns:

mean power of the EMG power spectrum

Return type:

float

electromyography.getMYOP(rawEMGSignal, threshold)[source]

The myopulse percentage rate (MYOP) is an average value of myopulse output. It is defined as one absolute value of the EMG signal exceed a pre-defined thershold value.

MYOP = (1/N) * sum(|f(xi)|) for i = 1 --> N
f(x) = {
        1 if x >= threshold
        0 otherwise
}
  • Input:
    • rawEMGSignal = EMG signal as list
    • threshold = threshold to avoid fluctuations caused by noise and low voltage fluctuations
  • Output:
    • Myopulse percentage rate
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • threshold (int) – value to sum / substract to the zero when evaluating the crossing.
Returns:

Myopulse percentage rate of the signal

Return type:

float

electromyography.getPSR(rawEMGPowerSpectrum, frequencies, n=20, fmin=10, fmax=500)[source]

This function computes the Power Spectrum Ratio of the signal, defined as: Ratio between the energy P0 which is nearby the maximum value of the EMG power spectrum and the energy P which is the whole energy of the EMG power spectrum

  • Input:
    • EMG power spectrum
    • frequencies as list
    • n = range around f0 to evaluate P0
    • fmin = min frequency
    • fmax = max frequency
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
  • n (int) – range of frequencies around f0 to evaluate
  • fmin (int) – min frequency to evaluate
  • fmax (int) – lmaximum frequency to evaluate
Returns:

Power spectrum ratio of the EMG power spectrum

Return type:

float

electromyography.getPeakFrequency(rawEMGPowerSpectrum, frequencies)[source]

Obtain the frequency at which the maximum peak occur

  • Input:
    • raw EMG Power Spectrum as list
    • frequencies as list
  • Output:
    • frequency in Hz
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
Returns:

peakfrequency of the EMG Power spectrum

Return type:

float

electromyography.getRMS(rawEMGSignal)[source]

Get the root mean square of a signal.:

RMS = (sqrt( (1 / N) * sum(xi**2))) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • Root mean square of the signal
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:Root mean square of the EMG signal
Return type:float
electromyography.getSM(rawEMGPowerSpectrum, frequencies, order)[source]

Get the spectral moment of a spectrum:

SM = sum(fj*(Pj**order)), j = 1 --> M
  • Input:
    • raw EMG Power Spectrum
    • frequencies as list
    • order (int)
  • Output:
    • SM of order = order
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
  • order (int) – order to the moment
Returns:

Spectral moment of order X of the EMG power spectrum

Return type:

float

electromyography.getSSC(rawEMGSignal, threshold)[source]

Number of times the slope of the EMG signal changes sign.:

SSC = sum(f( (x[i] - x[i-1]) X (x[i] - x[i+1]))) for i = 2 --> n-1

f(x){
    1 if x >= threshold
    0 otherwise
}
  • Input:
    • raw EMG Signal
  • Output:
    • number of Slope Changes
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • threshold (int) – value to sum / substract to the zero when evaluating the crossing.
Returns:

Number of slope’s sign changes

Return type:

int

electromyography.getSSI(rawEMGSignal)[source]

This function compute the summation of square values of the EMG signal.:

SSI = sum(xi**2) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • Simple Square Integral
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:SSI of the signal
Return type:float
electromyography.getTM(rawEMGSignal, order)[source]

This function compute the Temporal Moment of order X of the EMG signal.:

TM = (1 / N * sum(xi**order) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • TM of order = order
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • order (int) – order the the TM function
Returns:

Temporal Moment of order X of the EMG signal

Return type:

float

electromyography.getTTP(rawEMGPowerSpectrum)[source]

This functions evaluate the aggregate of the EMG power spectrum (aka Zero Spectral Moment)

  • Input:
    • raw EMG Power Spectrum
  • Output:
    • Total Power
Parameters:
  • rawEMGPowerSpectrum (list) – power spectrum of the EMG signal
  • frequencies (list) – frequencies of the PSD
Returns:

total power of the EMG power spectrum

Return type:

float

electromyography.getVAR(rawEMGSignal)[source]

Summation of average square values of the deviation of a variable.:

VAR = (1 / (N - 1)) * sum(xi**2) for i = 1 --> N
  • Input:
    • raw EMG Signal as list
  • Output:
    • Summation of the average square values
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:the VAR of the EMG Signal
Return type:float
electromyography.getVCF(SM0, SM1, SM2)[source]

This function evaluate the variance of the central freuency of the PSD.:

VCF = (1 / SM0)*sum(Pj*(fj - fc)**2),j = 1 --> M, = SM2 / SM0 - (SM1 /SM0) **2
  • Input:
    • SM0: spectral moment of order 0
    • SM1: spectral moment of order 1
    • SM2: spectral moment of order 0
  • Output:
    • Variance of Central frequency of the Power spectrum
Parameters:
  • SM0 (float) – Spectral moment of order 0
  • SM1 (float) – Spectral moment of order 1
  • SM2 (float) – Spectral moment of order 2
Returns:

Variance of central frequency

Return type:

float

electromyography.getWAMP(rawEMGSignal, threshold)[source]

Wilson or Willison amplitude is a measure of frequency information. It is a number of time resulting from difference between the EMG signal of two adjoining segments, that exceed a threshold.:

WAMP = sum( f(|x[i] - x[i+1]|)) for n = 1 --> n-1
f(x){
    1 if x >= threshold
    0 otherwise
}
  • Input:
    • rawEMGSignal = EMG signal as list
    • threshold = threshold to avoid fluctuations caused by noise and low voltage fluctuations
  • Output:
    • Wilson Amplitude value
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • threshold (int) – value to sum / substract to the zero when evaluating the crossing.
Returns:

Willison amplitude

Return type:

float

electromyography.getWL(rawEMGSignal)[source]

Get the waveform length of the signal, a measure of complexity of the EMG Signal.:

WL = sum(|x(i+1) - xi|) for i = 1 --> N-1
  • Input:
    • raw EMG Signal as list
  • Output:
    • wavelength of the signal
Parameters:rawEMGSignal (list) – the raw EMG signal
Returns:Waveform length of the signal
Return type:float
electromyography.getZC(rawEMGSignal, threshold)[source]

How many times does the signal crosses the 0 (+-threshold).:

ZC = sum([sgn(x[i] X x[i+1]) intersecated |x[i] - x[i+1]| >= threshold]) for i = 1 --> N - 1
sign(x) = {
            1, if x >= threshold
            0, otherwise
        }
  • Input:
    • rawEMGSignal = EMG signal as list
    • threshold = threshold to use in order to avoid fluctuations caused by noise and low voltage fluctuations
  • Output:
    • ZC index
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • threshold (int) – value to sum / substract to the zero when evaluating the crossing.
Returns:

Number of times the signal crosses the 0 (+- threshold)

Return type:

float

electromyography.phasicFilter(rawEMGSignal, samplerate, seconds=4)[source]

Apply a phasic filter to the signal, with +-4 seconds from each sample

  • Input:
    • rawEMGSignal = emg signal as list
    • samplerate = samplerate of the signal
  • Output:
    • phasic filtered signal
Parameters:
  • rawEMGSignal (list) – the raw EMG signal
  • samplerate (int) – samplerate of the signal in Hz
Returns:

the phasic filtered signal

Return type:

list