function [EMGOutput,W] = SimEMGProcessing(EMGInput,varargin) % Set Default SNR = 20; WhitenFlag = 'On'; R = 16; NeedleType = 'MonoPolar'; for i = 1:2:length(varargin) switch varargin{i} case 'SNR' SNR = varargin{i+1}; case 'WhitenFlag' WhitenFlag = varargin{i+1}; case 'R' R = varargin{i+1}; case 'NeedleType' NeedleType = varargin{i+1}; end end [N,NumCh1] = size(EMGInput); if strcmp(SNR,'Inf')==1 EMGNoisedtemp = EMGInput; else EMGNoisedtemp = awgn(EMGInput,SNR,'measured'); end if strcmp(NeedleType,'MonoPolar')==1 EMGNoised = EMGNoisedtemp ; else if strcmp(NeedleType,'BiPolar')==1 EMGNoised = zeros(N,NumCh1-8); for i = 1:NumCh1-8 EMGNoised(:,i) = EMGNoisedtemp(:,i) - EMGNoisedtemp(:,i+8); end end end [~,NumCh2] = size(EMGNoised); EMGExtended = zeros(N,NumCh2*(R+1)); EMGExtended(:,1:NumCh2) = EMGNoised; if R~=0 for i = 1:R EMGExtended(1+i:end,NumCh2*i+1:NumCh2*i+NumCh2) = EMGNoised(1:end-i,:); end end EMGExtendedSubMean = EMGExtended - ones(N,1)*mean(EMGExtended,1); if strcmp(WhitenFlag,'On')==1 Rxx = EMGExtendedSubMean'*EMGExtendedSubMean; [V,D] = eig(Rxx); fudgefactor = 0; % W = (V*diag(1./(diag(D)+fudgefactor).^(1/2))*V')'; W = real((V*diag(1./(diag(D)+fudgefactor).^(1/2))*V'))'; EMGOutput = W * EMGExtendedSubMean'; else EMGOutput = EMGExtendedSubMean'; W = []; end end