PRI变换法信号分选算法原理及仿真程序【免费matlab源码,可自行修改参数】

4 篇文章 1 订阅
4 篇文章 0 订阅

目录

1.输入信号

2.算法原理

3.门限参数设置

4.算法流程

5.仿真结果

6.仿真代码

7.写在后面


1.输入信号

        三种不同PRI固定重频雷达信号交叠的脉冲串。 观测时间:0.1s 接收信号数:1002。雷达信号一:固定重频信号,PRI1=197us;雷达信号二:固定重频信号,PRI2=332us;雷达信号三:固定重频信号,PRI3=515us

       输入信号见下图。其中左图为截取的前1000us的脉冲流信号示意图,右图为加了信号强度5%噪声的仿真实际脉冲流信号。


2.算法原理

        如果大家觉得算法原理部分并不通俗易懂,可以先看第4部分算法流程和第6部分仿真代码,结合算法流程和代码可以辅助大家理解PRI变换法的算法原理。

        PRI变换算法是利用脉冲到达时间的自相关函数复数形式进行积分,达到消除谐波影响的目的。我们首先需要对脉冲信号建模。令tn为脉冲的到达时间,其中N是脉冲总个数。由于只用到TOA这一个参数,截获的脉冲流可以简化为单位冲击函数之和的模型如下公式:

     自相关函数表达式为:  

     将g(t)作有相位因子加权的自相关积分变换如下式,即所谓的“PRI变换”,其中τ>0,D(τ)被称为PRI变换谱图,在信号PRI值的处会出现峰值。

       自相关函数表达式为:若直接对g(t)作自相关运算,在信号PRI处及其整数倍处(即子谐波)都将出现峰值,给PRI估计和后续分选造成干扰,相位因子exp(2πit/τ)的引入,使子谐波产生的影响互相抵消,让PRI变换几乎完全抑制了子谐波。 

      一般采用PRI变换的离散形式对结果进行直方图统计分析,即离散PRI变换。首先,[τmin,τmax]表示PRI的取值范围,将其平均分成K部分,每一部分称为一个PRI箱,箱宽为b。则第k个PRI箱的中心坐标和PRI箱的宽度b见如下公式:

       PRI箱的宽度大小决定了PRI估计值的精度,K越大,PRI箱的宽度越小,精度也就越高,但同时计算量也大大增加,在应用时应根据需要选择合适的参数。 
       离散PRI变换公式如下: 

       当b趋近于0时,Dk/b趋近于D(τ)。PRI算法使用Dk的模值来表示PRI谱,在设置检测门限后,若某处的PRI变换值超过检测门限,则认为该处的横轴坐标即是PRI估计值。

       通过实验研究发现,对于恒定PRI的脉冲序列,PRI变换法有完美的谐波抑制效果,并且随机丢失部分脉冲对算法影响较小,辐射源数量较多时算法仍然可以得到较好的结果。 不过,当脉冲的PRI出现抖动时,算法性能将出现大幅度下滑,抖动幅度超过百分之十时算法基本失效。对于参差信号而言,各子周期所对应的脉冲相位均不相同,进行PRI变换时不同子周期的脉冲相互影响,造成PRI谱中峰值减小,有可能导致峰值无法超过门限,所以PRI变换法应用于参差信号时存在风险。PRI变换法的相位因子使得PRI变换法拥有了抑制子谐波的功效,同时,相位因子的引入也使得PRI变换法的运算量大大增加,远高于直方图算法。 
 


3.门限参数设置

        检测门限在PRI变换法中的作用为:尽可能的检测出真实的PRI值,并尽可能的阻止其他的谱值超过门限,在实际的应用中,门限满足以下三个规律: 
1.观测时间的规律 
        我们首先假设雷达接收机的采样时间为T,然后假设在这段采样时间内雷达接收机只接收到了一个固定重频辐射源,其PRI为τk,则在这段采样时间内接收到该辐射源的脉冲个数为T/τk,由于需要考虑脉冲丢失的情况,所以实际接收到的脉冲个数不大于T/τk,又因为PRI变换中的纵坐标代表接收到PRI为τk的脉冲个数,所以我们可以得出Dk的模值满足以下公式,且式中α为与脉冲丢失率相关的可调参数。

2. 消除子谐波的规律 
       在理想的情况下,固定重频信号在真实PRI处的谱值与Ck相等,而在PRI的整数倍处的谱值即Dk的模值是小于Ck的,考虑到脉冲抖动以及相位误差的影响,可以利用下式来消除子谐波,式中β为根据先验知识设置的可调参数: 

3. 消除噪声的规律 
       根据传统PRI变换法的公式我们可以得到,在PRI变换中检测到PRI的前提条件是:在一个PRI箱内,其中的脉冲数量必须要大于噪声。然而我们很难估计出环境中的噪声,但是我们可以估计出传统PRI变换算法的噪声。由传统PRI变换法的门限我们可以得出下式,式中γ为根据先验知识设置的可调参数:

        综合以上三条规律,我们可以总结出PRI变换法的门限公式为:

        参数α,β,γ均需要根据实际情况进行调整,如果α,β,γ选择恰当的话,可以很好地区分真实的PRI与其他的谱值,避免子谐波超过门限值以及有效的消除噪声带来的影响。但是,PRI变换门限的计算量相对较大,而且需要有丰富的经验才能根据具体情况选择出合适的参数。 


