电赛E题声源定位跟踪系统制作全过程

news2024/12/22 16:35:21

声源定位

文章目录

  • 声源定位
  • 前言
  • 一、题目
  • 二、设计步骤
    • 1.设计思路
    • 2.声源追踪定位的分析
    • 3.舵机转角的确定
    • 4.声源距离的计算
  • 三、代码编写
    • 1.求均值
    • 2.卡尔曼滤波


复刻一下电赛的声源定位

前言

2023年的电子设计竞赛快要开始了,同时我也已经大三下了正在准备找工作,重新做一下2022年的电赛题目声源定位吧,也为电赛和找工作做点准备。

一、题目

设计制作一个声源定位跟踪系统,能够实时显示及指示声源的位置,当声源移动时能够用激光笔动态跟踪声源。声源检测系统测量区域分布俯视如图所示。
在这里插入图片描述

二、设计步骤

1.设计思路

以 k210 单片机为控制核心,由电源模块,音频发生模块,音频接收模块,二维电动云台,激光笔等模块构成。系统通过声源发出一定周期性的音频信号,由 6+1 个 MEMSMic 组成阵列对可移动声源的检测,通过麦克风端接收到的音 频信号,运算后输出电压信号传输到控制端的单片机,单片机使用 PID 算法经串口输出控制信号对电动云台舵机实行控制,使其转向声源方向,以实现对声源的定位追踪过程。

2.声源追踪定位的分析

对声源位置的追踪确过程,本系统采用时间差值法采用麦克风作为声波接收头,音频信号通过空气介质以 340m/s 的速度传播,到达五处麦克风的时间不同,从而不同麦克风接收到音频信号的时间差作为变量,可以推算出可移动声源的具体位置。由于每一个麦克风在接收音频信号的机械特性不一样,对于同一种音频信号的响应时间不用。经过测试,我们发现不同频率的声音在麦克风接受时有不同的效果,通过选用固定频率的声音作为声源信号,可以避免了一般的声音信号的干扰。同时有利于后期滤波程序的编写,软件硬件相结合,更好的克服了在接收音频信号时间差的不确定性。

3.舵机转角的确定

舵机转角,既声源与信号检测装置的连线与中心线 A 的夹角 γ,系统通过声源发出一定周期性的音频信号,由 6+1 个 MEMSMic 组成阵列对可移动声源的检测,通过麦克风端接收到的音频信号,运算后输出电压信号传输到控制端的单片机,单片机通过对各麦克风信号大小的分析,使用 PID 算法经串口输出控制信号
对电动云台舵机实行控制,使其转向声源方向,同时记录此时舵机的所处角度,
与舵机中值进行对比,从而确定舵机转角 γ。示意图如下
(−angle + 90) / 180 ∗ 10 + 2.5
在这里插入图片描述

4.声源距离的计算

声源距离既声源 A 与声源定位检测装置 B 两点间直线距离 γ 通过测量同一
音频信号到达麦克风接收器的时间不同,从而三个接收器接收到音频信号的时
间差作为变量,可以推算出可移动声源的具体方向,从而实现了移动声源的精
确定位。公式如下:
在这里插入图片描述

三、代码编写

声源的代码比较简单,这个难点在于怎么处理杂波,一个是求均值,另一个就是卡尔曼了

1.求均值


##########################求均值##############################
def get_arv(times):
    i=0
    j=0
    angle=[]
    maxAng=-999999
    minAng=999999
    sumAng=0
    while True:
        i=i+1
        Angle=get_mic_dir()
        if(Angle != -1):
            angle.append(Angle)
            j=j+1
            if(j>=times):
                break;
        if(i>2*times+20):
            break;
    if j>2:
        for ang in angle:
            sumAng=sumAng+float(ang)
            if( ang > maxAng):
                maxAng=ang
            if( ang < minAng):
                minAng=ang
        return (sumAng-minAng-maxAng)/(j-2)
    else:
        return -1
##########################求均值##############################

2.卡尔曼滤波


##########################卡尔曼##############################
KF_lastP=1000   #上次的协方差
KF_nowP=0      #本次的协方差
KF_x_hat=0     #卡尔曼滤波的计算值,即为后验最优值
KF_Kg=6000        #卡尔曼增益系数
KF_Q=5         #过程噪声
KF_R=0.01      #测量噪声
def Kalman_Filter(value):
    global KF_lastP        #上次的协方差
    global KF_nowP         #本次的协方差
    global KF_x_hat        #卡尔曼滤波的计算值,即为后验最优值
    global KF_Kg           #卡尔曼增益系数
    global KF_Q            #过程噪声
    global KF_R            #测量噪声
    output=0        #output为卡尔曼滤波计算值
    x_t=KF_x_hat    #当前先验预测值 = 上一次最优值
    KF_nowP=KF_lastP+KF_Q       #本次的协方差矩阵
    KF_Kg=KF_nowP/(KF_nowP+KF_R)#卡尔曼增益系数计算
    output=x_t+KF_Kg*(value-x_t)#当前最优值
    KF_x_hat=output     #更新最优值
    KF_lastP=(1-KF_Kg)*KF_nowP#更新协方差矩阵
    return output
##########################卡尔曼##############################

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

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

相关文章

Mybatis之配置解析

目录 核心配置文件 environments&#xff08;环境配置&#xff09; properties&#xff08;属性&#xff09; typeAliases( 类型别名) 映射器 注解开发 Mybatis执行流程 核心配置文件 mybatis-config.xml configuration&#xff08;配置&#xff09; pr…

