【发布时间】:2014-11-15 14:57:02
【问题描述】:
我在插入时间序列的温度数据时遇到问题。由于仪器漂移,时间变量非单调增加。例如,它在正确的时间开始,并按照编程设置每 40 秒采样一次。
YYYY MM DD HH MM SS
2013 9 29 17 0 1
2013 9 29 17 0 41
2013 9 29 17 1 21
2013 9 29 17 2 1
2013 9 29 17 2 41
2013 9 29 17 3 21
2013 9 29 17 4 1
2013 9 29 17 4 41
2013 9 29 17 5 21
2013 9 29 17 6 1
2013 9 29 17 6 41
2013 9 29 17 7 21
2013 9 29 17 8 1
然后随着时间的流逝,它会慢慢漂移以在不同的时间采样,如下所示。
2013 11 3 19 0 45
2013 11 3 19 1 25
2013 11 3 19 2 5
2013 11 3 19 2 45
2013 11 3 19 3 25
2013 11 3 19 4 5
2013 11 3 19 4 45
2013 11 3 19 5 25
2013 11 3 19 6 5
最糟糕的是,在仪器的电池寿命附近,它会以更随机的时间进行采样,即。
2013 11 19 0 14 0
2013 11 19 0 15 28
2013 11 19 0 16 56
2013 11 19 0 18 24
2013 11 19 0 19 52
2013 11 19 0 21 20
2013 11 19 0 22 48
2013 11 19 0 24 16
2013 11 19 0 25 44
2013 11 19 0 27 12
2013 11 19 0 28 40
2013 11 19 0 30 8
2013 11 19 0 31 36
2013 11 19 0 33 4
我希望使用此数据每 2 分钟进行一次插值,因为目前当我在 Matlab 中使用此数据进行 FFT 和 PSD 分析时,由于每天的温度波动,我没有得到预期的 PSD 峰值。
由于我的数据在我显示的日期向量的 datenum() 中,我使用下面的代码来获取每 2 分钟(每 0.0014 个日期数字)的新 Yi。
xi=(x(1,1):0.0014:x(end,1));
yi=interp1(x,y,xi);
其中 x 是 datenum 向量,即。
735506.708344907
735506.708807870
735506.709270833
735506.709733796
735506.710196759
735506.710659722
735506.711122685
735506.711585648
735506.712048611
735506.712511574
而y是每次样品来时的温度数据,
32.4086025192727
32.4052088117713
32.4051005865126
32.4043088697477
32.4049974142611
32.4046963702913
32.4038950877519
32.4047969012421
32.4055051003980
32.4062010783006
能否请您帮忙以某种方式将温度数据插入 2 分钟间隔数据集?我将不胜感激任何帮助和指导来解决这个问题。非常感谢。
尊敬的, 绫
【问题讨论】:
-
我认为您的方法没有任何问题。这应该可以正常工作。您为
xi和yi获得的结果有什么问题? -
嗨 Hoki,我刚刚发现我拥有的这个数据集有很多问题。我对其进行了排序,通过 fillgaps.m 删除了存在的 NaN,然后能够对其进行插值!谢谢你指出这一点。它帮助我意识到在 interp1() 之前需要修复的小问题,而我没有意识到这些小问题存在。
A_sorted=sortrows(A)A_f=fixgaps(A_sorted)[C,ia,ic]=unique(A_f); A_ia=A_f(ia,:) -
很高兴你解决了。事实上,有时需要在处理之前对数据进行“清理”,否则可能会出现奇怪的结果。你可以写一个关于你如何对你的问题进行排序的答案,然后接受它。这将结束问题。
-
感谢您的帮助 Hoki,我是使用该网站的新手,所以我不知道将答案发布在单独的内容中并接受它。我会这样做的。
标签: matlab time time-series interpolation