QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4545|回复: 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
    4 C( |# h; ?, P* Z! n9 G  声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),0 d0 g3 K# J& ?! W" K# c7 _
      E9 N' _9 s- H# q1 I
    steered-response power
    - Y+ F. v) w1 ^4 C. k  可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。 5 ?+ V" N. M. U9 _- @
      上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。
    8 U1 N, P! X8 I  其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现
    ) d) A( {" d: C8 q1 J& I
    ) _1 ]+ E) `: U9 j8 Q频域宽带波束形成
    8 A' r4 r) g/ P; y- g# k. I  频域宽带波束形成可以归类为DFT波束形成器,结构如下图
    * I9 |- g9 X  [$ b' g
    2 d' ]+ O+ ?+ Y2 L3 k2 Z: B! [" [0 [- R# e" v

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

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


    + D0 O: P8 ]& ^4 knction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle)
    , g! ?2 ]% v2 o- }0 m5 \%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : h. S* L* D. s%frequency-domain delay-sum beamformer using circular array
    : o9 M# C5 t; G, _. Q9 o! ]$ S7 R%   
    * ]1 N- ^2 q; ~% D4 o  P%      input :# N2 h. m2 `% `, ^
    %          x : input signal ,samples * channel" r4 c6 U1 ^1 g5 p, G2 B4 k
    %          fs: sample rate
    ) [( u2 W. T3 F' x: k% V& p%          N : fft length,frequency bin number
    3 ^( p+ ~" l% ~+ V7 V' U%frameLength : frame length,usually same as N
    ( a  s7 L/ X; x%        inc : step increment
    - [) d, |; I* t: D; t%          r : array element radius" m" K, S$ P) O% w3 G3 _
    %      angle : incident angle
    ; q  a( T2 h: s4 F% p%
    2 h& O, ~) c( u4 |%     output :
    / u! H2 r3 c% C- I  P%         DS : delay-sum output  \' Z: a5 O7 ^" g6 a
    %         x1 : presteered signal,same size as x+ q7 I: o' y& R6 K& I
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ v8 l, x2 p( m( L& y
    . y/ i) b) N: B( W  N, m( f
    c = 340;
    % z# |# V7 I# d: _7 M+ t  bNele = size(x,2);
    / l( p1 ^5 j/ _3 w0 B5 ?. ^omega = zeros(frameLength,1);
    ! ^5 Q& P4 [  ], W2 T) @' kH = ones(N/2+1,Nele);4 B: Z5 q/ q/ N- X9 v  {9 Y/ L# Z
    : Q' {5 g2 ]% T7 x, |& V; r  X
    theta = 90*pi/180; %固定一个俯仰角0 u3 G+ u7 h% W7 F4 W
    gamma = [30 90 150 210 270 330]*pi/180;%麦克风位置$ D7 o, g9 u0 h# ?7 t: E' R& A/ E1 t
    tao = r*sin(theta)*cos(angle(1)-gamma)/c;     %方位角 0 < angle <360& _+ i- I- b* L% G& i+ W
    yds = zeros(length(x(:,1)),1);
    ; O6 c1 X5 v4 _$ Ax1 = zeros(size(x));; p# j3 L2 R& D4 ^& `! o

    + R- m; g: k9 ?' a% frequency bin weights7 m9 h4 G" H; i& g; I7 R: _6 j. S
    % for k = 2:1:N/2+1; `5 H+ c2 A& o/ ]3 Q
    for k = 1:1:5000*N/fs
    . I6 ?7 ?) P8 S% b" A2 m' t" V    omega(k) = 2*pi*(k-1)*fs/N;   * K0 y& ?; u* q' n6 ?; N
        % steering vector5 ^9 p" k3 V$ w
        H(k, = exp(-1j*omega(k)*tao);
    5 @5 A; t  ?& s" @& i4 R" qend
    & g+ ^1 W) T6 m: M2 X1 P& F2 |  @" \, B- p0 j% N: y
    for i = 1:inc:length(x(:,1))-frameLength( D) p( @- N" f! O( }* k. b- |
    * D% J+ T! S, r9 g' N
        d = fft(bsxfun(@times, x(i:i+frameLength-1,,hamming(frameLength)));6 `: `0 C) {+ ^8 Z
    / d7 K: @9 q0 u6 G
        x_fft=bsxfun(@times, d(1:N/2+1,,H);
    ( W* X  p# z3 ^" O, o- U+ s+ |9 b3 j' b2 m
        % phase transformed
    ) j  w8 a  w7 p3 d) o    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));& g# F- Q! i- `, w, Z# r5 d( _& G
        yf = sum(x_fft,2);
    & n6 i3 z; h) T( T3 g& l0 L% b7 y2 [8 Z9 v    Cf = [yf;conj(flipud(yf(2:N/2)))];
    8 r4 c% r/ J  U% b% p; y) |& S' j- \' g( F7 J/ p
        % 恢复延时累加的信号3 j; G+ n6 F9 x" |0 m( ~1 F
        yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));
    : ?5 F( g3 e- Q( _! s1 f# S* P/ p, F/ Q! d
        % 恢复各路对齐后的信号
    $ c( Z* l. G+ L1 m' B    xf  = [x_fft;conj(flipud(x_fft(2:N/2,))];
    7 {5 ]5 j3 B7 P# G7 f- e    x1(i:i+frameLength-1, = x1(i:i+frameLength-1,+(ifft(xf));
    # g1 U; d! J" D( V' g$ Z2 s9 y. nend
    " F% Q6 _% y, i& T( jDS = yds/Nele;  7 Q2 m& b9 e: _; E$ t' x9 E

    $ D1 d4 C2 @9 U) A' Yend6 N. \, B1 s+ ?2 h# a* T" s1 p! p
    然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下' R2 i9 e! d' y+ B8 C4 M* L

    3 l! p' L2 E7 H% u+ v%% SRP Estimate of Direction of Arrival at Microphone Array+ _3 k$ K, \8 V* w, j) c
    % Frequency-domain delay-and-sum test
    7 V, r; `% q6 n3 d. z%  
    ( j! I2 i" B7 k" W%%9 f$ a/ Z* _" I: X0 \9 }' C
    9 m0 A0 t8 T# k# Z; H5 i+ A" o
    % x = filter(Num,1,x0);
    ! @6 S& i. h: h. t/ ]+ }c = 340.0;
    6 `0 p) T; k- A7 R/ V% n5 y6 H: E2 O9 x5 u' }4 v1 E( S
    % XMOS circular microphone array radius) i: ^. S  Y+ P* S5 K
    d = 0.0420;
    0 G5 S! ~, F& w8 ?9 O% more test audio file in ../../TestAudio/ folder
    7 }% {: n5 u  i4 b% ?# npath = '../../TestAudio/XMOS/room_mic5-2/';
    ' C6 W2 O  n$ \+ j- x* t! G3 w1 W[s1,fs] = audioread([path,'音轨-2.wav']);) V" N7 u0 F9 g' g) v$ y2 X& R$ \0 g- d
    s2 = audioread([path,'音轨-3.wav']);! z) n. P' b+ T) Y* X+ d
    s3 = audioread([path,'音轨-4.wav']);+ n/ a) G0 `3 `# H4 f7 [( V
    s4 = audioread([path,'音轨-5.wav']);
    $ f. `9 ?" E; [$ R! \* B9 hs5 = audioread([path,'音轨-6.wav']);  j( r* e/ e7 O# h. T" B
    s6 = audioread([path,'音轨-7.wav']);. w! s2 G* H0 d% S/ D
    signal = [s1,s2,s3,s4,s5,s6];
    9 I# u* l: z" c- O3 H3 ^  j2 XM = size(signal,2);
    6 n9 d) j) H# [; g4 M& Z%%
    , i4 a: D3 l) \9 o9 C# A7 Vt = 0;
      F# y1 |  ^  {' d
    , g3 H0 }0 L) n$ `' R/ d2 o1 e  Q  x5 K% minimal searching grid
    * k, ^; U- W4 l2 l7 r4 bstep = 1;( e/ r: F1 G- \/ u. W* ]; z, C

    9 a- T0 q  ^9 @# hP = zeros(1,length(0:step:360-step));
    9 E- P9 B. ^; P" k# s( X0 G6 _9 P1 etic8 n. h# k4 \$ G" X& g' r6 u
    h = waitbar(0,'Please wait...');
    7 I( ]7 `& ^1 Z- w  Kfor i = 0:step:360-step% n% b' |9 f1 [
        % Delay-and-sum beamforming
    " k6 f. B, M  f0 `. A    [ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);
    ( r# g1 Q0 `, o; U1 q    t = t+1;. C' v9 f; E! Z4 z- e" M
        %beamformed output energy! _6 l0 d7 Q  X* V4 m/ `$ F$ q; t9 c
        P(t) = DS'*DS;
    6 A+ p( c+ h2 R1 T5 f& H2 y7 o    waitbar(i / length(step:360-step))
    ' }. y  d2 r6 d' Wend
    / m! n+ @5 i3 K/ Z. M+ v; A0 jtoc' J/ E$ K% I0 Y* I
    close(h) 4 J$ N) I6 j, P" k1 V3 Y
    [m,index] = max(P);' i* Z! |. y4 Z9 D( h: b
    figure,plot(0:step:360-step,P/max(P))
    4 {  c! g9 M8 Mang = (index)*step- ^6 \- `( \" \$ P
    9 u# c& c, o' U6 _  d: X
    程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下
    : m% y  H+ E8 [. _0 t( ~* b! ]; u( x. I" D- I. \

    结果与预期相同

    PHAT加权

      与GCC-PHAT方法相同,这里也可以对幅度做归一化,只保留相位信息,使得到的峰值更明显,提高在噪声及混响环境下的性能 " G' u& x  B( [: W; e. L
      上面代码中加上这一句

    3 G) i  v; W! U+ o6 U
    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));6 T* Z# W( S9 ^% e$ I% k3 L
    测试同样的文件,结果如下 7 g9 X) K/ g* _; A

    ; F3 H/ J, t8 ^9 O9 E对比可以看到,PHAT加权的方法性能更好
    6 z6 H* h* T6 j# \' r参考
    $ p5 g  _. T$ \0 _" j1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》 ) |1 F3 D" b2 p' `$ g  t& c
    2. 《传感器阵列波束优化设计与应用》
    / d( @1 `# k* m& @8 |————————————————
    " L5 E( x% y" C版权声明:本文为CSDN博主「373955482」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) x- u1 P7 K4 k$ H( m* A- q" v9 E
    原文链接:https://blog.csdn.net/u010592995/article/details/81586504
    4 G1 M5 u$ y5 X: z' y  t" @) t' S( E! M* ]2 J

    / d. Z3 H# L5 G' W  r8 Y5 |5 K4 w9 F+ B& ^
    8 X: Q8 {, L  b0 I$ }1 v
    ' z+ w- \8 H$ |, Z2 Y2 g4 Z$ T7 _
    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-6-16 01:36 , Processed in 0.418316 second(s), 51 queries .

    回顶部