我正在寻找由平滑趋势分量、几个固定水平之间的恒定步长和加性噪声(当然是异常值)组成的信号上下包络线的稳健估计方法。这个问题是在我目前关于现实生活信号处理的研究工作中提出的。
信号的典型示例由以下脚本生成:
%% signal definition
% number of samples
Ns = 10000;
% sampling period [secs]
Ts = 1;
time = (1:Ns)*Ts;
% trend component
a = 2;
b = 0;
T = 1e4;
slope = time/Ts * 0.0005;
trend = a * sin(2*pi*time/T) + b + slope;
% steps component (4 constant levels)
step = [zeros(1,1000),linspace(0,1,6),1*ones(1,500),linspace(1,0,6),zeros(1,500),linspace(0,-2,10), -2*ones(1,1200),linspace(-2,1,15),1*ones(1,3000),linspace(1,0,6), zeros(1,3000),linspace(0,-1,6), -1*ones(1,751)];
% noise component (normal noise)
noise = 0.2*randn(1,Ns);
% noise = 0.5*(rand(1,Ns)-0.5);
%
%% show signals component
close all
figure
plot(time,trend,'r-')
hold on
plot(time,trend+step,'g-')
plot(time,trend - 2, 'b--')
plot(time,trend + 1, 'k--')
plot(time,trend+step+noise,'mo')
legend('trend','trend+steps','lowenvelope', 'upenvelope','trend+steps+noise')
title('smooth trend signal with constant steps between 4 levels and noise')
xlabel('time [sec]')
ylabel('value [-]')
hold off
见下图
单独的信号分量是未知的!步长总是恒定的并且在少量固定水平之间(通常 < 4 或 5),因此估计的包络线应该与趋势信号平行。噪声近似为正态分布,sigma ~0.1
知道如何解决这个令人惊讶的难题吗?任何相关的参考资料或matlab代码链接?