要設計球形麥克風陣列(sma),並保證麥克風在球面等距離分布(可以理解為,球面上任一麥克風與相鄰麥克風的距離相等),需要給出每個麥克風的具體座標位置。
球面上的麥克風最終組成乙個規則的凸包多面體(參見platonic solid),麥克風座標數值解法其實是乙個thomson problem。
1)首先建立單位球體,然後將待分布的n個麥克風作為帶電粒子,隨機分布在該單位球體的表面;
2) 計算每個帶電粒子在各個方向上受到的合力大小,然後計算出合力在對應帶電粒子上的切線分量;
3) 根據切線分量計算對應帶電粒子沿切向運動飛出該單位球體表面的座標,然後對每一帶電粒子的座標沿徑向進行歸一化,使所有帶電粒子再次回到該單位球體的表面;
4) 步驟2)、3)迴圈若干次,當各帶電粒子所受合力均小於一設定值時,得到各帶電粒子的球面均勾分布,即為n個麥克風在該球形的陣列分布。
function =main()
n=12; %點數量
a=rand(n,1)*2*pi;%根據隨機求面均勻分布,先生成乙個初始狀態
b=asin(rand(n,1)*2-1);
r0=[cos(a).*cos(b),sin(a).*cos(b),sin(b)];
v0=zeros(size(r0));
g=1e-2;%斥力常數,試驗這個值比較不錯
for ii=1:200%模擬200步,一般已經收斂,其實可以在之下退出
[rn,vn]=countnext(r0,v0,g);%更新狀態
r0=rn;v0=vn;
endplot3(rn(:,1),rn(:,2),rn(:,3),'.');hold on;%畫結果
[xx,yy,zz]=sphere(50);
h2=surf(xx,yy,zz); %畫乙個單位球做參考
set(h2,'edgecolor','none','facecolor','r','facealpha',0.7);
axis equal;
axis([-1 1 -1 1 -1 1]);
hold off;
endfunction [rn vn]=countnext(r,v,g) %更新狀態的函式
%r存放每點的x,y,z資料,v存放每點的速度資料
num=size(r,1);
dd=zeros(3,num,num); %各點間的向量差
for m=1:num-1
for n=m+1:num
dd(:,m,n)=(r(m,:)-r(n,:))';
dd(:,n,m)=-dd(:,m,n);
endendl=sqrt(sum(dd.^2,1));%各點間的距離
l(l<1e-2)=1e-2; %距離過小限定
f=sum(dd./repmat(l.^3,[3 1 1]),3)';%計算合力
fr=r.*repmat(dot(f,r,2),[1 3]); %計算合力徑向分量
fv=f-fr; %切向分量
rn=r+v; %更新座標
rn=rn./repmat(sqrt(sum(rn.^2,2)),[1 3]);
vn=v+g*fv;%跟新速度
end
一開始因為計算機沒有安裝matlab只有python,**看著也不多,也有那麼一點點python使用經驗,想著用python重寫一遍好了。
結果,困難程度遠遠超出預期(請原諒我這只菜鳥~)。一邊查matlab中函式的用法,一邊查numpy中函式的用法,折騰幾天還是沒能完成。不得已,安裝matlab後,一步一步確認python**的輸出結果,又折騰幾天最終完成。
numpy雖然說很多函式和matlab非常相似,但有幾個地方需要注意:
球面均勻分布4點
球面均勻分布36點
麥克風聲源定位原理 麥克風陣列原理及應用
什麼是麥克風陣列 麥克風陣列是由一定數目的麥克風組成,對聲場的空間特性進行取樣並濾波的系統。目前常用的麥克風陣列可以按布局形狀分為 線性陣列,平面陣列,以及立體陣列。其幾何構型是按設計已知,所有麥克風的頻率響應一致,麥克風的取樣時鐘也是同步的。麥克風陣列的作用 麥克風陣列一般用於 聲源定位,包括角度...
麥克風聲源定位原理 廣播百科 麥克風陣列
第 392 期 麥克風陣列 microphone array 其實就是乙個聲音採集的系統,該系統使用多個麥克風採集來自於不同空間方向的聲音。從字面上,指的是麥克風的排列。也就是說由一定數目的聲學感測器 一般是麥克風 組成,用來對聲場的空間特性進行取樣並處理的系統。早在20世紀70 80年代,麥克風陣...
麥克風聲源定位原理 聲音測距原理
很多動物依賴於聲音來感知外部的環境,像夜間活動的蝙蝠 樹鼩,海洋裡的生物鯨魚 海豚等。聲吶定位不僅給它們提供了追蹤獵物 躲避天敵的方法,有時也為尋覓配偶提供方便。依靠聽覺定位的動物 工業革命之後,人類開始利用聲吶技術去探測海洋 地球內部 身體超聲檢測等。下面通過實際訊號延遲測量,說明聲音測距原理。根...