m基于matlab的超宽带MIMO雷达对目标的检测仿真,考虑时间反转

221 阅读3分钟

1.算法概述

     (不加时间反转处理)参看框图1:天线阵A发送信号,经过目标场,在接收阵B端接收数据记为Y1,然后对所接收到的信号处理(匹配滤波等处理过程),得到回波的信噪比,目标的位置及成像;用图示表示如下:

1.png

 不加时间反转处理的程序,其基本流程图如下所示:

 

2.png  

 (加上时间反转处理)在B端接收到信号Y1,对Y1做时间反转处理,能量归一化后再发射出去,经过同样的空间场,然后在A端接收数据记为Y2,对接收到的数据Y2再做处理(匹配滤波等),得到回波的信噪比(与第一步未加时间反转做对比),目标的位置信息及成像。用图示表示如下:

 

3.png

 加时间反转处理的程序,其基本流程图如下所示:

4.png

       发射天线数Nt个,接收天线数Nr个(Nt,Nr可以自由设置或确定设置为某一值,如Nt=2,Nr=3等等),空间中放置检测目标(目标个数可以自定,简化下,目标可看成是点目标),发射端发射信号为超宽带信号(高斯脉冲信号),并且Nt个发射信号为正交信号(即将前面的高斯脉冲信号进行处理,使信号正交),信号经过探测空间后,接收端对回波进行处理,得到空间中目标的位置及成像。

 

具体步骤:假设收发双方分别为天线阵A和天线阵B

 

        第一步:(不加时间反转处理)参看框图1:天线阵A发送信号,经过目标场,在接收阵B端接收数据记为Y1,然后对所接收到的信号处理(匹配滤波等处理过程),得到回波的信噪比,目标的位置及成像;

 

        第二步:(加上时间反转处理)在B端接收到信号Y1,对Y1做时间反转处理,能量归一化后再发射出去,经过同样的空间场,然后在A端接收数据记为Y2,对接收到的数据Y2再做处理(匹配滤波等),得到回波的信噪比(与第一步未加时间反转做对比),目标的位置信息及成像。

 

2.仿真效果预览

matlab2022a仿真结果如下:

5.png

6.png

7.png  

3.MATLAB部分代码预览

`。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

figure;

color = ['b','g','r','k'];

for i   = 1:length(alpha)

    [gt,f]  = func_UWB_gspluse(E0,fc,f1,f2,k,scale,alpha(i));

    tmp     = color(i);

    plot(f,gt,tmp);

    hold on;

    axis([898,902,-0.5,1.2]);

end

title('超宽带高斯脉冲信号');

legend('alpha = 0','alpha = 0.75','alpha = 1.5','alpha = 3');

% clear E0 alpha fc f1 f2 k scale color gt f

%进行传统算法

%下面开始实际的算法

%这里发送天线和接收天线设置为4和1,如果要修改

%%

%参数的初始化

Nt   = 3;

Nr   = 3;

L    = length(gt);

l    = 1:L;

T    = 1/(10^6);

ts   = T/L;

SNR  =-10:1:20;

times= 200;

Pfa  = 10e-5;%虚警概率

%%

%超带宽高斯脉冲信号

[gt,f]  = func_UWB_gspluse(E0,fc,f1,f2,k,scale,alpha(1));

 

%MIMO发送信号

X = func_MIMO_trans(gt,Nt,ts,T);

ind = 0;

for j = 1:length(SNR)

    N0    = 10^(SNR(j)/10);

    count = 0;

    mui   = 1;

    for i = 1:times%利用门特卡罗的设计仿真思想,计算不同信噪比下的检测概率

        ind = ind + 1

        %通过MIMO信道

        [alpha,H]=func_MIMO_channel(Nt,N0);

        %接收机接收到的信号

        for l=1:L           

            r(:,l)=H*X(:,l);

        end

        

        %将时间反转的信号通过信道发送回去

        for l=1:L      

            r2(:,l)=H*conj(r(:,l));

        end         

 

        %匹配滤波

        [E,R] = func_match_filter(r2,X,L);

        %目标检测

        Theta_doa = func_MIMORadar_DOA(E,R);

        %判断是否被检测到

        threshold = 10000;

        if(Theta_doa>threshold)

           detected = 1;

           count    = count + 1;

        else

           p = rand(1,1);

           if p > 1-Pfa    %虚警概率

              detected = 1;

              count    = count + 1;

           else

              detected = 0;

           end

        end

    end

    pc(j) = count/times;

end

toc

figure;

plot(SNR,pc,'b-o');        

xlabel('SNR');

ylabel('Pmd');

grid on;

01_049_m`