【雷达信号分选】CDIF算法雷达信号分选【含Matlab源码 1186期】

本文详细介绍了如何在Matlab中使用CDIF算法对雷达信号进行分选,包括算法原理、部分源代码以及如何处理脉宽和重复周期抖动。通过实例展示了如何生成交错脉冲序列并进行多级CDIF信号筛选。
摘要由CSDN通过智能技术生成

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1
完整代码已上传我的资源:【雷达通信】基于matlab CDIF算法雷达信号分选【含Matlab源码 1186期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab信号处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、CDIF算法简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄三、部分源代码

clear all
clc
close all
%开始分选子程序

%sig 输入信号流
%slen 输入信号流长度
%n 采样时间
%pw_id 是否考虑脉宽抖动标志
%pw_ratio 脉宽抖动率
%输出参数
%pw 信号脉宽
%pnum 信号脉宽个数
%toa 信号到达时间
%tnum 信号达到时间个数
% sdif_para.pw_id=1;%%是否考虑脉宽抖动标志
% sdif_para.pw_fixr=0.1;%%分选脉宽容限 固定
% sdif_para.pw_ranr=0.01;%%分选脉宽容限 变化
% sdif_para.pri_id=1;%%是否考虑脉冲重复周期抖动标志
% sdif_para.pri_fixr=20;%%分选重复周期容限 固定
% sdif_para.pri_ranr=0.01;%%分选重复周期容限 变化
% sdif_para.gate=0.5;%%直方图门限值
% sdif_para.step=1;%%分选级数

%变量初始化
PRI1=150e-006;%单位us
a=0.05;
b=aPRI12*(rand-0.5);
t1=1:126;
% z1=PRI1t1+0.000223+b;
z1=PRI1
t1+2.23e-006;
% z11=z1+z1.(1-2rand(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];

dd=0; %dd=1e-3; %设置抖动程度0.1%
jitter=(1-2*rand(1,254))*dd;
sig=sig+sig.*jitter; %为每个脉冲的TOA加随机抖动
sig=sort(sig);
%以上程序用于生成交错脉冲序列到达时间,交错脉冲序列由三部雷达组成

dif_pri=[];%存储计算出各种不同的pri

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=370e-005;%采样时间最大重复周期10倍,
fs=250e006;%采样频率
toa_cdif=sort_para.toa;
tnum_cdif=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.4;
coeff2=1.0;
series=5;%最多做c-1级差
L=6;

%按照不同脉宽根节点下的TOA数据进行信号分选
for i=1:sort_para.pnum
%变量初始化
pri_num=0;
pri=0;
pri_total=0;
sig_total=0;
c=1; %分选级数
while( (tnum_cdif(i)>5)&&(c<series) ) %TOA个数大于5个 脉冲数大于5
tnum1=tnum_cdif(i)-c;
for j=1:tnum1
if toa_cdif(i,j+c)>toa_cdif(i,j)
tem_pri=toa_cdif(i,j+c)-toa_cdif(i,j);
else
tem_pri=0;
end
if pri_num==0
pri_num=1;
pri(pri_num)=tem_pri;%pri
pri_total(pri_num)=1;%不同的pri的不同的数量
else
for k=1:pri_num
if (tem_pri>=pri(k)-2e-006)&&(tem_pri<=pri(k)+2e-006)%改过容限
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
        end
    end
    %###############################
     %先将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
     %##############################
     %##############################画一阶CDIF
                if(c==1)
                   xpri=(1e-006:1e-003:400);
                   y=coeff1*time*10^6./xpri;%coeff1*time*10^6
                   figure(1)
                   plot(xpri,y) %门限
                   title('一阶CDIF图');
                   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(c==2)
                   xpri=(1e-006:1e-003:400);
                   y=coeff1*time*10^6./xpri;%coeff1*time*10^6
                   figure(2)
                   plot(xpri,y) %门限
                   title('二阶CDIF图');
                   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(c==3)
                   xpri=(1e-006:1e-003:400);
                   y=coeff1*time*10^6./xpri;%coeff1*time*10^6
                   figure(3)
                   plot(xpri,y) %门限
                   title('三阶CDIF图');
                   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(c==4)
                   xpri=(1e-006:1e-003:400);
                   y=coeff1*time*10^6./xpri;%coeff1*time*10^6
                   figure(4)
                   plot(xpri,y) %门限
                   title('四阶CDIF图');
                   xlabel('PRI/us');ylabel('个数');                       
                   axis([0 400 0 40]);
                   hold on
                   plot(pri*10^6,pri_total,'*-')
                   axis([0 400 0 40]);
                   hold off
                end                    
     %再将具有两倍关系的pri挑出来,并且将个数得到,以便与门限比较   
     if(pri_num>1)                                                
        m=1;
        while m<=pri_num-1
           n=m+1;
           while n<=pri_num 
               if (( pri(n)>=2*pri(m)-3e-006 ) && ( pri(n)<=2*pri(m)+3e-006 )) %改过容限
                  pri_oncenum=pri_total(m);
	              pri_oncevalue=pri(m);
	              pri_twicenum=pri_total(n);
	              pri_twicevalue=pri(n);
                  n=n+1;
                %if (( pri_oncenum>((coeff1*time*fs/pri_oncevalue)) ) && ( pri_twicenum>(coeff2*time*fs/pri_twicevalue)) )%coeff1*time*fs/pri_oncevalue门限值,可调
               if (( pri_oncenum>((coeff1*time/pri_oncevalue)) ) && ( pri_twicenum>(coeff1*time/pri_twicevalue)) )%coeff1*time*fs/pri_oncevalue门限值,可调                         
	                   pri_search(search_num)=pri_oncevalue;
                       pri_searchnum(search_num)=pri_oncenum;
                       search_num=search_num+1;
                       search_id=1;
               end
               else
                 n=n+1;
               end
          end
          m=m+1;
        end
     end
     %###############################
     %检测搜索标志位,判断是否搜索
     if(search_id>0)
         search_id=0;
         for m=1:search_num-1             
         gate_num=0;
            for n=1:tnum_cdif(i)                  
               %连续检索6个脉冲
                tem_toa=pri_search(search_num-1)+toa_cdif(i,n); 
                for ii=n+1:tnum_cdif(i)
                       if  (tem_toa>=toa_cdif(i,ii)-3e-006)&&(tem_toa<=toa_cdif(i,ii)+3e-006)%改过原来3,ii从2开始
                       gate_num=gate_num+1;
                      end
                end

               L=6;%原8
               if  gate_num>5
                   nn=n;
                   %向前向后搜索
	               for p=nn+6:-1:2%向前搜索
                        tem_toa=toa_cdif(i,p)-pri_search(search_num-1);  
                        for ww=p-1:-1:2
                            if  (tem_toa>=toa_cdif(i,ww)-5e-006)&&(tem_toa<=toa_cdif(i,ww)+5e-006)%改过原5
                            sig_total=sig_total+1;
                            data(sig_num,sig_total)=toa_cdif(i,ww);
                            end
                        end
                   end

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]李树锋.基于完全互补序列的MIMO雷达与5G MIMO通信[M].清华大学出版社.2021
[5]何友,关键.雷达目标检测与恒虚警处理(第二版)[M].清华大学出版社.2011

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值