DOA

  声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),

steered-response power

  可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。
  上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。
  其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现

频域宽带波束形成

  频域宽带波束形成可以归类为DFT波束形成器,结构如下图

频域处理也可以看做是子带处理(subband),DFT和IDFT的系数分别对应子带处理中的分析综合滤波器组,关于这一种解释,可参考《传感器阵列波束优化设计与应用》第六章。

频域宽带延时累加波束形成的基本过程就是信号分帧加窗->DFT->各频点相位补偿->IDFT
代码实现如下

nction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%frequency-domain delay-sum beamformer using circular array
%
%      input :
%          x : input signal ,samples * channel
%          fs: sample rate
%          N : fft length,frequency bin number
%frameLength : frame length,usually same as N
%        inc : step increment
%          r : array element radius
%      angle : incident angle
%
%     output :
%         DS : delay-sum output
%         x1 : presteered signal,same size as x
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%c = 340;
Nele = size(x,2);
omega = zeros(frameLength,1);
H = ones(N/2+1,Nele);theta = 90*pi/180; %固定一个俯仰角
gamma = [30 90 150 210 270 330]*pi/180;%麦克风位置
tao = r*sin(theta)*cos(angle(1)-gamma)/c;     %方位角 0 < angle <360
yds = zeros(length(x(:,1)),1);
x1 = zeros(size(x));% frequency bin weights
% for k = 2:1:N/2+1
for k = 1:1:5000*N/fsomega(k) = 2*pi*(k-1)*fs/N;   % steering vectorH(k,:) = exp(-1j*omega(k)*tao);
endfor i = 1:inc:length(x(:,1))-frameLengthd = fft(bsxfun(@times, x(i:i+frameLength-1,:),hamming(frameLength)));x_fft=bsxfun(@times, d(1:N/2+1,:),H);% phase transformed%x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,:)));yf = sum(x_fft,2);Cf = [yf;conj(flipud(yf(2:N/2)))];% 恢复延时累加的信号yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));% 恢复各路对齐后的信号xf  = [x_fft;conj(flipud(x_fft(2:N/2,:)))];x1(i:i+frameLength-1,:) = x1(i:i+frameLength-1,:)+(ifft(xf));
end
DS = yds/Nele;  end

然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下

%% SRP Estimate of Direction of Arrival at Microphone Array
% Frequency-domain delay-and-sum test
%
%%% x = filter(Num,1,x0);
c = 340.0;% XMOS circular microphone array radius
d = 0.0420;
% more test audio file in ../../TestAudio/ folder
path = '../../TestAudio/XMOS/room_mic5-2/';
[s1,fs] = audioread([path,'音轨-2.wav']);
s2 = audioread([path,'音轨-3.wav']);
s3 = audioread([path,'音轨-4.wav']);
s4 = audioread([path,'音轨-5.wav']);
s5 = audioread([path,'音轨-6.wav']);
s6 = audioread([path,'音轨-7.wav']);
signal = [s1,s2,s3,s4,s5,s6];
M = size(signal,2);
%%
t = 0;% minimal searching grid
step = 1;P = zeros(1,length(0:step:360-step));
tic
h = waitbar(0,'Please wait...');
for i = 0:step:360-step% Delay-and-sum beamforming[ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);t = t+1;%beamformed output energyP(t) = DS'*DS;waitbar(i / length(step:360-step))
end
toc
close(h)
[m,index] = max(P);
figure,plot(0:step:360-step,P/max(P))
ang = (index)*step

程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下

结果与预期相同

PHAT加权

  与GCC-PHAT方法相同,这里也可以对幅度做归一化,只保留相位信息,使得到的峰值更明显,提高在噪声及混响环境下的性能
  上面代码中加上这一句
  

%x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,:)));

测试同样的文件,结果如下

对比可以看到,PHAT加权的方法性能更好

代码及测试文件在github

参考

1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》
2. 《传感器阵列波束优化设计与应用》

