1  算法原理

LCMV波束形成器最优权向量的求解依赖于阵列接收数据的统计知识,即要计算自相关Rx。然而,实际应用中阵列接收数据的自相关是未知的或是时变的,此时约束自适应算法能用来逼近权向量,即Frost波束形成器。

首先,初始化权向量w[0] = C(CHC)-1f,它满足约束条件。然后以一个适当的比例系数朝Rxxw+Cλ 负梯度方向迭代,得到

w[n+1] = w[n] - µ(Rxxw[n] +[n])

既然w[n+1]满足CHw = ,将其代入解得λ[n],然后代回上式,得到

w[n+1] = C(CHC)-1f +P(w[n]-µRxxw[n])

其中P=I- C(CHC)-1CHI为单位矩阵。

由于不知二阶统计量 R xx,自相关矩阵可近似为 R xxxx H。而 x H w[ n]恰是阵列第n次迭代的输出y[ n],因此Ftost波束形成器归结为

w[0] = C(CHC)-1f

                        w[n+1] = C(CHC)-1f +P(w[n]-µy[n]x[n])

2  对模拟麦克风阵列语音进行增强

在matlab r2011a的toolbox的phased有波束形成相关的demo,demo之一代码如下:

%Define a Uniform Linear Array
%First we define a uniform linear array (ULA) to receive the signal.
%The array contains 10 omnidirectional microphones and the element spacing is 5 cm
hmic=phased.OmnidirectionalMicrophoneElement;
ha=phased.ULA(4,0.05,'Element',hmic);
c=340;                                       %sound speed,in m/s
%Simulate the Received Signals
load('twospeeches','speech1','speech2');
load('laughter','y');                       %The laughter is stored in variable y
y=2*y*(1:length(speech1));                   %Amplify and truncate
fs=8192;                                    %in Hz
wavwrite(speech1,fs,'speech1.wav');
wavwrite(speech2,fs,'speech2.wav');
ang1=[-30;0];
ang2=[60;10];
angInt=[20;0];
hCollector=phased.WidebandCollector('Sensor',ha,'PropagationSpeed',c,...
'SampleRate',fs,'ModulateInput',false);
sigSource=step(hCollector,[speech1 speech2 y],[ang1 ang2 angInt]);
rs=RandStream.create('mt19937ar','Seed',2008);
noisePwr=1e-4;                              %noise power
sigNoise=sqrt(noisePwr)*randn(rs,size(sigSource));
sigArray=sigSource+sigNoise;
wavwrite(sigArray(:,3),fs,'sigArray.wav');
%Plot channel 3
plot(sigArray(:,3));
xlabel('Time(sec)');ylabel('Amplitude(V)');
title('Signal Received at Channal 3');ylim([-3 3]);
%Listen to channal 3
player=audioplayer(sigArray(:,3),fs);
play(player);
%Process with a Time Delay Beamformer
angSteer=ang1;
hbf=phased.TimeDelayBeamformer('SensorArray',ha,'SampleRate',fs,...
'Direction',angSteer,'PropagationSpeed',c)
cbfOut=step(hbf,sigArray);
plot(cbfOut);
xlabel('Time(Sec)');ylabel('Amplitude(V)');
title('Time Delay Beamformer Output');ylim([-3 3]);
player=audioplay(cbfOut,fs);
play(player);
agCbf=pow2db(mean((speech2+y).^2+noisePwr)/mean((cbfOut-speech1).^2))
%Process with a Frost Beamdormer
hbf=phased.FrostBeamformer('SensorArray',ha,'SampleRate',fs,...
'PropagationSpeed',c,'WeightsOutputPort',true);
%The beamformer may change its steering direction during processing
hbf.DirectionSource='Input port';
hbf.FilterLength=20;    %Set the length of FIR filter for each sensor to 20
[FrostOut,w]=step(hbf,sigArray,ang1);
plot(FrostOut);
xlabel('Time(sec)');ylabel('Amplitude(V)');
title('Frost Beamformer Output');ylim([-3 3]);
player=audioplayer(FrostOut,fs);
play(player);
agFrost=pow2db(mean((speech2+y).^2+noisePwr)/mean((FrostOut-speech1).^2))
%Use Diagonal Loading to Improve Robustness to the Frost Beamformer
release(hbf);
dir2=[50;20];               %Estimated steering direction
FrostOut=step(hbf,sigArray,dir2);
plot(FrostOut);
xlabel('Time(sec)');ylabel('Amplitude(V)');
title('Frost Beamformer Output');ylim([-3 3]);
player=audioplayer(FrostOut,fs);
play(player);
agFrost2=pow2db(mean((speech1+y).^2+noisePwr)/mean((FrostOut-speech2).^2))
release(hbf);
hbf.DiagonalLoadingFactor=1e-3;    %Specify diagonal loading value
FrostOut=step(hbf,sigArray,dir2);
plot(FrostOut);
xlabel('Time(sec)');ylabel('Amplitude(V)');
title('Frost Beamformer Output');ylim([-3 3]);
player=audioplayer(FrostOut,fs);
play(player);
agFrostDL=pow2db(mean((speech1+y).^2+noisePwr)/mean((FrostOut-speech2).^2))

