基于STM32的多普勒雷达测速

2023-05-16

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。

1、基础知识

雷达

雷达英文为Radar,Radio Detection and Ranging的缩写,原意是无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。不过,所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,
对于雷达的详细介绍请点这里

多普勒理论

波是由频率和振幅所构成,而无线电波是随着物体而移动的,当无线电波在行进的过程中,碰到物体时,该无线电波会被反弹,而且其反弹回来的波,其频率及振幅都会随着所碰到的物体的移动状态而改变。若无线电波所碰到的物体时固定不动的,那么所反弹回来的无线电波其频率是不会改变的。然而,若物体朝着无线电线发射的方向前进时,此时所反弹回来的无线电波会被压缩,因此该电波的频率会随之增加;反之,若物体是朝着远离无线电波方向行进时,则反弹回来的无线电波,其频率则会随之减小。

2、傅里叶变换

我们在绝大多数傅里叶变换的应用都是采用离散傅里叶变换(DFT),更确切的说,是它的快速算法FFT。下面简要介绍一下这些傅里叶变换是什么,有什么联系。

2.1 傅里叶变换(Fourier transform)

一种线性的积分变换,可以理解为一种从时间到频率的变化或其相互转化,把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。

关于傅里叶变换的具体讲解可以看下面这篇文章,我觉得讲的还是挺详细的:深入浅出的讲解傅里叶变换(真正的通俗易懂)

