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

2024-06-10 22:12

本文主要是介绍DDMA信号处理以及数据处理的流程---原始数据生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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)(ttd)+21S(ttd)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π[(Stdfd)t+(fc+fd)td21Std2]

距离、速度、角度

距离公式:

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 rxNumschirpNumssamples的矩阵;

具体代码如下:

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

运行结果如下:

参考文献

  1. Xiaojie雷达之路—TDM-MIMO及雷达处理流程仿真

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

这篇关于DDMA信号处理以及数据处理的流程---原始数据生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049411

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分