4.算法流程

传统PRI变换法的算法过程有如下7个步骤:

    (1) 初始化,令D(k)=0,k=1,2···K,令n=2;

    (2)令m=n-1;

    (3)令τ=tn-tm,若τ<τmin进入步骤(5),τ>τmax进入步骤(6),否则进入步骤(4);

    (4)计算τ对应的k值,使满足τk-b/2<τ<τk+b/2,并更新D(k)=D(k)+e^(j2πtn/τ);

    (5)令m=m-1,若m>1则返回步骤(3)。

    (6)令n=n+1,若n>N则对所有超过门限的PRI值进行序列检索,算法结束;否则进入步骤(2)。 

传统 PRI变换法具体流图如下:


5.仿真结果

        输入信号为第1部分提到的按到达时间顺序相互交迭的三个固定重复周期的雷达信号,脉冲重复周期PRI分别为197us,332us,512us,观测时间为0.1s。仿真图如下:

        从图中的仿真结果可以明显地得到,采用PRI变换法将很好地抑制了自相关函数法的谐波干扰,准确地对PRI进行估计。PRI的谐波成分不可避免地存在于自相关函数谱中,在一定的PRI取值范围内分选得到的PRI包括潜在的PRI值及其谐波分量。PRI变换算法很好地将雷达辐射源信号的PRI谐波分量滤除掉,而且潜在PRI的峰值十分明显,很容易有效地将潜在PRI值分选出来。

       但是,传统的PRI变换法在难以分选出有抖动的雷达,因此有学者后续又对传统的PRI变换法做出改进,提出了修正的PRI变换法。此方法会在后续的文章中介绍。


6.仿真代码

完整代码在个人主页的资源部分免费分享

资源名称:PRI变换法信号分选算法matlab仿真程序

以下展示部分代码。

n= 2; 
while n<=s_number
    m=n-1; 
    while m>=1 
        Tao = ysort(n)-ysort(m); 
        if Tao>Tao1 & Tao<=Tao2
           for k=1:K 
               if Tao>(Tao_s(k)-b/2) & Tao<=(Tao_s(k)+b/2)
                  Dv(k) = Dv(k)+exp(2*pi*ysort(n)*j/Tao); 
                  Cv(k) = Cv(k)+1; 
               end 
           end
        end
        if Tao>Tao2 
           m = m - 1; 
           break; 
        end
        if Tao<=Tao1 
           m = m - 1; 
           break; 
        end 
        m = m - 1; 
    end 
    n = n + 1; 
end

7.写在后面

       本文编写如有错误、疏漏等部分或读者有任何问题欢迎大家讨论。推荐后续学习修正PRI变换法以及一些优秀的对信号分选的改进算法。这些内容可以作为基础知识进行学习,也可以比较不同算法优劣整合成毕业设计或组会汇报内容。后续会有更多信号分选、通信原理、雷达和雷达对抗等方面的代码分享。

雷达信号分选是一种对雷达接收到的信号进行处理和分类的方,常用于雷达性能测试、目标识别与跟踪等应用中。下面是一个经典的MATLAB代码示例,展示了三种常用的雷达信号分选,包括PRI变换、CDIF和SDIF。 ```matlab % 生成示例信号,假设接收到的雷达信号是一个周期信号 fs = 1000; % 采样率 t = 0:1/fs:10; % 时域范围 f = 25; % 信号频率 x = cos(2*pi*f*t); % 原始信号 % PRI变换 [pks, locs] = findpeaks(x, 'MinPeakProminence', 0.5, 'MinPeakDistance', 100); pri = diff(locs); % 计算信号PRI % CDIF cdif = zeros(1, length(x)); for i = 2:length(x) cdif(i) = abs(x(i) - x(i-1)); end % SDIF sdif = zeros(1, length(x)); for i = 3:length(x)-2 sdif(i) = abs(x(i-2) - 2*x(i-1) + x(i)); end % 绘制结果 subplot(3,1,1); plot(t, x); title('原始信号'); xlabel('Time'); ylabel('Amplitude'); subplot(3,1,2); stem(locs(1:end-1)/fs, pri); title('PRI变换'); xlabel('Time'); ylabel('PRI'); subplot(3,1,3); plot(cdif); hold on; plot(sdif); title('CDIF和SDIF'); xlabel('Time'); ylabel('Value'); legend('CDIF', 'SDIF'); ``` 以上代码生成了一个示例信号,并使用MATLAB函数`findpeaks`找到信号的峰值和位置,计算PRI的差异,以进行PRI变换。然后,使用循环计算信号的CDIF和SDIF,并绘制了原始信号PRI变换结果以及CDIF和SDIF的值。这个示例仅包含了基础的雷达信号分选,可根据需要进行进一步的调整和优化。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程难孩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值