最近的传感器测量过程中发现,数据中出现了类似于脉冲数据(如下图所示),这对于数据处理产生了困难。
解决思路是采用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