2020年认证杯SPSSPRO杯数学建模A题(第一阶段)听音辨位全过程文档及程序

2020年认证杯SPSSPRO杯数学建模

A题 听音辨位

原题再现:

  把若干 (⩾ 1) 支同样型号的麦克风固定安装在一个刚性的枝形架子上 (架子下面带万向轮,在平地上可以被水平推动或旋转,但不会歪斜),这样的设备称为一个麦克风树。不同的麦克风由于位置不同,录制到的声音往往也有细微的不同,所以通过对多支麦克风接收到的声音进行对比分析,可以得到更多的有关声源的信息。我们假设每个麦克风都是全向的,也就是单麦克风无法分辨声源的方向。
  现在有一个地面、墙壁和天花板都是光滑大理石的大厅,大厅内空旷而安静。在大厅里只有一个走动的人,发出清晰的脚步声。我们准备在大厅里安放一个麦克风树,希望通过检测声音来进行一些测量,包括尽量准确地实时确定这个人的位置,也包括测量这个大厅的某些几何参数。请你建立合理的数学模型,设计一个成本尽量低、而且可以达到使用要求的麦克风树。要求给出每支麦克风的相对位置以及相对于地面的高度,至于枝形架子的具体力学结构则不需要考虑。
  第一阶段问题: 根据已知和所求信息的不同,这个问题可以有不同的复杂程度。我们需要在以下两种情形中对麦克风树进行合理的设计,并给出对接收到的声音信号进行分析的算法。
  1. 已知大厅的平面形状是矩形,地面和天花板都是水平的。假设我们已知大厅轮廓的准确尺寸 (长 × 宽 × 高)。但在实际施工中,由于操作和设备所限,在麦克风树放置在地面上的时候,无法精确测量放置点的坐标以及水平的旋转角度。我们希望确定此人的位置。
  2. 大厅轮廓的尺寸未知,其余条件同上。我们希望确定此人的位置,并尽量准确地确定大厅的轮廓尺寸 (长 × 宽 × 高)。

整体求解过程概述(摘要)

  本文针对麦克风阵列接收声源信号以获得声源实时位置及如何测量大厅几何参数的问题进行分析研究,通过分析比较,最终确定以十字形麦克风阵列为核心,以声达时间差和能量分析为方法的优化模型。
  针对于问题一,我们将从两个方面拆解问题并给出分析过程,其中包括麦克风阵列的选择和优化定位模型的建立。
  第一个方面是关于麦克风阵列的选择,我们首先建立了一维线性阵列模型,在对线性模型的计算改进的基础上建立了二维面阵模型其中包括方形阵列模型、等边三角形阵列模型、圆形阵列模型。接着我们对三个模型进行了合理的理论推导与证明,通过实验计算出原始位置与测定位置之间的误差,并分析其结果得出平均误差,证明出方形阵列为最适宜阵列模型。最后结合实际应用与实现的难易程度进行分析,且由于方形阵列可以近似看为十字形阵列,因此本文将十字形阵列确定为最优阵列的选择。
  第二个方面是关于定位模型的建立,由于考虑到声源传播模式可以分为近场与远场,我们对远近场区分的常用公式进行了声源在近远场的比对分析,但因为在本题中可以忽略远近场的影响,于是在理想状态下,可以根据信号时延性进行计算以得到声源位置。阵元间距问题,我们通过给出一定的声源频率,结合声速与波长的关系,给出合适的阵元间距。最后,通过声源的位置信息,确定了以四个麦克风数量为基准的麦克风矩阵定位模型,再进行逐步分析增加,最终确定麦克风最优个数。
  针对于问题二,我们需要解决如何在大厅几何参数未知的情况下,测定大厅的体积及实时确定人的位置。由于大厅几何参数未知,我们首先利用声音会逐渐减弱的特性确定了在仅有扩散衰减情况下的声音衰减模型。通过分析确定无法忽略吸收衰减和散射衰减对模型的影响,于是对模型进行了优化提出了衰减系数a 。接下来,我们设计了一个实验通过利用 matlab 进行 power 幂函数方程拟合以测定在室内环境下衰减系数的值。其次,由于未确定大厅几何参数会对定位模型造成一定的影响,因此以声达时间差来确定大厅的定位模型无法精确得出大厅的大小,所以我们选择二选其一声音强度(能量法)来帮助对未知大厅大小的定位模型的建立。通过得出声强级和传播距离的关系,设计出合理的麦克风安置方法。考虑到麦克风接收声源信息的误差会导致不同麦克风对声源位置的估计产生偏差,因此使用蒙特卡罗算法进行近似处理,从而通过计算可以得到的合理声源位置。
  最后,本文对所有问题的模型进行了客观合理的评价,并且对建立的数学模型进行了改进分析,使得模型的应用面更加广泛。

