75 lines (56 with data), 2.1 kB
#ifndef _CREATE_EMG_ENVELOPE_ANY_
#define _CREATE_EMG_ENVELOPE_ANY_
#class_template CreateEmgEnvelope (BandPassLowFreq, BandPassHighFreq, LowPassFreq, NormFactor, C3DFolder, Label, t) {
AnyFloat Norm = iffun(eqfun(1.0*NormFactor,0),1.0,1.0*NormFactor);
AnyInt EndFrame =C3DFolder.Header.FirstFrameNo-1+(C3DFolder.Header.LastFrameNo-C3DFolder.Header.FirstFrameNo+1)* C3DFolder.Header.NoAnalogSamplesPer3DFrame;
AnyFloatVar tStart = C3DFolder.Header.FirstFrameNo/C3DFolder.Header.VideoFrameRate;
AnyFloatVar tEnd = C3DFolder.Header.LastFrameNo/C3DFolder.Header.VideoFrameRate;
AnyInt AnalogData=EndFrame-C3DFolder.Header.FirstFrameNo;
AnyFloat Time=tStart+(iarr(0,AnalogData)*(tEnd-tStart)/AnalogData);
AnyVar SampleFreq= (AnalogData)/(tEnd-tStart);
AnyFunButterworthFilter BandPassFilter =
{
//z0 = ;
AutomaticInitialConditionOnOff = On;
FilterForwardBackwardOnOff = On;
N = 2;
Fs = .SampleFreq;
Fc = {BandPassLowFreq,BandPassHighFreq};
//W = {1/(0.5*SampleFreq)*BandPassLowFreq, 1/(0.5*SampleFreq)*BandPassHighFreq};
//W = {1/(0.5*.SampleFreq)*.BandPassLowFreq};
Type = BandPass;
};
AnyFunButterworthFilter LowPassFilter =
{
//z0 = ;
AutomaticInitialConditionOnOff = On;
FilterForwardBackwardOnOff = On;
N = 2;
Fs = .SampleFreq;
Fc = {LowPassFreq};
//W = {1/(0.5*SampleFreq)*LowPassFreq};
Type = LowPass;
};
AnyFloat BandPassFiltered = BandPassFilter(C3DFolder.Analog.Data.Label);
AnyFloat Flipped = abs(BandPassFiltered);
AnyFloat EMGEnvelope = LowPassFilter(Flipped)/Norm;
AnyFunInterpol Interpol =
{
Type = PiecewiseLinear;
T = .Time;
Data = {.EMGEnvelope};
//FileName = "";
//FileErrorContinueOnOff = Off;
};
AnyVar mEMG = Interpol(t)[0];
AnyFunInterpol InterpolRaw =
{
Type = PiecewiseLinear;
T = .Time;
Data = {.C3DFolder.Analog.Data.Label};
//FileName = "";
//FileErrorContinueOnOff = Off;
};
AnyVar mEMGRaw = InterpolRaw(t)[0];
};
#endif