DDMA信号处理以及数据处理的流程---距离速度测量
Hello朋友们好呀!我是小雪,在很久以前就听大家说到毫米波雷达的相关知识了。今天终于有机会与小雪一起交流学习了!小雪不仅有着丰富的理论知识储备,在实际操作中也展现出了很强的技术能力——她打算通过连载文章的形式详细分享DDMA信号处理及其数据处理流程。具体来说本系列文章将围绕以下几个关键环节展开介绍:首先是目标生成阶段然后是信号仿真过程接着是测距与测速技术之后是CFAR检测方法随后是测角技术最后涵盖目标聚类与目标跟踪等内容整个系列预计将会发布7到8篇左右的内容
最终效果如下:

整体文件的目录树如下:

本篇文章主要讲的是目标的距离速度测量部分。
基础知识
距离测量
目标距离对应的时延:\tau = \frac{2R}{c}
目标时延对应的频率:f = S * \tau = \frac{S*2R}{c}
f_{bin}对应频率:f_{bin}=\frac{(range_{index}-1)*f_s}{rangeBin}
间距的计算结果为:
R = \frac{f_bin \cdot c}{2s} = \frac{(range_index - 1) \cdot f_s \cdot c}{(rangeBin) \cdot 2s} = \frac{(range_index - 1)c}{2B}
速度测量
目标速度对应的多普勒频移:f_d = \frac{2v}{\lambda}
慢时间维度采样率频率:f_s = \frac{1}{T_r}
T_r为脉冲重复周期
f_{bin}对应的频率为:f_{bin}=\frac{(doppler_{index}-1)*f_s}{dopplerBin}
该目标的速度等于以下所列算式:
v = \frac{f_d \lambda}{2}
等于通过以下步骤计算的结果:
v = \frac{\lambda (doppler_{index}-1)}{2\times dopplerBin\times Tr}
进一步简化后可得:
v = \frac{(doppler_{index}-1)\times\lambda}{(2\times T_s)}
T_s为所有chirp持续时间
非相干积累
在忽略天线间的相位关系时,在接收端对各信号进行叠加运算以实现信号质量的提升
仿真
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; %rangebin
parameter.Chirps = 384; %chirp数
parameter.dopplerBin = 384; %dopplerbin
parameter.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.rangeRes = parameter.c / (2 * parameter.validBandWidth); %距离分辨率
parameter.rangeMax = parameter.rangeRes * parameter.rangeBin; %最大作用距离
parameter.rangeIdx = (0:1:parameter.Samples-1); %range索引
parameter.range = parameter.rangeIdx * parameter.rangeRes; %距离下标
parameter.dopplerRes = parameter.lambda / (2 * parameter.dopplerBin * parameter.TrTotal); %速度分辨率
parameter.dopplerMax = parameter.dopplerRes * parameter.dopplerBin; %最大探测速度,不考虑负速度
parameter.dopplerHalfMax = parameter.dopplerMax / 2; %最大探测速度,考虑正负速度
parameter.dopplerIdx = (0:1:parameter.dopplerBin-1); %dopplerIdx
parameter.doppler = (parameter.dopplerIdx - parameter.dopplerBinHalf) * parameter.dopplerRes; %速度下标
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
代码解读
RDfftMatrix.m文件
该文件主要负责对生成的原始信号数据施加窗口处理,并通过快速时间和缓慢时间维度分别实施傅里叶变换的过程。这一操作实现了时域信号向频域信号的转换
function fft2dData = RDfftMatrix(rawData)
rawData = squeeze(rawData); %原始数据
[dopplerBin,rangeBin] = size(rawData); %原始数据大小
rangeWin = hanning(rangeBin)'; %距离维度hanning窗
rangeWin2D = repmat(rangeWin,dopplerBin,1); %距离窗2D
dopplerWin = hanning(dopplerBin); %多普勒维度hanning窗
dopplerWin2D = repmat(dopplerWin,1,rangeBin); %多普勒窗2D
rawDataWin = rawData .* rangeWin2D; %距离维度加窗
fft1dData = fft(rawDataWin,rangeBin,2); %距离维度fft
fft1dDataWin = fft1dData .* dopplerWin2D; %多普勒维度加窗
fft2dData = fft(fft1dDataWin,dopplerBin,1); %速度维度fft
end
代码解读
chan_Accumulate.m文件
chan_Accumulate.m文件主要是进行所有接收通道信号的累加
function accumulateRD = chan_Accumulate(fft2dData)
accumulateRD = db(squeeze(sum(abs(fft2dData),1)));
end
代码解读
运行结果如下:

至此,本片文章就此结束了。
