目录
1.输入信号
三种不同PRI固定重频雷达信号交叠的脉冲串。 观测时间:0.1s 接收信号数:1002。雷达信号一:固定重频信号,PRI1=197us;雷达信号二:固定重频信号,PRI2=332us;雷达信号三:固定重频信号,PRI3=515us。
输入信号见下图。其中左图为截取的前1000us的脉冲流信号示意图,右图为加了信号强度5%噪声的实际脉冲流信号。
2.算法原理
序列差值直方图(SDIF)算法是对CDIF进行改进的一种分选算法。对比CDIF分选算法,SDIF减小了运算量。SDIF算法需要做子谐波检测,对谐波的抑制比CDIF算法好。 SDIF算法分选步骤如下:
(1)与CDIF算法相同。将脉冲流到达时间TOA递增排序,计算相邻脉冲时间间隔TOA(n)−TOA(n-1)。统计绘制一阶差值直方图。
(2)进行子谐波检验。在差值直方图中,如果只有一个PRI估计值的累计值大于检测阈值,则根据该PRI值进行脉冲序列检索。如果一阶差值直方图中多个值大于检测阈值时,不分选脉冲。当差值直方图阶数大于等于二阶,选择超过检测阈值的PRI估计值中最小的PRI估计值继续脉冲序列检索。
(3)将分选出的脉冲移除。剩余脉冲计算一阶SDIF。
(4)重复步骤,直到没有脉冲个数供分选或者直方图阶数达到固定为止。
3.门限参数设置
SDIF直方图检测阈值门限的计算公式为:T(τ)=x(E-C)e^(-τ/kN) ,T是检测门限值;x是可变参数,用来表示检测阈值门限的检测时速,一般大于0小于1;k也是可变参数,用来调节门限,一般大于0小于1。E是总的脉冲个数,C是当前直方图的阶数,N为直方图小区间个数,τ为脉冲到达时间间隔常数。仿真程序中采样时间T=0.1s, 脉冲个数E=1002 ,当前直方图阶数C为1、2(根据SDIF仿真阶数定),可调参数k=0.15, 可调参数x=0.5 ,直方图区间箱数N=10000。x、k为可调参数,一般由经验或试验确定。读者们均可根据需求自行修改参数。
4.仿真结果
一阶SDIF结果如下,可以由图中发现PRI为197us的统计值最多,其余PRI的统计值很少,这是因为我们的输入信号是非常理想完整的,实际在脉冲丢失和脉冲抖动都存在的情况下,会有不同的仿真结果,具体可以参照博主的后续文章。实验选取的“箱长”为1us,统计中点为自然数1、2、3···大家可以自行修改”箱长“和统计中点,但若统计的”箱长“越大则越不准确,越小则数据不集中,很可能造成统计的信号没有超过门限出现漏警的情况。
我们从图中发现统计的信号值没有超过门限,因此我们需要进行二阶SDIF直方图统计。需要注意的是,不同于CDIF算法,二阶SDIF不需要叠加一阶SDIF的累计值。
二阶SDIF结果如下,我们发现有超越门限的PRI值,因此我们可以以此PRI值进行潜在序列搜索。若序列检索成功,则认为该PRI值为真实值并将其所对应的所有脉冲从脉冲序列中扣除,并重新进行统计。
如下图,在剔除掉实际PRI为197us的脉冲序列后我们重新进行不同阶数的SDIF统计,我们发现在第一阶SDIF统计时就有PRI值为332us的信号超过了门限,我们再次对PRI值为332的信号序列进行序列搜索并剔除,再重新进行SDIF的统计。
又如下图,在剔除掉实际PRI为332us的脉冲序列后我们重新进行不同阶数的SDIF统计,我们发现在第一阶SDIF统计时就有PRI值为515us的信号超过了门限,我们再次对PRI值为515的信号序列进行序列搜索并剔除,再重新进行SDIF的统计,最终发现没有序列超过门限,因此统计完成。
在本次信号源的试验中SDIF总共只进行4次直方图计算就将所有脉冲信号依次分选出,而上篇文章中的CDIF算法则共计算了9次直方图统计。可见,CDIF的计算量较大,即使在简单的情况下仍需要计算多阶直方图,而SDIF相对于CDIF所需的计算量大大减少,实时性更强,但由于不进行不同阶的直方图累积,丢失了前面已经获得的信息。
5.仿真代码
完整代码在个人主页的资源部分免费分享。
资源名称:信号分选SDIF序列差直方图算法matlab仿真程序。
以下展示部分代码。
for t=1:2%SDIF直方图阶数
s_jiange=zeros(1,s_number-t);
for i=1:(s_number-t)
s_jiange(1,i)=y_daodashijian(1,i+t)-y_daodashijian(1,i);
end
%正常令1us为一个箱,10000us应该有10000箱子,
s_xiang=zeros(1,10000)
for i=1:10000
for j=1:(s_number-t)
% if (s_jiange(1,j)>=5*(i-1))&&( s_jiange(1,j)<(i*5))
if s_jiange(1,j)==i
s_xiang(1,i)=s_xiang(1,i)+1;
end
end
end
s_jieguo=zeros(1,10000);
for i=1:10000
s_jieguo(1,i)=s_xiang(1,i);
end
figure(t);
stem(s_jieguo,'r','Marker','none');
hold on;
x_kebiancanshu=0.4;
k=0.15;
C=t;
xpri=(1e-10:0.1:1200);
y=x_kebiancanshu*(s_number-C)*exp(-xpri/k/2000);%coeff1*time*10^6
%N为直方图小区间个数(箱数)
plot(xpri,y) %门限
title(['第',num2str(t),'阶SDIF直方图'])
xlabel('脉冲到达时间(TOA)间隔差值/us');ylabel('统计数量/个');
axis([0 1200 0 500]);
end
6.写在后面
本文编写如有错误、疏漏等部分或读者有任何问题欢迎大家讨论。初学者推荐后续学习PRI变换、修正PRI变换法以及复现改进这些方法的一些文献。这些内容可以作为基础知识进行学习,也可以比较不同算法优劣整合成毕业设计或组会汇报内容。后续会有更多信号分选、通信原理、雷达和雷达对抗等方面的代码分享。