QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4609|回复: 0
打印 上一主题 下一主题

麦克风阵列声源定位 SRP-PHAT(二)

[复制链接]
字体大小: 正常 放大
浅夏110 实名认证       

542

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2020-11-14 17:15
  • 签到天数: 74 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组2019美赛冲刺课程

    群组站长地区赛培训

    群组2019考研数学 桃子老师

    群组2018教师培训(呼伦贝

    群组2019考研数学 站长系列

    跳转到指定楼层
    1#
    发表于 2020-5-15 15:04 |只看该作者 |正序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    DOA
    - T* E9 U! X4 e2 f# y8 X  声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),
    1 l, w1 d0 s  r; ~0 t
    3 D0 {( {1 v+ V1 H$ @; fsteered-response power
    ' d( Q2 |. c) }% l  可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。 7 B8 P1 `1 E/ a# O# ~" D
      上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。
    # x: \$ V6 u$ V9 {  其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现
    : u% e6 z# Q( q
      B% [7 k8 R! z% a7 A& O6 W* K( c频域宽带波束形成
    & X* |- d5 L: p. b5 m, ]  频域宽带波束形成可以归类为DFT波束形成器,结构如下图   f% m+ r  r1 K+ m2 P6 @5 n
    ) g/ Z) Q6 F, G) p/ P: m

    9 |3 ]3 J8 V1 R& K6 _, C' \

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

    频域宽带延时累加波束形成的基本过程就是信号分帧加窗->DFT->各频点相位补偿->IDFT
    1 i$ d6 y6 ~. G3 t, I. l7 r代码实现如下

    7 a9 K  v3 z0 b* _0 _
    nction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle)0 l# E& O. m9 J' V
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 l7 t! t" ]2 |# T
    %frequency-domain delay-sum beamformer using circular array/ J4 R$ B5 Z( [8 |! d' F, Y2 \
    %   
    " o5 m- H) q! t9 g6 c, r%      input :
    : [! f0 G9 i' B% u9 m8 i%          x : input signal ,samples * channel
    9 t9 ^- V3 |, g% {9 u2 B3 n2 K# O% E%          fs: sample rate
    8 o( r( ~) A! @+ H4 L%          N : fft length,frequency bin number7 e# r. m& V. M
    %frameLength : frame length,usually same as N
    0 @6 C6 v3 T' t2 {%        inc : step increment
    6 F" Q' Y5 q% B  M%          r : array element radius6 d( q" M  S+ E" Z# p8 I4 W
    %      angle : incident angle* W" f6 ]. t3 Z
    %
    " T  t  K! C. B- L- o* c%     output :
    5 @; }5 Q8 @+ @# E' e& v& J%         DS : delay-sum output
    4 c+ X' l5 @$ ]8 G0 {%         x1 : presteered signal,same size as x+ X- G# J4 c, A
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 I6 h9 h6 v' ~
    6 G6 X9 i1 v( a
    c = 340;
    8 a- e6 Q) V% [! _- p* e; KNele = size(x,2);
    / `, ]8 Z! s4 e' i& bomega = zeros(frameLength,1);
    , s! `, @/ q# V+ Y/ ZH = ones(N/2+1,Nele);3 _5 E- v6 |- Q1 F5 j
    9 l2 {" R" O8 F, F* D9 T% j
    theta = 90*pi/180; %固定一个俯仰角
    & b; r/ f. d+ K# w/ D. ^% Pgamma = [30 90 150 210 270 330]*pi/180;%麦克风位置. {! K+ D- ^$ G# p1 h' [
    tao = r*sin(theta)*cos(angle(1)-gamma)/c;     %方位角 0 < angle <360
    ' o4 o+ T8 [! A/ Uyds = zeros(length(x(:,1)),1);- r5 b( q2 {8 Y5 k3 o! `/ B
    x1 = zeros(size(x));
      U. J. C# i& C5 E4 Y$ f. U6 e6 P
    $ ?& e- I3 G- a% frequency bin weights9 a, e) U% L) S. m, F4 X' U# ]
    % for k = 2:1:N/2+1; J* ]% M* W; T0 I( h
    for k = 1:1:5000*N/fs7 K( G2 a  X& ~( T% \5 b
        omega(k) = 2*pi*(k-1)*fs/N;   0 o; x3 C4 O$ L; o" e+ x$ ^: d
        % steering vector
    $ }5 F' r1 o4 @6 [    H(k, = exp(-1j*omega(k)*tao);
    * B6 L0 R6 I* Y/ Gend
    : a+ ^! L$ U7 ~- ?5 M& z2 }; ?# \$ l+ s
    for i = 1:inc:length(x(:,1))-frameLength" @6 ?1 k2 T: ]% G: n: U
    4 g* T/ C6 V0 T9 {3 ?
        d = fft(bsxfun(@times, x(i:i+frameLength-1,,hamming(frameLength)));
    . n3 H% r9 ]  j* x$ Z1 s  j- x; G* X0 ^+ V- J% Z( D
        x_fft=bsxfun(@times, d(1:N/2+1,,H);
    ) e* U9 ]( ^4 t
    ) U- Y' t* W; U    % phase transformed0 i* N" u! Y" L! J
        %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));! W) H/ c; z% P2 D& @; f9 d( F
        yf = sum(x_fft,2);
    $ X/ w0 S0 [* T1 u' ^4 q0 R    Cf = [yf;conj(flipud(yf(2:N/2)))];9 Y1 n9 m6 C) q  X* y; U

    2 G* _% x  t1 j' }) y. q* G: P9 _    % 恢复延时累加的信号: _+ t- C1 C2 j% M& Q2 I7 m
        yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));
    2 C5 u! e  z8 h0 Q' }
    1 j+ _/ b; f+ v  ?4 C/ S, c# t/ M7 w    % 恢复各路对齐后的信号$ m3 k# V# N3 a  y7 k' n
        xf  = [x_fft;conj(flipud(x_fft(2:N/2,))];
    2 a+ m7 W' O( P$ P6 t3 H7 m    x1(i:i+frameLength-1, = x1(i:i+frameLength-1,+(ifft(xf));% _& n) d. ~. H( @) A
    end- B+ g- x' ~: o6 z7 C- d
    DS = yds/Nele;  
    1 o! ?8 I! }& l/ s) B6 M  y" r
    6 D( @3 n- D4 k8 L, ^$ b  pend
    ; [0 X4 @% C% v9 a4 T+ Q  o然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下
    $ E5 o% u, y/ @' D+ s
    6 }! }  |& g6 K  ~3 |( r%% SRP Estimate of Direction of Arrival at Microphone Array
    ) D8 T9 \' l8 X( \! p% `4 c$ R, i% Frequency-domain delay-and-sum test
    & T$ o: W+ Y; P6 J6 G9 |  Q%  : l" [' U1 R3 t6 |
    %%! x8 V- v. \4 S5 W6 p, U

    : B1 C# ]1 n. w( @- [' k% x = filter(Num,1,x0);
    2 O( ~9 x& l( Q6 Ac = 340.0;
    # m9 n4 W/ E% M. f
    ' q+ ^2 L! v6 d- A+ g4 z9 ^+ A' n$ z% XMOS circular microphone array radius/ _, J3 N- D( `. a5 k& ?
    d = 0.0420;/ P& E! ?' q, r& g
    % more test audio file in ../../TestAudio/ folder
    ; y' j; P3 s5 opath = '../../TestAudio/XMOS/room_mic5-2/';! _1 Q( u# }7 E( |! p/ f
    [s1,fs] = audioread([path,'音轨-2.wav']);. I, E% I! K) K, V1 K/ I
    s2 = audioread([path,'音轨-3.wav']);: U$ t4 i: h# Q: O
    s3 = audioread([path,'音轨-4.wav']);
      f5 a* J5 z& W8 y5 h9 {s4 = audioread([path,'音轨-5.wav']);
    # ^! n7 q! V* L2 P" w- `: ks5 = audioread([path,'音轨-6.wav']);0 n5 Z2 j, l4 ]4 @0 m/ M2 k/ m
    s6 = audioread([path,'音轨-7.wav']);
    7 ?/ x$ Y6 W- U5 F- }signal = [s1,s2,s3,s4,s5,s6];
    & F: U* N6 J- |* p2 \! E! QM = size(signal,2);8 @5 ]' d' k: M. M0 @  g3 t
    %%; f; [; E) N( _
    t = 0;
    0 [7 q6 f( L% p+ M: ?
    & v& X1 g+ X6 ?, R! I1 {0 T" J" X% minimal searching grid3 m! i0 _' \7 i7 Q  ~0 p" V9 o
    step = 1;
    / n: f4 ^3 X3 {. l4 i
    3 N0 u7 o7 V, z& B& e. YP = zeros(1,length(0:step:360-step));
    ! M% u. C8 H8 e% V. t) g! Y. d' ftic# C$ }  N3 [' ~- P
    h = waitbar(0,'Please wait...');9 i! Y  R% S: |# R0 M
    for i = 0:step:360-step
    ! X! R+ e: a$ P% K) K3 u0 ^. |    % Delay-and-sum beamforming% i9 `; b* Q9 z/ k# [
        [ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);$ B* y) r1 n! B# U
        t = t+1;. I* s4 b; T/ v* ^3 ^
        %beamformed output energy
    4 L  Z+ }7 O5 N) \( ?* ?" W# \# v    P(t) = DS'*DS;/ x/ m2 G% s# N/ `+ N4 \$ R
        waitbar(i / length(step:360-step))* v3 Y( }* s9 r" m+ t: w( d
    end
    ! D) u4 l. e0 a' r- \. Q# jtoc+ B- \& D( @' y9 x4 r
    close(h)
    7 N1 ?: m1 z: b3 a[m,index] = max(P);
    ! S& P/ D( f1 ?) {" sfigure,plot(0:step:360-step,P/max(P))3 F, j: N* A" F( r" `5 B; ]# E
    ang = (index)*step' s# K; S& C6 {! r% O+ r, S

    0 Y$ U/ x' b6 y% s' `! a程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下8 d( A& N% K" ^  N- L6 M* f2 h

    / B" S5 j( V6 @9 x% f

    结果与预期相同

    PHAT加权

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

    & k7 O8 h/ R8 P# h! t; x2 u% w
    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));6 U1 q* x) O& f6 _, N8 D' s( B: b9 K
    测试同样的文件,结果如下 9 u# h, n. [3 J1 S
    ) c3 ~' W$ j5 `$ }" |, \. H1 }
    对比可以看到,PHAT加权的方法性能更好
    7 J$ h# Q6 n0 A* V5 L3 x( a( h, B参考
    , w6 c# {2 e: K, W# a) b- \  i" g1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》
    ( q7 F% j( G) a- @# ~2. 《传感器阵列波束优化设计与应用》) q1 b  j! W% {8 _1 Y$ |
    ————————————————
    5 u( `$ Q, W7 s5 ?' i版权声明:本文为CSDN博主「373955482」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# N, \. k( L" J: D. [3 k! B
    原文链接:https://blog.csdn.net/u010592995/article/details/81586504& n6 n7 ]+ a8 {' W, `7 |  G( T
    3 u* X/ s5 P# A. g4 k9 q" M' m
    7 I3 |; Q/ W3 w
      ]' D# p, T  i. ]! K: @; A
    6 R7 r7 p" t1 j- T
    ! z* I3 k& ~) B9 K! w" p' s
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-8 21:47 , Processed in 0.444281 second(s), 52 queries .

    回顶部