再论MATLAB的力学传感器测量信号处理,消除脉冲噪音

最近的传感器测量过程中发现,数据中出现了类似于脉冲数据(如下图所示),这对于数据处理产生了困难。

解决思路是采用MATLAB中的diff判断两个数据采集点的大小,如果两个数据采集点的大小过大的那么就删除原有数据点,同时用旁边的数据点替代。旁边数据点替代的过程中可以采用linear fitting。

下图展示了diff(y_data)后的数据图(脉冲附近的数据点之间的difference比较大)

下图展示了数据处理后的数据图,脉冲信号消除。

处理代码如下:

function new_data=flat_data(ori_data)
% the difference of the data point is fixed and is equal to 1
% then we will measure the difference of pressure between two data points
n_length=length(ori_data);
diff_y=abs(diff(ori_data));% absolute value
new_data=ori_data;% data initialization
span_end=1;
flag_start=1;
for i_data=1:n_length-1
    if diff_y(i_data)>100&&flag_start==1
        snap_start=i_data;
        span_end=n_length;
        flag_start=0;
    else
        if span_end>1&&diff_y(i_data)<100
            snap_end=i_data;
            length_span=snap_end-snap_start;
            span_y=ori_data(snap_end)-ori_data(snap_start);
            if abs(span_y)>0
                span_dif=span_y/length_span;
                new_data_rep=ori_data(snap_start):span_dif:ori_data(snap_end);% linear fitting
                new_data(snap_start:snap_end)=new_data_rep;
            else
                new_data_rep=ones(length_span+1,1)*ori_data(snap_start);
                new_data(snap_start:snap_end)=new_data_rep;
            end
            flag_start=1;
            span_end=1;
        end
    end
end

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注




Enter Captcha Here :

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据