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

news2024/10/6 2:29:33

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; %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文件主要目的是生成雷达的原始数据,生成一个维度为 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);
                end
            end
            rawData(rxId,chirpId,:) = Sif;
        end
        rawData(rxId,:,:) = awgn(rawData(rxId,:,:),0); %添加噪声
    end
end


运行结果如下:

参考文献

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1809695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VUE3 element时间选择器默认选择七天】

VUE3 element时间选择器默认选择七天 <el-date-pickerv-model"form.timeRange"type"datetimerange"start-placeholder"开始时间"end-placeholder"结束时间"format"YYYY-MM-DD HH:mm:ss"date-format"YYYY/MM/DD dd…

vivado HW_ILA_DATA、HW_PROBE

HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心&#xff0c;hw_ila&#xff0c;在物理FPGA上&#xff0c;hw_device。 read_hw_ila_data命令还…

定个小目标之刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

深入解析ETL与ELT架构:数据集成技术的演进与发展

摘要&#xff1a;随着大数据时代的到来&#xff0c;数据集成成为企业信息化建设的重要环节。本文将深入探讨ETL与ELT两种架构&#xff0c;分析它们在数据处理、性能、可扩展性等方面的差异&#xff0c;为企业数据集成提供技术指导。 一、引言 在大数据时代&#xff0c;企业需要…

【Vue】获取模块内的state数据

目标&#xff1a; 掌握模块中 state 的访问语法 尽管已经分模块了&#xff0c;但其实子模块的状态&#xff0c;还是会挂到根级别的 state 中&#xff0c;属性名就是模块名 使用模块中的数据 直接通过模块名访问 $store.state.模块名.xxx 通过 mapState 映射&#xff1a; 默认…

Java网络通信实现

UDP UDPServer import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket;public class UDPServer {public static void main(String[] args) throws IOException {System.out.println("UdpServer启动");// 创建upd套接字Data…

PE文件(七)扩大节合并节数据目录

添加shellcode有以下几种的方式&#xff1a; 1.直接在任意节的空白区添加代码 2.新增节添加代码 3.扩大最后一个节添加代码 4.合并节并添加代码 今天我们学习如何扩大节&#xff0c;合并节 扩大节 在上一节的学习中&#xff0c;我们可以通过上移NT头和节表覆盖DOS Stub以…

VBA即用型代码手册:删除重复行Delete Duplicate Rows

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

【python】python化妆品销售logistic逻辑回归预测分析可视化(源码+课程论文+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

基于51单片机的车辆动态称重系统设计

一 动态称重 所谓动态称重是指通过分析和测量车胎运动中的力,来计算该运动车辆的总重量、轴重、轮重和部分重量数据的过程。动态称重系统按经过车辆行驶的速度划分,可分为低速动态称重系统与高速动态称重系统。因为我国高速公路的限速最高是120,所以高速动态称重系统在理论…

按键精灵在Win11中弹窗出现乱码并且自带的部分系统插件不能使用的解决方法

按键精灵中出现以下问题&#xff1a; 提示信息的弹窗出现乱码&#xff1a; 系统自带的部分像 plugin. 开头的插件不能使用&#xff0c;如下&#xff1a;s Plugin.Sys.GetDateTime() screenX Plugin.GetSysInfo.GetScreenResolutionX screenY Plugin.GetSysInfo.GetScreenRe…

线程知识点总结

Java线程是Java并发编程中的核心概念之一&#xff0c;它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结&#xff1a; 1. 线程的创建与启动 继承Thread类&#xff1a;创建一个新的类继承Thread类&#xff0c;并重写其run()方法。通过创建该类的实例并调用st…

【C语言】插入排序(经典算法,建议收藏!!!)

目录 1、原理2、代码展示3、解析代码4、适用场景 1、原理 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;其原理可以简述如下&#xff1a; 1.分已排序区间和未排序区间: 将数组分为已排序区间和未排序区间。初始时&#xff0c;已排序区…

Vue3父组件如何访问子组件属性和方法

本篇内容主要是父组件如何访问子组件的属性和方法 文章目录 子组件 //son.vue代码const list (info) >{console.log(info) }const name ref("XXXX")//子组件向父组件暴露了一个方法&#xff0c;然后父组件就可以去使用子组件里面的一些属性和方法了 //子组件向…

突破网络屏障:掌握FRP内网穿透技术

1.FRP介绍 1.frp是什么 frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网 I…

Python 潮流周刊#55:分享 9 个高质量的技术类信息源!

大家好&#xff0c;我是猫哥&#xff0c;今天给大家分享几个高质量的技术类信息源。 本文分享的信息源都是周刊类型的&#xff0c;所谓周刊类&#xff0c;就是以固定每周的频率更新&#xff0c;每期分享很多精华内容的链接。它的特点是信息密度极高&#xff0c;可以节省你去查…

log4j日志打印导致OOM问题

一、背景 某天压测&#xff0c;QPS压到一定值后机器就开始重启&#xff0c;出现OOM&#xff0c;好在线上机器配置了启动参数-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/**/**heapdump.hprof。将dump文件下载到本地&#xff0c;打开Java sdk bin目录下的jvisualvm工具&a…

2024PTA算法竞赛考试编程题代码

目录 前言 题目和代码 L1-006 连续因子 L1-009 N个数求和 L2-004 这是二叉搜索树吗&#xff1f; L2-006 树的遍历 L2-007 家庭房产 L4-118 均是素数 L4-203 三足鼎立 L2-002 链表去重 L2-003 月饼 L2-026 小字辈 L4-201 出栈序列的合法性 L4-205 浪漫侧影 前言 所…

BarTender 常见的使用要点

BarTender 简述 BarTender是由美国海鸥科技&#xff08;Seagull Scientific&#xff09;推出的一款条码打印软件&#xff0c;被广泛应用于标签、条形码、证卡和RFID标记的设计和打印领域。它在全球范围内拥有众多用户&#xff0c;被公认为标签打印方面的全球领先者。BarTender…

把 FolkMQ 内嵌到 SpringBoot2 项目里(比如 “诺依” 啊)

FolkMQ &#xff08;消息中间件&#xff09;支持内嵌、单机、集群、多重集群等多种部署方式。 内嵌版&#xff0c;就相当于 H2 或 SQLite 数据库一样。给一些小项目&#xff08;或者特别需求&#xff09;带来了方便。大项目&#xff0c;则可以使用独立部署的 “单机版” 或 “…