麦克风阵列中的声学波束形成

25次浏览(过去30天)
阿里Movahed
阿里Movahed 2017年1月19日
大家好,我想用麦克风阵列和波束形成算法本地化信号源。为了做到这一点,设置权重因素对我来说很重要。这是我的代码:
定义我的麦克风阵列
h = phase . conformalarray ();
t = 1/2 * (1 + sqrt (5));
n = 16;
c = 1 (n, 1) ';
c (:) = 1:16;
h.ElementPosition =[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;(√(c).*cos(2*pi*t*c))*0.0375;(√(c).*sin(2*pi*t*c))*0.0375];
h.ElementNormal = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 ....
0 0 0 0 0 0 0 0 0 0];
h.Element =...
分阶段。OmnidirectionalMicrophoneElement (“BackBaffled”,真的,“FrequencyRange”(48 e3 580 e3));
定义我的信号
T = 0:0.001:0.3;%时间,采样频率为1kHz
S = 0(大小(t));
S = S (:);列向量中的信号
S (201:205) = S (201:205) + 1;定义脉冲
carrierFreq = 10e4;
波长= physconst(“光速”) / carrierFreq;
inputAngle = [45;0);
x = collectPlaneWave(h,s,inputAngle,carrierFreq);
定义MVDR波束形成器
Mvdrbeamformer =相控。MVDRBeamformer (“SensorArray”h,...
“方向”inputAngle,“OperatingFrequency”carrierFreq,...
“WeightsOutputPort”,真正的);
%的模式
plotResponse (h, 10 e4, physconst (“光速”),“格式”“行”...
“RespCut”“阿兹”“单位”“数据库”“NormalizeResponse”、假);
我想设置这些权重:[yCbf,w] = step(mvdrbeamformer,x);但我不知道如何把它们放在plotResponse函数。有人能帮我一下吗?
1评论
尼克Yiw
尼克Yiw 2019年3月18日
你好,我是一名学生,目前正在从事一个涉及控制输出的远距离语音识别的项目。我很想知道我可以使用的兼容MATLAB的麦克风阵列/芯片的最佳推荐是什么。谢谢你!

登录评论。

答案(3)

宏磊陈
宏磊陈 2017年1月19日
要得到重量,你可以这样做
[y,w] = step(mvdrbeamformer,x);
然后画出图案,就可以通过了 w 作为 “重量” plotResponse
plotResponse (h, 10 e4, physconst (“光速”),“格式”“行”...
“RespCut”“阿兹”“单位”“数据库”“NormalizeResponse”假的,“重量”, w);
HTH
2的评论
宏磊陈
宏磊陈 2017年1月26日
我更深入地看了看。信号实际上不全是0,但有一些信息在里面。然而,脉冲是相当短的,这就是为什么你看到很多零。但这并不是脚本无法提供更有意义信息的原因。我认为最关键的两个问题是
1.传播速度设置为光速。既然你说它是一个麦克风阵列,我猜它应该是在空气中的声速?所以我修改了下面两行
Pspeed = 343;
x = collectPlaneWave(h,s,inputAngle,carrierFreq,pspeed);
Mvdrbeamformer =相控。MVDRBeamformer (“SensorArray”h,...
“方向”inputAngle,“OperatingFrequency”carrierFreq,...
“WeightsOutputPort”,真的,“PropagationSpeed”pspeed)
2.的 collectPlaneWave 如果没有噪音,MVDR不能正常工作。这就是为什么你会看到奇异矩阵警告。你可以通过做来增加噪音
x = collectPlaneWave(h,s,inputAngle,carrierFreq,pspeed);
x = x + 0.01 /√(2)* (randn(大小(x)) + 1我* randn(大小(x)));
这可能不是你想要的噪音量,但这就是我的想法。
这将使脚本正常工作。但结果并不好,因为在100千赫时,波长约为3毫米。然而,元件之间的间距要大得多,这可能导致光栅瓣问题。
此外,如果可能的话,最好给MVDR算法提供一个只有噪声的信号,以估计更好的协方差。方法是打开训练信号输入,如下图所示。
xt = 0.01 /√(2)* (randn(大小(x)) + 1我* randn(大小(x)));
定义MVDR波束形成器
Mvdrbeamformer =相控。MVDRBeamformer (“SensorArray”h,...
“方向”inputAngle,“OperatingFrequency”carrierFreq,...
“WeightsOutputPort”,真的,“PropagationSpeed”pspeed,...
“TrainingInputPort”,真正的);
[y,w] = step(mvdrbeamformer,x,xt);
当我打开训练信号时,我确实看到了更好的结果。
HTH

登录评论。


泽Ertekin
泽Ertekin 2017年1月22日
你好,
我需要一个2d或3d声源定位代码与命令负载;有人能帮帮我吗?任何帮助都将不胜感激。

胡安·迭戈·阿奇拉·金特罗
你好,我需要一个代码在matlab中定位声源

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!