水下声源方位估计
前言
水下目标定位问题是三维问题,可以将其转化为角度、距离和深度估计问题[1][2],如下图所示为三维定位的原理图,在柱坐标系下,可以将声源坐标表示为。均匀线阵和圆环阵进行波达方向估计(DOA估计)已被较为全面的研究[3],波束形成的方法有常规波束形成(CBF)、最佳波束形成(MVDR)等[3]。距离和深度的估计可以使用匹配场方法(MFP)[4],常见的方法有线性匹配场方法(CMFP)和自适应匹配场方法(AMFP),分别对应着DOA估计中的常规波束形成和最佳波束形成。
一、 波束形成原理
水下目标角度估计利用DOA估计,如下图所示,声源位于水平阵角方向上,根据声源发射声波到达阵列的相位差,可以实现声源的方位估计。下面建立数学模型来描述这一过程。
1.1 阵列接收信号模型
首先阵列接收信号模型,通过该模型推导波束形成的物理原理。 在上图中选择海面中一点作为空间参考点,该点满足从该点向海底做垂线,垂足为阵列的几何中心,第m个阵元的位置可以表达为,
将阵列的位置表示为矩阵形式,。由图1.1,可以定义信号传播方向单位向量为,
可以得到阵元相对于参考点的时延为,
其中c为海水中参考声速。 假设参考点接收信号为s(t),则阵元接收信号可以表达成,
转换为频域表达
式中,为信号的频谱。定义波数向量
式中,为波束,c为海洋参考声速,为信号波长。 于是,式(5)可以写成
阵元接收信号可以表达成M×1列向量的形式,
根据式(7)和(8)。可以得到,
定义为方向导向向量。根据式(9),并加入干扰和噪声,得到第m号阵元接收信号为
式中,β表示目标信号是否在接收信号中,β=1,信号存在;β=0,信号不存在。将式(10)表示为M×1维向量的形式,
式中,表示期望信号与干扰对应的方向响应向量。 假设信号、干扰、噪声互不相关,得到互谱矩阵为
1.2 波束形成原理
波束形成方法的原理是,将阵列信号进行时延补偿,使信号同相相加,而噪声和干扰非同相相加,从而提高信噪比。 假设第m通道的传输函数为, (也称之为加权向量)频域波束形成的波束输出为,
若需要得到输出功率,可将式(13)改为
常规波束形成器的加权向量为,
式中,为信号的方向导向向量。 最佳波束形成器的加权向量为
式中,分母 是一个标量系数。
1.3 波束响应和方位谱
波束响应是指某个方向的单位功率平面波在波束形成后的能量响应,用来考察波束形成器对不同方向来波信号的响应特性。省略频率宗量,波束响应公式为 式中,表示信号所有可能到达的方向集合(观察视区),对于三维观察空间,为空间角;对于平面问题,此时,为xo'y平面角,。 由式(17)可以看出,波束响应的加权向量不含自变量,而方向响应向量中 含有自变量Ω,这一点要与方位谱公式区分开来。 方位谱是指在观察方向波束形成器的输出功率,其计算公式为 由(18)可知,方位谱计算公式中加权向量含自变量,而为阵元接收信号信号的协方差矩阵,不含自变量。 宽带波束形成方位谱的原理为窄带方位谱的加权求和 式中,为对应频率为f_j的窄带方位谱,为宽带方位谱,对应为加权系数,该式的求和方法为相干求和,若改为非相干求和,有
二、仿真
项目地址声源方位角估计
2.1. 水平均匀线阵波达方向估计基础仿真
考虑一个11元标准线列阵,坐标系采用笛卡尔坐标系,水平阵的位置从(0,-40m,42m)到(0,40m,42m)沿y轴方向均匀分布11个阵元,相邻阵元间隔d=8m。观察视区为xo'y平面,即ϕ=90°,Θ∈[-90°,90°]。对于水平均匀线阵,若无说明,阵列的布置与此阵列保持一致。 得到阵列坐标如下图所示。 假设期望信号方向为,信号频率为50Hz,设置声速c=1500m/s,则平面波波长为,阵元间距,满足空间采样定理,因此波束形成结果不会出现副极大。 得到波束图如下图所示。 如图所示,用对数表示的最高旁瓣值与期望方向主瓣值之差称为旁瓣级,用SLL表示。旁瓣级束宽(),即波束主瓣功率下降到-3dB时的两方向间夹角。 得到该线阵常规波束旁瓣级SLL≈-13dB,旁瓣级束宽。
2.1.1 常规波束图、常规波束扫描方位谱
考虑一个11元水平均匀线阵,假设一个功率为1的50Hz单频信号从10°方向入射到基阵,不考虑噪声,得到常规波束形成的常规波束图、常规波束扫描方位谱。 下面分别介绍各子图的意义。 (a)波束图的作用是指定目标方位,观测不同方向入射的信号对输出功率的影响。由图(a)可以看出在θ=10°时波束图出现峰值,说明对于该波束形成器来说10°方向的信号产生的响应最大。 (b)方位谱图被直接用来输出DOA估计结果。由图(b)可以看出,在θ=10°方位谱出现峰值,DOA估计的结果为10°,还可以看出CBF的旁瓣级较高,“能量泄露”较为严重。 (c )加权范数图,加权向量范数的大小反映波束形成器的灵敏度和稳健性,由图(c )可以看出,CBF方法在不同角度的加权向量范数均为-10dB,说明常规波束形成灵敏度低,稳健性好。 (d)阵增益图的作用是,研究波束形成的前后的信噪比增益与波束形成方向的关系。由图(d)可以看出,当波束对准信号方向时,即,阵增益达到最大值10dB,当波束形成方向与目标方位由差别时,阵增益下降。
主程序CBF_LA_NB.m代码如下(示例):
% 清除命令窗口、工作区和关闭所有图形窗口
clc; clear all; close all;
% 仿真环境参数设置
c = 1500; % 声速
f_s = 50; % 采样频率
M = 11; % 阵元数
d_r = 8; % 阵元间隔
% 设置信号的俯仰角和入射角
phi = 90; % 信号俯仰角
theta = 10; % 信号入射角
% 设置信号幅度
sw = 1;
% 生成波束扫描角度范围
theta_B = [-90:0.1:90].';
% 创建阵列位置向量,P_r 的三个维度分别对应 x、y、z 坐标
P_r = [zeros(1,M); ((1:M) - (M +1)/2)*d_r; zeros(1,M)];
% 绘制阵列图像
figure;
% beaplot 函数用于绘制图形,这里传入的参数依次为 x 坐标、y 坐标、标记类型、标记大小、标题、x 轴标签、y 轴标签、是否显示图例、图例名称
beaplot(zeros(1,M), P_r(2,:),'o',1,'阵列流形','x(m)','y(m)',0,0);
% 计算波数
ksc = 2* pi* f_s/ c;
% 计算入射方向向量
pve = beamscp(ksc, P_r, theta, phi);
% 计算接收信号向量
X_s = pve* sw;
% 计算接收信号的自相关矩阵
Rx_s = X_s * X_s';
% 波束图
% 计算期望方向的权向量
w_c = pve/ M;
% 计算不同角度下的方向向量
pve_B = beamscp(ksc, P_r, theta_B, phi);
% 计算波束形成输出
B = w_c'* pve_B;
% 将波束形成输出转换为分贝形式
B_dB = 20* log10(abs(B));
% 绘制波束图
figure;
beaplot(theta_B, B_dB, '-k', 1.5,'波束图','θ/(°)','20lgB(θ)/(dB)',0,0);
axis([-90 90 -70 0]);
grid off;
% 方位谱
% 计算方位谱的权向量
w_AziSpe = pve_B/ M;
% 初始化方位谱功率
P_AziSpe = zeros(length(theta_B),1);
% 采用 for 循环计算不同角度下的方位谱功率
for n =1 :length(theta_B)
% 计算权向量与接收信号自相关矩阵的乘积,再与权向量转置相乘得到功率
P_AziSpe(n,1) = w_AziSpe(:,n)'* Rx_s *w_AziSpe(:,n);
end
% 将方位谱功率转换为分贝形式
P_AziSpe_dB = 10*log10(abs(P_AziSpe));
% 绘制多个子图
figure;
set(gcf,'position',[100 100 800 600]);
subplot(221)
beaplot(theta_B, B_dB, '-k', 1.5,'(a)波束图','θ/(°)','20lgB(θ)/(dB)',0,0);
axis([-90 90 -70 5]);
grid on;
subplot(222)
beaplot(theta_B, P_AziSpe_dB, '-k', 1.5,'(b)纯信号时波束扫描方位谱'...
,'θ_0/(°)','10lgP(θ_0)/(dB)',0,0);
axis([-90 90 -70 5]);
grid on;
% % 设置信噪比并计算加噪声后的接收信号自相关矩阵
% SNR = 30;
% sigma2_s = 10^(SNR/10);
% Rx = sigma2_s * Rx_s + eye(M);
% % 初始化加噪声后的方位谱功率
% P_AziSpe2 = zeros(length(theta_B),1);
% for n =1 :length(theta_B)
% P_AziSpe2(n,1) = w_AziSpe(:,n)'* Rx *w_AziSpe(:,n);
% end
% P_AziSpe_dB2 = 10*log10(abs(P_AziSpe2));
% 计算加权向量范数
w2 = sum(abs(w_AziSpe.^2),1);
w2_db = 10*log10(w2);
subplot(223)
beaplot(theta_B, w2_db, '-k', 1.5,'(c)加权向量范数'...
,'θ_0/(°)','10lgP(θ_0)/(dB)',0,0);
axis([-90 90 -15 30]);
grid on;
% 计算不同方向波束阵增益
Gain_w = zeros(length(theta_B),1);
for n =1 :length(theta_B)
Gain_w(n,1) =abs(w_AziSpe(:,n)'* pve)^2/abs( w_AziSpe(:,n)'* w_AziSpe(:,n));
end
Gain_w_dB = 10*log10(abs(Gain_w));
subplot(224)
beaplot(theta_B, Gain_w_dB, '-k', 1.5,'(d)不同方向波束阵增益'...
,'θ_0/(°)','10lgGc(θ_0)/(dB)',0,0);
grid on;
axis([-90 90 -60 15]);
依赖方向响应向量计算函数beamscp.m代码如下(示例):
function pve_B = beamscp(ksc, P_r, theta, phi)
% 函数说明:该函数输入为波数、阵元位置、入射方向角,输出方向响应向量
% 根据俯仰角 phi 和入射角 theta 计算单位方向向量 v_s
% sind 和 cosd 函数分别用于计算角度的正弦和余弦值(角度以度为单位)
% v_s 的三个分量分别对应 x、y、z 方向
v_s = - [sind(phi)* cosd(theta), sind(phi)* sind(theta), ones(length(theta),1)*cosd(phi)].';
% 根据波数 ksc 和单位方向向量 v_s 计算波矢 kve
kve = ksc * v_s;
% 计算方向响应向量 pve_B
% exp 函数用于计算指数,-1j * kve.' * P_r 表示对每个阵元位置与波矢的乘积取复指数
% 最后转置并输出
pve_B = exp(-1j * kve.' * P_r).';
end
依赖画图函数beaplot.m代码如下(示例):
function h = beaplot(x,y,ltype,lwidth,Plottitle,xlab,ylab,reverse,xti)
% 函数说明:该函数用来修改 plot 函数的输出使其更美观。
% 注意事项:此函数未设计缺省值,泛化能力不强。如果需要修改,建议编写 default 语句以防止影响以前的程序运行。
% 设置图形背景颜色为白色
set(0,'defaultfigurecolor','w');
% 根据输出参数个数进行不同操作
if nargout == 0
% 如果没有输出参数,直接绘制图形
plot(x,y,ltype,'linewidth',lwidth);
elseif nargout == 1
% 如果有一个输出参数,将绘制的图形句柄赋值给输出变量 h
h = plot(x,y,ltype,'linewidth',lwidth);
end
% 设置图形标题
title(Plottitle,'fontsize',14,'fontname','黑体');
% 设置坐标轴字体为黑体
set(gca,'fontname','黑体');
% 设置 x 轴标签
xlabel(xlab);
% 设置 y 轴标签
ylabel(ylab);
% 设置 x 轴和 y 轴标签的字体大小和字体为黑体
set(get(gca,'xlabel'),'fontsize',12,'fontname','黑体');
set(get(gca,'ylabel'),'fontsize',12,'fontname','黑体');
% 根据参数 xti 的值设置 x 轴刻度
if xti==1
set(gca,'xtick',x);
end
% 根据参数 reverse 的值进行坐标轴反转操作
if reverse
axis ij;
end
end
2.1.2 MVDR波束图、MVDR波束扫描方位谱
考虑一个11元标准线列阵,假设基阵接收噪声是功率为0dB的高斯白噪声,即R_n=I。一个信噪比SNR=30dB的50Hz单频信号从θ_0=10°方向入射到基阵,得到最佳波束形成如下图所示。 (a)波束图,当θ_0=-10°,即期望方向为-10°,此时的波束图如图(a)黑色实线所示,可以看出波束响应在信号方向(θ=10°)有很明显的凹陷,这是由于当信号方向与期望方向不一致,波束形成时将信号当作干扰,抑制波束形成后功率大小。 (b)方位谱,可以看出MVDR方位谱呈现“尖峰状”,相对于CBF来说,MVDR有更好的分辨力。 (c)加权范数图,加权向量范数的大小反映波束形成器的稳健性,由图(c)可以看出,MVDR的加权向量范数在接近目标方位时增大,当θ=10°时突然减小至-10dB,此时MVDR退化为常规波束形成。MVDR在目标方位附近时加权向量范数较高,对应灵敏度高,失配对MVDR的影响较大,说明MVDR的稳健性较差[3]。 (d)阵增益图,由(d)图可以看出当θ_0=10°时,阵增益达到最大值10dB,在其他方向,阵增益非常小,说明MVDR相对CBF来说有更好的抗干扰能力。
% 清除命令窗口、工作区和关闭所有图形窗口
clc; clear all; close all;
% 设置声速、采样频率、阵元数和阵元间隔
c = 1500; % 声速
f_s = 50; % 采样频率
M = 11; % 阵元数
d_r = 8; % 阵元间隔
% 信号仿真
% 设置信号的俯仰角和入射角
phi = 90; % 信号俯仰角
theta = 10; % 信号入射角
% 设置信号幅度
sw = 1;
% 设置信噪比
SNR = 30;
% 生成波束扫描角度范围
theta_B = [-90:0.1:90].';
% 创建阵列位置向量,P_r 的三个维度分别对应 x、y、z 坐标
P_r = [zeros(1,M); ((1:M) - (M +1)/2)*d_r; zeros(1,M)];
% 绘制阵列图像
figure;
beaplot(zeros(1,M), P_r(2,:),'o',1,'阵列流形','x(m)','y(m)',0,0);
% 计算波数
ksc = 2* pi* f_s/ c;
% 计算入射方向向量
pve = beamscp(ksc, P_r, theta, phi);
% 计算接收信号向量
X_s = pve* sw;
% 计算接收信号的自相关矩阵
Rx_s = X_s * X_s';
% 计算噪声功率
sigma2_s = 10^(SNR/10);
% 计算加噪声后的接收信号自相关矩阵
Rx = sigma2_s * Rx_s + eye(M);
% 波束图
% 计算 MVDR 波束形成器的权向量(期望方向为 theta)
w_MVDR_1 = Rx\ pve/(pve'/ Rx* pve);
% 计算不同角度下的方向向量
pve_B = beamscp(ksc, P_r, theta_B, phi);
% 计算波束形成输出
B_1 = w_MVDR_1'* pve_B;
% 将波束形成输出转换为分贝形式
B_dB_1 = 20* log10(abs(B_1));
% 绘制波束图
figure;
set(gcf,'position',[100 100 800 600]);
subplot(221)
beaplot(theta_B, B_dB_1, '--r', 1.5,'(a)波束图','θ/(°)','20lgB(θ)/(dB)',0,0);
axis([-90 90 -70 0]);
hold on;
% 计算另一个入射角的方向向量和 MVDR 权向量
pve2 = beamscp(ksc, P_r, -10, phi);
w_MVDR_2 = Rx\ pve2/(pve2'/ Rx* pve2);
B_2 = w_MVDR_2'* pve_B;
B_dB_2 = 20* log10(abs(B_2));
beaplot(theta_B, B_dB_2, '-k', 1.5,'(a)波束图','θ/(°)','20lgB(θ)/(dB)',0,0);
legend('θ_0=10°','θ_0= - 10°');
grid on;
% 方位谱
% 初始化方位谱功率、加权向量范数和波束阵增益
P_AziSpe = zeros(length(theta_B),1);
w_AziSpe2 = zeros(length(theta_B),1);
Gain_w = zeros(length(theta_B),1);
% 采用 for 循环计算不同角度下的方位谱功率、加权向量范数和波束阵增益
for n =1 :length(theta_B)
w_AziSpe = Rx\ pve_B(:,n)/(pve_B(:,n)'/ Rx* pve_B(:,n));
w_AziSpe2(n,1) = w_AziSpe'*w_AziSpe;
P_AziSpe(n,1) = w_AziSpe'* Rx *w_AziSpe;
Gain_w(n,1) =abs(w_AziSpe'* pve)^2/abs( w_AziSpe'* w_AziSpe);
end
% 将方位谱功率转换为分贝形式
P_AziSpe_dB = 10*log10(abs(P_AziSpe));
subplot(222)
beaplot(theta_B, P_AziSpe_dB, '-k', 1.5,'(b)方位谱','θ_0/(°)','10lgP(θ_0)/(dB)',0,0);
axis([-90 90 -15 40]);
grid on;
% 将加权向量范数转换为分贝形式
w_AziSpe2_dB = 10*log10(abs(w_AziSpe2));
subplot(223)
beaplot(theta_B, w_AziSpe2_dB, '-k', 1.5,'(c)加权向量范数'...
,'θ_0/(°)','10lg||w(θ_0)||^2/(dB)',0,0);
axis([-90 90 -15 30]);
grid on;
% 将波束阵增益转换为分贝形式
Gain_w_dB = 10*log10(abs(Gain_w));
subplot(224)
beaplot(theta_B, Gain_w_dB, '-k', 1.5,'(d)不同方向波束阵增益'...
,'θ_0/(°)','10lgGc(θ_0)/(dB)',0,0);
grid on;
axis([-90 90 -150 15]);
总结
以上就是今天要讲的内容,本文介绍了波束形成算法的原理和仿真,讨论了CBF和MVDR的原理和仿真结果。