【问题标题】:interpolate nonmonotonic x data in matlab在matlab中插入非单调x数据
【发布时间】: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 分钟间隔数据集?我将不胜感激任何帮助和指导来解决这个问题。非常感谢。

尊敬的, 绫

【问题讨论】:

  • 我认为您的方法没有任何问题。这应该可以正常工作。您为 xiyi 获得的结果有什么问题?
  • 嗨 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


【解决方案1】:

对于我的数据,我必须在 interp1() 到 xi 之前清理时间序列。以下是我需要做的事情... 排序,填补空白 (NaN),每个时间样本只有一次测量。

A_sorted=sortrows(A); 
A_f=fixgaps(A_sorted); 
[C,ia,ic]=unique(A_f); 
A_ia=A_f(ia,:) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多