振动信号的预处理方法
@ 去趋势项
@ 五点三次平滑法
1,去趋势项(detrending)
在振动测试中采集到的振动信号数据,由于放大器随温度变化产生的零点漂移、
传感器频率范围外低频性能的不稳定以及传感器周围的环境干扰等,往往会偏离
基线,甚至偏离基线的大小还会随时间变化。偏离基线随时间变化的整个过程被
称为信号的趋势项。趋势项直接影响信号的正确性,应该将其去除。常用的消除
趋势项的方法是多项式最小二乘法。
在 MATLAB 中提供 detrend()函数进行去趋势项操作,但只能去除均值和线性趋
势项,所以如果使用该函数进行操作,即承认传感器所含趋势项是线性的。如果
认为趋势项是非线性的,则需要用 polyfit()和 ployval()组成的函数进行操作
(如:Liu_detrend(t,y,m))。在实际振动信号数据处理中,通常取 1~3 次多项
式来对采样数据进行多项式趋势项消除的处理。
--------------------------------------------------------------
function y2 = Liu_detrend(t,y,m)
temp = polyfit(t,y,m); %t 为时间序列,y 为信号,m 为拟合多项式的次
y2 = y - polyval(temp,t);
--------------------------------------------------------------
2,五点三次平滑法(cubical smoothing algorithm with five-point
approximation)
五点三次平滑法可以用作时域和频域信号平滑处理。该处理方法对于时域数据的
作用主要是能减少混入振动信号中的高频随机噪声。而对于频域数据的作用则是
能使谱曲线变得光滑,以便在模态参数识别中得到较好的拟合效果。需要注意的
一点是频域数据经过五点三次平滑法会使得谱曲线中的峰值降低,体形变宽,可
能造成识别参数的误差增大。因此,平滑次数不宜过多。下面给出的是其 MATLAB
实现程序:
--------------------------------------------------------------
function b = Liu_smoothing(a,m)
n = length(a);
for k=1:m
b(1)=(69*a(1)+4*(a(2)+a(4))-6*a(3)-a(5))/70;
b(2)=(2*(a(1)+a(5))+27*a(2)+12*a(3)-8*a(4))/35;
for j=3:n-2
b(j)=(-3*(a(j-2)+a(j+2))+12*(a(j-1)+a(j+1))+17*a(j))/3
5;
end
b(n-1)=(2*(a(n)+a(n-4))+27*a(n-1)+12*a(n-2)-8*a(n-3))/35;
b(n)=(69*a(n)+4*(a(n-1)+a(n-3))-6*a(n-2)-a(n-4))/70;
a=b;
end
--------------------------------------------------------------
3,实例 1
图 1
1)对比 Figure3 和 Figure4,可以看出:在趋势项为非线性时,detrend()的作
用有限。
2)对比 Figure3 和 Figure5,可以看出:在趋势项为非线性时,Liu_detrend(t,y,2)
可以很好的进行去趋势项。
4,实例 2
图 2
1)对比 Figure1 和 Figure2,可以看出:在趋势项为线性时,使用 detrend()
和 Liu_detrend(t,y,1)是没有区别的。
2)对比 Figure2 和 Figure3,可以看出:经五点三次平滑法后,明显减少了混
入振动信号中的高频随机噪声。
5,结论
一般来讲,使用 detrend()进行去趋势项即可,即认为传感器的零点漂移是线
性变化的(如图 3)。然后进行五点三次平滑。将原始数据经此两处理过程(预
处理)后,再进行后续的数据处理工作是有必要的。
图 3:某传感器随温度变化的零点漂移图