信号分选SDIF算法仿真matlab

信号分选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(Em)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; %%在检测脉冲范围内为KPRI区间(箱)
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;      %%差值序列落在第几个PRIfor id1 = 1:length(TOAorder)
            if TOAorder(id1)>1 && TOAorder(id1)<K
                TOAexitnum = TOAexitnum + 1;
                orderimage(TOAorder(id1)) = orderimage(TOAorder(id1)) + 1; 
            end
        end
  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
以下是一段基于S-D算法的雷达信号分选MATLAB代码: ```matlab % 定义雷达参数和目标参数 c = 3e8; % 光速 fc = 10e9; % 雷达中心频率 lambda = c/fc; % 波长 R1 = 500; % 目标1距离 R2 = 1000; % 目标2距离 R3 = 1500; % 目标3距离 tof1 = 2*R1/c; % 目标1时延 tof2 = 2*R2/c; % 目标2时延 tof3 = 2*R3/c; % 目标3时延 % 定义信号参数 T = 5e-5; % 信号时长 fs = 4*fc; % 采样率 t = linspace(0, T, T*fs); % 时间序列 s1 = exp(j*2*pi*(fc*t - 2*fc*tof1)); % 目标1信号 s2 = exp(j*2*pi*(fc*t - 2*fc*tof2)); % 目标2信号 s3 = exp(j*2*pi*(fc*t - 2*fc*tof3)); % 目标3信号 sn = s1 + s2 + s3; % 合成接收信号 % 对接收信号进行S-D算法 Rmax = 2000; % 最大距离 cpi = 1000; % CPI时长 K = round(Rmax/(c*T/2)); % 离散距离点数 L = round(cpi/T); % 时间序列长度 RD = zeros(K, L); % R-T矩阵 for ii = 1:K tau = 2*(ii-1)*T; % 时延 for jj = 1:L r = c*(jj-1)*T/2; % 距离 s = exp(j*2*pi*fc*(t - tau)).*exp(-j*2*pi*r/lambda); % 发射-接收信号 RD(ii, jj) = abs(sum(sn.*s))^2; % 计算S-D函数 end end % 显示S-D图像 figure; imagesc(tau, r, RD); xlabel('Delay (s)'); ylabel('Range (m)'); title('S-D Map'); % 对S-D函数进行信号分选 threshold = 0.5*max(max(RD)); % 阈值 [dummy, I] = find(RD > threshold); % 提取峰值 tof_est = tau(I); % 到达时间估计值 range_est = r(I); % 距离估计值 % 显示信号分选结果 figure; imagesc(tau, r, RD); hold on; plot(tof_est, range_est, 'ro'); xlabel('Delay (s)'); ylabel('Range (m)'); title('Signal Selection'); legend('S-D Map', 'Selected Signals'); ``` 这段代码模拟了三个目标在不同距离处的雷达回波信号,然后对这些信号进行S-D算法,最后根据设定的阈值进行信号分选,提取出到达时间和距离的估计值。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

突突突凸凸凸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值