麦克风阵列声源定位 SRP-PHAT相关推荐

  1. 麦克风阵列声源定位 GCC-PHAT

    麦克风阵列声源定位 GCC-PHAT 麦克风阵列声源定位(一) 利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival (DOA) estimation),DOA估计的其中一 ...

  2. 音视频开发(40)---麦克风阵列声源定位 GCC-PHAT

    麦克风阵列声源定位 GCC-PHAT 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010592995/article/details/79735 ...

  3. matlab 声源定位csdn_麦克风阵列声源定位 GCC-PHAT(一)

    麦克风阵列声源定位(一) 0 a" N0 Q" t  t2 l$ t) F利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival (DOA) estima ...

  4. 【声源定位】 球面散乱数据插值方法/似然估计hybrid spherical interpolation/maximum likelihood (SI/ML) 麦克风阵列声源定位

    1.软件版本 MATLAB2021a 2.本算法理论知识点 球面散乱数据插值方法/似然估计SI/ML 麦克风阵列声源定位 3.算法具体理论 这个部分的程序如下所示: 这个部分理论如下所示: 本文最后的 ...

  5. 基于时延法的麦克风阵列声源定位分析

    文章目录 一. 关于麦克风阵列 二. 关于声源定位 三. 基于广义互相关(GCC)计算时延 四. 基于时延差的声源定位法 1. 近场模型 2. 远场模型 五. 三维空间阵列的声源定位系统实现 1. 推 ...

  6. 麦克风阵列声源定位四通道麦克风数据库及TDOA双曲交汇定位算法实验

    麦克风阵列声源定位四通道麦克风数据库建立 四通道麦克风数据库建立物理模型的建立,来源于文献:SLoClas: A DATABASE FOR JOINT SOUND LOCALIZATION AND C ...

  7. 麦克风阵列声源定位效果测试

    下列图片如果不清楚可以直接访问淘宝链接,从链接中的网盘资料进行拉取.从此链接看到的购买可以跟客服说,提我可以便宜50块钱~~~ 店铺链接:首页-智能语音开发者联盟-淘宝网 产品链接:https://i ...

  8. 麦克风阵列声源定位解决方案

    其高科技: http://www.keygotech.com/cn/solution/ssl/array/noise-source-location-based-on-mic-array 一般来说,基 ...

  9. matlab双麦克风阵列声源定位,双麦克风阵列拾音算法可实现空间滤波和360全向自动声源定位降噪...

    不仅如此,还发掘了它的隐藏技能: 送孩子去上辅导班,忙着做笔记往往就错过正在讲的知识点,自从让他带着这只录音笔去上课,回来温习的学习效果翻倍! 爸妈想要出国旅行又怕沟通障碍,自己常因为工作忙没法陪同. ...

最新文章

  1. python面向对象设计模式_python面向对象之设计模式
  2. MAT之NSL:CPK_NN神经网络实现预测哪个样本与哪个样本处在同一层,从而科学规避我国煤矿突水灾难
  3. 软件工程的瀑布, 大泥球, 教堂,集市,和银弹
  4. 计算机视觉:基于眼疾分类数据集iChallenge-PM图像分类经典模型剖析(LeNet,AlexNet,VGG,GoogLeNet,ResNet)
  5. kubernetes常用对象
  6. vue-cli 将被 create-vue 替代?初始化基于 vite 的 vue3 项目为何如此简单?
  7. 【转载】可复用的FS
  8. node:爬虫爬取网页图片
  9. php最难,那个PHP中号称最难的‘递归函数’
  10. MCPC 2011Hdu4207-4214(未完全)题解
  11. C语言winform中
  12. Java对图片Base64转码--HTML对Base64解码
  13. 三星530换固态硬盘_小米笔记本Air13.3加装固态硬盘(三星860EVO)
  14. 【计算机软件基础】如何理解鲁棒性Robust?
  15. 什么是信息安全,怎么保障信息安全?
  16. 各种范文都有,到时不用找了。(值得收藏)
  17. 《管理信息系统》考研复试整理
  18. 软件测试(6)----web自动化测试(selenium)
  19. 令我怀念不已,每每想起都热泪盈眶的大学生活
  20. (十)SSL协议(待修)

热门文章

  1. sequoia,一个非常通用的数据库集群解决方案
  2. Shiro安全框架(Shiro与SpringBoot整合开发)之图片验证码(五)
  3. JVM G1GC参数配置
  4. 字节面试官必问的Mysql锁机制
  5. 应用程序无法正常启动(0xc000007b)解决办法
  6. python安全之Pickle反序列化漏洞学习。
  7. 中心差商公式不同的h计算近似一(二)阶导数
  8. 威世 | 新款 LLC 谐振变压器/电感器,优化 PCB 空间布局
  9. 信号与系统(2)- 系统
  10. 最大似然估计(Maximum Likehood Estimation,MLE)和最大后验估计(Maximum A Posteriori estimation, MAP)