【问题标题】:interpolation of fortnightly annual temperature data into hourly measurements in matlab在matlab中将每两周的年度温度数据插值到每小时的测量值中
【发布时间】:2012-10-20 15:37:11
【问题描述】:

我有一个每两周记录一次的年度温度测量数据集。数据类似于以下内容:

t = 1:14:365;
% GENERATE DATA
y = 1 + (30-1).*rand(1,length(t));
y1 = 20*sin(2*pi*t/max(t));        % Annual variation °C
y1(y1<0) = [];
tt = 365/14;
time = 1:tt:365;
plot(time,y1,'-o');

明显遵循每年的温度循环。

由此我想知道是否可以在数据上添加一个正弦函数(代表昼夜温度范围)?例如,从每两周一次的数据中,如果我们要对系列进行插值以进行 8760 次测量,即每小时测量一次,那么为了使系列可信,除了年度温度周期外,还需要以昼夜温度周期为特征。此外,昼夜温度循环需要成为当时温度测量值的函数,即夏季比冬季大。所以也许最好首先使用线性插值来获取数据以表示每小时间隔,然后添加正弦函数。有没有办法将其写入脚本?或者有没有人对如何准确地实现这一点有意见?

【问题讨论】:

  • 您想知道的所有事情对我来说似乎都非常可行,并且在 Matlab 中,您有一个合适的工具集来完成这一切。
  • 感谢您的评论,您能否提供更多信息,即您指的是哪个工具集?
  • 我指的是 Matlab。

标签: matlab time interpolation


【解决方案1】:

第一:你知道好看的情节是最容易误导人的东西吗?对每 14 天收集一次的数据进行插值,使其看起来像每 小时 收集一次的数据,这至少被大多数圈子认为是不好的做法......

话虽如此,我还是会使用splines 进行插值——当从每两周和每小时更改为任意其他组合时,它们要灵活得多,而且每年的温度变化会很大更顺畅。

方法如下:

% Create spline through data
pp = spline(time, y1);


% define diurnal variation (this one is minimal at 4 AM)    
T_diurn = @(t) -A*cos(2*pi*(t-(4/24)));

% plot example 
t = 150 : 1/24 : 250;    
plot( t, ppval(pp,t)+T_diurn(t) , 'b')

【讨论】:

    【解决方案2】:

    您可以先使用类似的方法插入数据(最多 1 小时)

    x = 1:inv(24):365;
    T_interp = interp1(t,y1,x,'spline');
    

    查看 interp1 的 Matlab 文档(示例 2)

    然后在其上添加一个正弦。接下来是周期 1(24 小时)的正弦波,幅度为 A,在凌晨 3 点有最小值。

    T_diurn = -A*sin(2*pi*x+(3/24)*2*pi);
    

    然后

    T_total = T_diurn + T_interp;
    

    【讨论】:

    • 谢谢,这似乎与我的想法一致。尽管我希望还可以控制与一年中特定日期的实际温度相关的正弦波幅度。例如,温度越高,幅度越大,目前全年幅度相等,这在环境时间序列中是不现实的。再次感谢
    • 您可以将幅度 A 更改为基线(平均)温度的函数。或者任何你喜欢的。现在你已经有了工具,你可以使用它们了 :-) 祝你好运!
    猜你喜欢
    • 2020-02-20
    • 2020-02-10
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2017-11-14
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多