资讯详情

基于时延法的麦克风阵列声源定位分析

文章目录

  • 一. 麦克风阵列
  • 二. 声源定位
  • 三. 基于广义的相互关联(GCC)计算时延
  • 四. 声源定位法基于时延差
    • 1. 近场模型
    • 2. 远场模型
  • 五. 实现三维空间阵列的声源定位系统
    • 1. 推导过程
  • 六. 六元圆形麦克风阵列声源定位
  • 七. 相关链接

一. 麦克风阵列

麦克风阵列是由一定数目的声学传感器(麦克风)按照一定规则排列的多麦克风系统,而基于麦克风阵列的声源定位是指用麦克风拾取声音信号,通过对麦克风阵列的各路输出信号进行分析和处理,得到一个或者多个声源的位置信息。

只有两个方向很难确定声源的位置,人类的听觉系统主要取决于头部和外耳之间的压差声波。如果没有这种压差,只能定位在平面上的声源位置,但不知道声音来自前面或后面。因此,受人类听觉系统和技术研发人员的启发,使用多个麦克风系统可以实现三维空间声源位置的定位。麦克风越多,收到的信息就越多。声源定位和声源增强是实现智能的两个关键问题,声源定位是语音增强的前提和基础。麦克风的信息量较少,使得声源定位所需的信息不足,麦克风阵列克服了上述缺点,充分利用每个麦克风信号之间的数据相关性和集成,实现了声源定位。

广泛应用于国防、智能机器人、视频会议、语音增强等领域,特别是在以智能办公和智能家居为主要室内场景的远程语音交互系统中。

二. 关于声源定位

目前,基于麦克风阵列的声源定位方法主要有三种:基于最大输出功率的可控波束成形定位方法、基于高分辨计的可控波束成形定位方法(Time Difference of Arrival,TDOA)。

  1. 波束形成法的原理是过滤麦克风接收到的信号以形成波束,并按照一定的规则搜索声源位置。当麦克风达到最大输出功率时,及时搜索到的声源位置是真实的声源位置。波束形成可分为常规波束形成CBF(Conventional Beam Forming)、CBF Adaptive Filter形成自适应波束ABF(Adaptive Beam Forming)。
  2. 通过分解协方差矩阵来估计基于高分辨率谱的定位方法。声源的分辨率与阵列尺寸无关,突破了物理限制。该方法的优点是不受采样频率的限制,在一定程度上可以实现任意定位,但该方法计算复杂性高,抗噪声和抗混响性差,适用于某些特定环境。这种方法可以扩展到宽带处理,但对误差非常敏感麦克风单体误差、通道误差),适用于远程模型,矩阵运算量大。
  3. TDOA(time difference of arrival)是先后估计声源到达不同麦克风的时延差,通过时延来计算距离差,再利用距离差和麦克风阵列的空间几何位置来确定声源的位置。可分为TDOA估计(估计信号到达麦克风的时差)和TDOA两步定位(声源位置由几何关系确定)。

三. 基于广义的相互关联(GCC)计算时延

估计延迟有很多种,比较经典 基于广义相关函数基于广义相关函数估计延迟的方法。

在噪声存在的情况下,一个由远处声源发出的信号,在两个不同建模为:

x 1 = s 1 ( t ) n 1 ( t ) x_1=s_1(t) n_1(t) x1=s1(t) n1​(t)                          (1)

x 2 = α s 1 ( t − D ) + n 2 ( t ) x_2=αs_1(t-D)+n_2(t) x2​=αs1​(t−D)+n2​(t)               (2)

其中, s ( t ) s(t) s(t) 是声音信号, n 1 ( t ) 、 n 2 ( t ) n_1(t)、n_2(t) n1​(t)、n2​(t)是两个声音传感器检测噪声。 三者是稳定的随机过程,且互不相关。

计算 x 1 x_1 x1​ 与 x 2 x_2 x2​ 的互相关函数:

R x 1 x 2 ( τ ) = E [ x 1 ( t ) ∗ x 2 ( t − τ ) ] R_{x_1x_2}(τ)=E [ x_1(t)*x_2(t-τ) ] Rx1​x2​​(τ)=E[x1​(t)∗x2​(t−τ)]               (3)

R ^ x 1 x 2 ( τ ) = 1 T − τ ∫ τ T x 1 ( t ) x 2 ( t − τ )   d t \hat R_{x_1x_2}(τ)=\frac{1}{T-τ}\int_τ^T {x_1(t)x_2(t-τ)} \,{\rm d}t R^x1​x2​​(τ)=T−τ1​∫τT​x1​(t)x2​(t−τ)dt       (4)

