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

引言

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

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.

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
麦克风阵列波束形成算法是一种利用麦克风阵列的空间选择性来增强特定方向上的信号和抑制干扰的方法。其中,延迟-累加波束形成算法是一种常见的方法。该算法首先对麦克风阵列各个阵元接收到的语音信号进行时延估计和时间补偿,以保持各阵元通道中的语音信号同步。然后对各路信号进行加权,放大期望的信号并抑制干扰信号。最后将加权后的信号进行累加,产生一个经过增强处理的信号。这种方法可以降低噪声和干扰对信号的影响,提高信噪比。但是在处理相干噪声和移动语音信号时效果较差。 另外,波束形成算法还需要考虑麦克风阵列的个数、性能和鲁棒性。当麦克风数量较少时,波束形成的空域选择性较差,而当麦克风数量较多时,波束的3dB带宽较窄,并且对目标声源方向的估计偏差影响更大,鲁棒性较差。因此,需要在鲁棒性和性能之间进行权衡。常用的波束形成准则有最大信噪比准则、最小均方误差准则和线性约束最小方差准则等。此外,波束形成方法还需要根据语音、噪声和干扰等统计信息来调整波束方向图,以达到最优滤波效果。为了应对信号和噪声的统计特性的变化,可以采用短时平稳和自适应方法来进行波束形成。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [麦克风阵列语音增强算法——固定波束形成算法](https://blog.csdn.net/weixin_44915288/article/details/129370571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [麦克风阵列波束形成](https://blog.csdn.net/shichaog/article/details/74143427)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值