问题:如何在小范围内对NaN值进行局部插值?
我有一个时间序列(“x”数据均匀采样于“t”时间),其中包含一些NaN值。 例如:
x = [ 1 2 4 2 3 15 10 NaN NaN NaN NaN 2 4 NaN 19 25]
t = [0.1 0.2 0.3 ...etc..]
我希望对NaN执行插值。
最基本的方法是从最左侧的数据点到最右侧的数据点进行线性插值。例如,从x = 10到x = 2的一条直线,4个NaN值将被分配线的值。
时间序列的长度约为150万,其中包含约10000个NaN值,因此我不希望在插值中使用远离NaN位置的数据。一些NaN跨越了1000-2000的长度。
X(isnan(X)) = interp1(find(~isnan(X)), X(~isnan(X)), find(isnan(X)), 'linear');
将使用整个时间系列对NaN进行线性插值。
如何进行本地插值?线性插值应该足够了。也许线性插值在NaN块左右几个点(可能是100-200个点)的基础上。自然邻居或样条算法可能更合适;我必须小心,不要向时间序列中添加异常行为(例如插值使频率增加了虚假的“功率”)。
更新: 时间序列记录了一年内每分钟采样的温度数据。线性插值已经足够了;我只需要填补约6-7小时的NaN间隙(我已经有了NaN间隙之前和之后的数据)。