自制合成孔径雷达(9) 声卡实现测距的另一种方法(FMCW)

2023-12-12 06:32

本文主要是介绍自制合成孔径雷达(9) 声卡实现测距的另一种方法(FMCW),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FMCW雷达或者声呐,其实都是用chirp信号作为信号源,比较接收和发射的频率差,找出对应的时间差,算出距离的。MIT的雷达,除了测速部分在用单音外,都是在用这种信号(包括测距和SAR)。因此,做完上一篇文章的互相关测距,我感觉还不太够,还是得用chirp信号的方法来测距,这样才更符合将来要实现的合成孔径雷达/声呐。

其实这套东西,我之前就找到资料了,就是balint seeber做的演讲提到的内容。

SDR实现FMCW雷达和模拟视频解调_哔哩哔哩_bilibili

原理其实很好理解,但是始终调不出来,首先跟上一篇文章类似,有硬件的原因,但也有流图上几个参数导致的原因。哪怕流图画对了,参数不对,也是无法出现能让人理解的图像的。

以下是我成功实现的流图,要注意:

1.锯齿波信号周期要高一些,我设置为了100,当它施加在VCO上时,其实人耳已经听不到忽高忽低的音调了,但是就必须这么高,才会有效果,如果降低到1,能听出音调,但是出不来测距的效果。切记!

2.VCO的采样率和灵敏度也很重要,不知道为啥,balint seeber的演示里,采样率是1,灵敏度是pi,显然不对,采样率就应该是音频硬件采样率48k,灵敏度是48k * pi。

3.multiply const里的500m代表0.5,这个也挺重要,代表要给原始信号衰减一下,不能直接把它与接收信号混频,不然效果也不好。

 

要注意的其实就以上3点,做好它们,你就能看到效果。但是就像之前几片文章说的,实数FFT左右对称,看出来的图形可能有点奇怪。那你也可以参照下图把它变为复数,看起来效果会更好些。 

还有个小遗憾,我始终无法用手来反射喇叭的信号给麦克风,只能测喇叭到麦克风的直接距离,这个不影响测距的演示,但是后面如果要做合成孔径声呐就必须能测反射,因为它的原理是通过不同位置的反射来探测物体的形状。

流图:

链接: https://pan.baidu.com/s/1-XMUcZfGHqb3rgHAq8qAHw 提取码: 6ibs 

视频:

gnuradio实现测距声呐2(chirp)_哔哩哔哩_bilibili 

这篇关于自制合成孔径雷达(9) 声卡实现测距的另一种方法(FMCW)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf