how can I calculate movmean from 1 periode wave data?

1 ビュー (過去 30 日間)
christina widyaningtyas
christina widyaningtyas 2022 年 6 月 14 日
回答済み: Peter Perkins 2022 年 6 月 14 日
I have data :
x-axis is datetime - experiment time start (called as t=0)
y-axis is pressure
How to calculate the moving average of one periode wave data (example like this figure)?
X is time 00:21:00 to 00:22:58
Y is pressure 931 to 931
I use 2016b and sometimes 2020 Matlab version
I hope someone can help me, please
thank you

採用された回答

Mathieu NOE
Mathieu NOE 2022 年 6 月 14 日
hello
we can use the peaks to compute this value as well
you can use islocalmax (or islocalmin) to locate local peaks.
Some smoothing may help if yur data are a bit noisy or "hairy"
see demo below
clc
clearvars
% demo on dummy data
n=1000;
x = linspace(0,10,n)';
y = 931*(0.9+0.1*cos(x/10))+10*sin(3*x-1)+ 5*rand(n,1);
% some smoothing first
ys = smoothdata(y,'gaussian',25);
% find positive local maxima
[tf, P] = islocalmax(ys,'MinProminence',std(ys)/3);
x_peak = x(tf);
y_peak = ys(tf);
% compute average of pressure on cycle by cycle
for ci = 1:numel(x_peak)-1
ind = (x>=x_peak(ci) & x<x_peak(ci+1));
y_avg(ci) = mean(y(ind));
x_avg(ci) = (x_peak(ci) + x_peak(ci+1))/2; % time value (plot) = mid point between two x_peak values
end
figure(1)
plot(x,y,'b',x,ys,'g',x_peak,y_peak,'dr',x_avg,y_avg,'+-k','linewidth',2,'markersize',12);
xlabel('time')
ylabel('pressure')
legend('raw signal','filtered signal','peaks','averaged cycle value');

その他の回答 (1 件)

Peter Perkins
Peter Perkins 2022 年 6 月 14 日

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by