假設一平面波傳播方向為\(\mathbf{a}\),頻率為\(w\),那么經過空間中的麥克風陣列系統處理后,可以得到該麥克風陣列對平面波的響應為
其中\(\mathbf{H}\)表示的是濾波器沖激響應的傅里葉變換,\(\mathbf{k}\)表示波數,其幅度最大值為\(\lvert\mathbf{k}\rvert=\frac{2\pi}{\lambda}\),\(\mathbf{v}_{k}\)表示陣列波形矢量,可以表示成
然后對\(y(t,\mathbf{k})\)進行傅里葉變換,可以得到
將后面這一項定義為\(\Upsilon(w,\mathbf{k})\),即陣列的頻率-波數響應函數,描述了一個陣列對於波數 \(\mathbf{k}\),時頻頻率\(w\)的輸入平面波的復增益。
波束方向圖是用入射方向表示的頻率-波數響應函數,可以將其表示成
定義一個復數加權矢量為
那么\(y(t,\mathbf{k})\)可以表示成
此時
對於均勻線陣而言

,\(\mathbf{v}_{k}(\mathbf{k})\)可以表示成
其中\(\mathbf{k}_z=-\frac{2\pi}{\lambda}cos\theta\),那么此時的\(\Upsilon(w,k_z)\)可以表示成
令\(\psi=-k_zd=\frac{2\pi}{\lambda}dcos\theta=\frac{2\pi}{\lambda}du_z\),進而可以將\(\Upsilon(w,k_z)\)表示成
波數方向圖可以表示為
對於均勻加權線陣而言,此時\(w_n=\frac{1}{N}\),那么\(\Upsilon(w,k_z)\)和\(B(\psi)\)可以表示成
可以得出\(\Upsilon(\psi)\)是一個周期函數,當N是奇數的時候,其周期為\(2\pi\),當N是偶數的時候,其周期為\(4\pi\),對於任意的N值,其周期為\(2\pi\),下圖給出了當\(N=11\)的時候,\(\Upsilon(\psi)\)的變化趨勢。

下面分析波束方向圖的幾個重要參數
3dB
帶寬(HPBW
)- 到第一零點的距離
- 到第一個旁瓣的距離
- 第一旁瓣的高度
- 其余零點的位置旁瓣衰減的速率
- 柵瓣
對於波束方向圖
(1)3dB
帶寬:定義為使\(\lvert B(\psi)\rvert^2=0.5\)的點。

(2)第一零點:方向圖的零點出現在\(B(\psi)\)的分子為0而分母不為0的時候,則零點的出現滿足下面的兩個條件
那么第一個零點出現的位置就是\(u=\frac{\lambda}{Nd}\),那么定義\(\Delta u_2=2\frac{\lambda}{Nd}\)為零點-零點波束寬度(BWNN
),該值的一半(0.5BWNN
)是到第一零點的距離,這個值衡量了陣列分辨兩個不同平面波的能力,即瑞利限。如果第二個波束方向圖的峰值在第一個波束方向圖的第一零點之外,那么就稱這個平面波是可以被分辨的。
(3)旁瓣位置:旁瓣極大值出現的位置在當分子出現極大值的時候,即
可以得到解
(4)柵瓣:柵瓣就是和主瓣波束一樣高的波瓣。柵瓣出現分子和分母均為0的時候,柵瓣出現的間隔為
如果陣列的間距大於\(\lambda\),那么柵瓣的峰值出現在信號傳播區域內,即\(\lvert u \rvert \le1\)的區域。此時就會出現峰值響應模糊的問題。另外標准線陣指\(d=\lambda/2\)的均勻線陣。