问题分析:

  对于问题一:已知平面是矩形的大厅且已知大厅轮廓的准确尺寸,在理想情况下,如何建立起一个在刚性的枝形架子上的麦克风树,忽略了近远场的影响及声音的传输损失,通过分析各种阵列的优缺以选择建立最优的一个成本尽量低、而且可以达到使用要求麦克风阵列和确定阵元的数量给出每支麦克风的相对位置以及相对于地面的高度,能实时确定发出清晰声源(脚步声)的人的位置。
  对于问题二:现实中往往并不能准确知道大厅的几何参数,并且无法忽略声音传输的损失。由于以上原因,我们可以首先在大厅体积未知的情况下,在问题一解决的基础上,用已经建立的模型下寻找借助声源传播求解大厅的几何参数,然后将建立一个新的模型,对结果分别进行预测,并将结果进行比较,于是可以得出在非理想情况下,如何实时确定人的位置。

模型假设:

  1. 在远场模型中,因为声源信息到麦克风阵列的幅度差较小,忽略不计。
  2. 忽略鞋和体型等因素,一个正常人脚步声的频率在 20 Hz ~40 Hz 。
  3. 不考虑环境的噪声影响以及室内混响的影响。
  4. 在第一问中,忽略远场和近场对麦克风阵形的影响。
  5. 麦克风的品质(即对信息的收集能量)不随实验时间的进行而下降。
  6. 持续行走发出的脚步声的声强级(分贝)不发生改变,始终为 50 分贝。

论文缩略图:

在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

