数学建模社区-数学中国
标题: 麦克风阵列声源定位 SRP-PHAT(二) [打印本页]
作者: 浅夏110 时间: 2020-5-15 15:04
标题: 麦克风阵列声源定位 SRP-PHAT(二)
DOA
$ K+ r9 N3 ~& @ 声源定位方法一般可分为三类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计如MUSIC等,还有就是基于beamforming的方法,也就是这里要介绍的可控波束响应(steered-response power),2 a0 M+ y+ p6 Q
2 s( k; `' @6 Y7 X5 a) K
steered-response power- N7 ?" T6 _9 n2 s" S" N7 }
可控波束响应是利用波束形成(beamforming)的方法,对空间不同方向的声音进行增强,得到声音信号最强的方向就被认为是声源的方向。 4 p: X# t8 n( k! p( X8 \
上一篇中简单介绍了麦克风阵列的背景知识,最简单的SRP就是利用延时-累加(delay-and-sum)的方法,寻找输出能量最大的方向。 + ?6 N/ i- r# @& v$ p& I; Q
其中,语音信号为宽带信号,因此需要做宽带波束形成,这里我们在频域实现
4 o$ i4 U2 c* g# t2 w' `6 m, ]3 p! D, v h. P$ B1 b2 ?6 p0 f" i2 N. a
频域宽带波束形成5 k4 _+ o' H& O! J5 m+ i
频域宽带波束形成可以归类为DFT波束形成器,结构如下图 5 q, z, Z' v$ S4 _! \
+ G$ v8 y ?4 Z% c
/ _4 \3 K- }, d) A5 d7 v频域处理也可以看做是子带处理(subband),DFT和IDFT的系数分别对应子带处理中的分析综合滤波器组,关于这一种解释,可参考《传感器阵列波束优化设计与应用》第六章。
频域宽带延时累加波束形成的基本过程就是信号分帧加窗->DFT->各频点相位补偿->IDFT
A# O, Q. {5 Z代码实现如下
( ?2 Q. ?' L9 u( U; Dnction [ DS, x1] = DelaySumURA( x,fs,N,frameLength,inc,r,angle)
( A g$ m7 L! I, V# _7 v%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- e' \1 [; y/ ^# {2 ]! g
%frequency-domain delay-sum beamformer using circular array
9 A4 ?) h8 z: ~%
0 S/ }6 {+ O7 F6 N4 H% input :1 j' i& M, W+ K: N/ F
% x : input signal ,samples * channel) U3 t) G+ e$ @+ y1 c* V9 m
% fs: sample rate. O! f) ]' ] U
% N : fft length,frequency bin number
! _! x2 w, M. n% }4 G& X%frameLength : frame length,usually same as N# X/ n4 O. B+ N8 |6 k; G
% inc : step increment
+ E" I) `5 Q1 N9 |& V8 ^# l% r : array element radius
8 j: m* |0 P x4 |% angle : incident angle
" N6 {2 m1 c) M%
' i4 g/ `& z& {! N% output :
8 f8 T0 R5 O# E1 h/ ~" M% DS : delay-sum output
; c! F9 l+ F" `- \/ ~% x1 : presteered signal,same size as x
, m2 l, w" J3 C2 V%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 C9 V _9 j Z7 Q# _% J3 s1 F6 [& {, x
c = 340;( ^/ |$ g: h" W. M8 k# ?7 d
Nele = size(x,2);
( r. J( p J: S1 X" ?3 l! Q/ {omega = zeros(frameLength,1);
$ R% p- J& K) N- G2 mH = ones(N/2+1,Nele);
: Y U, K) E( X$ e5 H/ b! s% _# d
theta = 90*pi/180; %固定一个俯仰角
+ G G4 R4 x8 A* |gamma = [30 90 150 210 270 330]*pi/180;%麦克风位置, S/ V4 `8 y$ |" f1 V# L3 J
tao = r*sin(theta)*cos(angle(1)-gamma)/c; %方位角 0 < angle <3604 V- a- K. D K* S5 J; |
yds = zeros(length(x(:,1)),1);+ r0 y4 s% q0 O, s( k1 u/ H
x1 = zeros(size(x));
$ |. c% U- ]3 o! Q: i! `( {2 w+ {& a8 ] {$ C$ ?8 ^+ X( Q
% frequency bin weights# `* m$ V& ]: M2 e! m3 s( I. B' c
% for k = 2:1:N/2+1
/ A/ T7 [) i# p% w1 `- D' Tfor k = 1:1:5000*N/fs
4 W, ]1 w1 ?* P, X E0 R4 L* b$ G2 y omega(k) = 2*pi*(k-1)*fs/N;
" u1 K1 j- F. T/ M9 W' X0 N7 E% G % steering vector
u7 I* s2 F- O H(k,
= exp(-1j*omega(k)*tao);7 u* B! s3 S5 p8 b+ x0 l6 j
end# k% {2 H" K# f; T) X6 l9 P) o& s+ m
! `9 [4 [3 j O3 T9 t8 A, B) G" \for i = 1:inc:length(x(:,1))-frameLength
. W2 s- [2 D$ K& {; r# e( c/ W4 g3 \; x/ Z, _) F# ^
d = fft(bsxfun(@times, x(i:i+frameLength-1,
,hamming(frameLength)));
, f6 w3 N) Z% X5 z3 u8 ` V) g$ p6 K; k' n+ B1 m& ~/ C
x_fft=bsxfun(@times, d(1:N/2+1,
,H);
, A+ @ Y1 [, R) p0 o. V+ X1 g% T h8 m
% phase transformed& W, C8 L3 S7 J3 ~2 r
%x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,
));
6 n* O7 B% R! N( B0 {* }$ Y0 W yf = sum(x_fft,2);
3 K: f* a/ G" F0 a2 k0 B0 ~ Cf = [yf;conj(flipud(yf(2:N/2)))];
: }& @$ H9 _) i7 x: y: V I/ k! e/ F: P/ f
% 恢复延时累加的信号
, x: e+ M. R/ b yds(i:i+frameLength-1) = yds(i:i+frameLength-1)+(ifft(Cf));( M5 C1 `% Y+ |
% s6 t5 V- E* G+ K7 D" i
% 恢复各路对齐后的信号
' X" X C3 M' ?$ R! W xf = [x_fft;conj(flipud(x_fft(2:N/2,
))];
6 E' ^" m, p$ m7 m4 ~8 c# s" t x1(i:i+frameLength-1,
= x1(i:i+frameLength-1,
+(ifft(xf));& A' s5 F+ q. O3 S9 U" j* T" y
end- l# e7 F' h, P1 O+ J" j
DS = yds/Nele; & @8 y; u: |& g4 D/ Z& A7 l' D
8 O/ D2 p0 v: z$ l+ ^, Qend
7 d0 |' ]8 g4 j5 P. g6 Z0 S然后遍历各个角度重复调用这个函数,测试实际录音数据,代码如下
, r: F5 K, k! @$ p2 o' r* z/ V+ Z A$ E) M2 F0 {6 H
%% SRP Estimate of Direction of Arrival at Microphone Array4 b& d" z' _# `0 \7 O. x" c
% Frequency-domain delay-and-sum test
b* K" C! i( g) g. T% & s) V5 c4 r' { f
%%% U4 M B, i7 z0 m% f
( `% y: c+ C, f3 J* I2 n% x = filter(Num,1,x0);
0 {" d! g, q% ^# ]( Z$ j, f2 i$ Fc = 340.0;' B% H2 G9 _! b
' O q) P0 h' Y* o" n3 W: q) J6 x0 T% XMOS circular microphone array radius' f4 e, {! k8 c( X: T, B% a( ]
d = 0.0420;7 G c3 x5 P& ?3 W
% more test audio file in ../../TestAudio/ folder, d1 [1 H. {1 o/ T# S* s" b$ O
path = '../../TestAudio/XMOS/room_mic5-2/';$ Q$ E% `3 M0 y9 @2 E' u
[s1,fs] = audioread([path,'音轨-2.wav']);
; y8 ~# T8 j4 }7 qs2 = audioread([path,'音轨-3.wav']);$ J+ W% y* l! ^
s3 = audioread([path,'音轨-4.wav']);
. r% |( v8 W! c% {( t9 ^7 ]s4 = audioread([path,'音轨-5.wav']);1 W! @( @7 o& ^
s5 = audioread([path,'音轨-6.wav']);
) N; ?& l8 j' h# o* S& Ts6 = audioread([path,'音轨-7.wav']);* ^* V0 _* G8 p1 o7 k8 e, G
signal = [s1,s2,s3,s4,s5,s6];' U& ~% j% u& L8 Z) T/ ~$ g
M = size(signal,2);
! D- l6 g- |% B" K6 E%%7 [; i& s! `5 a! j k4 G
t = 0;: ]# p x$ j. a; W
1 |$ o" H" M& l& b. o
% minimal searching grid/ Q* _+ Q/ g/ i2 s- \
step = 1;
0 Z( {. W! d* z: H$ \9 k
' t5 N8 ^0 V2 a# |8 zP = zeros(1,length(0:step:360-step));- k: C D Z) A" T- A P
tic
. O' p+ C/ {) F. f% W2 xh = waitbar(0,'Please wait...');
& W* R' e6 g0 h1 c% y' Tfor i = 0:step:360-step6 f3 _, b: M! B$ I* ~
% Delay-and-sum beamforming) N8 K# b: O. a' @
[ DS, x1] = DelaySumURA(signal,fs,512,512,256,d,i/180*pi);8 w) c* v* S# H3 r/ z1 `( L
t = t+1;
4 Y6 M- t: R6 v! `! t %beamformed output energy
9 h$ |) M) V, G6 j* ?3 \: o P(t) = DS'*DS;) Y7 D* _7 y; I9 T1 @
waitbar(i / length(step:360-step))
6 q" d! l4 R( X' Hend6 S7 q% Y f+ d2 \ X4 r" Z
toc" ^+ a! Y3 ~5 ~
close(h) 4 c8 m2 o% M# N; }
[m,index] = max(P);! i8 K0 r- t2 I" _& T" N' d/ O
figure,plot(0:step:360-step,P/max(P))
" M: l& R# k- U, W2 ~ang = (index)*step: I+ d* P5 B7 G+ V
9 U4 b: U+ j0 }( t% L) q, J4 C程序中用的是圆阵,可以进行二维方向角扫描,不过这里为了简便就固定了俯仰角,只扫描方位角,结果如下
6 d& K$ A5 P3 Z' w. S8 ^
$ q2 \9 _, i; F8 |% o' o6 z f结果与预期相同
PHAT加权 与GCC-PHAT方法相同,这里也可以对幅度做归一化,只保留相位信息,使得到的峰值更明显,提高在噪声及混响环境下的性能 i) h- R) _) M# ]+ t$ G7 z. T+ F7 ~
上面代码中加上这一句
% B F q- T, T% x% b# \
%x_fft = bsxfun(@rdivide, x_fft,abs(d(1:N/2+1,
));: O6 w2 B0 z9 X+ T6 c# p9 ?$ l
测试同样的文件,结果如下
e+ w6 E% M, k* X
+ S; G+ }( }( ?
对比可以看到,PHAT加权的方法性能更好
- G) o; u. t0 L* c0 Z参考# q/ f4 |9 b6 n
1.《SRP-PHAT-A High-Accuracy, Low-Latency Technique for Talker Localization in Reverberant Environments Using Microphone Arrays》
4 }. E1 ]0 g. J0 x& [* ~9 f2. 《传感器阵列波束优化设计与应用》
6 i$ A5 q) E3 l————————————————
/ ~ w/ M% v$ @: Y7 W4 `, ?& ?版权声明:本文为CSDN博主「373955482」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( E, Y0 W2 b/ }$ i
原文链接:https://blog.csdn.net/u010592995/article/details/815865048 d; Y- I' [+ k; ~9 }3 K$ F
- s4 D6 c" r& x/ {# B/ O
8 b$ y2 [) m; d' j
* P4 G4 _6 e- b" V1 ^' j4 o
, b' f' r1 q- Q. u) t% Q5 r" p X) ~2 B! L) _
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |