Remove noise from time series data
14 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1041720/image.png)
And here is the plot of data2:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1041725/image.png)
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')
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1041730/image.png)
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 Commenti
Risposta accettata
Star Strider
il 22 Giu 2022
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 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Data Preprocessing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!