一:题目:

声源定位跟踪系统(E题)

设计制作一个声源定位跟踪系统,能够实时显示及指示声源的位置,当声源移动时能够用激光笔动态跟踪声源

  • 设计并制作声音发生装置——“声源”,装置最大边长或直径不超过10cm,声源中心点B用红色或其他醒目颜色标识,并在B点所在的平面以B点为圆心,直径为5cm画圆圈,用醒目线条标识,该平面面向检测指示装置(图中A点)。(4分)
  • 设计并制作一个声源定位检测装置,传感器安装在图1的 C区范围内,高度不超过1m,系统采用的拾音器或麦克风传感器数量不超过10个;在装置上标记测试参考点A,作为位置坐标的原点;装置上有显示电路实时显示D区域内声源的位置显示A、B两点直线距离γ和以A点为原点,AB在地面的投影与图1中心线的夹角θ,测量时间不超过5s,距离γ和角度θ的测值误差越小越好。(36分)
  • 设计并制作一个声源指示控制装置,此装置和上述声源定位检测装置可以合为一体。也放置在图1的 C区,安装有激光笔和二维电动云台,能控制激光笔指向声源,定位计算过程中时,激光笔关闭,定位运算完成时激光笔开启。定位指示声源时,动作反应时间不超过10s,光点与B点偏差越小越好。(30分)
  • 声源移动动态追踪:当声源摆放在地面,用细绳牵引,以0.2m/s左右的速度在D区移动时,激光笔光点指向B点,光点与B点偏差越小好,跟踪反应时间越短越好。(20分)

二:方案计划

2.1【硬件选型】

Sipeed Maix Dock k210开发板:

Sipeed麦克风阵列模块:

飞特串口舵机:

激光模块:

按键:

2.2【基础架构】

刚开始将麦克风阵列模块平面放置进行尝试,但出来的声音数据处于整个屏幕的最下方,有一半数据被遮挡不见,所以放弃此方法。

后面将麦克风阵列垂直放置后发现接收到的数据偶尔会有偏移现象导致不准,所以开始尝试增加麦克风阵列的收音能力。

尝试通过增加桶装结构来增加收音功能,但由于桶太小,3m距离的两头顶点数据很少收到,所以最终还是使用垂直放置的方式。

2.3【各模块软件设计】

2.3.1 麦克风阵列软件设计:

依据官方给出的声源定位历程如下所示:

#导入MIC_ARRAY和LCD模块
from Maix import MIC_ARRAY as mic
import lcd#初始化模块
lcd.init()
mic.init()while True:#获取原始的声源黑白位图,尺寸 16*16imga = mic.get_map()#获取声源方向并设置LED显示b = mic.get_dir(imga)a = mic.set_led(b,(0,0,255))#将声源地图重置成正方形,彩虹色imgb = imga.resize(160,160)imgc = imgb.to_rainbow(1)#显示声源图lcd.display(imgc)mic.deinit()

问题:依据官方给的结果只能得出一张声场图,通过调用 get_dir 函数可以得到12个灯珠的强度。但是得不到具体的位置,只能令相应位置的灯珠亮。

通过在网上搜寻发现了一位大神所写的依据官方声源定位做处理得到相应X坐标,Y坐标,强度,角度的具体实现如下所示:

def get_mic_dir():AngleX=0AngleY=0AngleR=0Angle=0AngleAddPi=0mic_list=[]imga = mic.get_map()    # 获取声音源分布图像imgb = imga.resize(160,160)imgc = imgb.to_rainbow(1)lcd.display(imgc)b = mic.get_dir(imga)   # 计算、获取声源方向for i in range(len(b)):if b[i]>=2:AngleX+= b[i]*math.sin(i*math.pi/6)AngleY+= b[i]*math.cos(i*math.pi/6)AngleX=round(AngleX,6) #计算坐标转换值AngleY=round(AngleY,6)if AngleY<0:AngleAddPi=180if AngleX<0 and AngleY > 0:AngleAddPi=360if AngleX!=0 or AngleY!=0: #参数修正if AngleY==0:Angle=90 if AngleX>0 else 270 #填补X轴角度else:Angle=AngleAddPi+round(math.degrees(math.atan(AngleX/AngleY)),4) #计算角度AngleR=round(math.sqrt(AngleY*AngleY+AngleX*AngleX),4) #计算强度mic_list.append(AngleX)mic_list.append(AngleY)mic_list.append(AngleR)mic_list.append(Angle)a = mic.set_led(b,(0,0,255))# 配置 RGB LED 颜色值return mic_list #返回列表,X坐标,Y坐标,强度,角度

