Normalizes EMG amplitude data by a per-channel reference value.
"mvc" divides by the per-channel maximum of a maximum-voluntary-
contraction trial (percentage-of-MVC). "peak" divides by the
within-trial peak so each channel ranges from 0 to 1. "rvc" divides by
the per-channel mean amplitude of a sub-maximal reference voluntary
contraction trial (percentage-of-RVC). "dynamic_peak" divides by a
centered moving maximum, tracking a time-varying peak within the trial.
Usage
emgAmplitudeNormalize(
x,
method = c("mvc", "peak", "rvc", "dynamic_peak"),
mvc_data = NULL,
rvc_data = NULL,
rvc_window = NULL,
assay_name = NULL,
output_assay = "normalized"
)Arguments
- x
A PhysioExperiment object (amplitude data).
- method
Normalization method: "mvc" (maximum voluntary contraction), "peak" (within-trial peak), "rvc" (sub-maximal reference voluntary contraction), or "dynamic_peak" (centered moving maximum).
- mvc_data
A PhysioExperiment containing MVC trial data (required for "mvc"). Must have the same number of channels as
x.- rvc_data
A PhysioExperiment containing the sub-maximal reference-task data (required for "rvc"). Must have the same number of channels as
x.- rvc_window
Optional window. For "rvc", a length-2 numeric
c(start, end)in seconds selecting the portion ofrvc_dataover which the mean reference amplitude is computed (default: the whole reference trial). For "dynamic_peak", the moving-maximum window length in seconds (default: 0.5).- assay_name
Assay to normalize (default: first assay).
- output_assay
Output assay name (default: "normalized").
Value
A PhysioExperiment object with an additional assay named
output_assay containing normalized amplitude values. For "peak" and
"dynamic_peak", values are scaled to a peak. For "mvc"/"rvc", values are
proportions of the reference (multiply by 100 for percentage-of-MVC /
percentage-of-RVC).
Details
Input is assumed to be amplitude data (a rectified signal or an
emgEnvelope() output). MVC and RVC normalization are scale-invariant to a
gain applied to both the signal and its reference trial.
References
De Luca, C.J. (1997). "The use of surface electromyography in biomechanics." Journal of Applied Biomechanics, 13(2), 135-163. doi:10.1123/jab.13.2.135
Yang, J.F. & Winter, D.A. (1984). "Electromyographic amplitude normalization methods: improving their sensitivity as diagnostic tools in gait analysis." Archives of Physical Medicine and Rehabilitation, 65(9), 517-521.
Burden, A. & Bartlett, R. (1999). "Normalisation of EMG amplitude: an evaluation and comparison of old and new methods." Medical Engineering & Physics, 21(4), 247-257. doi:10.1016/S1350-4533(99)00054-5
See also
emgEnvelope() for computing amplitude envelopes prior to
normalization, emgAmplitudeFeatures() for windowed amplitude features,
emgFatigue() for fatigue analysis,
emgOnsetDetect() for muscle activation onset detection
Examples
set.seed(1)
amp <- matrix(abs(rnorm(1000 * 2, sd = 0.3)), nrow = 1000, ncol = 2)
pe <- PhysioExperiment(
assays = list(raw = amp),
colData = S4Vectors::DataFrame(label = c("EMG1", "EMG2"),
type = c("EMG", "EMG")),
samplingRate = 1000)
# percentage-of-RVC using a sub-maximal reference (here, the trial itself)
pe_rvc <- emgAmplitudeNormalize(pe, method = "rvc", rvc_data = pe)
colMeans(SummarizedExperiment::assay(pe_rvc, "normalized")) # ~ 1
#> [1] 1 1