Is there any better way to find the average of a dynamic signal for a specific time like 10s or something.?
조회 수: 5 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
답변 (2개)
Mathieu NOE
2021년 11월 22일
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,'+-');
댓글 수: 0
Peter Perkins
2021년 11월 23일
Why would you not use mean?
In any case, make a timetable, and use something like
retime(tt,'regular','mean','TimeStep',seconds(10))
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!