Remove noise from time series data
조회 수: 13 (최근 30일)
이전 댓글 표시
Hello Matlab community,
I have a time series data from different levels with 30 min interval. I tried to use the medfilt1 to remove outliers and worked at some level.
data2=medfilt1(data1,3)
Here is the plot of data1:
And here is the plot of data2:
However what I want to remove is the red crossed parts of the each level. I marked the purple data as an example. I do not want to make a perfectly smooth data but only to remove fluctuations exist at some points.
I wanted to apply 3 sigma method as an option and integrated the code of Adam Danz' code as below but I should have done something missing.
m = mean(data2);
sd = std(data2);
outliers = false(size(data2));
outliers(data2 < m-sd*3) = true;
outliers(data2 > m+sd*3) = true;
figure
t = 1:length(data2);
plot(t, data2, 'b.')
hold on
plot(t(outliers), d(outliers), 'ro')
rh = refline(0,m);
set(rh, 'color', 'm')
rh2 = refline(0,m+sd*3);
rh3 = refline(0,m-sd*3);
set([rh2,rh3], 'color', 'm', 'linestyle', '--')
legend('data', 'outliers', 'mean', '3rd sd')
All I want to do is to filter the fluctiations for each level but I really get confused about what I am doing.
I will glad to hear your suggestions.
Best,
Ezgi
댓글 수: 0
채택된 답변
Star Strider
2022년 6월 22일
Try something like this —
FrameLen = 201;
DataFilt = sgolayfilt(data1, 3, FrameLen);
figure
plot(t, DataFilt)
grid
Experiment with various values of ‘FrameLen’ to get the result you want.
.
댓글 수: 4
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Preprocessing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!