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