matlab可以使用detrend函数去除时间序列x中的均值或线性趋势,这在FFT处理中尤其常用。
格式:
y = detrend(x) % 消除时间序列中的线性趋势项
y = detrend(x,‘constant’) % 消除时间序列中的均值
y = detrend(x,‘linear’,bp) % 分段消除时间序列中的线性趋势项,bp为分段点向量
代码:
sig = [0 1 -2 1 0 1 -2 1 0]; % 无线性趋势的信号
trend = [0 1 2 3 4 3 2 1 0]; % 有两段线性的趋势
x = sig+trend; % 将上面趋势叠加到信号上
y = detrend(x,‘linear’,5) % 根据指定的分段点去除两段线性趋势
detrend()函数进行去趋势项操作,但只能去除均值和线性趋势项,所以如果使用该函数进行操作,即承认数据所含趋势项是线性的。
此时使用多项式拟合的方式去除均值,效果比较好,对非平稳信号比较好。
temp = polyfit(t,y,m); %t为时间序列,y为信号,m为拟合多项式的次
y2 = y - polyval(temp,t);