Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的文章大约是一个7-8篇左右。
最终效果如下:
整体文件的目录树如下:
本篇文章主要讲的是原始数据生成的部分。
基本理论
FMCW雷达基本结构
下图为FMCW雷达基本结构,时序器和本地振荡器产生线性调频信号,调相器进行相位调制,功率放大器增强信号功率,最后由发射天线向外界传播。当信号在外界传输过程中遇到目标后会被反射,反射信号会被接收天线接收,通过低噪声放大器,与发射信号进行混频得到中频信号。中频信号包含目标的距离和速度信息。中频信号通过低通滤波器,经过模数转换后数据就可以用于提取目标信息
发射信号chirp序列
下图为发射chirp发射信号和接收信号序列
单个chirp发射信号表达式为:
S T ( t ) = A T e j [ 2 π ( f c t + 1 2 S t 2 ) ] S_T(t)=A_Te^{j[2\pi(f_ct+\frac{1}{2}St^2)]} ST(t)=ATej[2π(fct+21St2)]
当发射信号遇到目标后,会被反射,形成回波信号,回波信号的表达式为:
S R ( t ) = A R e j 2 π [ ( f c + f d ) ( t − t d ) + 1 2 S ( t − t d ) 2 ] S_R(t)=A_Re^{j{2\pi[(f_c+f_d)(t-t_d)+\frac{1}{2}S(t-t_d)^2]}} SR(t)=ARej2π[(fc+fd)(t−td)+21S(t−td)2]
接收到目标的回波信号与发射信号进行混频得到中频信号,其表达式为:
S I F = A I F e j 2 π [ ( S t d − f d ) t + ( f c + f d ) t d − 1 2 S t d 2 ] S_{IF}=A_{IF}e^{j{2\pi[(St_d-f_d)t+(f_c+f_d)t_d-\frac{1}{2}St_d^2]}} SIF=AIFej2π[(Std−fd)t+(fc+fd)td−21Std2]
距离、速度、角度
距离公式:
t d = 2 R c t_d = \frac{2R}{c} td=c2R
速度公式:
f d = 2 v λ f_d = \frac{2v}{\lambda} fd=λ2v
角度公式:
Δ ϕ = 2 π λ d s i n ( θ ) \Delta\phi= \frac{2\pi}{\lambda}dsin(\theta) Δϕ=λ2πdsin(θ)
仿真
雷达参数
基本参数
下表为仿真雷达的基本参数
阵列排布
阵列排布采用均匀阵列,暂不考虑俯仰角测量
仿真代码
generateParameter.m文件
generateParameter.m文件主要是一些雷达参数的宏定义,定义一些雷达的相关变量值;具体代码如下:
% 参数设置
function parameter = generateParameter()parameter.frameNumLoops = 18; %初始化frame循环parameter.frameCount = 0; %帧计数parameter.targetNums = 1; %初始化真实目标parameter.c = 3e8; %光速parameter.frameNums = 70; %帧数parameter.frameTime = 60e-3; %帧周期parameter.startFreq = 76.2e9; %起始频率parameter.Fs = 18.75e6; %采样率 实采样率37.5MHz的采样率 复采样率为18.75MHz的采样率parameter.tr = 1 / parameter.Fs; %采样间隔parameter.Slope = 20e12; %chirp斜率parameter.Samples = 512; %采样点parameter.rangeBin = 512; %rangebinparameter.Chirps = 384; %chirp数parameter.dopplerBin = 384; %dopplerbinparameter.dopplerBinHalf = parameter.dopplerBin / 2; %多普勒bin的一半parameter.TrValid = parameter.Samples / parameter.Fs; %采样有效时间parameter.TrTotal = 38e-6; %chirp周期parameter.t = 0:parameter.tr:parameter.TrValid - parameter.tr; %chirp时间下标parameter.validBandWidth = parameter.Slope * parameter.TrValid; %有效带宽parameter.totalBandWidth = parameter.Slope * parameter.TrTotal; %总带宽parameter.centerFreq = parameter.startFreq + parameter.validBandWidth / 2; %中心频率parameter.lambda = parameter.c / parameter.centerFreq; %波长parameter.txAntenna = [0 4 8 12]; %发射天线 暂不考俯仰 2944的方位发射天线parameter.rxAntenna = [0 1 2 3]; %接收天线 2944的方位接收天线parameter.txNum = length(parameter.txAntenna); %发射天线的数量parameter.rxNum = length(parameter.rxAntenna); %接收天线的数量parameter.dx = parameter.lambda / 2; %虚拟天线的方位最小间距parameter.subBand = 6; %子带数parameter.emptyBand = 2; %空子带数parameter.validBand = parameter.txNum; %有效子带为发射天线数量parameter.subDopplerBin = parameter.dopplerBin / parameter.subBand; %一个子带dopplerbin的数目parameter.subBandRelation = [0, 1, 2, 3] * parameter.subDopplerBin; %子带间的关系parameter.phaseShift = mod(2*pi .* (1:1:parameter.Chirps).' .* (0:1:parameter.txNum-1) ./ parameter.subBand, 2*pi); %chirp信号的相移值end
generateSignal.m文件
generateSignal.m文件主要目的是生成雷达的原始数据,生成一个维度为 r x N u m s ∗ c h i r p N u m s ∗ s a m p l e s rxNums*chirpNums*samples rxNums∗chirpNums∗samples的矩阵;
具体代码如下:
function rawData = generateSignal(Parameter,target)c = Parameter.c; %光速TrTotal = Parameter.TrTotal; %脉冲重复周期samples = Parameter.Samples; %采样点chirps = Parameter.Chirps; %chirp数slope = Parameter.Slope; %chirp斜率startFreq = Parameter.startFreq; %起始频率deltaFreq = Parameter.deltaFreq; %步进频率lambda = Parameter.lambda; %波长txAntenna = Parameter.txAntenna; %发射天线的位置rxAntenna = Parameter.rxAntenna; %接收天线的位置txNum = Parameter.txNum; %发射天线数rxNum = Parameter.rxNum; %接收天线数dx = Parameter.dx; %水平间距targetNum = size(target,1); %目标数t = Parameter.t; %时间序列phaseShift = Parameter.phaseShift; %移相值rawData = zeros(rxNum,chirps,samples);for rxId = 1:rxNum %接收天线循环rxPos = rxAntenna(rxId); %每根接收天线的位置for chirpId = 1:chirps %chirp数目循环Sif = zeros(1,samples);centerFreq = startFreq + (chirpId - 1) * deltaFreq;for txId = 1:txNum %发射天线循环txPos = txAntenna(txId); %每跟发射天线的位置virtualAntennaPos = rxPos + txPos; %虚拟天线位置phaseValue = phaseShift(chirpId,txId); %DDMA移相位值St = exp((1i*2*pi) * (centerFreq * (t + chirpId * TrTotal) + slope / 2 * t.^2) + 1i * phaseValue); %发射信号for targetId = 1:targetNum %目标数目循环targetRange = target(targetId,1); targetSpeed = target(targetId,2); targetAngle = target(targetId,3); %目标信息tau = 2 * targetRange / c; %距离信息fd = 2 * targetSpeed / lambda; %频移信息wx = 2 * pi * virtualAntennaPos / lambda * dx * sind(targetAngle); %天线相位信息Sr = exp((1i*2*pi) * ((centerFreq-fd) * (t - tau + chirpId * TrTotal) + slope / 2 * (t-tau).^2) - 1i * wx); %回波信号
% Sr = exp((1i*2*pi) * ((centerFreq-fd) * (t - tau + chirpId * TrTotal) + slope / 2 * (t-tau).^2)); %回波信号Sif = Sif + St .* conj(Sr);endendrawData(rxId,chirpId,:) = Sif;endrawData(rxId,:,:) = awgn(rawData(rxId,:,:),0); %添加噪声end
end
运行结果如下:
参考文献
- Xiaojie雷达之路—TDM-MIMO及雷达处理流程仿真
至此,本片文章就此结束了。