首先定义一个均匀线性阵列,包含8个全向性麦克风阵元,阵元间距5cm,声速340m/s;然后模拟麦克风接收到的信号,语音1为一段男声,语音2为一段女声,采样率8192Hz,分别在-30o和60o,同时在20o有一段笑声作为干扰,并加上随机噪声作为本底噪声,用matlab中函数模拟产生一个39922*8的矩阵,每一列代表一个阵元接收到的混合声音信号。各信号如图1所示。

图1  各方向信号及本底噪声波形

然后编写C++代码,运用Frost波束形成器,分别对-30o方向男声语音1和60o方向女声语音2进行增强,混合语音、增强后语音1和增强后语音2的波形如图2所示。

图2 混合信号及增强后语音信号波形

由图2波形图可看出,编写的算法程序明显衰减了不希望的干扰及噪声,增强了期望语音信号,由增强后语音的听音效果可以听出增强效果很明显,能清楚地听到期望声音。

3  影响语音增强的因素

(1) 麦克风数量对语音增强效果的影响

运用上述方法在matlab中模拟产生麦克风阵列语音进行增强,各声音信号方向不变,保持阵元间距为5cm,采样率为8192Hz,语音1平均输入信噪比为-8.4949dB,语音2平均输入信噪比为-10.6588dB,将麦克风数量从10逐渐减小到2,计算两语音平均输出信噪比和平均信噪比增益,如图3所示。

图3 不同麦克风数量语音增强平均信噪比增益

由图3可知,在其他条件不变的情况下,随着麦克风数量的增多,平均信噪比增益增加;当麦克风数量增加到一定程度时,平均信噪比增益提升不明显。因而在实际应用中,在可接受的信噪比增益要求下,使用尽可能多的麦克风。

(2) 麦克风间距对语音增强效果的影响

与上面的仿真相似,保持麦克风数量为10个,采样率为8192Hz不变,将麦克风间距从1cm增加到20cm,计算两语音平均平均信噪比增益,如图4所示。

图4 不同麦克风间距语音增强平均信噪比增益

由图4可知,在其他条件不变的情况下,随着麦克风间距的增加,平均信噪比增益先有所提升,然后又有所下降。不同语音信号的最佳麦克风间距不同,因而实际操作中选择的间距应使不同语音都有较大信噪比增益。

(3) 采样频率对语音增强效果的影响

最后,保持麦克风数量为10个,麦克风间距为5cm不变,分别仿真采样率为8.192kHz、16kHz、22.05kHz、32kHz、44.1kHz、48kHz时两语音的平均信噪比增益,如图5所示。

图5 不同采样率语音增强平均信噪比增益

由图5可看出,采样率稍大一些对语音增强效果有一定提升,采样率过大语音增强效果反而下降。不同信号由于频率不同,其最佳采样频率也不同,但一定要大于其最大频率的两倍。

