高矮脉冲数据提取分离,以及连续计数程序结构



如图1所示双脉冲中有高矮脉冲
  在得到这个数据后如果想要分离高脉冲跟矮脉冲那么我们可以通过以下这种方法解决。
  第一步:根据数据的特点我们可以认为数据中与最大的数据的数据比值如果比例大于80%则可以认为是高脉冲,这个部分呢我们可以大概估算。通过这种方法我们可以得到高数据所在的位置,如果把高数据所在的位置的数据都置零那么就可以得到下图。

图2


利用上述方法求出的数据在与原始数据进行差分计算就可以得到接下来的数据,

图3

通过对图2中的数据在进行第一步的操作并同样将脉冲位置的数据置零则可以得到下列数据。

图4

在重复一次第二步的操作将图2中的数据与图4中的数据做差分就可以得到图5中的数据

图5

以上就已经找到了高脉冲和低脉冲分别所在的位置,接下来需要做的是提取原信号中的噪声项,提取方法可以通过将图4向左有一定量的位移然后将数据为零的位置替换即可得到噪声数据,图6


图6
得到噪声项以及上述高低脉冲位置之后只需要进行原始脉冲高低脉冲位置信号的提取就可以得到分离后的数据了。


分离后的高脉冲


分离后的低脉冲

最后附加一部分代码:具体代码如果有需要去下载频道下载就可以了。
clear all
clc 
load AA ;   %下载数据
figure
plot(AA(:,1),AA(:,2));axis([-inf inf 0 4])
A_y=AA(:,2);   %提取数据
A_y1=A_y;
A_y1=temp11(A_y1);

figure; plot(A_y1);axis([-inf inf 0 4])
figure;plot(A_y-A_y1);axis([-inf inf 0 4])

A_y2=A_y1;
[A_y2,width]=temp11(A_y2);%width 为脉冲宽度   在下面提取噪声时有用到  

figure; plot(A_y2);axis([-inf inf 0 4])
figure;plot(A_y1-A_y2);axis([-inf inf 0 4])

[r,c]=size(A_y1-A_y2);
noise=A_y2;%提取噪声量   通过将信号错开一定相位后进行提取噪声
for x=1:r
    if noise(x)==0
        noise(x)=noise(x+width*10);
    end
end
figure; plot(noise);axis([-inf inf 0 4])

%--噪声跟信号合成
%---提取第一个信号
[r,c]=size(A_y1);
signal_1=noise;%提取第一个脉冲信号
cha1=A_y-A_y1;
for x=1:r
    if cha1(x)>0
        signal_1(x)=A_y(x);
    end
end
figure; plot(signal_1);axis([-inf inf 0 4])
%---提取第二个信号
signal_2=noise;%提取第一个脉冲信号
for x=1:r
    if A_y1(x)-A_y2(x)>0
        signal_2(x)=A_y(x);
    end
end
figure; plot(signal_2);axis([-inf inf 0 4])


接下来是一个小笔记:
图像中提取特定灰度连续计数的程序设计结构如下:

for x=1:r    %行搜索
    for y=mid_c:end_c%列搜索
        if img(x,y)==0&&flag==1%当发现是黑色的时候进入计数  通过设置flag可以算出最大连续黑色个数
            for yy=y:end_c
                count_pix=count_pix+1;%计数 
            end
            flag=0;
        end
    end
    flag=1;%刷新标志位
end

            



猜你喜欢

转载自blog.csdn.net/baiyh1994/article/details/72809655