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

相关文章

通过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 分

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结