clear all
clc
%开始分选子程序
PRI1=150e-006;%单位us
a=0.05;
b=a*PRI1*2*(rand-0.5);
t1=1:126;
% z1=PRI1*t1+0.000223+b;
z1=PRI1*t1+2.23e-006;
% z11=z1+z1.*(1-2*rand(1,126))*0.01;
PRI2=240e-006;
t2=1:78;
z2=PRI2*t2+11e-006;
PRI3=370e-006;
t3=1:50;
z3=PRI3*t3+0.120e-006;
sig=[z1,z2,z3];
%以上程序用于生成交错脉冲序列到达时间,交错脉冲序列由三部雷达组成
sort_para.pnum=1;
sort_para.tnum=254;
sort_para.toa=sig;
sdif_para.pri_fixr=2e-005;
sdif_para.step=3;
sdif_para.pri_id=1;
sdif_para.gate=0.4;
%[sort_bank]=sdif_picture(sort_para,sdif_para)
time=27e-005;%采样时间最大重复周期10倍,
fs=250e006;%采样频率
toa_sdif=sort_para.toa;
tnum_sdif=sort_para.tnum;%调出要使用修改的参数
sig_num=1;
pri_num=0;
pri=0;
pri_total=0;
sig_total=0;
sort_id=0;
c=1;
tem_pri=0;
gate_num=0;
pri_oncenum=0;
pri_oncevalue=0;
pri_twicenum=0;
pri_twicevalue=0;
pri_search=0;
pri_searchnum=0;
search_num=1;
search_id=0;
tem_toa=0;
sortok_id=0;
sortok_id1=0;
%可能要调节的参数
coeff1=0.5;
coeff2=1.0;
series=3;%最多做c级差
L=6;
ppri_num=0;
ppri_fnum=0;
ppri=zeros(1,8);
%逐步提取各脉宽对应TOA数据进行信号分选
for i=1:sort_para.pnum %%信号脉宽个数
%变量初始化
pri_num=0;
pri=0;
pri_total=0;
sig_total=0;
pri_ratio=0;
clear pri_save;
pri_save.pri=0; %保存一级差脉冲重复周期
pri_save.count=0; %保存各脉冲重复周期出现个数
pri_save.pri_num=0; %保存一级差脉冲重复周期数
pri_save.pri_total=0;
%进行多级差计算
for step_i=1:sdif_para.step %% step:分选级数
%如果TOA个数小于门限,跳出此层循环,准备提取下一个脉宽内的数据
if sort_para.tnum(i)<5+step_i %% tnum:信号到达时间个数
break;
else
pri_num=0;
pri=0;
pri_total=0;
sig_total=0;
pri_ratio=0;
pri_gate_num=0;
child_id=0;
child_num=0;
child_fnum=0;
%TOA个数大于门限,则准备分选,先进行pri分类统计
for j=1:sort_para.tnum(i)-step_i %%%第step_i级一共有sort_para.tnum(i)-step_i个间隔
%先求step_i级TOA差
tem_pri=sort_para.toa(i,j+step_i)-sort_para.toa(i,j);
if pri_num>0
for k=1:pri_num
%得到pri容限
if sdif_para.pri_id==1 %%分选重复周期容限 固定
pri_range=sdif_para.pri_fixr;
else %%分选重复周期容限 变化
pri_range=floor(pri(k)*sdif_para.pri_ranr/100);
end
%求pri下限
if pri(k)<pri_range
pri_low=0;
else
pri_low=pri(k)-pri_range;
end
%求pri上限
pri_high=pri(k)+pri_range;
%对pri进行分类统计
if (tem_pri>0)&&(tem_pri>=pri_low)&&(tem_pri<=pri_high);
pri_total(k)=pri_total(k)+1;
break;
end
if k==pri_num
pri_num=k+1;
pri(pri_num)=tem_pri;
pri_total(pri_num)=1;
end
end
else
pri_num=pri_num+1;
pri(pri_num)=tem_pri;
pri_total(pri_num)=1;
end
end
%先判断各PRI在总脉冲各数中所占百分比,及超越门限的pri数
for k=1:pri_num
pri_ratio(k)=pri_total(k)/(sort_para.tnum(i)-step_i);
if pri_ratio(k)>sdif_para.gate
pri_gate_num=pri_gate_num+1;
end
end
%如果有多个pri所占百分比超过门限,则进行谐波校验
if pri_gate_num>1
%将pri按从小到大的顺序排列
if pri_num>1
for m=1:pri_num-1
for n=m+1:pri_num
if pri(m)>pri(n)
tem_data=pri(m);
pri(m)=pri(n);
pri(n)=tem_data;
tem_data=pri_total(m);
pri_total(m)=pri_total(n);
pri_total(n)=tem_data;
end
end
end
end
%谐波校验
if(pri_num>1)
m=1;
while m<=pri_num-1
n=m+1;
while n<=pri_num
if mod(pri(n),pri(m))==0
pri_total(m)=pri_total(n)+pri_total(m);
if pri_num>n
for o=n:pri_num-1
pri(o)=pri(o+1);
pri_total(o)=pri_total(o+1);
end
end
pri_num=pri_num-1;
pri=pri(1,1:pri_num);
pri_total=pri_total(1,1:pri_num);
else
n=n+1;
end
end
m=m+1;
end
end
end
%暂存一级差
if step_i==1 %一级差
for pick_var1=1:pri_num
pri_save.pri(pick_var1)=pri(pick_var1); %保存一级差脉冲重复周期
pri_save.count(pick_var1)=pri_total(pick_var1); %保存各脉冲重复周期出现个数
pri_save.pri_num=pri_num; %保存一级差脉冲重复周期数
end
pri_save.pri_total=sort_para.tnum(i)-1;
end
for m=1:pri_num
gate_num=0;
%##############################画一阶CDIF
if(step_i==1)
xpri=(1e-006:1e-003:400);
y=coeff1*sort_para.tnum./xpri;%coeff1*time*10^6
figure(1)
plot(xpri,y) %门限
title('一阶SDIF图');
xlabel('PRI/us');ylabel('个数');
axis([0 400 0 40]);
hold on
plot(pri*10^6,pri_total,'*-')
axis([0 400 0 50]);
hold off
end
%##############################画二阶CDIF
if(step_i==2)
xpri=(1e-006:1e-003:400);
y=coeff1*sort_para.tnum./xpri;%coeff1*time*10^6
figure(2)
plot(xpri,y) %门限
title('二阶SDIF图');
xlabel('PRI/us');ylabel('个数');
axis([0 400 0 40]);
hold on
plot(pri*10^6,pri_total,'*-')
axis([0 400 0 50]);
hold off
end
%##############################画三阶CDIF
if(step_i==3)
xpri=(1e-006:1e-003:400);
y=coeff1*time*10^6./xpri;
- 1
- 2
- 3
- 4
- 5
- 6
前往页