麦克风阵列技术 三 ( 声源定位 波束形成 去混响 麦克风阵列结构设计 声学结构确认流程) | 您所在的位置:网站首页 › 声波是什么波确定声源方向的方法有哪些 › 麦克风阵列技术 三 ( 声源定位 波束形成 去混响 麦克风阵列结构设计 声学结构确认流程) |
麦克风阵列技术
麦克风阵列技术详解声源定位延时估计角度计算
波束形成波束形成模型波束形成基本理论
去混响
麦克风阵列结构设计声学结构确认流程
紧接上一个博客文章,此为第三部分。上一部分见:麦克风阵列技术 二 (自动增益控制 自动噪声抑制 回声消除 语音活动检测) 麦克风阵列技术详解 声源定位麦克风阵列可以自动检测声源位置,跟踪说话人,声源定位信息既可以用于智能交互,也可以用于后续的空域滤波,对目标方向进行语音增强。 利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival (DOA) estimation),DOA估计的其中一种方法是计算到达不同阵元间的时间差,另外一种可以看这里,这篇主要介绍经典的GCC-PHAT方法 简单说明问题背景,信号模型如下图,远场平面波,二元阵列 一、 互相关函数(cross-correlation function) 计算y1(k)y1(k)与y2(k)y2(k)的时间差,可以计算两个信号的互相关函数,找到使互相关函数最大的值即是这两个信号的时间差 离散信号的互相关函数 R(τ)=E[x1(m)x2(m+τ)]R(τ)=E[x1(m)x2(m+τ)] 求时间差就是找到互相关函数最大时的点 D=argmaxR(n)D=argmaxR(n) MATLAB代码如下: %% % Load the chirp signal. load chirp; c = 340.0; Fs = 44100; %% d = 0.25; N = 2; mic = phased.OmnidirectionalMicrophoneElement; % array = phased.URA([N,N],[0.0724,0.0418],'Element',mic); array = phased.ULA(N,d,'Element',mic); %% % Simulate the incoming signal using the |WidebandCollector| System % object(TM). arrivalAng = 42; collector = phased.WidebandCollector('Sensor',array,'PropagationSpeed',c,... 'SampleRate',Fs,'ModulatedInput',false); signal = collector(y,arrivalAng); x1 = signal(:,1); x2 = signal(:,2); N =length(x2); xc = xcorr(x1,x2,'biased'); [k,ind] = max(xc); an = acos((ind-N)/Fs*340/d)*180/pi xc12 = zeros(2*N-1,1); m = 0; for i = -(N-1):N-1 m = m+1; for t = 1:N if 03时,其实所有组合信息对于角度值的计算是有冗余的,这个时候可以求出所有组合的角度值,然后利用最小二乘求出最优解,这样可以利用到所有的麦克风的信息来提高角度估计的稳定性。 波束形成DBF是Digital Beam Forming的缩写,译为数字波束形成 或数字波束合成。数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域。 专业:电子、通信与自动控制技术阵列信号处理最主要的研究内容包括DOA估计和波束形成。较早的DOA估计方法又称为波束形成方法,而该波束形成方法利用了空域维纳滤波的匹配概念,由阵列流形在信号空间中的投影大小判定信号方向,后来随着研究的深入,高分辨谱估计技术的发展,才把DOA估计和波束形成加以区分,DOA估计是为了确定信号的方位,从接收数据中测出信号方向,不管信号是有用信号还是干扰信号,在DOA估计方向图中都表现为峰值,而此峰值并不是实际阵列输出功率;波束形成是传统滤波的空域拓展,其根本目的是有效提取有用信号并抑制噪声和干扰,在方向图中表现为有用信号方向形成峰值、干扰方向形成零陷,可以认为DOA估计为波束形成的前端处理,确定期望信号和干扰方向后,阵列对期望信号方向形成波束并在干扰方向形成零陷。 DBF体现的是声源信号的空域选择性,许多传统波束形成方法具有线性处理结构;波束形成需要考虑三个方面: 1)麦克风阵列个数; 2)性能; 3)鲁棒性。 在麦克风较少时,波束形成的空域选择性差,当麦克风数量较多时,其波束3dB带宽较为窄,如果估计的目标声源方向有稍有偏差,带来的影响也更大,鲁棒性不好。通常鲁棒性和性能是对矛盾体,需要均衡来看。 WebRTC使用了如下几个点以提高鲁棒性和性能(其算法性能优先): 1.可以使用多个后置滤波器而非一个,2.每个后置滤波使用新的结构。 每个后置滤波器为每个声学场景的时频域bin在均方误意义上提供了最优实增益。在WebRTC中后置滤波器根据声源的空域协方差矩阵,干扰源协方差矩阵,绕射场(零阶贝塞尔函数计算)以及临近麦克风的时频信号信息求得。 这样的话就可以为每个声源和干扰场景计算出不同的最优后置滤波器,也可以使用级联的方式灵活使用多个不同选择性的后置滤波器。 当前现存的波束形成算法的鲁棒性成为它们使用的一道门槛,如MVDR和多通道维纳滤波。 WebRTC为了增强鲁棒性,在求最优矩阵时,对声源信号添加了限制条件,使用Gabor frame将声源变成时频bin的系数,对这些bin按照目标声源和干扰声源附加了条件,如果满足条件,则门操作让目标声源通过,而让干扰源乘以零以实现选择最优目标信号。 在WebRTC中这些增益系数称为自适应标量(上面的实)乘法增益,均方误差准则被用来做为计算的准则。由于阵列方向响应随频率是变换的,而语音信号又是宽带信号,所以WebRTC中使用了gabor变换来表示声音信号。增益源于目标信号和干扰的比例。 波束形成模型以均匀线阵为例: A-波束形成 权重相加: B-瑞利限 以均匀直角窗为例: 直角窗主瓣宽度为: C-常见窗函数 对于空间不同的阵列信号,类似采样分析(空域采样),自然可以加窗进行处理,不加窗可以认为是直角窗,另外也可以选择汉明窗、hanning窗等等。 加窗可以改变波束宽度以及主瓣、副瓣等特性,可以借助MATLAB 的wvtool观察不同窗函数特性。 N = 192; w = window(@blackmanharris,N); wvtool(w)D-DFT实现 阵列的采样间隔是相位信息: 分别对阵列信号进行直接加权、加窗、DFT实现: clc;clear all;close all M = 32; DOA = [-30 30]; SNR = 10; theta = -90:.1:90; len = length(theta); SignalMode = 'Independent'; fc = 1e9; c = 3e8; lambda = c/fc; d = lambda/2; N = 100;%snap points x = StatSigGenerate(M,N,DOA,SNR,SignalMode,lambda,d); R_hat = 1/N*x*x'; output = zeros(3,len); for i = 1:len a = exp(1j*2*pi*[0:M-1]'*sind(theta(i))*d/lambda); W = (inv(R_hat)*a)*(1./(a'*inv(R_hat)*a)); output(1,i) = mean(abs(W'*x),2); output(2,i) = 1./(a'*inv(R_hat)*a); output(3,i) = a'*x*ones(N,1); end output = abs(output); output = output - repmat(mean(output.')',1,size(output,2)); output = output./repmat(max(output.')',1,size(output,2)); %plot plot(theta,output(1,:),'k',theta,output(2,:),'r--',theta,output(3,:),'b'); legend('MVDR 波束','MVDR 谱','固定权重 波束');E-自适应波束形成 直接相加也好、加窗也好,都是固定的权重系数,没有考虑到信号本身的特性,所以如果结合信号本身去考虑就形成了一系列算法:自适应波束形成。 这类步骤通常是: 1)给定准则函数; 2)对准则函数进行求解。 准则常用的有:信噪比(snr)最大准则、均方误差最小准则(MSE)、线性约束最小方差准则(LCMV)、最大似然准则(ML)等等; 求解的思路大体分两类:1)直接求解,例如MVDR中的求解;2)也可以利用梯度下降的思想,如随机梯度下降、批量梯度下降、Newton-raphson等方法,不再详细说明。 以MVDR举例: F-栅瓣现象 栅瓣是一类现象,对应干涉仪就是相位模糊(相位超过2*pi),对应到Beamforming就是栅瓣问题,具体不再论述,给出现象(同样的波束,在不同的位置分别出现): G-波束形成与空间谱 之前分析过MVDR的方法,得到的输出(含有约束的最小均方误差准则)为: 已知N个采样点的信号,对其进行傅里叶变换: 对应到空域,自然就是|y2(t)|/长度,对应空间谱,长度只影响比例关系,所以MVDR的最小方差输出被称作:空间谱也是合适的。 给出一个测试(这里如果),对比MVDR的y(t)、MVDR功率谱以及普通Beamforming的结果: clc;clear all;close all M = 32; DOA = [-30 30]; SNR = 10; theta = -90:.1:90; len = length(theta); SignalMode = 'Independent'; fc = 1e9; c = 3e8; lambda = c/fc; d = lambda/2; N = 100;%snap points x = StatSigGenerate(M,N,DOA,SNR,SignalMode,lambda,d); R_hat = 1/N*x*x'; output = zeros(3,len); for i = 1:len a = exp(1j*2*pi*[0:M-1]'*sind(theta(i))*d/lambda); W = (inv(R_hat)*a)*(1./(a'*inv(R_hat)*a)); output(1,i) = mean(abs(W'*x),2); output(2,i) = 1./(a'*inv(R_hat)*a); output(3,i) = a'*x*ones(N,1); end output = abs(output); output = output - repmat(mean(output.')',1,size(output,2)); output = output./repmat(max(output.')',1,size(output,2)); %plot plot(theta,output(1,:),'k',theta,output(2,:),'r--',theta,output(3,:),'b'); legend('MVDR 波束','MVDR 谱','固定权重 波束');
混响是指声波在室内传播时,要被墙壁、天花板、地板等障碍物反射,当声源停止发声后,声波在室内要经过多次反射和吸收,最后才消失。这种现象称为混响。因此,当声源和麦克风之间的距离越远,反射声占的比例就越高,混响就严重。 经典的去混响方法包括形成拾音波束来减少反射声和基于反卷积的去混响方法。 麦克风阵列结构设计MUC 孔的孔深孔径比越小越好,即开孔越大越好,深度越小越好,尽量向1:1靠近。孔深与孔径比值越大,麦克频响的震点越像低频靠近,要求震点在12KHz以上。最少也要在8KHz以上。喇叭腔体不能漏气。这是因为,喇叭正反两面的声波相位相差180度,当音腔有漏气时,声波会发生抵消,尤其是低频频段。 麦克和喇叭的失真都要小。麦克失真小于4%,喇叭失真小于10%,由于喇叭低频失真严重些,会超过10%,可以考虑增加滤波器滤掉低频成分。 喇叭腔体四周与其他机构件保留1mm的距离,防止腔壳与机构接触产生异音。 喇叭鼓膜上方与机构件保留1.5mm的距离,以防鼓膜振动碰到机构件产生异音。 喇叭与机构件有接触的地方,要增加泡面,以起到缓冲、减振的效果,防止喇叭振动时与机构件碰撞产生异音。 声学结构确认流程1)远程会议或现场结构设计评估 确认麦克阵列构型,确认声腔及安装结构设计,确认进声孔深度、直径大小等; 2)声学实验室录音效果评估-第一阶段 计算裸麦和带声腔结构的麦克风之间的录音之间谐波程度,根据分析结果确定是否通过。 3)声学实验室录音效果评估-第二阶段 分别利用裸麦和带声腔结构的麦克风信号做基于相位的声源定位,如果两者定位误差小于5°,则认为通过该项测试。 4)声学实验室录音效果评估-第三阶段 分别利用裸麦和带声腔结构的麦克风录音数据进行识别,效果差距在2%以内,则认为远场识别方面无问题。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |