Advertisement

DDMA信号处理以及数据处理的流程---原始数据生成

阅读量:

你好呀!大家好!我是叫Xiaojie的小助手哦!很久没有见到你了,在这里非常欢迎各位随时加入我的学习小组,在这里共同探讨毫米波雷达的相关知识!我计划通过一系列文章深入探讨DDMA信号处理及其数据处理流程。本文将系统地从以下八个方面展开:首先是目标生成过程的详细阐述;其次是基于仿真平台的信号建模与验证;随后是关键的技术环节——距离测量;接着是速度估计方法的探讨;之后是对CFAR检测技术的应用分析;随后是对角度估计问题的研究;最后是多目标识别与跟踪方案的设计与优化。预计这个系列将包含七到八篇文章的内容。

最终效果如下:

整体文件的目录树如下:

本篇文章主要讲的是原始数据生成的部分。

基本理论

FMCW雷达基本结构

下图展示了FMCW雷达的基本架构,其中时序器和本地振荡器输出线性调频信号;相位调制模块对信号进行相位调制;功率放大器增强信号幅度;最终经由发射天线向外界发送。当电磁波在传播过程中遇到目标后会反射回来,接收天线捕获这些反射波;经过低噪声放大器处理后与原发射信号进行混频生成中频信号;所得中频信号包含了目标的方位与速度数据;通过低通滤波器处理后将数字信息用于目标分析

发射信号chirp序列

下图为发射chirp发射信号和接收信号序列

单个chirp发射信号表达式为:

S_T(t)=A_Te^{j[2\pi(f_ct+\frac{1}{2}St^2)]}

当发射信号遇到目标后,会被反射,形成回波信号,回波信号的表达式为:

S_R(t)=A_Re^{j{2\pi[(f_c+f_d)(t-t_d)+\frac{1}{2}S(t-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]}}

距离、速度、角度

距离公式:

t_d = \frac{2R}{c}

速度公式:

f_d = \frac{2v}{\lambda}

角度公式:

\Delta\phi= \frac{2\pi}{\lambda}dsin(\theta)

仿真

雷达参数

基本参数

下表为仿真雷达的基本参数

阵列排布

阵列排布采用均匀阵列,暂不考虑俯仰角测量

仿真代码

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.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文件的主要功能是生成雷达原始数据;该脚本会构建一个维度为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);
                end
            end
            rawData(rxId,chirpId,:) = Sif;
        end
        rawData(rxId,:,:) = awgn(rawData(rxId,:,:),0); %添加噪声
    end
    end
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

运行结果如下:

参考文献

Xiaojie的雷达技术发展之旅—基于TDM-MIMO技术的雷达处理流程仿真

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

全部评论 (0)

还没有任何评论哟~