时域信号趋势项的消除办法及案例分析

仅作笔记,转载自:

时域信号趋势项的消除办法及案例分析 - 知乎 (zhihu.com)

一、去趋势项

在做数据分析类工作的时候,采集的信号原始数据本身存在一定范围的震荡,在此之外,还可能遇到有一定的低频分量影响我们的计算或观察。由于放大器随温度变化产生的零点漂移(温飘)、传感器频率范围外低频性能的不稳定以及传感器周围的环境干扰等,往往会偏离基线,甚至偏离基线的大小还会随时间变化。偏离基线随时间变化的整个过程被称为信号的趋势项。趋势项直接影响信号的正确性,应该将其去除。常用的消除趋势项的方法是多项式最小二乘法。

原始数据时域波形:

最小二乘法拟合直线作BaseLine:

原始数据减去拟合的直线BaseLine(输出红色结果):

结果如下:

Matlab 过程实现如下。

%% 数据向量 FT 
len = size(ft);
for i = 1:len
    x(i,1) = i;
    y(i,1) = ft(i,1);
end
%% Polyfit 单项式线性拟合 输出结果Y1
p = polyfit(x,y,1);
x1 = 1 : 1 :len;
y1 = polyval(p,x1);
%% 去趋势项
y1 = reshape(y1,1527,1);%(1527是我的数据长度)      
y2 = y - y1;
plot(x,y,'B',x1,y2,'-r');

上述过程其实我在分解整个去趋势项的过程,方便大家能够更好的理解吸收。

Matlab 还可以直接使用 detrend 函数滤除时间趋势项

plot(detrend(ft));

二、去除趋势项的意义

去完时域信号的趋势项之后,我们进一步得到信号的提纯

(以下统计数据均来自我采集的数据,不需要刻意理解,结果供参考)

原始数据震荡范围

((560-498)/ 533.9)/ 2 = ±6%

去趋势项计算震荡范围

((13.14-(-13.0199))/533.9)/2 = ±2.45%

误差减少了接近三倍

趋势项本身是一个问题;如直流分量 、低频分量等,需要通过硬件滤波器,或软件算法进行滤除,噪声滤除必须对症下药,叠加在一起很难找到通解。

另附官方解法 Detrending Data

猜你喜欢

转载自blog.csdn.net/m0_38012497/article/details/128453873