How can I take an average of a signal in order to smooth the data?

First I need to divide each cycle up. each cycle needs to be divided as: 0.2 seconds before and 0.4 seconds after the highest y value. That way all the cycles will align.
I am quite new to matlab, so sorry I can't even attempt this. Thank you. :)

 Accepted Answer

Let t be the set of time points, y your signal, and fs be the sampling rate.
[~,peaks] = findpeaks(y,'MinPeakHeight',1); % select only the highest peaks
segments = arrayfun(@(x) x-round(0.2*fs):x+round(0.4*fs), peaks,'UniformOutput',false);
y_around_peak = cell2mat(cellfun(@(x) y(x), segments ,'UniformOutput',false)');
plot((-round(0.2*fs):round(0.4*fs))/fs,y_around_peak);
If you get an error in line 2, that probably means you don't have enough samples around either the first or the last peak - in that case, replace peaks in line 2 by peaks(2:end-1).

6 Comments

Is there a way to plot one averaged cycle instead of all the cycles on top of each other, thanks.
Just take the mean before plotting:
plot((-round(0.2*fs):round(0.4*fs))/fs,mean(y_around_peak));
never mind, I managed to fix the error myself, thanks for the help!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!