自适应波束形成(四)——Frost波束形成1相关推荐

  1. 频域波束形成matlab,SONAR_code 波束形成技术,包括相移 ,频域 matlab代码,以及相关实验的ppt 263万源代码下载- www.pudn.com...

    文件名称: SONAR_code下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 25848 KB 上传时间: 2015-05-03 下载次数: 21 提 供 ...

  2. 【实验6】——时域波束形成与频域波束形成

    概述 上一篇博文简单介绍了波束形成的原理,即通过对阵列信号的补偿实现一定方位的波束,可用于测向.之前的仿真时使用的是已知的单频信号,信号时延直接在解析式上进行,但实际情况中的信号往往没有解析形式,仅仅 ...

  3. 自适应波束形成(一)——窄带波束形成和宽带波束形成

    在许多波束形成应用中,我们经常需要根据接收到的阵列数据来更新波束形成器系数,以获得不同情境下的最优解决方案.若环境是变化的,系数也要自适应变化,这就是自适应波束形成器. 运用波束形成技术,利用麦克风阵 ...

  4. 窄带波束形成——频域的波束形成

    最近学习了一下<最优阵列处理技术>,应老师要求写一个线性均匀水听器阵列的常规波束形成,由于是初学者,写的可能会有点问题,欢迎大家提出修改建议和指导,写这个主要是记录自己的思考,其次是和初学 ...

  5. h5实现网页内容跟随窗口大小移动_HTML5 移动页面自适应手机屏幕四类方法

    1.使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备对该标签的解释方式及支持程度不同造成了不能兼容所有浏览器或系统. ...

  6. HTML5 移动页面自适应手机屏幕四类方法

    2019独角兽企业重金招聘Python工程师标准>>> 1.使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但 ...

  7. 两边定宽,中间自适应布局的四种实现方法

    1. 浮动法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. HTML5 移动页面自适应手机屏幕四种方法(禁止html5手机端双击页面放大的问题)

    1.使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备对该标签的解释方式及支持程度不同造成了不能兼容所有浏览器或系统. ...

  9. 模拟波束成形和数字波束成形的区别

    https://ma-mimo.ellintech.se/2017/10/03/what-is-the-difference-between-beamforming-and-precoding/

最新文章

  1. 推荐一位二本毕业1年,上海买房的大佬,牛逼!
  2. poj3484详解(二分)
  3. 重磅:《肠道产业》2020-2021年度榜单
  4. 《THE LEAN STARTUP》 《精益创业》
  5. LVS-DR+Keepalived 高可用群集
  6. bootstrap 打印组件_创想三维:有了3D打印机,后期该如何维护呢-创想三维 Ender-1_深圳3D打印机行情...
  7. 动态 Restful API 生成
  8. 哪个html标签用于定义文档的标题,在HTML中,(41)用于定义文档的标题。
  9. 七、配置ssh keys连通github跟ssh-agent
  10. collatz序列 python程序_Python Collatz序列实现过程解析
  11. 计算机基础知识必刷,《2019年江苏专转本考试-计算机基础必刷题题库(第四章)》...
  12. linux camera 存储,OpenCV调用摄像头录像并保存下来
  13. maven的下载与安装教程(超详细)
  14. Unity PlayerPrefs 游戏存档
  15. Qt之打印pdf文档
  16. c#录音和放音,超简单!不用DirectX
  17. Arduino基础入门篇19—点阵屏
  18. mysql 1032_MySQL 报错 Last_SQL_Errno: 1032
  19. L2正则化和collection,tf.GraphKeys
  20. html制作电影宣传效果,宣传片制作有什么技巧可提高效果

热门文章

  1. 山东哈斯精密机械有限公司
  2. Linux命令+shell脚本大全:操作文件系统
  3. 3D游戏编程与设计——游戏的本质章节作业与练习
  4. 小伙伴们-GO-带你揭开Linux的神秘面纱
  5. 关于yii2 treemanager插件中lft和rgt的说明
  6. 香蕉派,修改 uboot 和 kernel 串口波特率
  7. 校园版网络教学平台搭建方案(学生端)
  8. asynctaskdemo(Info)5
  9. 数据看板/商业智能分析仪表盘
  10. 详细讲解:RocketMQ的限时订单实战与RocketMQ的源码分析!