上面三幅圖分別對應着\(d=\lambda/4;d=\lambda/2;d=\lambda\),可以看到當\(d=\lambda\)的時候波束方向圖出現了明顯的柵瓣。
上面三幅圖對應的代碼依次如下
clc
% 陣元個數
N = 11;
psi = (-5 : 1/ 400 : 5) * pi;
beam = zeros(1, length(psi(:)));
y = sin(.5 * psi);
i = find( abs(y) > 1e-12);
j = 1 : length(psi(:));
j(i) = [];
beam(i) = sin((N/2)*psi(i))./(N*y(i));
beam(j) = sign(cos(psi(j) * ((N+1)/2)));
plot(psi / pi, beam);
grid on;
xlabel('{\it \psi}/\pi', 'Fontsize', 9)
ylabel('頻率波數響應函數','Fontsize', 9);
axis([-5 5 -0.4 1])
clc;
N = 10; % Elements in array
d = 0.5; % spacing wrt wavelength
beamwidth = 2/(N*d); % null-to-null (LL BW is half this)
D=d*[-(N-1)/2:1:(N-1)/2]; % element locations
u = [-0.45:0.01:0.45];
AS = exp(-j*2*pi*D'*0); % BP points to 0
Au = exp(-j*2*pi*D'*u);
B = real(AS'*Au)/N; % BP
h=plot(u,B,'-');
set(h,'LineWidth',1.5)
hold on
% HPBW
I=find(B>=0.707);
plot([u(min(I)-1) u(max(I)+1)],[B(min(I)-1) B(max(I)+1)],'-')
plot(u(min(I)-1)*[1 1],B(min(I)-1)*[1 1]+0.03*[-1 1],'-')
plot(u(max(I)+1)*[1 1],B(max(I)+1)*[1 1]+0.03*[-1 1],'-')
plot([0.03 0.13],[0.72 0.845],'-')
h=text(0.155,0.84,'D');
set(h,'FontName','Symbol')
text(0.17,0.84,'{\itu} = HPBW')
h=text(0.185,0.82,'1');
set(h,'Fontsize',10)
text(0.12, 0.7,'0.707')
% BW-NN
plot([-0.2 0.2],[-0.3 -0.3],'-')
plot(-0.2*[1 1],-0.3*[1 1]+0.03*[-1 1],'-')
plot(0.2*[1 1],-0.3*[1 1]+0.03*[-1 1],'-')
h=text(-0.05,-0.35,'D');
set(h,'FontName','Symbol')
text(-0.035,-0.35,'{\itu = BWNN}')
% h=text(-0.02,-0.37,'2');
% set(h,'Fontsize',10)
% h=text(0.04,-0.37,'\itNN');
% set(h,'Fontsize',10)
% axes
plot([-1 1 ],[0 0],'-')
plot([0 0],[-0 1.1],'-')
% tick marks
plot(-0.4*[1 1],0.03*[-1 1])
plot(-0.2*[1 1],0.03*[-1 1])
plot(0.2*[1 1],0.03*[-1 1])
plot(0.4*[1 1],0.03*[-1 1])
text(-0.005,-0.05,'0')
%tick labels
xx=0.2;
yy=-0.1;
h=text(xx-0.01,yy+0.02,'l');
set(h,'FontName','Symbol')
plot([xx-0.02 xx+0.01],[yy-0.01 yy-0.01],'-')
h=text(xx-0.02,yy-0.05,'\itNd');
xx=-0.18;
yy=-0.1;
h=text(xx-0.01,yy+0.02,'l');
set(h,'FontName','Symbol')
plot([xx-0.02 xx+0.01],[yy-0.01 yy-0.01],'-')
h=text(xx-0.02,yy-0.05,'\itNd');
text(xx-0.04, yy-0.005,'-')
xx=0.41;
yy=-0.1;
h=text(xx-0.01,yy+0.02,'l');
plot([xx-0.02 xx+0.01],[yy-0.01 yy-0.01],'-')
h=text(xx-0.02,yy-0.05,'\itNd');
text(xx-0.035, yy-0.005,'2')
xx=-0.4;
yy=-0.1;
h=text(xx-0.01,yy+0.02,'l');
plot([xx-0.02 xx+0.01],[yy-0.01 yy-0.01],'-')
h=text(xx-0.02,yy-0.05,'\itNd');
text(xx-0.05, yy-0.005,'-2')
text(0.05,1.1,'\itB(u)')
hold off
axis([-0.42 0.42 -0.4 1.2])
%set(gca,'Box','off')
set(gca,'Visible','off')
clc;
N = 10;
n = (-(N-1)/2:(N-1)/2).';
psi = pi * (-3 : 0.001 : 3);
w = 1/N * [ones(N,1)];
d = [1/4 1/2 1];
figure
for k = 1 : length(d)
vv = exp(1j * 2 * d(k) * n * psi);
B(k,:) = 20 * log10(abs(w'*vv));
subplot(3, 1, k);
plot(psi / pi, B(k, :));
hold on
plot([-1 -1],[-25 0],'--');
plot([1 1],[-25 0],'--');
axis([-3 3 -25 5])
set(gca,'YTick',[-25 -20 -15 -10 -5 0])
grid on
xlabel('\itu')
if k == 1
plot([-1 1],[2.5 2.5])
plot([-1 -0.9],[2.5 0.5])
plot([-1 -0.9],[2.5 4.5])
plot([0.9 1],[0.5 2.5])
plot([0.9 1],[4.5 2.5])
text(-0.4,7,'Visible region')
end
hold off
end