2.2 离散傅里叶变换(Discrete Fourier Transform,DFT

指傅里叶变换在时域和频域上都呈现离散的形式。由于傅里叶变换和逆变换都是正负无穷的连续积分,数学上可以根据公式计算,但在计算机上难以实现,因为计算机是一个离散系统,DFT就是用来解决这个问题的,使用计算机这个离散系统进行有限近似计算。

2.3 离散时间傅里叶变换(Discrete Time Fourier Transform,DTFT

无限长离散信号进行傅里叶变换。DTFT中原始信号是无限长的,即使采样后,采样点也是无限个,可以认为周期为无限长,因此它的频谱就趋向于连续,而连续的频谱同样不利于计算机处理,所以频率也要离散化才行,所需要的技术就是DFT,即具有周期特性离散信号的傅里叶级数(就是将无限长的离散信号进行截短至N个采样点,然后将这个N个采样点进行周期延拓,变成周期信号,这样其频率就离散了)

在实际应用中通常采用快速傅里叶变换以高效计算DFT。

2.4 快速傅里叶变换 (fast Fourier transform,FFT),

利用计算机计算DFT高效快速计算方法的统称。能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

有关DFT和FFT更详细的讲解可以看下面这篇文章:
全面解析傅立叶变换(非常详细)

3、常用两款雷达传感器

接下来我们介绍两款常用的雷达传感器K-LC6和K-MC1。用于测量物体存在、速度、运动方向、距离信息。

K-LC6

24GHz雷达传感器,带VCO窄波束K波段雷达传感器。一种双通道多普勒雷达模块,用于中短距离传感器。适合人和车辆的移动和存在传感器。
探测距离:人>24米;车>62米。(近距离

●该模块包括一个射频低噪声放大器(LNA),以获得最佳的信噪比性能。双中频I和Q允许运动方向检测和高性能信号处理。
在这里插入图片描述

K-MC1

24GHz雷达传感器,带VCO窄波束K波段雷达传感器,60贴片多普勒模块,用于远程传感器。
探测距离:人56米;车>150米。(远距离

●模块包括一个射频低噪声放大器和两个47dB中频前置放大器,用于I和Q通道。此功能将显著减少对外部模拟电子设备的需求。对于特殊信号条件应用,提供额外的缓冲混频器直流输出。这大大提高了FSK测距应用的灵活性。
在这里插入图片描述
工作原理:K-LC6和K-MC1雷达模块的射频信号的发生与接收是一体的,它利用压控振荡器产生24GHz的射频振荡信号,并经发射通道进行功率放大后,通过微带天线发射出去;发射的射频信号一旦碰到目标,即发生反射,反射信号被接收天线接收,经接收通道的放大和解调,获得零中频信号,并经中频放大器进一步放大,获得一定信噪比的包含目标多普勒速度信息的差拍中频输出。

K-LC6和K-MC1都可以测速,但K-MC1测速的同时还可以测量距离

4、FFT多普勒雷达测速原理

多普勒雷达传感器通过发射和接收射频振荡信号输出包含物体运动速度和方向的模拟电压信号。模块的输出信号经过滤波放大后连接到stm32单片机的AD输入管脚,利用stm32自带的DSP数学库实现复数FFT变换求出多普勒差频,根据差频求出当前物体的速度和方向。

注意雷达模块会输出两路信号,分为实部和虚部,一路信号只能求出速度大小,两路信号才能求出速度的方向。两路信号的同时采样可使用STM32双ADC同时转换模式,并用定时器去触发,通过改变定时器的预装载值去控制当前的采样频率。

模块在远距离时输出的正交信号幅度比较小,想提高模块的检测距离,要加上运算放大电路,另外由于射频模块的输出具有直流偏执,当前我们选择在运放的前端先加上隔直电容并加上电位器进行调零。

代码实现思路
(1)将两路ADC采集的值转换为电压值(0~3.3V)
(2)对电压值求平均值,然后电压值减去平均值(除去直流分量)
(3)利用arm_cfft_init_f32()和arm_cfft_f32)函数进行复数FFT运算,将数据从时域转为频域
(4)利用arm_cmplx_mag_f32()函数得到每一频率点对应的幅值
(5)利用arm_max_f32()函数得到最大幅度值和对应下标频率。最大幅值对应下标在前半部分和后半部分代表不同的方向:前半部分为正方向,后半部分为负方向
(6) 根据最大幅度值对应的下标即可求出速度

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32的多普勒雷达测速 的相关文章

  • dm-vio-ros的安装(详细)

    前言 dm vio安装 参考博客 SLAM DM VIO ros版 安装和论文解读 在安装过程中 xff0c 有些地方提示的不是很清楚 xff0c 故写一篇记录避免再次犯错 在dm vio的一个子目录下创建ros工作空间 xff0c 如图所
  • C语言几种常见头文件,再也不怕用了函数不知道他“妈”的问题了!!!

    不完全统计 xff0c C语言标准库中的头文件有15个之多 xff0c 所以我主要介绍常用的这四个头文件stdio h xff0c string h xff0c math h xff0c stdlib h xff0c 以后用到其他的再做补充
  • K210与STM32之间的通信

    K210与STM32之间使用串口进行通信 K210 K210使用的开发环境是MaixPy IDE 具体解释见代码注释 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a span class token keyword impo
  • Linux多线程编程问题:对‘pthread_create’未定义的引用

    在Linux下进行多线程程序测试时出现如下问题 xff1a 对 pthread create 未定义的引用 collect2 error ld returned 1 exit status 问题原因 xff1a linux下调用子线程时会用
  • PROC系列之---/proc/pid/stat

    proc stat 包含了所有CPU活跃的信息 xff0c 该文件中的所有值都是从系统启动开始累计到当前时刻 root 64 localhost cat proc 6873 stat 6873 a out R 6723 6873 6723
  • realsense d435 launch中修改频率不好用

    警告提示 xff1a Given stream configuration is not supported by the device span class token operator span Stream Color Stream
  • RK1109/RK1126--人工智能NPU强劲算力芯片

    瑞芯微电子第四届 开发者之春 大会上 xff0c 针对视觉领域 xff0c 推出全新的视觉处理器RV1109 1126芯片 从下图中我们可以清晰的看出 xff0c 在2020年瑞芯微推出的产品主要是面向物联网人工智能 机器视觉和机顶盒领域
  • Makefile

    Makefile的引入及规则 使用keil mdk avr等工具开发程序时点点鼠标就可以编译了 xff0c 使用Keil xff0c MDK xff0c AVR等工具开发程序时点点鼠标就可以编译了 它的内部机制是什么 它怎么组织管理程序 怎
  • 转载知乎-深度可分离卷积

    深度可分离卷积
  • vgg16网络改深度可分离卷积

    原网络 span class token keyword class span span class token class name CNN0 span span class token punctuation span nn span
  • Dropout 丢弃函数的使用

    Class span class token class name USeDropout span span class token punctuation span nn span class token punctuation span
  • libtorch-resnet18

    与大家分享一下自己在学习使用libtorch搭建神经网络时学到的一些心得和例子 xff0c 记录下来供大家参考 首先我们要参考着pytorch版的resnet来搭建 xff0c 这样我们可以省去不必要的麻烦 xff0c 上代码 xff1a
  • Yolov5 -libtorch部署

    将python训练好的网络模型转为可以再libtorch上走的pth模型 xff0c 转换代码如下 xff1a 可以直接赋值粘贴 import argparse import sys import time sys span class t
  • c++ 关于error LINK2005: XXXX已经在 .obj 中定义“的问题

    代码很多的时候出现这个问题很棘手 xff0c 小号大量时间来排查问题 xff0c 所以一边学习一边记录学习中出现的问题 原因 xff1a 是因为编程习惯的问题 xff0c 直接在头文件 h中直接定义了变量或者函数 xff0c 然后A cpp
  • 使用vs2019将libtorch或者网络打包成dll

    最近在搞一个程序 xff0c 需要把libtorch打包成dll xff0c 让别人使用 xff0c 在网上找了好久都没只有找到合适的答案 xff0c 最后在一个博主大哥那里找到了 xff0c 很是感激这位大哥与我们分享自己的经验 xff0
  • 【无标题】 libtorch C++ vs2017 debug模式可以正确加载模型,release模式错误

    转发 xff1a libtorch C 43 43 vs2017 debug模式可以正确加载模型 xff0c release模式错误 https blog csdn net weixin 43862688 article details 1
  • targetcli

    Linux IO LIO Target is an open source implementation of the SCSI target thathas become the standard one included in the
  • libtorch-加载预训练模型出现No such serialized submodule: ‘xxx‘

    今天在用libtorch训练得时候 xff0c 想用预训练模型加速训练 xff0c 居然报错 xff0c 以为是模型得问题 xff0c 然后重新训练了一个模型 xff0c 作为预训练模型 xff0c 还是报错 xff0c 一时找不到原因 x
  • QT学习之路-记事本

    1 在创建记事本之前先明白有哪些功能 xff1a 先创建一个菜单栏 xff0c 菜单栏是用来装各种功能的一个地方如上图所示 xff0c 文件 编辑所在的地方为菜单栏 xff0c span class token comment 创建菜单栏
  • yolov5-pytorch导出模型问题

    在官网提供的代码中 xff0c 很方便的可以把pytorch的模型转为libtorch的模型 xff0c 但是在转换前要明白自己转换后的模型是仅仅为了推理部署 xff0c 还是说用转换后的模型作为libtorch的预训练模型继续使用呢 xf

随机推荐

  • libtorch与pytorch索引张量值操作([:]与index)

    由于我最近在学习libtorch相关的东西 xff0c 所以就记录一下使用libtorch与pytorch一样对张量操作的语法 下面是我转载的一位大佬的文章 xff0c 这里只做技术探讨 xff0c 不做其他用途 想要学习的可以参考一下大佬
  • QT 报 QMetaObject::connectSlotsByName: No matching signal for on_btn_clicked()

    在QT中 xff0c 自己编写命名信号和槽的时候 xff0c 在用connect的时候报出以下错误 xff1a QMetaObject span class token double colon punctuation span conne
  • CRNN-模型转换问题Missing Errorin loading state_dict for CRNN

    在将CRNN pytorch模型转为libtorch模型的时候出现报错情况 xff0c Missing Errorin loading state dict span class token keyword for span CRNN 96
  • CRNN-libtorch模型推理的时候报错std:runtime_error

    使用libtorch模型推理的时候出现报错std runtime error 这里报错的情况一般是数据不同步的问题 xff0c 也就是说我们的模型是在gpu上 xff0c 而数据是在cpu上 xff0c 那么要做的一件事就是检查forwar
  • 数据集txt格式划分为多个txt文件夹

    简单记录一下数据标签txt格式划分为多个文件 xff0c 通常我们标注号的标签 xff0c 都是在一个txt文件夹中 xff0c 我们训练的时候需要把txt中的标签按照一定的比例划分为多个文件 xff0c 这里贴出划分为三个文件的代码 xf
  • 租用终端训练网络遇到的一些坑

    最近由于电脑配置和经济的问题 xff0c 想训练模型 xff0c 无奈只能选择在平台上训练了 xff0c 我使用的是AutoDL这个平台 xff0c 感觉还行 xff0c 还是挺划算 感兴趣或者需要的老铁可以点击蓝色字体进去尝试一下 接下来
  • CRNN-pytorch模型转libtorch模型踩坑记录

    这段时间一直在做CRNN文字识别的问题 xff0c 从pytorch中训练好的模型然后转到libtorch中去 xff0c 但是CRNN提供的代码没有转libtorch模型的部分 xff0c 于是就在网上到处乱找 xff0c 其中找到了这篇
  • 如何升级gcc版本

    下面将整个过程更新的过程写下来 xff0c 希望对有需要的人提供一些帮助 首先需要准备需要材料 xff1a gcc4 4 2版需要安装gmp4 2 0 43 和mpfr2 3 0 43 xff0c 到GMP的网站 xff08 http gm
  • 召回率与精确率的理解

    写在前面 识别精度主要由召回率 xff08 recall xff09 和精确率 xff08 precision xff09 两个指标决定 xff0c 在训练结束时可以通过re pre曲线来表示模型的准确度 xff0c 也可以根据二者之间的关
  • vs常见的错误集锦-error C4996: ‘wcstombs‘: This function or variable may be unsafe

    问题所在 xff1a 缺少宏定义 在使用wcstombs这个函数时遇到了题目所说的这个情况 xff0c 查找得知是缺少宏定义 xff0c 按照网上查找的问题 xff0c 在vs的配置中添加宏定义就行了 xff1b 在以下的位置 xff1a
  • Keil左侧Function列表无法显示(已解决)

    左侧的Functions框框会显示所有的库函数 xff0c 方便查找 查找的来源是工程所在的目录 如果把目录放得太深 xff0c 就会导致扫描不出来 在工程文件里面并列新建一个LIB文件夹用来存放 xff0c 把Inc和Src放进去 打开F
  • Linux服务器配置ulimit的常用参数介绍

    最近在小鸟云配置了一个Linux服务器 xff0c 实例是debian 7 5 系统 xff0c 在进行系统优化的过程中遇到一些有关Ulimit的事项 xff0c 整理了相关的参数介绍和配置介绍 xff0c 有需要可以简单看看 Ulimit
  • 【视觉检测C++接口实现】vs2019使用动态链接库yolo_cpp_dll调用yolov3

    目录 0 前言 1 准备工作 1 1 yolo cpp dll dll和yolo cpp dll lib的获取 1 2 pthreadGC2 dll和pthreadVC2 dll的获取 1 3 yolo v2 class hpp的获取 1
  • 【jetson nano】在ubuntu18.04下,c++调用链接库实现yolov3

    目录 0 前言 1 下载安装opencv 3 4 0 1 1 配置相应的以来库 1 2 下载opencv 3 4 0 xff08 源码 xff09 1 3 编译 xff08 时间较长 xff09 1 4 安装 1 5 配置opencv路径
  • 51单片机寄存器篇

    以下依次为IE IP TMOD TCON SCON寄存器结构 xff1a B7B6B5B4B3B2B1B0EA ET2ESET1EX1ET0EX0 B7B6B5B4B3B2B1B0 PT2PSPT1PX1PT0PX0 B7B6B5B4B3B
  • 单片机蓝桥杯——串口通信

    1 什么是串行 并行 单工 全双工 半双工 同步 异步 通讯的方式分类 xff1a 并行通信 串行通信 并行通信 xff1a 数据的各位同时在多根数据线上发送或接收 串行通信 xff1a 数据的各位在同一根数据线上逐位发送和接收7 并行通信
  • 串口、UART、USART、COM、USB、TTL、RS232、RS485、RS422简介

    串口 COM口 USB口是指的物理接口形式 xff08 硬件 xff09 xff1b TTL RS 232 RS 485 USB电平是指的电平标准 xff08 电信号 xff09 串口 UART口 USART口 COM口 USB口 xff0
  • 无线收发模块——NRF24L01

    1 什么是nRF24L01 nRF24L01是由NORDIC生产的工作在2 4GHz 2 5GHz的ISM 频段的单片无线收发器芯片 有着极低的电流消耗 nRF24L01与5V单片机的连接通过SPI接口进行通讯 xff0c 输出功率频道选择
  • 使用 monitor command 监控 QEMU 运行状态

    使用 monitor command 监控 QEMU 运行状态 在虚拟化的研究领域 xff0c QEMU 有着举足轻重的地位 2007 年 2 月发布的 Linux 2 6 20 内核中 xff0c 集成了 KVM 作为其虚拟化的具体实现
  • 基于STM32的多普勒雷达测速

    基于多普勒雷达传感器 xff0c 以STM32单片机为主控芯片 xff0c 根据不同模块检测距离的不同 xff0c 使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量 1 基础知识 雷达 雷达英文为Radar xff0c Rad