我正在寻找一种方法来使用 MATLAB 填充包含周期性数据的时间序列中的数据间隙(在这种情况下,频率等于潮汐频率,因此包括半昼夜和春季/间歇频率)。数据系列还包含噪声,我想将其叠加在填补时间间隙的人工数据之上。数据有一定的趋势,我想保留。理想情况下,我会研究一种在时间间隔两侧使用记录数据的方法。
无论如何在Matlab中这样做吗?
谢谢你。
唐纳德·约翰
我正在寻找一种方法来使用 MATLAB 填充包含周期性数据的时间序列中的数据间隙(在这种情况下,频率等于潮汐频率,因此包括半昼夜和春季/间歇频率)。数据系列还包含噪声,我想将其叠加在填补时间间隙的人工数据之上。数据有一定的趋势,我想保留。理想情况下,我会研究一种在时间间隔两侧使用记录数据的方法。
无论如何在Matlab中这样做吗?
谢谢你。
唐纳德·约翰
因此,人们可以做的是“猜测”一个模型函数,并使用一些优化程序通过该模型拟合数据。然后仔细查看残差并获得表征残差噪声的统计数据。然后应用模型并添加噪声。在 Matlab 代码中,Ansatz 可能如下所示:
t_full = linspace(0,4*pi,500);
t = t_full([1:200, 400:end]);
f = 2;
A = 3;
D = 5;
periodic_signal = A*sin(t*f) + D;
trend = 0.2*t;
noise = randn(size(t));
y = periodic_signal + trend + noise;
% a model for the data -- haha i know the exact model here!
model = @(par, t) par(1)*sin(t*par(2)) + par(3) + par(4)*t;
par0 = [2, 2, 2, 2]; % and i can make a good guess for the parameters
par_opt = nlinfit(t,y, model, par0); % and optimize them
% now from the residuals (data minus model) one can guess noise
% characteristics
residual = y - model(par_opt, t);
% compare residual with "real noise" (should coincide if optimisation
% doesnt fail)
[mean(noise), mean(residual)] % about [0, 0]
[std(noise), std(residual)] % about [1, 1]
missing_data = 201:399;
new_noise = mean(residual) + std(residual)*randn(size(missing_data));
% show what is going on
figure
plot(t,y,'k.')
hold on
plot(t_full, model(par_opt, t_full), 'r-', 'linewidth', 2);
plot(t_full(missing_data), model(par_opt, t_full(missing_data)) + new_noise, 'r.')
legend('data', sprintf('y(t) = %.2f*sin(%.2f*t) + %.2f + %.2f*t + e(t)', par_opt), 'reconstructed data')
结果如下图: