日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

麦克风阵列之一阶差分麦克风阵列

發布時間:2023/12/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 麦克风阵列之一阶差分麦克风阵列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

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*fw=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

frameLength = 256; inc = frameLength/2;c = 340;tao0 = d/c;N = frameLength;omega = zeros(N/2+1,1);HL = zeros(1,N/2+1);H = zeros(2,N/2+1);frameNum = size(X,1); half_bin = size(X,3);for k = 4:N/2+1omega(k) = 2*pi*(k-1)*fs/N;HL(k) = 1/(1-exp(1j*omega(k)*tao0*(alpha_1_1-cos(theta_target)))) * 0.5; %HL(k) = 1j/(omega(k)*tao0*(alpha_1_1-cos(theta_target))); % approximating e^x with 1+xH(:,k) = HL(k)*[1;-exp(1j*omega(k)*tao0*alpha_1_1)]; endbeamout = beampolar(H,d,tao0); figure; polarplot(linspace(0,2*pi,360),abs(beamout(:,64)));

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濾波處理的結果。關于一階差分麥的介紹就到此結束,如果大家有什么疑問歡迎留言討論,若有不當之處也請指出。

總結

以上是生活随笔為你收集整理的麦克风阵列之一阶差分麦克风阵列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。