close all;
clear all;
clc;
%%%▲▲▲▲▲这种方式仅适用于大占空比,偏离法线方向较大的目标掩护
Flag = 0 ; % 0或1表示两种脉压方式,对应的弃置区不同,
%%% ======= 参数 ================
N = 10 ; % 阵元个数
B = 100e6 ; % 带宽
Fs = B ; % 采样频率
c = 3e8 ; % 电磁波传播速度
F0 = 3e8 ; % 雷达工作频率 P波段
Lambda = c/F0 ; % 波长
d = 0.5*Lambda ; % 阵元间隔
PRF = 2e3 ; % 脉冲重复频率
SNR = 1 ; % 信噪比
VirtualSNR = 1 ; %
PulseWidth = 10e-6; % 脉冲宽度
SignalAngle = 40*pi/180 ; % 目标方向
SignalRange = 60 ; % 信号开始出现的位置
Snapshots = ceil(Fs/PRF*0.08) ; % 距离单元个数,距离样本个数太多,只仿真了前8%的回波信号
Mu = B/PulseWidth ; % 调频率
Points = Fs*PulseWidth ; % 发射信号点数
%%% ======== 数据仿真 =============
TrueTargetData = zeros(N,Snapshots) ; % 真实目标回波数据
VirtualTargetData = zeros(N,Snapshots) ; % 包含虚假目标回波数据
Time = [-ceil(0.5*Points):floor(0.5*Points)]/Fs ; % 发射时间
TransmitSignal = exp(1i*pi*Mu*Time.*Time) ; % 发射信号
%%% ======== 真实信号回波 =============
TargetSignal = kron(exp(1i*2*pi*d/Lambda*sin(SignalAngle)*[0:N-1]'),TransmitSignal) ;
TargetSignal = 10^(SNR/20)*TargetSignal ; % 真实目标信号
%%% =========== 假目标回波信号 =========
VirtualTargetSignals = zeros(N,length(Time)); % 虚假目标,超出雷达系统带宽的部分接收不到,故只有length(Time)点回波
for SubPulseCounter = 1:Points % 发射Points个脉冲
RangeIndex = SubPulseCounter:length(Time) ; % 虚假目标出现的距离单元号
CarrierFrequency = F0+B/Points*(SubPulseCounter-1) ; % 当前脉冲的载频
Flambda = c/CarrierFrequency; % 波长
Steer = exp(1i*2*pi*d/Flambda*sin(SignalAngle)*[0:N-1]') ; % 空间导向
MixFrequency = exp(1i*2*pi*sin(SignalAngle)*(d/Flambda-d/Lambda)) ; % 混频后的剩余频率
% VirtualTarget = kron(Steer,TransmitSignal(:,RangeIndex)*MixFrequency*SubPulseCounter) ;
VirtualTarget = kron(Steer,TransmitSignal(:,RangeIndex)*MixFrequency) ;
VirtualTargetSignals(:,RangeIndex) = VirtualTargetSignals(:,RangeIndex) + VirtualTarget ;
end
VirtualTargetSignals = 10^(VirtualSNR/20)*VirtualTargetSignals ;
%%% ========= 噪声数据 ========================
Noise = randn(size(TrueTargetData)).*exp(1i*2*pi*rand(size(TrueTargetData))) ; %噪声数据
%%% ================== 数据 =======================
TrueTargetData(:,SignalRange:SignalRange+length(Time)-1) = TargetSignal ;
VirtualTargetData(:,SignalRange:SignalRange+length(Time)-1) = TargetSignal +VirtualTargetSignals ;
TrueTargetData = TrueTargetData + Noise ;
VirtualTargetData = VirtualTargetData + Noise ;
%%% ============ 脉压 =======
PluseCompressLength = Snapshots + length(Time) - 1 ; % FFT点数
Window = chebwin(length(Time),60) ;
if (Flag == 0) % 先FFT 后共轭
MatchSignal = TransmitSignal*diag(Window) ; % 匹配信号
FFTMatchSignal = conj(fft(MatchSignal,PluseCompressLength)) ; % 匹配信号转换为频域
elseif (Flag == 1) % 先共轭 后FFT
MatchSignal = conj(TransmitSignal*diag(Window)) ; % 匹配信号
FFTMatchSignal = fft(MatchSignal,PluseCompressLength) ; % 匹配信号转换为频域
end
%%% =============== 真实目标脉压 ============
FFTTrueTargetData = fft(TrueTargetData,PluseCompressLength,2) ; %信号转换到频域
CompressTrueTargetData = FFTTrueTargetData.*kron(ones(N,1),FFTMatchSignal) ;
CompressTrueTargetData = ifft(CompressTrueTargetData,PluseCompressLength,2) ; % 完成脉压
if (Flag == 0) % 丢掉后面的
CompressTrueTargetData = CompressTrueTargetData(:,1:Snapshots) ;
elseif (Flag == 1)% 丢掉前面的
CompressTrueTargetData = CompressTrueTargetData(:,length(Time):end) ;
end
%%% =============== 虚假目标脉压 ============
FFTVirtualTargetData = fft(VirtualTargetData,PluseCompressLength,2) ; %信号转换到频域
CompressVirtualTargetData = FFTVirtualTargetData.*kron(ones(N,1),FFTMatchSignal) ;
CompressVirtualTargetData = ifft(CompressVirtualTargetData,PluseCompressLength,2) ; % 完成脉压
if (Flag == 0) % 丢掉后面的
CompressVirtualTargetData = CompressVirtualTargetData(:,1:Snapshots) ;
elseif (Flag == 1)% 丢掉前面的
CompressVirtualTargetData = CompressVirtualTargetData(:,length(Time):end) ;
end
dB_PCData = 20*log10(abs(CompressTrueTargetData)) ;
figure; plot(dB_PCData(1,:),'r.-') ;hold on;
plot(20*log10(abs(TrueTargetData(1,:))),'-');
legend('脉压后','脉压前') ;
title('真实目标脉压前后波形'); xlabel('距离门'); ylabel('阵元') ;
dB_PCData = 20*log10(abs(CompressVirtualTargetData)) ;
figure; plot(dB_PCData(1,:),'r.-') ;hold on;
plot(20*log10(abs(TrueTargetData(1,:))),'-');
legend('脉压后','脉压前') ;
title('虚假目标脉压前后波形'); xlabel('距离门'); ylabel('阵元') ;
%%% ======== MUSIC 谱估计 ===========
TrueConvR = CompressTrueTargetData*CompressTrueTargetData'/Snapshots ; %计算协方差矩阵
VirtualConvR = CompressVirtualTargetData*CompressVirtualTargetData'/Snapshots ; %计算协方差矩阵
[TrueEigVector,TrueEigValue] = eig(TrueConvR) ;
[VirtualEigVector,VirtualEigValue] = eig(VirtualConvR) ;
TrueInvR = pinv(TrueConvR) ;
VirtualInvR = pinv(VirtualConvR) ;
figure;plot(10*log10(abs(diag(TrueEigValue))),'.-');
TrueNoiseSubspace = [TrueEigVector(:,1:9)] ; % 噪声子空间
VirtualNoiseSubspace = [VirtualEigVector(:,1:9)] ; % 噪声子空间
Angle = linspace(-90,90,361)*pi/180 ;
Result = zeros(361,2) ;
for AngleCounter = 1:361
Steer = exp(1i*2*pi*d/Lambda*sin(Angle(AngleCounter))*[0:N-1]') ;
Result(AngleCounter,1) = 1/(Steer'*TrueNoiseSubspace*TrueNoiseSubspace'*Steer)*N;
Result(AngleCounter,2) = 1/(Steer'*TrueInvR*Steer)*N ;
Result(AngleCounter,3) = 1/(Steer'*VirtualNoiseSubspace*VirtualNoiseSubspace'*Steer)*N;
Result(AngleCounter,4) = 1/(Steer'*VirtualInvR*Steer)*N ;
end
Result = 10*log10(abs(Result)) ;
figure; plot(Angle*180/pi,Result(:,[1 3]),'.-') ;
title('MUSIC谱估计结果') ; xlabel('角度/°'); ylabel('功率/dB') ;
legend('真实方向','虚假方向') ;
AngleProcess.rar_processingangle_匹配滤波_匹配滤波 music
版权申诉
69 浏览量
2022-07-15
04:53:58
上传
评论 1
收藏 2KB RAR 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- SVID_20240523_141155_1.mp4
- Code for the complete guide to tkinter tutorial
- 关于百货中心供应链管理系统.zip
- SimpleFolderIcon-master 修改Unity的Project下的文件夹图标
- A python Tkinter widget to display tile based maps
- A pure Python library for adding tables to a Tkinter application
- Vector资源文件.zip
- MobaXterm-Installer
- MicroMsg.xlsx
- 88-520告白(520气球).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0