clear;clc;
v=340;z=11.33;
a=input('please enter the time difference between unit 1 and unit
2:');
b=input('please enter the time difference between unit 1 and unit
3:');
c=input('please enter the time difference between unit 1 and unit
4:');
e=input('please enter the hall width:');
p=sqrt(e*z/4);
r=abs((v/2)*((a^2+b^2+c^2)/(b-a-c)));
h=asin((v/(2*p))*(sqrt((a-c)^2+b^2)));
for i=0:pi/2:2*pi
k=atan((c-b)/a)+i;
if (k>0)&&(k<pi/2)
d=k;
end
end
disp(r);
disp(h);
disp(d);
clear;clc;
d1=input('please enter a value of d1:');
d2=input('please enter a value of d2:');
d3=input('please enter a value of d3:');
d4=input('please enter a value of d4:');
a=1;b=1;c=1;d=1;e=0;f=0;g=0;h=0;k=0;j=0;
for x=1:0.5:20
for y=1:0.5:20
for i=1:10000
x1=round(x*rand);
y1=round(y*rand);
d5=sqrt(x1^2+y1^2);
d6=sqrt(x1^2+(y-y1)^2);
d7=sqrt((x-x1)^2+y1^2);
d8=sqrt((x-x1)^2+(y-y1)^2);
if
(abs(d5/d1-1)<0.01)&&(abs(d5/d1-1)<a)&&(abs(d6/d2-1)<0.01)&&(abs(d6/d2-1)
<b)&&(abs(d7/d3-1)<0.01)&&(abs(d7/d3-1)<c)&&(abs(d8/d4-1)<0.01)&&(abs(d8
/d4-1)<d)
a=abs(d5/d1-1);
b=abs(d6/d2-1);
c=abs(d7/d3-1);
d=abs(d8/d4-1);
e=x1;
f=y1;
g=d5;
h=d6;
k=d7;
j=d8;
end
end
end
end
if (e==0)&&(f==0)
fprintf('所给数据误差过大无法分析\n');
else
x1=e;
y1=f;
disp(x1);
disp(y1);
disp(x1+sqrt(k^2-y1^2));
disp(y1+sqrt(h^2-x1^2));
end
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android MVP 写法

前言 Model&#xff1a;负责数据逻辑 View&#xff1a;负责视图逻辑 Presenter&#xff1a;负责业务逻辑 持有关系&#xff1a; 1、View 持有 Presenter 2、Model 持有 Presenter 3、Presenter 持有 View 4、Presenter 持有 Model 辅助工具&#xff1a;ViewBinding 执行…

PostgreSQL PG的流复制搭建

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。【PostgreSQL】PG的流复制搭建 - 课程体系 - 云贝教育https://www.yunbee.net/Home/News/detail/article_id/510.html 一 、主备机…

TCP/IP的网络层(即IP层)之IP地址和网络掩码,在视频监控系统中的配置和应用

在给客户讲解我们的AS-V1000视频监控平台的时候&#xff0c;有的客户经常会配置错误IP地址的掩码和网关&#xff0c;导致出现一些网路问题。而在视频监控系统中&#xff0c;IP地址和子网掩码是用于标识网络中设备的重要标识符。IP地址被用来唯一地标识一个网络设备&#xff0c;…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的&#xff0c;但是kafka不支持这种直接的用法&#xff0c;所以我们需要独立实现这个功能&#xff0c;以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务&#xff0c;这个检…

杰发科技AC7840——EEPROM初探

0.序 7840和7801的模拟EEPROM使用不太一样 1.现象 按照官方Demo&#xff0c;在这样的配置下&#xff0c;我们看到存储是这样的&#xff08;连续三个数字1 2 3&#xff09;。 使用串口工具的多帧发送功能 看不出多少规律 修改代码后 发现如下规律&#xff1a; 前四个字节是…

github鉴权失败

问题&#xff1a; 如上图所示 git push 时发生了报错&#xff0c;鉴权失败&#xff1b; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥&#xff0c;勾选repo栏&#xff0c;选择有效期&#xff0c;为密钥命…

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态&#xff0c;简称多态。 物的多态 同一个人在不同人面前&#xff0c;角色不同 如&#xff1a; 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情&#xff0c;在不同情况下展现不同 如&#xff1a; 吃饭 中国人 筷子 …

springboot系列——IDEA创建项目并运行

springboot Spring Boot是为了简化Spring应用程序的开发和部署而产生的。 Spring Boot提供了一种基于约定优于配置的开发模式。它自动配置了Spring应用程序所需的各种组件和依赖&#xff0c;并提供了简单易用的命令行工具来构建和运行应用程序。 Spring Boot还提供了一套开箱…

【FFI】N-API的JS堆对象生命周期管理

N-API的JS堆对象生命周期管理 N-API是Node API的简写&#xff0c;同时也是nodejs的JS VM&#xff08;链&#xff09;接入原生模块.node文件的应用程序二进制接口(i.e. ABI)。借助N-API引入的抽象隔离&#xff0c;升级nodejs运行时&#xff08;虚拟机&#xff09; 【编译】不要求…

Jetson Orin安装riva以及llamaspeak,使用 Riva ASR/TTS 与 Llama 进行实时交谈,大语言模型成功运行笔记

NVIDIA 的综合语音 AI 工具包 RIVA 可以处理这种情况。此外&#xff0c;RIVA 可以构建应用程序&#xff0c;在本地设备&#xff08;如 NVIDIA Jetson&#xff09;上处理所有这些内容。 RIVA 是一个综合性库&#xff0c;包括&#xff1a; 自动语音识别 &#xff08;ASR&#x…

《深入理解JAVA虚拟机笔记》运行时栈帧、方法分派、动态类型

运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元&#xff0c;“栈帧”&#xff08;Stack Frame&#xff09;则是用于支持虚拟机进行方法调用和方法执行背后的数据结构&#xff0c;它也是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈…

白话机器学习的数学-2-分类

1、设置问题 图片分类&#xff1a;只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开&#xff1a; 这次分类的目的就是找到这条线。 2、内积 找到一条线&#xff0c;这是否意味着我们要像学习回归时那样&#xff0c;求出一次函数的斜率…