超清楚!麦克风阵列学习笔记(一)——线性麦克风阵列的时间延迟Beamforming算法(Time-Delay Beamforming of Microphone ULA Array)

使用matlab自带的工具箱和示例代码进行麦克风阵列的学习仿真,以提升对其工作原理的理解,对结果和代码进行详细分析,供大家共同学习。关于麦克风阵列的学习和Beamforming算法我会出一个专栏。请点赞支持一下,您的点赞是我更新的动力!


一、实验目的

使用全向元件的麦克风阵列进行宽带常规时延波束成形,用代码结合实例感受麦克风阵列的实际作用。

声速为c=340m/s;

声信号为正弦波

二、实验结果

生成五元线性阵列,间距为0.05m。

在远场时,认为入射声波为平面波,夹角分别设为0,45,用以观察麦克风阵列接收到的信号。

超清楚!麦克风阵列学习笔记(一)——线性麦克风阵列的时间延迟Beamforming算法(Time-Delay Beamforming of Microphone ULA Array)_第1张图片

可见,由于0度时,各麦克风没有声程差,所以入射声波信号是等相位的。

45度时,1号-5号麦克风之间存在声程差,因此存在相位差。

超清楚!麦克风阵列学习笔记(一)——线性麦克风阵列的时间延迟Beamforming算法(Time-Delay Beamforming of Microphone ULA Array)_第2张图片

重点来了!!!

此时如果直接对5路信号相加取算术平均,对于0度情况,没有太大影响,对于45度,由于相位延迟会出现信号相互抵消的情况,因此,如果不做信号延迟-求和的话,简直不可想象!!

超清楚!麦克风阵列学习笔记(一)——线性麦克风阵列的时间延迟Beamforming算法(Time-Delay Beamforming of Microphone ULA Array)_第3张图片

叠加噪声的影响后进行延迟求和,从结果可以看出,0度,45度差别不大,因为45时做了延迟求和。即对信号做了对齐相加,就不会出现相消的情况,关于对齐的方法后续再详细说。

超清楚!麦克风阵列学习笔记(一)——线性麦克风阵列的时间延迟Beamforming算法(Time-Delay Beamforming of Microphone ULA Array)_第4张图片

以上,我们举例对5元线阵的波束形成进行讲解,其他阵型也是一样的原理;

三、原代码解析

定义线性全向麦克风阵列,间隔0.07m,5个麦克风

定义信号收集器,我对这个理解就是给麦克风阵列赋予采集信号的实际的作用,如采样频率,传播速度等。

clc
clear
c = 340;

t=0:0.1:500;
sig = sin(t)';

microphone = phased.OmnidirectionalMicrophoneElement(...
    'FrequencyRange',[20 20e3]);
array = phased.ULA('Element',microphone,'NumElements',5,...
    'ElementSpacing',0.07);%0.01 10
collector = phased.WidebandCollector('Sensor',array,'SampleRate',5e4,...
    'PropagationSpeed',c,'ModulatedInput',false);

这段代码是设置波束形成器,用的matlab自带的波束形成器,也可以自己写哈!同时叠加了噪声的影响;

pian=0;
yang=0;
sigang = [pian;yang];%方位角;仰角
rsig = collector(sig,sigang);
rsig = rsig + 0.2*randn(size(rsig));

 
beamformer = phased.TimeDelayBeamformer('SensorArray',array,...
    'SampleRate',5e4,'PropagationSpeed',c,'Direction',sigang);
y = beamformer(rsig);

 这里就是结果显示了哈!

stop=300; %输出的时刻,注意次数是离散化后的时间点不是时间意义上
figure
tt=rsig(1:stop,1)+rsig(1:stop,2)+rsig(1:stop,3)+rsig(1:stop,4)+rsig(1:stop,5);
plot(t(1:stop),tt(1:stop)/5)
axis([0,t(stop),-1.2,1.2])

%-------------------------------------------
figure
subplot(2,1,1)
plot(t(1:stop),sig(1:stop))
axis([0,t(stop),-1.2,1.2])
title('原始信号')
xlabel('Seconds')

 

 

 

 

你可能感兴趣的:(Rain,matlab,算法)