Is there any better way to find the average of a dynamic signal for a specific time like 10s or something.?

6 views (last 30 days)
I have a dynamic signal which needs to be taken average every X seconds. Please post down your ideas how to do it.
p.s : without using mean

Answers (2)

Mathieu NOE
Mathieu NOE on 22 Nov 2021
hello
this is a demo code for splitting a signal in smaller chunks (buffer) with or without overlap (as you prefer)
for each buffer you can compute whatever metrics you need (min / max / rms / sigma....)
clc
clearvars
% dummy data
data = rand(320,3); % data must be column oriented (number of rows = number of samples)
buffer = 25; % nb of samples for averaging
%% zero overlap averaging (unweighted)
[m,n] = size(data);
for ci=1:fix(m/buffer)
start_index = 1+(ci-1)*buffer;
stop_index = min(start_index+ buffer-1,m);
time_index(ci) = round((start_index+stop_index)/2); % time index expressed as sample unit (dt = 1 in this simulation)
avg_data(ci,:) =mean(data(start_index:stop_index,:)); %
end
figure(1),
plot(time_index,avg_data,'+-');
% return
%% averaging with overlap
clearvars
% dummy data
data = rand(320,3);
buffer = 25; % nb of samples in one buffer (buffer size)
overlap = 10; % overlap expressed in samples
%%%% main loop %%%%
[m,n] = size(data);
shift = buffer-overlap; % nb of samples between 2 contiguous buffers
for ci=1:fix((m-buffer)/shift +1)
start_index = 1+(ci-1)*shift;
stop_index = min(start_index+ buffer-1,m);
time_index(ci) = round((start_index+stop_index)/2); % time index expressed as sample unit (dt = 1 in this simulation)
avg_data(ci,:) = mean(data(start_index:stop_index,:)); %
end
figure(2),
plot(time_index,avg_data,'+-');

Peter Perkins
Peter Perkins on 23 Nov 2021
Why would you not use mean?
In any case, make a timetable, and use something like
retime(tt,'regular','mean','TimeStep',seconds(10))

Categories

Find more on Complex Logic in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!