麦克风阵列之一阶差分麦克风阵列
概述
DMA(differential microphone arrays)是麥克風陣列處理中一種很重要的信號處理方法,特別是在多通道語音增強中的應用。差分麥克風陣列應用場景其目標信號一般是來自于端射方向,比較典型的如當今比較熱門的藍牙耳機,耳機的端射方向和說話人嘴的位置基本在一條線上。本博文首先基于一階差分(First order DMA)對雙麥克風語音增強進行講解差分麥克風的具體應用。
差分麥克風陣列不同于加性麥克風陣列,如filter_sum,mvdr,gsc之類的算法,差分麥克風陣列是通過設定null方向來決定其主瓣的形狀的,而filter_sum,mvdr等之類的算法是通過設定主瓣本身來決定其主瓣形狀的。
DMA特點
差分麥克風陣列是通過兩個或者更多個全指向麥克風來實現之間的聲壓差來實現其指向性的。相比加性麥克風陣列,差分麥克風陣列具有如下優點:
(1)對于頻率具有不變性的beampattern,因此非常適合處理寬帶語音信號
(2)其指向性不僅對高頻有效,對低頻同樣有效
(3)對于給定具體數量的麥克風,差分麥克風陣列更容易獲得最大的指向性增益
同樣差分麥克風具有自身的缺陷:
(1)差分麥克風的上述優點的前提是麥克風之間的間隔要足夠小,否則會導致頻率的空間混疊。
(2)差分麥克風陣列具有高通特性,因此通過其處理后需要進行補償
(3)頻率響應和DMA的階數對麥克風陣列相對聲源的位置和角度較為敏感
原理
beampattern定義
有M個全指向麥克風,麥克風之間的間距為d,聲速c=340m/s,那么可以求得該陣列的導向矢量為:
其中w=2?pi?f其中w=2*pi*f其中w=2?pi?f,tao = δ/c\delta/cδ/c,λ=c/f\lambda=c / fλ=c/f,DMA假設麥克風之間的間隔δ\deltaδ遠遠小于λ\lambdaλ,即:
wδ/c=w?tao0<<2?piw\delta/c=w*tao0 << 2*piwδ/c=w?tao0<<2?pi
該條件對于低頻還比較容易滿足,因為λ=c/f\lambda=c / fλ=c/f,高頻相對容易出現混疊。
對于上圖中的每個麥克風輸出端的權重H,寫為一個向量的形式如下:
beampattern描述的是陣列對不同方向的敏感程度,具體定義如下:
θ\thetaθ為入射角方向,即描述的是麥克風陣列對于不同入射角方向的敏感程度,或者說頻率響應。
對于一階DMA其beampattern為:
根據a1,1取不同的值可以得到不同的beampattern,比較典型的如下:
對應beampattern圖如下:
一階DMA
以雙麥克風陣列為例,一階DMA其端射方向在0度方向上,壓制(null)方向在(0,180]范圍內,因此其約束條件可以寫為:
其中a1,1=cosθ\thetaθ為null方向,-1<=a1,1<=1,上式可以進一步整理為:
這里一First-Order Cardioid為例進行講解,其他類型的一階DMA只是null的方向不同,即a1,1取值的區別而已,推導過程是一致的。
在first-order Cardioid的端射方向在0°,null方向在180°,即a1,1=-1. 因此,線性方程組為:
進一步推導可以寫為(程序中采用該式):
利用近似求解ex=1+x可得:
進一步:
其beampattern為:
求H
beampattern
function [beampattern] = beampolar(weights,spacing,tao0)f = 1:1:20000; theta = linspace(0,2*pi,360); % scaning angle d = spacing; c = 340; % tao0 = d/c; tao = tao0*cos(theta);omega = 2*pi*f;half_bin = size(weights,2); fs = 16000; N_FFT = (half_bin-1)*2;Nele = size(weights,1); H = zeros(Nele,length(omega));beampattern = zeros(length(theta),length(half_bin)); % beamformer output for ang = 1:length(theta)for freIndex = 1:half_binomega_k = 2*pi*(freIndex-1)*fs/N_FFT; % normalized digital angular frequency % omega_k = omega(freIndex); % analog angular frequencya = [1,exp(-1j*omega_k*tao(ang))]; % signal model,steering vectorbeampattern(ang,freIndex) = a*(weights(:,freIndex)); % y = w'*a,此處為beampattern原始定義方式求解;end endend繪制beampattern圖如下:
濾波結果:
上圖中,上面部分是輸入兩路信號的一路,另外一路是first-order Cardioid濾波處理的結果。關于一階差分麥的介紹就到此結束,如果大家有什么疑問歡迎留言討論,若有不當之處也請指出。
總結
以上是生活随笔為你收集整理的麦克风阵列之一阶差分麦克风阵列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sipeed麦克风阵列板练习
- 下一篇: 基于时延法的麦克风阵列声源定位分析