【STM32】STM32使用RFID读卡器

STM32使用RFID读卡器 RFID卡片 ID卡&#xff08;身份标识&#xff09;&#xff1a;作用就是比如你要输入学号&#xff0c;你刷卡直接就相当于输入学号&#xff0c;省去了输入的过程 IC卡&#xff1a;集成电路卡&#xff0c;是将一种微电子芯片嵌入卡片之中 RFID的操作 1、…

【C++学习】模板初阶

目录 一、泛型编程 二、函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 三、类模板 3.1 类模板的定义格式 3.2 类模板的实例化 一、泛型编程 我们前面学习了C的函数重载功能&#xff0c;那么我们如何实现…

低调的接口工具 ApiKit

最近发现一款接口测试工具--ApiKit&#xff0c;我们很难将它描述为一款接口管理工具 或 接口自测试工具。 官方给了一个简单的说明&#xff0c;更能说明 Apikit 可以做什么。 ApiKit API 管理 Mock 自动化测试 异常监控 团队协作 ApiKit的特点&#xff1a; 接口文档定义&a…

多层级缓存

多级缓存 多级缓存方案 多级缓存就是充分利用请求处理的每个环节&#xff0c;分别添加缓存&#xff0c;减轻Tomcat压力&#xff0c;提升服务器性能&#xff1a; 用作缓存的Nginx是业务Nginx&#xff0c;需要部署为集群&#xff0c;再有专门的Nginx用来做反向代理&#xff1a;…

ModStartCMS v6.4.0 模块市场升级,UI界面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

一文吃透 Vue 框架教程(上)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

phpstorm+xdebug的安装与使用

工具和环境 phpstorm 2018 php5.6 线程安全 xdebug 1.下载和安装xdebug 1.1 查看自己phpinfo信息 比如我这里是php 5.6 &#xff0c;线程安全版本 1.2 xdebug 官网 Xdebug: Historical Releases 根据自己的php版本选择要下载的dll文件 如果是高版本一点的php &#xff…

Java基础面试题突击系列3

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…

Qt实现DES ECB加密解密

环境&#xff1a;Windows11 64位 工具链&#xff1a;MinGW32 IDE&#xff1a;Qt 5.14 Qt使用DES加密需要用到OpenSSL库&#xff0c;首先要确定当前使用的Qt所支持的SSL版本。编译OpenSSL 查看当前Qt对OpenSSL的支持情况 qDebug() << QSslSocket::supportsSsl();返回 tr…

C++STL简介

本期我们来简单介绍一下STL 目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.如何学习STL 5.STL的缺陷 本期内容比较简单&#xff0c;大家只需简单看看了解一下即可 1.什么是STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &…

Postman使用技巧

本文仅针对笔者的Postman使用习惯&#xff0c;纯属个人理解&#xff0c;如有不同或更好的方式烦请指出。 文章目录 前言一、Postman是什么&#xff1f;二、使用步骤1. Collection分级习惯2.配置环境变量3.Postman接口请求自带url前缀3.1 方式一&#xff1a;在url中添加环境变量…

深度学习框架搭建

5.15 首先是了解下&#xff0c;怎么配置环境啊这一套的。。 1.大概了解了一些名词意思 python&#xff0c;不用说了&#xff0c;就是一门语言 anoconda是一些包啊之类的管理工具&#xff0c;挺好用的&#xff0c;管理虚拟环境用的。 jupyter和pycharm都是类似于IDE吧&#…

【系统移植】SD卡烧录uboot、linux内核、根文件系统

目录 一、SD卡分区 二、SD卡烧录uboot 三、SD卡烧录linux内核 四、SD卡烧录根文件系统 五、修改uboot环境变量 1、设置 bootcmd 2、设置 bootargs 参考链接&#xff1a;IMX6Q的SD卡启动使用教程_mayue_csdn的博客-CSDN博客 一、SD卡分区 无论是EMMC还是SD卡启动&#…

Promise理解

做一道题,理解一下: function getPrinterList() {let res 初始setTimeout(() > {res 1},1000)return res }let res getPrinterList() console.log(res); //输出初始 在getPrinterList函数中,先分清同步异步. JS执行语句时,会区分同步异步,把所有的同步放在同步队列中,把…

2023-5-19-Debug和Release到底有多少不同?

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

【HTTPS加密】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1.HTTPS 是什么 1.1 运营商劫持 1.2 关于加密…

面试季,真的太狠了...

金三银四面试季的复盘&#xff0c;真的太狠了… 面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个了&#xff0c;给大家说说面试吧&#xff0c;我工作大概两年多的时间&#xff0c;大家可以参考下 在整个面…

【FMC201】基于FMC标准的1路CameraLink Full 输入 子卡模块

产品概述 FMC201是一款CameraLink信号输入&#xff08;采集&#xff09;FMC子卡模块&#xff0c;该模块支持2路CameraLink Base模式或者1路CameraLink Full模式的图像信号输入。板卡具有2个CameraLink端口&#xff08;SDR26&#xff09;&#xff0c;可以作为采集卡使用。 技术指…

不仅能满足需求,还能提高效率。教你建立自动化测试请求封装

目录 前言&#xff1a; 一、整体框架介绍 二、代码实现 1. config文件配置 2. API封装方法实现 3. 测试用例编写 4. 运行测试用例 三、总结 前言&#xff1a; 在接口自动化测试中&#xff0c;我们都知道一个重要概念就是接口请求封装&#xff0c;可以大幅度提供自动化…