QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3267|回复: 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 |邮箱已经成功绑定
    DOA3 M/ f+ m" L2 ^/ U
      声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),8 s" k8 Z) X! J) E( p% A- ]7 o

    0 H; C# O! e( T  b) Gsteered-response power# \& V- T6 L/ S) T& z6 b. c* C
      可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。 * ]! p  ^+ W* T9 }0 }0 e" W- }
      上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。
    5 z! M0 M) y8 F7 Q) _  其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现4 Q! T$ b! b5 R$ [# Y

    0 V) t- Y! U9 f# Q1 u频域宽带波束形成
      y1 R) P4 L7 @, {% F5 }  频域宽带波束形成可以归类为DFT波束形成器,结构如下图 4 s7 a/ x2 K9 i2 k6 @

    7 {2 R, ]: D) }$ u8 o1 y7 ], l* K  i% R4 P$ @  z6 H, X, l( a9 l

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

    频域宽带延时累加波束形成的基本过程就是信号分帧加窗->DFT->各频点相位补偿->IDFT 5 T$ B4 b8 q# @: E- Q; a6 j$ [. D, N
    代码实现如下


    & r" G. H7 C3 S9 r' z$ f+ o* h  wnction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle): x- N3 I) F' V/ p  u
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%: c! A8 F- C! K! p2 q7 O
    %frequency-domain delay-sum beamformer using circular array7 X. y( c) n% s( i$ v
    %   & z8 t. C% E5 D7 Y, W0 W
    %      input :
    ) @3 n2 z* [+ N. ]" N%          x : input signal ,samples * channel
    4 U" e1 F; Y2 [  I2 M& q' _%          fs: sample rate5 _! a- i8 r0 t: C: [1 O- d9 i
    %          N : fft length,frequency bin number/ U. h2 ]  k4 V4 o/ {* e
    %frameLength : frame length,usually same as N
    ( ^- ]- A. v( }* `" ^3 U3 Q$ S2 @%        inc : step increment, \( e# C1 j3 Q* c2 |
    %          r : array element radius- H1 U7 Q; q& s& G% E; W
    %      angle : incident angle
    * n6 |' T0 Q9 }! ~%
    ) ]. f# u) l& t%     output :8 k- Y8 I4 ]3 f5 V# l; S
    %         DS : delay-sum output
    " ~* i+ ~" b9 B: l. }/ [%         x1 : presteered signal,same size as x( A( K! E, b6 @  i
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 H3 r" [# N3 V; X0 S
    9 v0 O9 B) t2 W" A8 j
    c = 340;
    0 U7 y! n4 p. k# j, H8 ^: @Nele = size(x,2);
    % }* ]- Q! j+ I/ ]; b+ p7 ]8 tomega = zeros(frameLength,1);0 C; v- A1 `6 t& w* Y3 V6 U
    H = ones(N/2+1,Nele);3 S" j; A2 [+ c

    % @9 W) B' z% r, j9 A% \theta = 90*pi/180; %固定一个俯仰角# [/ B6 F; ]- ?) n2 _) n
    gamma = [30 90 150 210 270 330]*pi/180;%麦克风位置
    & u& x9 }5 o, A) U; Q! Z* xtao = r*sin(theta)*cos(angle(1)-gamma)/c;     %方位角 0 < angle <360" o. b* B# Z7 L* x7 \/ w2 d! \
    yds = zeros(length(x(:,1)),1);3 T: i4 N" A. L6 Q3 T- k
    x1 = zeros(size(x));! d! A2 K& E; s* Y/ k* x
    1 x- s8 t) X6 s
    % frequency bin weights
      \8 M; d- H$ ^! K$ @$ V8 q" a% for k = 2:1:N/2+1
    & n, e$ c2 _0 F$ S+ _* yfor k = 1:1:5000*N/fs
    / o9 R6 `, \0 v, q" B9 E6 d; l    omega(k) = 2*pi*(k-1)*fs/N;   
    ; C% M/ D2 c2 F    % steering vector0 y7 r- h! b% D4 t. U
        H(k, = exp(-1j*omega(k)*tao);# C" r' C/ w% {1 T3 B! B' d
    end
    . o6 A) V  `: y* n  ^9 ^* s9 C! Y9 W; W
    for i = 1:inc:length(x(:,1))-frameLength4 R2 S+ O1 Z5 W5 z
    ! |. c0 h5 C; @; z
        d = fft(bsxfun(@times, x(i:i+frameLength-1,,hamming(frameLength)));
    ' M, d5 c$ z  Y  B6 U8 s2 ]1 F$ J8 L/ G
        x_fft=bsxfun(@times, d(1:N/2+1,,H);
      t& I' W' |2 H/ q% n( T4 ~0 S, ]' W4 H6 Z
        % phase transformed
    ! |5 D/ u( j& l( [! O9 R* G    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));
    " p0 n  e2 r* }9 I4 g    yf = sum(x_fft,2);% z4 e2 C; a/ o1 A! N
        Cf = [yf;conj(flipud(yf(2:N/2)))];# j) P& |( c1 ]. ]* a9 p$ J: Z
    7 G" d0 H. s6 H
        % 恢复延时累加的信号
    1 Q/ h6 O- X- A+ l  }    yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));, I+ E* e/ e9 @. O- g/ ]

    : @$ T& D# V5 y  H/ }$ e    % 恢复各路对齐后的信号( }' h" z  d# R9 z
        xf  = [x_fft;conj(flipud(x_fft(2:N/2,))];4 z; q( L$ ]! H1 N0 [0 K
        x1(i:i+frameLength-1, = x1(i:i+frameLength-1,+(ifft(xf));
    4 T, ], H& X/ o; F# g  Bend# {3 D/ r( J" v: S- {% e8 E
    DS = yds/Nele;  5 e$ A0 X5 P6 B2 i& c% o
    / T2 U! R3 `/ V2 l6 M8 a/ n$ G1 S
    end+ T8 S6 C9 d* K, H) y# i
    然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下% w/ ?3 U' p0 a0 o. W" u- R

    2 J2 J* f# W! J8 s% F3 h  c%% SRP Estimate of Direction of Arrival at Microphone Array+ ?9 {8 E& z$ c  B
    % Frequency-domain delay-and-sum test
    2 W8 ]/ D. t* @%  + @( z, C% A6 J  J$ y" }* r
    %%
    ) {* |% ~7 R: m/ P& a: P! P6 f8 W) ^  u3 U
    % x = filter(Num,1,x0);, U- e' n" P& k$ N* v/ s
    c = 340.0;/ b  i1 E/ k4 Z- q' ^% o

    * V+ d( D, x4 r, B% XMOS circular microphone array radius7 M: M$ Q( j8 R; W; H
    d = 0.0420;7 l; Z' ?1 R/ x' @# X
    % more test audio file in ../../TestAudio/ folder! _: u- k+ \: N1 a6 F1 c
    path = '../../TestAudio/XMOS/room_mic5-2/';0 o. I/ Z' J/ e2 J$ l" m
    [s1,fs] = audioread([path,'音轨-2.wav']);0 X: T8 S; }9 {% n" o4 B4 `) d
    s2 = audioread([path,'音轨-3.wav']);
    - a) N2 X2 f9 b6 H! S6 R% m6 y# q+ ]s3 = audioread([path,'音轨-4.wav']);( ]1 U) q" U; M! Q9 s+ N
    s4 = audioread([path,'音轨-5.wav']);% ?4 E) [8 I, e$ y# i6 {
    s5 = audioread([path,'音轨-6.wav']);
    9 x. `' i: r# is6 = audioread([path,'音轨-7.wav']);# x, {) o# u$ G) b- X& v% \
    signal = [s1,s2,s3,s4,s5,s6];1 h# }; |. f- g. ]  V( f! e
    M = size(signal,2);9 v) g5 S1 v8 {, H$ F; M; b
    %%
    1 h9 R1 H5 C) P# u/ |. Ht = 0;
    / p3 @/ ?2 M- D4 s5 I& R) ~% V: Q0 Q! E) V
    % minimal searching grid
      ]8 ?+ M5 E# n  A# s; A$ i' ~step = 1;
      ~. g+ J" Z# B0 o! U0 `7 T
    9 K8 x) E9 z8 ~9 |% |P = zeros(1,length(0:step:360-step));
    8 u6 F7 Y5 H. r9 [+ d: k' R0 |tic
    2 Z/ _- }8 g* d$ v% o, N9 Fh = waitbar(0,'Please wait...');0 T( m' g- Y9 }, q  K
    for i = 0:step:360-step# X) b, `  |! `9 S1 {) \) o
        % Delay-and-sum beamforming
    8 k4 I6 U& y5 Z    [ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);( A) W& {3 X" \; d* P. k) d5 f  k
        t = t+1;1 E4 \; a: |  D" E" b8 m
        %beamformed output energy
    & n/ w) f4 E- b! c; C    P(t) = DS'*DS;: ?# O+ r- e. S4 S" Z; L% ]8 ~" h. t
        waitbar(i / length(step:360-step))
    5 u# m7 |3 q9 e' eend1 M! H; ]3 A8 }) |$ r2 H
    toc
    8 M' H2 o) a# v* E' A3 Bclose(h)
    2 s$ i$ _# ^  V! k( t[m,index] = max(P);
    & O. Q$ _+ B. Efigure,plot(0:step:360-step,P/max(P))2 v. T3 m% _( z
    ang = (index)*step5 p9 u& d. l6 a: l5 t3 Y
    * W+ C3 Y- L- ?7 c! u8 ^! W2 j$ D
    程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下2 d9 g( R) Q; u# z+ q

    + B- }- Y8 _) i0 {# g

    结果与预期相同

    PHAT加权

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


    ; x4 F$ q, {, t1 j: c0 q( J%x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));
    # N& e) s& M" r0 D0 x测试同样的文件,结果如下
    8 S6 w; K7 M, I/ t9 \- X7 R( a/ _! ^5 z) Y+ \2 d1 y! m" l$ g
    对比可以看到,PHAT加权的方法性能更好
    7 J+ T7 p/ J. K) G参考2 s) Z0 V8 K! H* c6 B# D
    1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》 ( b& T, x2 A+ M$ g
    2. 《传感器阵列波束优化设计与应用》
    # R( q  A& J5 X% |3 K, H————————————————9 f* g- b  z9 d& n# C# F* y5 z
    版权声明:本文为CSDN博主「373955482」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 m, Z; p" E: o, Q/ |1 B7 a原文链接:https://blog.csdn.net/u010592995/article/details/81586504
    , j' Y, r& [+ F: O( b+ C& b) m
    + ~. T0 w  T" V& ?9 E0 g4 q4 z- x! u& Z! p! b

    ! `  }2 ]1 ~- i! E0 }4 c4 ^! s7 E* ]: X
    1 e  z3 M0 _& m0 ]9 M% 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, 2024-4-25 14:26 , Processed in 0.598960 second(s), 50 queries .

    回顶部