# How to design multirate filter system for EMG signals

I am using Delsys Bagnoli EMG System to acquire sEMG from forearm muscles. When I use Delsys EMGworks application, output signals are clean as expected with minor interferences. However, when I use the following Matlab script to acquire the **signal** unusual signal pattern occured (spikes).

the image of frequency domain of the Data (Red color frequencies contains EMG information) acquired from Matlab script is attached herewith.

I want to know why this happens and how to remove thoses spikes

the **Matlab script:**

%% EMG initialize

raw = zeros(1,6);% EMG setup

emg = daq.createSession('ni');

ch1 = addAnalogInputChannel(emg, 'Dev1', 0, 'Voltage');

ch2 = addAnalogInputChannel(emg, 'Dev1', 1, 'Voltage');

ch3 = addAnalogInputChannel(emg, 'Dev1', 2, 'Voltage');

ch4 = addAnalogInputChannel(emg, 'Dev1', 3, 'Voltage');

ch5 = addAnalogInputChannel(emg, 'Dev1', 4, 'Voltage');

ch6 = addAnalogInputChannel(emg, 'Dev1', 5, 'Voltage');

emg.Rate = 4000; % sampling rate

lh = emg.addlistener('DataAvailable',@stopWhenExceed);

emg.NotifyWhenDataAvailableExceeds = 400; % data per one feature set (total of all channels)

emg.IsContinuous = true;

emg.startBackground();while 1

% check the existing time.mat file

time(end + 1 : end + 1, 1) = str2double(datestr(now,'SS.FFF'));

pause(0.01); % this pause should be there to acquire EMG data if (getGlobalSx==0) % if new set of data is available

data = getGlobalx; % aquire data

setGlobalSx(1);

end

raw(end +1:end+400, : ) = data;

end

# ANSWER

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

I realized that the pause we provide to the code to acquire EMG data should be equal to the,

`emg.NotifyWhenDataAvailableExceeds / emg.Rate`

which means 400/ 4000 = 0.1 not 0.01

Otherwise this multirate signal sampling happens.

`while 1`

% check the existing time.mat file

time(end + 1 : end + 1, 1) = str2double(datestr(now,'SS.FFF'));

**SEE MORE ANSWER CLICK THE LINK**

**https://www.matlabsolutions.com/resources/how-to-design-multirate-filter-system-for-emg-signals.php**