经过测试,发现数据非常NICE,但是还是有些达不到本次赛题的具体要求(只能说我也是非常头疼了)。于是开始尝试追寻源头,获取最底层的数据,尽量往题目de要求靠近了:(。

与麦克风阵列有关的函数库为MIC_ARRAY:MaixPy/components/micropython/port/src/Maix at master · sipeed/MaixPy (github.com)

  1. 通过查看发现我们所使用的 get_map() 函数内部只是把数据进行了一个拷贝,真正的数据来自 thermal_map_data ,定义如下:STATIC uint8_t thermal_map_data[256]; ,是一个静态变量。

    000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 093 191 000 000 000 000 000 000 000 000 000 000 000 000 000 204 243 109 000 000 000 000 000 000 000 000 000 000 000 000 000 000 255 146 146 000 000 000 000 000 000 000 000 000 000 000 000 000 122 219 076 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 ====================
    000 000 000 016 122 206 168 068 000 000 000 000 000 000 000 000 000 000 000 000 078 255 208 120 003 000 000 000 000 000 000 000 000 000 000 000 096 164 201 204 042 000 000 000 000 000 000 000 000 000 000 000 010 043 139 149 028 000 000 000 000 000 000 000 000 000 000 000 000 000 021 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
    
  2. 这个变量只使用过两次,一次是初始化的时候进行读取,一次是在调用 get_map() 这个函数的时候进行处理。接下来就瞅瞅到底是如何调用数据的。

  3. Maix_mic_array_init(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) 函数中最后一行代码显示 int ret = lib_mic_init(DMAC_CHANNEL4, lib_mic_cb, thermal_map_data); 所以最原始的数据来自 lib_mic_init 这个函数,而这个函数在 #include "lib_mic.h" 函数库中。

  4. lib_mic.h 地址如下所示:https://github.com/sipeed/MaixPy/blob/master/components/kendryte_sdk/include/lib_mic.h,最终发现官方只给了 lib_mic.a 静态链接库。所以我们目前所能够获得的最原始的数据便是 thermal_map_data 这256个数据也就是16x16在屏幕上所能看到的音场图像

    2022 电赛陕西省赛相关推荐

    1. 2020 电赛陕西省赛

      题目: 无线运动传感器节点设计(A 题) 基于 ADS1292 模拟前端芯片设计心电检测电路,完成使用者的心电信号实时测量: ①实时采集和记录使用者的心电信号,实现动态心电图的测试与显示: ②分析计算 ...

    2. 2022电赛C题:小车跟踪(方案1+核心代码)

      目录 前言 一.题目 二.方案1 1.材料清单 2.说明 三.核心代码 四.工程获取 前言 针对2022年电赛C题小车跟踪,本团队一共是做了两种方案:       第一种主要以摄像头(openmv)为 ...

    3. 2022杭电多校赛第八场

      2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...

    4. 2022电赛声源定位(基础篇)

      对于需要2022电赛题目的同学点击这个链接:https://pan.baidu.com/s/1zyC8MbgenAAQ_ZVmvFyZvg 提取码:g6kd 对于这个2022电赛E题声源定位的音频点击 ...

    5. 2022电赛F题思路

      2022电赛到现在为止已经出了结果.这是我第一次参加电赛,以前也没有相关的比赛经历,在这四天三夜的时间里能够和队友完成这样一项完整的作品,对我们来说都具有很大的意义.虽然最后还是有一些细节上的问题,不 ...

    6. xdu1068暨2013陕西省赛C题题解

      xdu1068暨2013陕西省赛C题题解 题意 知道两个数列M和F,每次从M中选择一个人,和从F中选择的一个人配对,结果是Mi*Fj,请问所有配对情况中第k大的情况是多少. 笺释 先对M和F从小到大排 ...

    7. 2016陕西省赛 Rui and her functions

      2016陕西省赛 Rui and her functions 题目链接:http://oj.xjtuacm.com/contest/4/problem/35/ 题目大意:每组数据给定$n$和$m$,定 ...

    8. 安徽赛区2022数学建模国赛获奖名单

      安徽赛区2022数学建模国赛获奖名单如下: 本科生组 专科生组

    9. 2022数模国赛河南赛区获奖名单

      2022数模国赛河南赛区获奖名单如下:

    最新文章

    1. C++宏assert()
    2. JS获取当前/指定URL参数
    3. 整合NHibernate到Spring.Net (之一)
    4. inrange函数_Python 初学者必备的常用内置函数
    5. MyBatis创建SqlSession-有没有更好的拿到SqlSessionTemplate 的方法?
    6. [hls]m3u8视频如何处理成加密?
    7. eclipse扩展点_Eclipse扩展点评估变得容易
    8. Handbook之012:函数类别构型
    9. 使用Java 自身Timer API实现定时器的方法
    10. java收_收java的小程序……谢谢
    11. Python——飞机大战及源码下载
    12. 数字金字塔MySQL存储过程_千金良方——MySQL性能优化金字塔法则
    13. Flash 声音频谱图一
    14. 干货:前端性能优化之图片篇
    15. 使用html仿支付宝首页,仿支付宝首页头部伸缩效果
    16. Python 基础变量声明
    17. Excel如何根据出生日期计算年龄
    18. Unity3D-敌人巡逻和拉脱
    19. 【BackEnd】SpringBoot整合MybatisPlus实现登录注册功能(适合初学者)
    20. 中南民大 通原复习ch3之随机过程

    热门文章

    1. 域名解析工具_12种帮助您购买完美域名的工具
    2. Mac打不开网页的解决方法
    3. 大数据分析师,比数据分析师厉害在哪
    4. xingyun_schedule
    5. 三冲IPO,亨达海天能否敲开美股上市大门?
    6. Ubuntu 16.04 中文版安装基础入门教程
    7. 【日常】计算机操作系统入门
    8. 1.43 亿人信息被盗,整个美国都慌了;Linux 发行版 SUSE 诞生 25 周年
    9. 【哈夫曼树】JZOJ_4210 我才不是萝莉控呢
    10. html第二章排列页面内容题目,HTML教程 第二章 页面布局及文字设计.doc