QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4159|回复: 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; D1 m; ?" i& Z  _( ~0 F
      声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),1 l5 K! C% G0 l& _/ x, n% Z9 V
    ! \- H5 }0 E6 L4 U1 m( n
    steered-response power
    " ?6 K9 V/ z; `* B  P  可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。
    & B# ]' S2 b8 k. R, z  上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。
    ) [* S) `! `$ }9 n" F2 P0 k  其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现
    ! y1 E# _# X8 p) }& _# {
    . y3 v- G8 h0 d- ]频域宽带波束形成
    % t+ d1 g! ?3 g/ C  频域宽带波束形成可以归类为DFT波束形成器,结构如下图
    & e% h& k" H1 X- c. T& L9 d
    % G% y% X, s1 V: s/ d0 ~
    ' P+ R* ~: W8 U2 @; p9 h& U/ W

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

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


    2 }3 ^! C# a  E  F; _nction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle)
    3 z- d$ ^' C, Z2 ~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % p/ i& r5 Y' ~. \$ N9 y' j. g%frequency-domain delay-sum beamformer using circular array
    3 \7 g7 d! ~# M/ k5 t" q" ?%   ' J8 q3 r9 n; q- y6 j
    %      input :1 G$ S/ Z0 A/ p2 i
    %          x : input signal ,samples * channel
    / Z& F2 s$ }# N/ v; f1 u3 O%          fs: sample rate# _" a' o9 _7 M8 g9 J
    %          N : fft length,frequency bin number9 @7 p- z8 h% V! F
    %frameLength : frame length,usually same as N
    5 B4 Z. K) L1 d- {; m* p3 U%        inc : step increment
    3 ]0 X! B7 G( W# ]9 ]%          r : array element radius, g$ ^  S) t. Z1 v3 L8 u9 ~
    %      angle : incident angle
    3 h5 E6 r# g0 n  q%( D5 D1 A( I9 t  K4 o
    %     output :) H$ ~3 @( ~2 G# l. p2 V* ~
    %         DS : delay-sum output
    9 O# }/ C( j8 q3 `! L; Y5 h, l%         x1 : presteered signal,same size as x
      D: L) v2 @: @$ h# f%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" g$ Q8 x$ j  s0 u! ]

    4 j' L( _) B$ J. b9 K. h3 Z1 N1 jc = 340;
    - ]! ^* l- X2 P1 w! t8 b/ BNele = size(x,2);
    8 W; r2 f/ t: r2 x+ H9 `omega = zeros(frameLength,1);" j5 Z1 [. |7 f8 x% O7 o
    H = ones(N/2+1,Nele);
    / l& p6 C0 O, I0 D8 }3 b" C, S- z6 S. \1 C# S9 ~
    theta = 90*pi/180; %固定一个俯仰角# [! h7 G1 ]# e2 n: g6 u  p2 G4 a
    gamma = [30 90 150 210 270 330]*pi/180;%麦克风位置- ^: ]$ |) X* Y& B, l& }" [/ D
    tao = r*sin(theta)*cos(angle(1)-gamma)/c;     %方位角 0 < angle <360
    ; b5 G  K5 C/ K! O' y1 I. I2 s2 Dyds = zeros(length(x(:,1)),1);
    . e5 \) w8 D9 W( nx1 = zeros(size(x));
    ; D. h& J; s( ]+ w
    ( Q/ f' m! a" I1 I# T) O: b' ]% frequency bin weights, P7 C8 G; g+ B. z0 W
    % for k = 2:1:N/2+1  z4 i$ j5 t5 P* p/ C
    for k = 1:1:5000*N/fs
    ) o& m8 D+ H* ]- k8 P    omega(k) = 2*pi*(k-1)*fs/N;   
    & ?! G) i+ i7 f    % steering vector
    ; N; ?# \5 h7 }7 a0 u9 ^0 d    H(k, = exp(-1j*omega(k)*tao);
    8 ^( n$ x! N* U. D2 r, [" vend
    5 {7 G% B& [9 h5 @$ ^) L4 Y; f" E7 W8 `) u. L& q* s
    for i = 1:inc:length(x(:,1))-frameLength
    ( R' S& t/ q* U& K$ [
    5 w/ }* @7 O; a9 M* L/ s3 ?    d = fft(bsxfun(@times, x(i:i+frameLength-1,,hamming(frameLength)));
    6 l( _) N5 w; Y3 b; T! l5 W4 ]$ A2 ?& u* ]+ M* g
        x_fft=bsxfun(@times, d(1:N/2+1,,H);
    & H5 z0 M& Q" W& r% O" P4 M+ R6 j4 a3 z& r, q3 |! H
        % phase transformed
    4 n7 [5 w  r8 O$ `) S0 i% [  K    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));& o* @5 u+ p, o  i5 h: {4 C8 @7 o
        yf = sum(x_fft,2);
    % W% t# O2 e  c2 E; l/ B- y    Cf = [yf;conj(flipud(yf(2:N/2)))];$ a' J* F0 r! ]0 G4 f- ?# U# N
    ' _* I, q  X5 I. e' Z- h, n2 d
        % 恢复延时累加的信号3 }% |- |0 [. ]! c% T
        yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));7 z( q) F% t/ B4 _7 \. C" ]$ a

    3 }& h' f4 Y7 z" w* u    % 恢复各路对齐后的信号, E2 Q9 j7 l! {0 c' F
        xf  = [x_fft;conj(flipud(x_fft(2:N/2,))];
    6 z  E% F& }6 v) t    x1(i:i+frameLength-1, = x1(i:i+frameLength-1,+(ifft(xf));
    ( G1 S' `1 w/ w" j- o& xend) X8 n( \1 l0 E$ l9 {
    DS = yds/Nele;  / Z$ }4 I! X( P2 Q) U  [& x/ L, H6 Z

    + c  ^  p0 f7 N: send
    & S: K5 R7 O5 K* Q' i' q9 R* b然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下
    8 ~: }' r+ L' [+ M& g0 q  T0 ^$ G3 u, U5 p% J! ^$ s8 G
    %% SRP Estimate of Direction of Arrival at Microphone Array
    ; ?+ r! \# G' U5 V# x* v6 _5 Z% Frequency-domain delay-and-sum test" ^8 e, r- C+ W1 Q# G
    %  
    ; U& J2 k: |# g8 w. C1 c%%* p& B. W, M8 h/ d" Z& A- r$ d
      X% O1 K! X5 \8 E- g
    % x = filter(Num,1,x0);7 G# H+ [" R( B
    c = 340.0;
    % t0 ]0 x* H" f8 x3 Q/ x6 U. f' b  T  U4 h3 g: B
    % XMOS circular microphone array radius4 A% ]! t7 _8 e4 {
    d = 0.0420;/ W( G8 n) x5 B# o- i
    % more test audio file in ../../TestAudio/ folder% h% c" {6 N! A5 ~
    path = '../../TestAudio/XMOS/room_mic5-2/';; Q/ S& w) m: y5 [
    [s1,fs] = audioread([path,'音轨-2.wav']);2 }5 f0 B  D* j. c
    s2 = audioread([path,'音轨-3.wav']);' g- x$ L1 [- Q) b5 r/ a
    s3 = audioread([path,'音轨-4.wav']);
    & @  N" `, C5 Us4 = audioread([path,'音轨-5.wav']);$ j1 m( K0 [% H; F
    s5 = audioread([path,'音轨-6.wav']);
    # z: x) W. A% n: A1 Ls6 = audioread([path,'音轨-7.wav']);* n* k9 a/ N% O6 w
    signal = [s1,s2,s3,s4,s5,s6];
    : F/ B5 G  \9 M, L$ A, a5 Y) JM = size(signal,2);
    ! E+ R. n9 r8 {! F%%/ g! ^& J6 x0 Y, g; M# i
    t = 0;
    ( M# ~* z5 b' d! {! o' R8 E( N# z* b5 f7 g
    % minimal searching grid. p# g2 B1 x4 m$ V
    step = 1;
    2 p. X5 T# c* v# i: U" z& ~1 n
    0 N# A; {1 L  T2 T, C5 CP = zeros(1,length(0:step:360-step));9 }$ S9 y+ ~7 f) |/ L$ f) o0 ~
    tic5 G4 R: x) d4 n/ m2 V: N
    h = waitbar(0,'Please wait...');
    0 d  a+ t: q2 M6 g, ]9 D7 qfor i = 0:step:360-step5 W  _7 f$ }' Z, X, [  i( m
        % Delay-and-sum beamforming
    1 N4 v/ v  Z+ P! t  j$ d1 Y% {4 i, C    [ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);/ I% U3 }% W- k$ v" o% f- p* f" q( ~
        t = t+1;* [9 ~. x* l$ U5 t
        %beamformed output energy
      \2 J+ y: E* @9 S    P(t) = DS'*DS;
    ! K- i4 U' o; a7 Z    waitbar(i / length(step:360-step))# m3 R7 P# ^1 g- I7 Q
    end
    $ t/ Y. h* \: H4 s$ t: E( e6 Otoc/ O' u  T7 j  C: Q1 v5 Y
    close(h)
    $ K/ j* y: \: Y* ?3 W& `3 I' y[m,index] = max(P);5 r1 o2 ~( d0 i# t& f& ^9 {
    figure,plot(0:step:360-step,P/max(P))
    3 H7 O$ s, \2 n7 bang = (index)*step+ X3 u6 O  H6 q7 [
    + i  Y- M7 {9 [! s' M( T
    程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下$ G3 b/ I5 N6 T8 g9 C/ {

    9 G) E  P8 H- v6 Q+ v( W6 p' I" Q

    结果与预期相同

    PHAT加权

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

    2 C2 _) n- q% H
    %x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,));
    0 x/ _8 k- k3 ~0 _" R测试同样的文件,结果如下
    / o& H$ e3 {& B
    . j. w, z' i. ]7 N对比可以看到,PHAT加权的方法性能更好4 Y5 ]4 n% k$ F" H7 Z
    参考
    $ \3 E! M: ^( J$ J# r' g: r1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》 ; n' h) g* Y" U9 f. H# @4 w  x8 ]8 l! K
    2. 《传感器阵列波束优化设计与应用》" L( W3 C) P% J0 ~6 E1 x3 ?
    ————————————————4 H5 e, D+ d* z) D' |
    版权声明:本文为CSDN博主「373955482」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) {/ }3 S9 G  c4 `5 p" j+ T& e
    原文链接:https://blog.csdn.net/u010592995/article/details/81586504
    & R, i& G7 n6 g# u: ^+ z' C6 q& A
    ' a$ c" `; J3 u# p" g
    % C$ e5 S! A; T$ a' H: ]  ~; A% n5 @' G. ]
    4 }1 d) m- w6 T7 y3 ?

    . s: u" d4 I: L4 Y2 e* `1 Y
    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, 2025-5-16 00:17 , Processed in 0.538745 second(s), 50 queries .

    回顶部