基于时延法的麦克风阵列声源定位分析
Posted 冬瓜~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于时延法的麦克风阵列声源定位分析相关的知识,希望对你有一定的参考价值。
文章目录
一. 关于麦克风阵列
麦克风阵列: 麦克风阵列是由一定数目的声学传感器(麦克风)按照一定规则排列的多麦克风系统,而基于麦克风阵列的声源定位是指用麦克风拾取声音信号,通过对麦克风阵列的各路输出信号进行分析和处理,得到一个或者多个声源的位置信息。
麦克风阵列系统的声源定位技术研究意义在于: 输入的信息只有两个方向难以确定声源的位置,人类的听觉系统主要取决于头和外耳气压差声波实现声源定位。假使没有这个压力差,只能定位在平面上声源的位置,但就无法知道声音是从前面,或从后面传来的。因此,由人的听觉系统,科技研发人员得到了灵感,使用多个麦克风系统可以实现在三维空间中的声源位置的定位,麦克风的数量越多,所接收到的信息量也越多。声源的声源定位和声源增强是实现智能处理的两个关键问题,而声源定位是实现语音增强的前提和基础。一个麦克风的信息量较少,使得声源定位所需的信息缺乏,而麦克风阵列克服了上述缺点,充分利用每个麦克风信号之间的数据相关性,并加以融合,可以实现声源定位。
麦克风阵列声源定位技术的应用: 广泛应用于国防、智能机器人、视频会议及语音增强等众多领域,尤其在当下以智能办公和智能家居为主要室内场景的远场语音交互系统中。
二. 关于声源定位
目前基于麦克风阵列的声源定位方法主要有三种:基于最大输出功率的可控波束成形的定位方法、基于高分辨谱估计的定位方法、基于到达时延差估计的定位方法(Time Difference of Arrival,TDOA)。
- 基于最大输出功率的可控波束成形定位法。 波束形成法的原理是将麦克风接收到的信号进行滤波加权求和来形成波束,按照一定的规律对声源位置进行搜索,当麦克风达到最大输出功率时,为时搜索到的声源位置即为真实的声源方位。波束形成可分为常规的波束形成CBF(Conventional Beam Forming)、CBF+Adaptive Filter和自适应波束形成ABF(Adaptive Beam Forming)。
- 基于高分辨谱估计的定位法。 基于高分辨率谱估计的定位方法通过分解协方差矩阵估计声源方位。适合多个声源的情况,且声源的分辨率与阵列尺寸无关,突破了物理限制。该方法的优点是不受采样频率限制,且在一定程度下可以实现任意程度的定位,但是该方法计算复杂度较高,抗噪和抗混响性能较差,因此该方法适合在一些特定的环境下使用。这类方法可以拓展到宽带处理,但是对误差十分敏感(如麦克风单体误差,通道误差),适合远场模型,且矩阵运算量巨大。
- 基于到达时延差估计的定位法。 TDOA(time difference of arrival)是先后估计声源到达不同麦克风的时延差,通过时延来计算距离差,再利用距离差和麦克风阵列的空间几何位置来确定声源的位置。可分为TDOA估计(估计信号到达各麦克风的时间差)和TDOA定位(运用几何关系确定声源位置)两步。
三. 基于广义互相关(GCC)计算时延
时延估计有很多种,比较经典就是广义互相关函数 (Generalized Cross Correlation, GCC) 估计时延,这里简单介绍基于广义互相关函数估计时延的方法。
在噪声存在情况下,一个由远处声源发出的,并且被两个不同空间中的麦克风监听的信号可以数学建模为:
其中, 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 的互相关函数:
其中估计的时延
D
D
D 为互相关函数值达到最大值时取得的
τ
τ
τ 值,即:
MATLAB 例程:
% 导入两个麦克风的音频数据
[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 \\frac204844100≈0.464 441002048≈0.464s)。
四. 基于时延差的声源定位法
在对麦克风阵列进行建模之前,我们需要分清楚什么近场与远场。顾名思义,离麦克风近则符合近场模型 ,离得远则符合远场模型 。
假设
L
L
L 为阵列间距
,
λ
λ
λ 为声波波长
,
M
M
M为声源与麦克风的距离
,我们定义
2
L
2
λ
\\frac2L^2λ
λ2L2 为远近场临界值。
当 M < 2 L 2 λ M<\\frac2L^2λ M<λ2L2 时,符合近场模型,此时声源到达麦克风阵列的波形视为球面波。
当 M < 2 L 2 λ M<\\frac2L^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<\\frac2L^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分别表示第一个麦克风与第二和第三个麦克风之间的时延,那么有:
声源定位 球面散乱数据插值方法/似然估计hybrid spherical interpolation/maximum likelihood (SI/ML) 麦克风阵列声源定位