麦克风阵列波束形成(8阵元圆阵)

博主因网上难寻平面阵麦克风阵列代码,将阶段性学习成果分享。介绍了MATLAB波束形成程序,包括创建基本阵列参数、设定期望值及观察范围等步骤,还展示了俯仰角、水平角目标值时的剖面图,以及直角、极坐标系的三维图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

最近需要使用麦克风阵列,但是网上很少找到关于平面阵麦克风阵列的代码,对于我这种时间紧张的初学者而言很难受,吃了不少亏,现在把阶段性学习成果分享给大家,希望对后面刚接触这方面的同学有点启发。

MATLAB波束形成程序

创建基本阵列参数

c = 340;                        				%声速
R = 0.04354;                    				%阵元半径
M = 8;                          				%阵元个数
phin = 360/M;                   				%阵元位置角度
phin = 0:phin:360-phin;
zero_rho_z = zeros(1,M);
rho = [R*cosd(phin);R*sind(phin);zero_rho_z];	%直角坐标系下阵元坐标
snapshot_num = 400;             				%快拍数
f = 10000;										%目标频率
lambda = c/f;                   				%波长
k = 2*pi/lambda;                				%波数值

设定期望值及观察范围

theta0 = 0;										%目标俯仰角
phi0 = 180;										%目标方向角
theta = linspace(-90,90,361);   				%俯仰角范围
phi = linspace(0,360,361);      				%水平角范围

%***********若是需要抑制一定方向的干扰则加入下方代码***********%
%theta1 = 10;									%干扰1俯仰角
%phi1 = 80;										%干扰1水平角
%theta2 = -30;									%干扰2俯仰角
%phi2 = 200;									%干扰2水平角
%************************************************************%

创建数据协方差矩阵

kv0 = k*(-[sind(theta0)*cosd(phi0);sind(theta0)*sind(phi0);cosd(theta0)]);	%目标方向波数向量										
P0 = exp(-1j*kv0'*rho).';												  	%目标方向响应向量
tar_sig = wgn(1,snapshot_num,0);                                        	%目标信号
noise = (randn(M,snapshot_num)+randn(M,snapshot_num)*1i)/sqrt(2);       	%环境噪声
rec_sig = P0*tar_sig+noise;													%无干扰的输入信号

%***********若是需要抑制一定方向的干扰则加入下方代码***********%
%kv1 = k*(-[sind(theta1)*cosd(phi1);sind(theta1)*sind(phi1);cosd(theta1)]);	%干扰1方向波数向量
%kv2 = k*(-[sind(theta2)*cosd(phi2);sind(theta2)*sind(phi2);cosd(theta2)]);	%干扰2方向波数向量
%P1 = exp(-1j*kv1'*rho).';													%干扰1方向响应向量
%P2 = exp(-1j*kv2'*rho).';													%干扰2方向响应向量
%inf1 = wgn(1,snapshot_num,20);                                          	%干扰信号1
%inf2 = wgn(1,snapshot_num,15);                                          	%干扰信号2
%rec_sig = P0*tar_sig+P1*inf1+P2*inf2+noise;								%有干扰的输入信号
%************************************************************%

Rx = rec_sig*rec_sig'/snapshot_num;											%数据协方差矩阵								

计算方向响应矩阵(或称阵列流形向量)

kv_all = k*(-[kron(sind(theta),cosd(phi));kron(sind(theta),sind(phi));reshape(repmat(cosd(theta)',1,361)',[1,130321])]);
P_all = exp(-1j*kv_all'*rho).';

RCB算法计算各传感器权值

epsilon0 = 2;                     			%导向向量误差范围上界
R_inv = inv(Rx); 							%求逆矩阵
cvx_begin quiet
    variable a(M) complex;
    minimize norm(sqrtm(R_inv)*a)
subject to
   norm(P0-a) <= epsilon0;
cvx_end
w = R_inv*a/(a'*R_inv*a);

绘制波束响应图

BF = reshape(w'*P_all,[361,361]).';			%计算波束响应并整理格式
BF = 20*log10(abs(BF)/max(max(abs(BF))));	%转成dB单位

figure(1)									%水平角为目标值时的图3刨面
theta0_index = find(theta == theta0);
plot(phi,BF(theta0_index,:));
xlabel('水平角 \phi °');
ylabel('增益大小 (dB)');
title('圆阵RCB');
xlim([0,360]);
ylim([-25,0]);
grid;

figure(2)									%俯仰角为目标值时的图3刨面
plot(theta,BF(:,phi0));
xlabel('俯仰角 \theta °');
ylabel('增益大小 (dB)');
title('圆阵RCB');
xlim([-90,90]);
ylim([-25,0]);
grid;

figure(3)									%直角坐标系中显示
mesh(phi,theta,BF)
xlabel('水平角 \phi °');
ylabel('俯仰角 \theta ° ');
zlabel('增益大小 (dB)');
title('圆环阵RCB三维视图');

figure(4)									%转换为极坐标系中显示
[ttt,ppp] = meshgrid(theta,phi);
BF = (BF-min(BF(:)))/(max(BF(:))-min(BF(:)));
x = BF.*sind(ttt').*cosd(ppp');
y = BF.*sind(ttt').*sind(ppp');
z = BF.*cosd(ttt');
xlabel('x');
ylabel('y');
zlabel('z');
mesh(x,y,z)

结果图

俯仰角为目标值时的图3刨面图图1:俯仰角为目标值时的图3刨面图
水平角为目标值时的图3刨面图
图2:水平角为目标值时的图3刨面图
直角坐标系中显示
图3:直角坐标系直接显示三维图
转为极坐标系显示
图4:转为极坐标系显示三维图

参考文献

[1]鄢社锋.优化阵列信号处理(上册):波束优化理论与方法[M].北京:科学出版社,2018:126-133.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值