其中估计的时延 D D D 为互相关函数值达到最大值时取得的 τ τ τ 值,即:

D ^ = a r g m a x   τ R x 1 x 2 ( τ ) \hat D=\underset {\ τ}{argmax} R_{x_1x_2}(τ) D^= τargmax​Rx1​x2​​(τ)                                 (5)

% 导入两个麦克风的音频数据
[y_0,Fs] = audioread('音轨-0.wav'); 
[y_1] = audioread('音轨-1.wav');

fprintf('采样频率:%d\n ······\n', Fs);

% 取出两段音频前2048个采样点,并作互相关处理,绘制曲线。
A = y_0(1:2048);
B = y_1(1:2048);

[value,delay] = xcorr(A,B);

subplot(1,2,1);
plot(delay, value);

D = zeros(1,926); 

% 以2048个点为一帧,计算互相关得到的时延,绘制出两段音频的时延变化。
for a = 1:2048:size(y_0,1)-2048
    A = y_0(a:a+2048);
    B = y_1(a:a+2048);
    [value,delay]=xcorr(A,B);
    value_max_idx = find(value==max(value));
    D1 = delay(value_max_idx);
    D((a-1)/2048+1) = D1;
end

subplot(1,2,2);
plot(D);

使用ReSpeaker的树莓派六麦克风套件,拿手机放歌作为声源围绕麦克风阵列移动,录制音频,并保存为6个wav音频文件,采用率为44100Hz。对其中两个麦克风音频文件做处理,如果取初始的2048个采样点做就能得到下面图一,图一的峰值的横坐标即为估计时延。如果以2048个采样点作为一帧,对两段音频的每一帧进行互相关,并找到每帧的估计时延,绘制出来就能得到,如下面图二。

这里的时延并不是指具体的时间,而是采样点数。想要得到具体时间还需要除以采样频率。以2048采样点为一帧,就是以0.464s为一帧( 2048 44100 ≈ 0.464 \frac{2048}{44100}≈0.464 441002048​≈0.464s)。

四. 基于时延差的声源定位法

在对麦克风阵列进行建模之前,我们需要分清楚什么。顾名思义,离麦克风近则符合 ,离得远则符合

假设 L L L 为, λ λ λ 为, M M M为,我们定义 2 L 2 λ \frac{2L^2}{λ} λ2L2​ 为远近场临界值。

当 M < 2 L 2 λ M<\frac{2L^2}{λ} M<λ2L2​ 时,符合,此时声源到达麦克风阵列的波形视为

当 M < 2 L 2 λ M<\frac{2L^2}{λ} M<λ2L2​ 时,符合,此时声源到达麦克风阵列的波形视为

可听声的机械波频带为20Hz ~20000Hz,机械波波长大约在1.7cm ~ 17m(声速取340m/s)。然而在现实生活中,过高频率或过低频率的声波都是非常少量的,以人的声音为例,人语音频带的范围大概为300Hz至3400Hz,波长范围为0.1m~ 1.12m,当阵列间隔取4cm时,远近场临界值范围为 0m~3.2m。若取中间值,则可以认为1.6m内符合近场模型,1.6m外符合远场模型。

1. 近场模型

当 M < 2 L 2 λ M<\frac{2L^2}{λ} M<λ2L2​ 时,符合 ,此时声源到达麦克风阵列的波形视为

近场模型至少需要3个麦克风,以最简单的3麦克风模型为例(如图: y 1 、 y 2 、 y 3 y_1、y_2、y_3 y1​、y2​、y3​)。假设 τ 12 、 τ 13 τ_{12} 、τ_{13} τ12​、τ13​分别表示第一个麦克风与第二和第三个麦克风之间的时延,那么有:

τ 12 = r 2 − r 1 c τ_{12}=\frac{r_2-r_1}{c} τ12​=cr2​−r1​​         (6)

τ 13 = r 3 − r 1 c τ_{13}=\frac{r_3-r_1}{c} τ13​=cr3​−r1​​         (7)

其中, c c c 为声速。标准大气压、 15 ° 15° 15° 条件下,声速为 340 m / s 340m/s 340m/s。

根据麦克风阵列的的几何关系,由余弦定理,可以得到:

r 2 2 = r 1 2 + d 2 + 2 r 1 d c o s θ 1 r_2^2=r_1^2+d^2+2r_1dcosθ_1 r22​=r 标签: 0464传感器r12传感器sensopart

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台