雷達陣列回波模擬和DOA、MVDR仿真
下列matlab程式主要是仿真了3發4收等效為1發12收的連續掃頻波制式下的陣列回波,并在陣列的基礎上做DOA和MVDR角度解析度實驗,
這于上一篇《毫米波雷達 3T4R 陣列回波信號模擬 以及 mvdr角度的分辨(一)》
https://blog.csdn.net/taiyangshenniao/article/details/116278475?spm=1001.2014.3001.5501
的另外一種建模方法,本片文章是基于信號的延時來建立數學模型和仿真的,
以下是matlab的程式:
%% 本程式為FMCW制式雷達發射信號與回波信號仿真,雷達采用3發4收構造MIMO虛擬孔徑,仿陣列回波,以驗證超分辨演算法
% 本例程是基于發射信號的延時的方式來構建的個接受天線的回波資料,推導原理參考
%天線間距為半波長,發射頻率為24G,目標資訊可設定
%V01 此版本沒有考慮速度的影響,只考慮了角度和距離的影響
close all;clearvars;clc;
dbstop if error;
%------------------------引數設定----------------------------------------
F0 = 24e9; %載頻
B = 200e6; %帶寬
T = 10E-3; %
u = B/T;
c = 3E8;
PL = 1; %快拍數
RXannate = 4;
TXannate = 3;
virtueRxannate = TXannate * RXannate;
lamada = c/F0;
D = lamada/2;
samplenum = 256;
FS = samplenum / T;
t = [1/FS : 1/FS : samplenum/FS];
RPT = 50E-3; %總共仿真RPT * PL 時間
rsolution = c/2/B;
targetnumber= 2;
% 每一個目標的資訊按順序分別為距離(m)、速度(靠近為﹣,遠離為+)(m/s)、角度(°)、信噪比 DB;
% 此處的距離是按照第一幅發射天線維坐標原點建立的相對位置
targetinfoR = [20 20.2]';
targetinfoV = [0 0]';
targetinfoP = [18 21]';
signalAmplitude = [20 20]';
%% 構造目標到每一副接受天線之間的延時
TXarraydis = [0 4*D 8*D]'; %發射天線在坐標軸上的位置
RXarraydis = TXannate*RXannate*D + [0 : 1 : RXannate-1]' * D; %接受天線在坐標軸上的位置
for i = 1 : targetnumber %生成目標的TX延時txrtao
txrtao(:,i) = sqrt(repmat(targetinfoR(i)^2 , TXannate , 1) + TXarraydis.^2 - 2*targetinfoR(i)*TXarraydis*cosd(90 - targetinfoP(i)))/c;
end
for i = 1 : targetnumber %生成目標的RX延時txrtao
rxrtao(:,i) = sqrt(repmat(targetinfoR(i)^2 , RXannate , 1) + RXarraydis.^2 - 2*targetinfoR(i)*RXarraydis*cosd(90 - targetinfoP(i)))/c;
end
% 按照3法4識訓取12副接受天線的延時,用于后續構造陣列使用
cnt = 1;
for i=1 : 1 : TXannate
for j = 1 : 1 : RXannate
tao(cnt,:) = txrtao( i , :) + rxrtao( j,:);
cnt = cnt + 1;
end
end
%% 回波信號模擬
Sr = zeros(virtueRxannate , samplenum);
signalAmplitude = 10.^(signalAmplitude / 10);
for i = 1 : 1 : targetnumber
%產生零均值、方差為1的復高斯白噪聲v(n)
% 此處產生的是12路無關的噪聲,所以他的自相關矩陣的秩是滿秩矩陣
noise = (randn(virtueRxannate,samplenum)+1j*randn(virtueRxannate,samplenum))/sqrt(2);
Sr = Sr + signalAmplitude(i) * exp(-1i * 2 * u * pi * tao(: , i) * t) .* exp(1i*u*pi*(tao(: , i).^2)) .* exp(-1i*2*pi*F0*tao(: , i)) + noise;
end
Sr = Sr';
%% 正確性檢測與側向
% 頻率檢測(距離檢測)
sr_fft = fft(Sr);
sr_abs = abs(sr_fft);
figure;plot([0 : 1 : samplenum-1]*rsolution , sum(sr_abs , 2));title('目標距離');
% 角度檢測 FFT 測角法
angledata = sum(sr_abs , 2);
angledata(angledata < 5000) = 0;
[~ , peaks] = findpeaks(angledata);
angledata = sr_fft(peaks , :);
angledata = abs(fft(angledata' , 256));
angledata = fftshift((angledata ./max(angledata)));
figure;plot(asind([-pi : 2*pi / 255 : pi] ./ pi) , 10*log10(angledata));title('目標角度(FFT求解)');
xlabel('角度');ylabel('DB');
% 常規波束形成方法求角度解析度
relatematrix = sr_fft' * sr_fft;
% relatematrix = Sr' * Sr;
pisearch = -90 : 0.1 : 90;
CBF = zeros(1 , length(pisearch));
for phi = 1 : length(pisearch)
a = exp(-1i* 2* pi .* [0 : 1 : virtueRxannate-1].*D * sind(pisearch(phi)) ./ lamada );
CBF(phi) = abs(a * relatematrix * a');
end
CBF = CBF / max( CBF);
figure;
plot(pisearch , 10*log10(CBF));xlabel('角度');ylabel('DB');title('CBF解角');
invmatrix = inv(relatematrix);
% MVDR 波束形成
for phi = 1 : length(pisearch)
a = exp(-1i* 2* pi .* [0 : 1 : virtueRxannate-1]*D * sind(pisearch(phi)) ./ lamada );
MVDR(phi) = 1/abs(a * invmatrix * a');
end
MVDR = MVDR / max( MVDR);
figure;
plot(pisearch , 10*log10(MVDR));xlabel('角度');ylabel('DB');title('MVDR解角');
%% ----------------------------------------------------------------
% 結束
實驗分析:
1、目標的位置在20m處,從頻譜上看是正確的

2、目標通過FFT方法解角結果,可以看到相同距離單元上的兩個目標一個在18°、一個在21°;由于FFT解角解析度不夠高,無法分辨兩個目標的角度

3、CBF解角,貌似還是沒有區分開來

4、mvdr解角

5、matlab中回波建模推導




6、實驗總結
本版本的程式暫時沒有考慮速度,需要在下一版本中加入速度因素;可以看出MVDR在靜止目標的區分上還是效果挺好的,此處目標信噪比也是比較高的,如果降低后,可能性能會有所下降
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282398.html
標籤:其他
