信号分选SDIF算法仿真matlab
SDIF算法介绍
序列差直方图法(SDIF)是一种基于CDIF的改进算法。SDIF与CDIF的主要区别是:SDIF对不同阶的到达时间差直方图的统计结果不进行累积,其相应的检测门限也与CDIF不同。其基本思想如下:
首选计算相邻两脉冲的TOA差构成第一级差直方图。如果差直方图中只有一个位置超过门限,则把该值当作可能的PRI进行序列搜索;如果有几个超过门限的PRI值,计算下一级差直方图,直到只有一个位置超过门限。如果能成功地分离出相应序列,那么从采样脉冲列中扣除,并对剩余脉冲列从第一级形成新的SDIF差直方图;若序列检索不能成功地分离出相应的序列,则计算下一级的SDIF直方图,重复上述过程。
检测门限的最佳门限函数应有如下的形式:
T
H
(
τ
)
=
x
(
E
−
m
)
e
−
τ
/
(
k
N
)
\ TH(\tau)=x(E-m)e -\tau/(kN)
TH(τ)=x(E−m)e−τ/(kN)
其中,
E
E
E为脉冲总数;
N
N
N为直方图内总单元数,即直方图上脉冲间隔的总刻度值,
m
m
m是差级数;常数
x
x
x和
k
k
k的最佳值由试验确定,
x
x
x取决于丢失脉冲的最大百分比。
由于检测门限的设置不同于CDIF,并且SDIF还做了子谐波检验,因此这种方法很好地解决了谐波误提取问题。
SDIF算法仿真
仿真参数:
PRI : 2e-5s
载频:10MHz
脉宽:4e-6s
PRI类型:重频恒定
仿真结果:
最终分选出结果:PRI为2.034e-5s,与设置基本相同
SDIF算法部分代码
// An highlighted block
num = length(TOA); %%待检测脉冲个数
K = (TaoMax - TaoMin)/DeltaToa; %%在检测脉冲范围内为K个PRI区间(箱)
taoK = ((1:K)+0.5)/K*TaoMax; %%每个PRI区间的中心
order = 6; %%直方图最大阶差直方图
x = 0.1; %%门限的控制因子
k = 0.7; %%门限的控制因子
ExitFlag = 0; %%退出循环标志
TOAexitnum = 0; %%在检测范围内的个数
orderFlag = 1; %%表示1阶
PRIOutSDIF0 = []; %%最终PRI输出
PRIID = 0; %%计算条件的PRI的个数
for i =1:10 %%当前总的脉冲个数
if length(TOA)<5 || ExitFlag == 1;
break;
end
TthridNum = 0;
E = length(TOA) ; %%当前总的脉冲个数
for j = orderFlag:order
C = j; %%当前阶数
orderimage = zeros(1,K); %%差直方图
Tthr = x*(E-C)*exp(-taoK/k*K); %%门限
TOAorder = TOA(1 + j:end) - TOA(1:end-j); %%当前阶差值序列
TOAorder = fix(TOAorder/DeltaToa)+1; %%差值序列落在第几个PRI箱
for id1 = 1:length(TOAorder)
if TOAorder(id1)>1 && TOAorder(id1)<K
TOAexitnum = TOAexitnum + 1;
orderimage(TOAorder(id1)) = orderimage(TOAorder(id1)) + 1;
end
end