精华内容
下载资源
问答
  • 基于双麦克风声源定位的视频跟踪

    千次阅读 2018-10-11 17:52:14
    基于双麦克风声源定位的视频跟踪   声源定位跟踪技术在当今社会有着越来越广泛的应用。在此使用两个高灵敏度麦克风作为传感器,配以音频信号处理芯片,接收音频信号并进行模数转换,使用FPGA器件作为核心控制器,...

    基于双麦克风声源定位的视频跟踪

     

    声源定位跟踪技术在当今社会有着越来越广泛的应用。在此使用两个高灵敏度麦克风作为传感器,配以音频信号处理芯片,接收音频信号并进行模数转换,使用FPGA器件作为核心控制器,结合TDOA算法和ILD算法,实现在室内环境下、二维平面内的声源定位。并根据声源定位的信息驱动摄像头转动,使其一直对准于声源所在位置,并保持持续跟踪。FPGA使用NiosⅡ内核,方便使用高级语言进行程序设计。摄像头的视频输出信号可接于PC机或其他视频设备。与其他定位算法相比,系统减少了使用传感器的数量。

    在日常生活中,声源跟踪定位技术有着广泛的应用。例如在视频会议中,声源定位被用于检测讲话人的位置,并自动调整摄像头转动角度,使其对准讲话者;舞台演出中,声源定位跟踪可是摄像头自动保持指向主持人或主角;安防保卫系统中,声源定位技术可使监控摄像头在监控区域发生声响的瞬间对准于声源位置,并保持对移动声源的跟踪。

    现在常见的麦克风声源定位算法多见于TDOA算法,其基本原理是根据信号到达两个不同位置的麦克风的时间差,估计出信号到达两个不同位置麦克风的距离差,可以列出一个双曲线方程,同时使用另外两个不同的麦克风同时检测信号可以得到另外一个双曲线方程,两个双曲线方程的交点就是声源的位置坐标。使用这种方法进行声源定位时,至少要使用三个麦克风,使用两次TDOA算法进行运算,才能完成一次定位操作。为了实现更精确的声源定位,也常采用阵列技术,将多个麦克风组成线阵,或方阵采集信号进行声源定位。但这种定位技术的算法更为复杂。本文采用两个高灵敏度麦克风作为传感器,选用FPGA作为控制器,当对声源实现定位后,控制步进电机转动,使摄像头对准声源。当声源位置发生移动时,可使摄像头自动保持跟踪。

    1 设计原理

    系统使用TDOA算法和ILD算法相结合的方法,实现声源的定位。在二维平面,即声源和麦克风处于同一平面时,麦克风接收到的信号模型在考虑信号传播的逆平方定律时可表示为:

    x(t)=s(t-τ)/d+n(t) (1)

    式中:s(t)为源信号;n(t)为加性白噪声;d和τ分别为信号到达麦克风的距离和时延。

    使用ILD方法在计算能量时可以忽略时延信息。在[0,l]时间范围内,麦克风接收到的信号能量,就是该时间段内信号采样的平方和,即:


    对于两个麦克风组成的阵列,可得到麦克风接收到信号的能量与麦克风距声源距离的关系为:


    求解式(6)和式(7)组成的方程组就可得到声源位置坐标。通过进一步的变换可以得到该方程的闭合解。

    2 系统硬件设计

    本文采用Altera公司的CycloneⅢ系列FPGA芯片EP3C16F484作为核心处理器。使用UDA1341芯片作为前端音频信号采集电路的处理芯片,使用两个高灵敏度的麦克风作为音频信号的传感器。两个麦克风朝向同一方向,间距0.5 m并行放置。麦克风在使用前需要标定,保证麦克风在同一位置接受同一信号时,其接收到的信号的幅值一致。使用两个两相步进电机对摄像头的转动角度进行控制。为了记录数据,在系统中添加了一个4 Mb的FLASH存储器,使用一片带字库的16x2的液晶用于显示定位信息。为保证摄像头的视线不受环境障碍物的干扰,摄像头在放置时应该有一定的高度,一般高于麦克风的放置高度,因此需要两个步进电机调整摄像头的角度,一个调整水平转动角度,另一个调整俯仰角。系统框图如图1所示。


    EP3C16F484是CycloneⅢ型FPGA,是一种低成本的应用于终端市场的FPGA器件,其共有15 408个逻辑单元,56个嵌入式乘法器,4个锁相环,346个用户定义的I/O脚。可满足一般系统核心控制器的应用。UDA1341是一种经济型的音频信号采集编码芯片,有两个ADC模块,过采样比可达128,可以编程设置其各种工作参数,如增益等。系统在启动时首先进行初始化操作,通过UDA11341芯片的L3总线接口设置芯片的工作方式和工作参数。两个麦克风所接收到的音频信号经音频信号采集电路处理后,转换成离散的信号,送至FPGA中进行处理。控制器根据接收到的信号的序列判断出两个麦克风接收到信号的时差和信号功率的衰减,进而计算出声源的位置坐标。控制步进电机转动,使摄像头对准声源。系统同时将测得的声源的位置坐标在LCD显示出来。用户在使用时可根据具体的使用环境建立定位的坐标系。确定坐标系后在系统启动初始化时将两个麦克风的位置和摄像头的位置的坐标通过矩阵键盘输入到系统中。

    展开全文
  • 麦克风阵列声源定位

    2016-01-16 12:11:45
    一篇关于麦克风阵列声源定位的论文,具有一定的参考价值。
  • 论述了基于麦克风阵列的声源定位技术的基本原理,给出了利用FPGA实现系统各模块的设计方法。重点介绍了其原理和模块的电路实现,给出的基于FPGA设计实验结果表明,系统最大限度发挥了FPGA的优势、简化了系统设计、...
  • 麦克风阵列技术麦克风阵列技术详解声源定位延时估计角度计算波束形成波束形成模型波束形成基本理论去混响麦克风阵列结构设计声学结构确认流程 紧接上一个博客文章,此为第三部分。上一部分见:麦克风阵列技术 二 ...

    紧接上一个博客文章,此为第三部分。上一部分见:麦克风阵列技术 二 (自动增益控制 自动噪声抑制 回声消除 语音活动检测)

    麦克风阵列技术详解

    声源定位

    麦克风阵列可以自动检测声源位置,跟踪说话人,声源定位信息既可以用于智能交互,也可以用于后续的空域滤波,对目标方向进行语音增强。

    利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival (DOA) estimation),DOA估计的其中一种方法是计算到达不同阵元间的时间差,另外一种可以看这里,这篇主要介绍经典的GCC-PHAT方法
    简单说明问题背景,信号模型如下图,远场平面波,二元阵列

    要计算得到θθ,其实就是要求两个阵元接收到的信号时间差,现在问题变成到达时间差估计(Time-Difference-of-Arrival Estimation),因此,基于延时估计的DOA方法,其实也可以看做是分两步进行的,第一步是估计延时,第二步是计算角度,与之相对应的基于空间谱估计的DOA方法就是一步完成的。下面就分两步进行介绍

    延时估计

    一、 互相关函数(cross-correlation function)

    计算y1(k)y1(k)与y2(k)y2(k)的时间差,可以计算两个信号的互相关函数,找到使互相关函数最大的值即是这两个信号的时间差
    离散信号的互相关函数

    R(τ)=E[x1(m)x2(m+τ)]R(τ)=E[x1(m)x2(m+τ)]

    求时间差就是找到互相关函数最大时的点

    D=argmaxR(n)D=argmaxR(n)
    MATLAB代码如下:

    %%
    % Load the chirp signal.
    load chirp;
    c = 340.0;
    Fs = 44100;
    %%
    d = 0.25;
    N = 2;
    mic = phased.OmnidirectionalMicrophoneElement;
    % array = phased.URA([N,N],[0.0724,0.0418],'Element',mic);
    array = phased.ULA(N,d,'Element',mic);
     
    %%
    % Simulate the incoming signal using the |WidebandCollector| System
    % object(TM).
    arrivalAng = 42;
    collector = phased.WidebandCollector('Sensor',array,'PropagationSpeed',c,...
        'SampleRate',Fs,'ModulatedInput',false);
    signal = collector(y,arrivalAng);
     
    x1 = signal(:,1);
    x2 = signal(:,2);
     
    N =length(x2);
    xc = xcorr(x1,x2,'biased');
    [k,ind] = max(xc);
    an = acos((ind-N)/Fs*340/d)*180/pi
     
    xc12 = zeros(2*N-1,1);
    m = 0;
    for i = -(N-1):N-1
        m = m+1;
        for t = 1:N
            if 0<(i+t)&&(i+t)<=N
                xc12(m) = xc12(m) + x2(t)*x1(t+i);
            end 
        end
    end
    xc12 = xc12/N;
    

    以上程序中的循环就是上面的定义公式,运行程序可以看到循环部分计算的互相关与直接调用matlab的xcorr结果相同(注意matlab中互相关默认没做归一化),找到互相关函数的最大值就可以得到时间差 。

    二、广义互相关(generalized cross-correlation)

    理论上使用上面个介绍的CCF方法就可以得到时间差,但是实际的信号会有噪声,低信噪比会导致互相关函数的峰值不够明显,这会在找极值的时候造成误差。
    为了得到具有更陡峭极值的互相关函数,一般在频域使用一个加权函数来白化输入信号,这就是经典的广义互相关方法。
    由维纳-辛钦定理可知,随机信号的自相关函数和功率谱密度函数服从一对傅里叶变换的关系,即x1、x2x1、x2的互功率谱可由下式计算

    P(ω)=∫+∞?∞R(τ)e?jωτdτP(ω)=∫?∞+∞R(τ)e?jωτdτ

    R(τ)=∫+∞?∞P(ω)ejωτdωR(τ)=∫?∞+∞P(ω)ejωτdω

    这一步是把互相关函数变换到了频域,哦对,上面说到是想白化互相关函数,那就把上面第二式添加一个系数

    R(τ)=∫+∞?∞A(ω)P(ω)ejωτdωR(τ)=∫?∞+∞A(ω)P(ω)ejωτdω

    设计不同的频域系数A(ω)A(ω)对应着不同方法,这里只介绍 PHAT(phase transform)方法,即取系数如下:

    A(ω)=1|P(ω)|A(ω)=1|P(ω)|

    基本思想就是求时间差只需要相位信息,舍弃不相关的幅度信息以提高健壮性,可以看到当A(ω)=1A(ω)=1的情况下就是经典互相关
    P(ω)P(ω)为复数,可以表示为|P(ω)| * e - jωp|P(ω)| * e - jωp,去掉幅度信息后,就只剩相位信息e - jωpe - jωp了,要得到相位信息,可以用P(ω)abs(P(ω))P(ω)abs(P(ω))计算,也可以直接用matlab中的angle函数计算,即angle(P(ω))angle(P(ω)),
    在这里插入图片描述
    几行代码验证下:

    x1 = [1,2,3,7,9,8,3,7]';
    x2 = [4,5,6,5,4,3,8,2]';
     
    [tau,R,lag] = gccphat(x1,x2) 
     
    N = length(x1)+length(x2)-1;
    NFFT = 32;
    P = (fft(x1,NFFT).*conj(fft(x2,NFFT)));
    A = 1./abs(P);
    R_est1 = fftshift(ifft(A.*P));
    range = NFFT/2+1-(N-1)/2:NFFT/2+1+(N-1)/2;
    R_est1 = R_est1(range);
     
    R_est2 = fftshift(ifft(exp(1i*angle(P))));
    R_est2 = R_est2(range);
    

    可以看到,三种不同写法得到的R_est1 、R_est2 与matlab自带函数gccphat计算得到的R相等。

    那上面例子中的宽带语音信号,用GCC-PHAT方法得到具有陡峭峰值互相关函数,找到互相关最大时的点,结合采样频率Fs与与麦克风间距dFs与与麦克风间距d,就可以得到方向信息。

    角度计算

    上面的内容计算了两个麦克风的延时,实际中假设阵列中麦克风个数为NN,则所有麦克风间两两组合共有N(N-1)/2N(N-1)/2对,记第kk个麦克风坐标为(xk,yk,zk)(xk,yk,zk),声源单位平面波传播向量u? =(u,v,w)u→=(u,v,w),如果麦克风k,jk,j之间的延时为τkjτkj,则根据向量关系有下式,其中c为声速,
    C * τkj = -(xk→-xj→)?u? c?Τkj = -(xk→-xj→) * u→

    这样看起来不够直观,那就代入坐标写成标量形式如下:
    Cτkj=u(xk-xj)+v*(yk-yj)+w*(zk-zj)cτkj=u(xk-xj)+v*(yk-yj)+w*(zk-zj)

    当有多个麦克风时,每两个麦克风就可以得到一组上式,N个麦克风就会有N*(N-1)/2个等式N个麦克风就会有N*(N-1)/2个等式,声源单位传播向量u? =(u,v,w)u→=(u,v,w)有三个未知数,因此最少只需要三组等式,也就是三个麦克风就可以计算出声源方向,这里就先假定N=3N=3,可以得到方程组如下:
    在这里插入图片描述
    写成矩阵形式
    在这里插入图片描述
    求出u? =(u,v,w)u→=(u,v,w)后,由正余弦关系就有了角度值了
    θ=acos(1w)θ=acos(1w)
    α=acos(usin(acos(1w)))α=acos(usin(acos(1w)))

    当麦克风数量N>3N>3时,其实所有组合信息对于角度值的计算是有冗余的,这个时候可以求出所有组合的角度值,然后利用最小二乘求出最优解,这样可以利用到所有的麦克风的信息来提高角度估计的稳定性。

    波束形成

    DBF是Digital Beam Forming的缩写,译为数字波束形成 或数字波束合成。数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域。
    专业:电子、通信与自动控制技术阵列信号处理最主要的研究内容包括DOA估计和波束形成。较早的DOA估计方法又称为波束形成方法,而该波束形成方法利用了空域维纳滤波的匹配概念,由阵列流形在信号空间中的投影大小判定信号方向,后来随着研究的深入,高分辨谱估计技术的发展,才把DOA估计和波束形成加以区分,DOA估计是为了确定信号的方位,从接收数据中测出信号方向,不管信号是有用信号还是干扰信号,在DOA估计方向图中都表现为峰值,而此峰值并不是实际阵列输出功率;波束形成是传统滤波的空域拓展,其根本目的是有效提取有用信号并抑制噪声和干扰,在方向图中表现为有用信号方向形成峰值、干扰方向形成零陷,可以认为DOA估计为波束形成的前端处理,确定期望信号和干扰方向后,阵列对期望信号方向形成波束并在干扰方向形成零陷。

    DBF体现的是声源信号的空域选择性,许多传统波束形成方法具有线性处理结构;波束形成需要考虑三个方面:
    1)麦克风阵列个数;
    2)性能;
    3)鲁棒性。

    在麦克风较少时,波束形成的空域选择性差,当麦克风数量较多时,其波束3dB带宽较为窄,如果估计的目标声源方向有稍有偏差,带来的影响也更大,鲁棒性不好。通常鲁棒性和性能是对矛盾体,需要均衡来看。

    WebRTC使用了如下几个点以提高鲁棒性和性能(其算法性能优先):
    1.可以使用多个后置滤波器而非一个,2.每个后置滤波使用新的结构。

    每个后置滤波器为每个声学场景的时频域bin在均方误意义上提供了最优实增益。在WebRTC中后置滤波器根据声源的空域协方差矩阵,干扰源协方差矩阵,绕射场(零阶贝塞尔函数计算)以及临近麦克风的时频信号信息求得。

    这样的话就可以为每个声源和干扰场景计算出不同的最优后置滤波器,也可以使用级联的方式灵活使用多个不同选择性的后置滤波器。
    当前现存的波束形成算法的鲁棒性成为它们使用的一道门槛,如MVDR和多通道维纳滤波。

    WebRTC为了增强鲁棒性,在求最优矩阵时,对声源信号添加了限制条件,使用Gabor frame将声源变成时频bin的系数,对这些bin按照目标声源和干扰声源附加了条件,如果满足条件,则门操作让目标声源通过,而让干扰源乘以零以实现选择最优目标信号。

    在WebRTC中这些增益系数称为自适应标量(上面的实)乘法增益,均方误差准则被用来做为计算的准则。由于阵列方向响应随频率是变换的,而语音信号又是宽带信号,所以WebRTC中使用了gabor变换来表示声音信号。增益源于目标信号和干扰的比例。

    波束形成模型

    以均匀线阵为例:
    在这里插入图片描述
    按窄带模型分析:
    在这里插入图片描述
    可以写成矩阵形式:
    在这里插入图片描述
    其中a(θ)为方向矢量或导向矢量(Steering Vector),波束形成主要是针对各个接收信号X进行权重相加。

    波束形成基本理论
    1. A-波束形成
      权重相加:在这里插入图片描述
      不同的波束形成,就是不同的权重W。

    2. B-瑞利限
      以均匀直角窗为例:
      在这里插入图片描述
      得出方向图:
      在这里插入图片描述
      主瓣宽度正比于孔径宽度的倒数:
      在这里插入图片描述
      因为孔径的限制,造成波束宽度存在限制(不会无限制小),近而落在主瓣波束内部的两个信号便会混在一起而分不清,这就存在瑞利限的问题。

      直角窗主瓣宽度为:
      在这里插入图片描述
      其中λ为入射波长,theta1为入射角,Md为阵列孔径。

    3. C-常见窗函数

      对于空间不同的阵列信号,类似采样分析(空域采样),自然可以加窗进行处理,不加窗可以认为是直角窗,另外也可以选择汉明窗、hanning窗等等。

      加窗可以改变波束宽度以及主瓣、副瓣等特性,可以借助MATLAB 的wvtool观察不同窗函数特性。

    N = 192;
    w = window(@blackmanharris,N);
    wvtool(w)
    

    在这里插入图片描述

    1. D-DFT实现
      阵列的采样间隔是相位信息:
      在这里插入图片描述
      这就类似于频域变换,只不过这里的相位信息:对应的不是频率,而是不同位置,可以看作空域的变换。

      分别对阵列信号进行直接加权、加窗、DFT实现:

    clc;clear all;close all
    M = 32;
    DOA = [-30 30];
    SNR = 10;
    theta = -90:.1:90;
    len = length(theta);
    SignalMode = 'Independent';
    fc = 1e9;
    c = 3e8;
    lambda = c/fc;
    d = lambda/2;
    N = 100;%snap points
    x = StatSigGenerate(M,N,DOA,SNR,SignalMode,lambda,d);
    R_hat = 1/N*x*x';
    output = zeros(3,len);
    for i = 1:len
        a = exp(1j*2*pi*[0:M-1]'*sind(theta(i))*d/lambda);
        W = (inv(R_hat)*a)*(1./(a'*inv(R_hat)*a));
        output(1,i) = mean(abs(W'*x),2);
        output(2,i) = 1./(a'*inv(R_hat)*a);
        output(3,i) = a'*x*ones(N,1);
    end
    output = abs(output);
    output = output - repmat(mean(output.')',1,size(output,2));
    output = output./repmat(max(output.')',1,size(output,2));
    %plot
    plot(theta,output(1,:),'k',theta,output(2,:),'r--',theta,output(3,:),'b');
    legend('MVDR 波束','MVDR 谱','固定权重 波束');
    

    在这里插入图片描述

    1. E-自适应波束形成
      直接相加也好、加窗也好,都是固定的权重系数,没有考虑到信号本身的特性,所以如果结合信号本身去考虑就形成了一系列算法:自适应波束形成。

      这类步骤通常是:
      1)给定准则函数;
      2)对准则函数进行求解。

      准则常用的有:信噪比(snr)最大准则、均方误差最小准则(MSE)、线性约束最小方差准则(LCMV)、最大似然准则(ML)等等;

      求解的思路大体分两类:1)直接求解,例如MVDR中的求解;2)也可以利用梯度下降的思想,如随机梯度下降、批量梯度下降、Newton-raphson等方法,不再详细说明。

      以MVDR举例:
      在这里插入图片描述
      这里采用直接求解的思路:
      在这里插入图片描述
      将求解的W带入
      在这里插入图片描述
      即可得到波束形成。

    2. F-栅瓣现象
      栅瓣是一类现象,对应干涉仪就是相位模糊(相位超过2*pi),对应到Beamforming就是栅瓣问题,具体不再论述,给出现象(同样的波束,在不同的位置分别出现):
      在这里插入图片描述

    3. G-波束形成与空间谱

      之前分析过MVDR的方法,得到的输出(含有约束的最小均方误差准则)为:
      在这里插入图片描述
      有时候也称这个输出为空间谱,其实就是|y2(t)|,但这个与MUSIC等算法的谱还不是一回事,只是有时候也被称作空间谱,所以这里多啰嗦几句,分析这个说法的来源。

      已知N个采样点的信号,对其进行傅里叶变换:
      在这里插入图片描述
      进一步得到功率谱密度:
      在这里插入图片描述
      根据上文的分析:y(t)其实对应的就是空域变换(可借助DFT实现),类比于时频处理中的频域变换。而这里又可以看到频域变换的平方/长度,对应就是功率谱,这是频域的分析。

      对应到空域,自然就是|y2(t)|/长度,对应空间谱,长度只影响比例关系,所以MVDR的最小方差输出被称作:空间谱也是合适的。

      给出一个测试(这里如果),对比MVDR的y(t)、MVDR功率谱以及普通Beamforming的结果:

    clc;clear all;close all
    M = 32;
    DOA = [-30 30];
    SNR = 10;
    theta = -90:.1:90;
    len = length(theta);
    SignalMode = 'Independent';
    fc = 1e9;
    c = 3e8;
    lambda = c/fc;
    d = lambda/2;
    N = 100;%snap points
    x = StatSigGenerate(M,N,DOA,SNR,SignalMode,lambda,d);
    R_hat = 1/N*x*x';
    output = zeros(3,len);
    for i = 1:len
        a = exp(1j*2*pi*[0:M-1]'*sind(theta(i))*d/lambda);
        W = (inv(R_hat)*a)*(1./(a'*inv(R_hat)*a));
        output(1,i) = mean(abs(W'*x),2);
        output(2,i) = 1./(a'*inv(R_hat)*a);
        output(3,i) = a'*x*ones(N,1);
    end
    output = abs(output);
    output = output - repmat(mean(output.')',1,size(output,2));
    output = output./repmat(max(output.')',1,size(output,2));
    %plot
    plot(theta,output(1,:),'k',theta,output(2,:),'r--',theta,output(3,:),'b');
    legend('MVDR 波束','MVDR 谱','固定权重 波束');
    

    在这里插入图片描述
    如果将d = lambda/2;改为d = lambda/0.5;,自然就有了栅瓣:
    在这里插入图片描述

    去混响

    混响是指声波在室内传播时,要被墙壁、天花板、地板等障碍物反射,当声源停止发声后,声波在室内要经过多次反射和吸收,最后才消失。这种现象称为混响。因此,当声源和麦克风之间的距离越远,反射声占的比例就越高,混响就严重。
    经典的去混响方法包括形成拾音波束来减少反射声和基于反卷积的去混响方法。

    麦克风阵列结构设计

    MUC 孔的孔深孔径比越小越好,即开孔越大越好,深度越小越好,尽量向1:1靠近。孔深与孔径比值越大,麦克频响的震点越像低频靠近,要求震点在12KHz以上。最少也要在8KHz以上。喇叭腔体不能漏气。这是因为,喇叭正反两面的声波相位相差180度,当音腔有漏气时,声波会发生抵消,尤其是低频频段。
    麦克和喇叭的失真都要小。麦克失真小于4%,喇叭失真小于10%,由于喇叭低频失真严重些,会超过10%,可以考虑增加滤波器滤掉低频成分。
    喇叭腔体四周与其他机构件保留1mm的距离,防止腔壳与机构接触产生异音。
    喇叭鼓膜上方与机构件保留1.5mm的距离,以防鼓膜振动碰到机构件产生异音。
    喇叭与机构件有接触的地方,要增加泡面,以起到缓冲、减振的效果,防止喇叭振动时与机构件碰撞产生异音。

    声学结构确认流程

    1)远程会议或现场结构设计评估
    确认麦克阵列构型,确认声腔及安装结构设计,确认进声孔深度、直径大小等;
    2)声学实验室录音效果评估-第一阶段
    计算裸麦和带声腔结构的麦克风之间的录音之间谐波程度,根据分析结果确定是否通过。
    3)声学实验室录音效果评估-第二阶段
    分别利用裸麦和带声腔结构的麦克风信号做基于相位的声源定位,如果两者定位误差小于5°,则认为通过该项测试。
    4)声学实验室录音效果评估-第三阶段
    分别利用裸麦和带声腔结构的麦克风录音数据进行识别,效果差距在2%以内,则认为远场识别方面无问题。

    展开全文
  • 声源定位

    千次阅读 多人点赞 2019-11-06 13:08:35
    声源定位 一.简介 声音定位是人们感知周围事物的一个重要部分。即使看不到那里有什么,我们也可以根据声音大致判断出我们周围有什么。尝试在电子设备中复制相同的系统可以证明是一种有价值的方式来感知机器人、...

    声源定位
    一.简介
    声音定位是人们感知周围事物的一个重要部分。即使看不到那里有什么,我们也可以根据声音大致判断出我们周围有什么。尝试在电子设备中复制相同的系统可以证明是一种有价值的方式来感知机器人、安全和一系列其他应用的环境。我们构造了一个三角形排列的麦克风来定位任意声音的方向。通过记录来自三个麦克风的输入,我们可以将记录相互关联,以识别音频记录之间的时间延迟。因为三个麦克风的物理位置是已知的,所以可以使用麦克风之间的时间延迟来估计声音的方向。估计方向后,我们在液晶显示器上用箭头显示方向。
    二.整体设计思路
    在这里插入图片描述
    2.1 数学原理
    在采样帧中,两个麦克风之间的近似最大时间延迟是使用以下三个参数计算得出的:1.室温下干燥空气中的声速,2.每个麦克风之间的距离,3.采样速率。
    最大时间延迟=采样速率/(声速距离)= 25 kHz / (343 m/s 0.50 m)
    本项目中用于计算两个信号之间时间延迟的主要数学技术是互相关,它通过沿另一个信号滑动一个信号来测量两个信号的相似性。公式如下:
    在这里插入图片描述
    2.2 硬件框图
    下图说明了本项目中使用的所有外设。PIC32利用10位模数转换器(ADC)读取模拟输入,利用串行外设接口(SPI)通道写入薄膜晶体管显示器,利用另一个串行外设接口通道写入数模转换器(DAC)进行模拟输出。
    在这里插入图片描述
    2.3 硬件/软件权衡
    在硬件和软件之间进行选择是实现容易的平衡,同时倾向于在微控制器中运行系统,以增加微控制器提供的灵活性。由于我们希望能够比较声音和可能的时间延迟,大多数音频处理都是在PIC32微控制器中完成的。虽然某些项目中提到使用硬件脉冲检测器来确定到达时间,但我们选择用软件来确定,因为这样可以让我们检测非脉冲的声音。一些放大和信号控制是在硬件滤波器和放大器中完成的,因为这对ADC正确读取输入信号和消除混叠是必要的。在PIC32内部,我们决定让微控制器使用直接存储器存取通道将数据传输到缓冲器,而不是让处理器高速中断来采样ADC。这允许微控制器在采样过程中进行其他处理。
    三.硬件
    3.1 概观
    该项目的硬件包括3个麦克风电路、一个电压调节器、一个按钮、一个薄膜晶体管显示器和一个开关组成的原型板。3个麦克风电路中的每一个都包括驻极体麦克风、一组滤波器和放大器。麦克风电路的每个输出都被反馈入PIC32上的模数转换器通道。单独的线性电压调节器用于为麦克风电路供电。原型板的3.3v电源轨未被使用,因为我们发现微控制器的噪声可以进入电源轨并被放大器拾取。此外,9v电池用于提供整体电源。我们还发现5v插入式壁装电源往往会产生不必要的噪声(可能来自某些开关频率)。该按钮用于开始采样,并简单地作为上拉连接。配置了微控制器的内部下拉。薄膜晶体管显示器用于显示调试信息并指向声音的方向。麦克风电路和电压调节器焊接在焊接板上。最后,使用一个双通道12位数模转换器进行调试。这用于回放录音和输出相关波形。这些可以在示波器上看到。
    3.2 麦克风电路
    麦克风电路由三部分组成。首先是麦克风本身。第二是高通滤波器,用于在向放大器馈电之前去除麦克风中的任何DC值。最后是放大器,它是一个运算放大器,被配置为充当带通滤波器。麦克风电路示意图如下所示:
    在这里插入图片描述
    MCP6242是用于放大器的运算放大器。这是一款3.3V兼容轨对轨运算放大器。初始高通滤波器的截止频率约为160Hz。带通放大器上的高通滤波器被选择为与初始高通滤波器的截止值大致匹配。至于运算放大器的低通滤波器,选择该滤波器的截止频率约为725Hz。选择这些较低频率的选择是因为我们能够用原始方法获得原始采样率。使用的增益是1000:1。这将证明是一个问题,这将在后面的进一步改进部分看到。麦克风电路的每个输出都连接到一个具有模拟功能的输入/输出引脚。使用的引脚是RA0、RA1和RB3,它们对应于AN0、AN1和AN5。这些被组装成焊接板,如下所示:
    在这里插入图片描述
    3.3 按钮
    按钮电路相对简单。这只是一个与330欧姆电阻串联的按钮开关。开关电路的一端是3.3V轨,另一端是PIC32的数字输入/输出引脚。PIC32配置为提供弱下拉,因此当开关打开时,输入/输出引脚读数为0,当闭合时,输入/输出引脚读数为1。开关最初连接到原板,但这最终会导致问题,因为单击开关会导致组件抖动。为了解决这个问题,将一个不同的开关焊接到一段绞合的24awg(截面积大概为0.2平方毫米)电线上,然后连接起来代替车载开关。这允许系统可以进行短距离触发。按钮开关连接到RB7,如下图所示。
    在这里插入图片描述
    3.4 薄膜晶体管显示器
    薄膜晶体管显示器用于显示调试信息并指向声源方向。我们使用的器件是Adafruit,它提供薄膜晶体管显示器、薄膜晶体管显示器驱动器和SD卡读卡器(本项目未使用)。其代码是一个库,该库改编自Adafruit提供的库,用于运行带有Arduino的薄膜晶体管。薄膜晶体管分支使用了一个SPI通道和其他几个数字输入/输出引脚。薄膜晶体管显示器的引脚排列与赛ABB开发板中的配置相同。具体如下:RB0 ->D/C、RB1->ECS、RB2->reset、RB11->EMOSI和RB14->CLK。
    在这里插入图片描述
    3.5 数字模拟转换器
    使用的数模转换器是MCP4822。这是我们常用的12位双通道数模转换器。数模转换器仅用于调试系统,不用于项目本身。通过以1kHz的速率向数模转换器发送波形,我们可以查看系统的输出情况。数模转换器采用标准配置,如下所示:RB4->CS,RB5->MOSI,RB15->CLK。
    3.6 进一步改进
    对于硬件而言,进一步的改进将包括对放大器进行返工,去掉按钮电路,让音频电路触发采样。首先,选择放大器带通滤波器的频率范围是因为原始系统具有低采样频率。由于当前系统可以在25kHz下采样而没有问题,并且经过一些调整后可以增加到40kHz,因此我们可以改变低通滤波器的截止频率。比几千赫高得多。然而,一个问题是增益带宽积大约为550kHz。当增益为1000:1时,结果将系统频率限制在550kHz。但是我们应该注意,增益带宽积的特性不太好,因此芯片之间可能会有很大差异。添加高通滤波器会造成相位偏移,因为每个运算放大器可能不同,这意味着每个麦克风的相位偏移也不同。由于互相关依赖于检查输入信号的相位,这意味着峰值的位置取决于麦克风听到的声音的频率。
    四.软件
    4.1 概述
    为了最大化系统的采样率,我们修改了时钟预分频器,使时钟频率达到60 MHz。然而,为了开始声音定位检测,需要按下按钮来激活程序,并且使用去抖状态机(有限状态机)来保持按钮的状态。首先,为了定位声音的方向,系统首先需要记录来自每个麦克风通道的读数,这是使用直接存储器访问来最小化处理器使用的,并且记录的麦克风数据存储在阵列中。第二,每个通道的记录与下一个通道互相关,并且用相应的相对定时识别互相关值的峰值点。第三,每对声道之间的相对定时将被用于通过使用定时差的相对方向和麦克风放置的物理关系的知识来计算声源的方向,以导出三个方向上的声源。最后,在薄膜晶体管显示屏上画出相应的箭头来提示结果。下一节将详细讨论软件的每个组件,还包括调试功能、实验方法和进一步的建议。
    4.2 直接存储器存取和模数转换器
    三个麦克风通道的模拟输入连接到三个模数转换器通道,即通道0、1和5。模数转换器配置为自动采样模式,在上一次转换完成时,将连续采样下一个数据,采样大小为三个通道,并转换为16位有符号整数。麦克风的录音是使用直接存储器存取完成的,特别是三个麦克风通道的三个直接存储器存取通道。对于每个通道,DMA最初被配置为从麦克风数据从模数转换器缓冲器传输到记录阵列,并且每次传输的整个块大小是记录阵列的大小,其被设置为采样速率乘以十分之一秒。一旦功能调用使能了直接存储器存取通道,直接存储器存取将以定时器2中断设置的速率传输16位大小的单元,该中断被配置为系统时钟/采样频率=2400个时钟周期。当整个数据块被传输时,码分多址信道将提升码分多址_电动车辆_夏令时_满标志,以表示传输完成。此外,计算线程检查所有三个DMA通道的完成标志,以开始声音定位的计算。
    4.3 按钮
    按钮线程持续读取按钮的输入,并使用按钮去抖状态机FSM来更新按钮的当前状态。FSM被用来适当地捕捉按钮的全部按下。按钮按下切换就绪标志,向计算线程发出信号,以直接内存分配传输开始计算。下图具体说明了FSM。
    在这里插入图片描述
    4.4 互相关
    一旦麦克风数据完全记录在阵列中,将对每对麦克风记录计算互相关。互相关是在信道0和信道1、信道1和信道2、信道2和信道0上计算的。在互相关计算中,每个通道的记录值加上每个麦克风通道的恒定DC偏置,这是为每个通道独立测量的。无论如何,通过沿着第二记录完全滑动第一记录的中间部分来计算每个互相关,并且计算完全重叠的记录的点积之和,并且得到的互相关值并存储在记录大小的数组中。滑动窗口的大小是在用多个窗口大小进行实验之后选择的,并且该大小允许使用大量的记录值来寻找两个通道之间的相关性,以及足够的互相关数据来适应麦克风的物理距离在记录约束之间的最大时移量。当互相关值被计算时,三对中每一对的峰值及其索引值将被识别和记录,以计算源声音的方向。
    4.5 计算方向
    声源的方向是使用互相关计算期间检测到的三个峰值指数来计算的。使用3位编码来确定方向。编码的每个比特对应于峰值指数是正还是负,当指数是正时,这意味着第一次记录发生在第二次记录之前,因此第一次记录的麦克风比第二次记录的麦克风更靠近声源。编码由以下赋值构成。
    在这里插入图片描述
    接下来,使用以下逻辑使用3位编码来确定声音的方向,该逻辑将方向确定为在其他两个麦克风通道之前接收信号的麦克风通道。
    在这里插入图片描述
    通过画一个指向三个麦克风之一的箭头,结果方向将显示在薄膜晶体管显示屏上。
    4.6 数模转换器(用于调试)
    为了调试系统,配置了两个数模转换器通道。数模转换器配置为通过串行接口输出互相关数据,串行接口以定时器3中断设置的速率输出数据,定时器3中断配置为60kHz。输出引脚连接到示波器,以便观察和分析互相关信号,这些信号从最新的计算互相关阵列中反复流出。
    4.7 尝试了另一种方法
    我们尝试的第一种声音定位计算方法是连续计算每个麦克风通道与预先录制的录音的互相关。因此,由于实时计算的需求非常紧张,采样率受到很大限制。我们达到的最高采样速率在微处理器运行时为60 MHz,它太低,无法合理分辨麦克风通道之间的时序延迟。从这种方法获得的结果不能识别出符合理论直觉的一致相关性。
    4.8 代码片段
    下面是每个函数和线程的代码,仅供参考。

    //定时器3中断服务例程
    void __ISR(_TIMER_3_VECTOR, ipl2) Timer3Handler(void) {   
    mT3ClearIntFlag();    
    transfer_to_DAC_Channel_A();    
    transfer_to_DAC_Channel_B();
    }
    //计算源声音的方向
    //在薄膜晶体管显示器上绘制结果
    void compute_direction() {    
    // assigned encoding   
     encoding = (peak_index[0] > 0) << 2 | (peak_index[1] > 0) << 1 | (peak_index[2] > 0);
     direction = check_cases_identified _direction(encoding);
     draw_TFT(direction);}
     //交叉关联每对麦克风录音
     void cross_correlate() {    
        for (each channel) {        
           for (shift range) {           
              for (index range) {         
              correlate_value += mic(channel) + biase * mic(next channel) + biase;
                             }            
                             Update_new_peak_value(); 
                     }   
                 }
    }
    //线程等待按钮按下来记录和调用
    //交叉关联和计算方向
    static PT_THREAD(protothread_computation(struct pt * pt)) {    
    PT_BEGIN(pt);   
    while (1) {        
    wait_until_button_pushed();        
    Reset_button;        
    Star_DMA_transfer(All_3_channels);        
    wait_until_all_DMA_complete();        
    //cross_correlation the new recordings        
    cross_correlation();        
    //compute and display direction        
    compute_direction();    
    }    
    PT_END(pt);
    }
    //这个线程更新并维护按钮的状态
    static PT_THREAD(protothread_button(struct pt * pt)) {    
    PT_BEGIN(pt);   
    while (1) {        
    button = Read_Button_input();        
    // FSM for the button press debouncing        
    transition_case_for_button_state();   
     }    
     PT_END(pt);
     }
     //主要功能。配置和初始化定时器、数模转换器、模数转换器、直接存储器、薄膜晶体管、引脚、线程。
    void main(void) {    
    // Configure timer3 interrupt    
    Config_Timer3(sys_clock / 1000);     
    // Configure timer 2 interrupt    
    Config_Timer2(sys_clock / sampling_rate);    
    /// SPI setup for DAC    
    Configure_SPI_for_DAC();     
    //Configure and enable the ADC    
    Enable_ADC_for_3_Channels();     
    // DMA Configure for 3 channels  
    Enable_3_DMA_Channels_on_Timer2_and_Raise_DONE_flag();     
    // set up i/o port pin    
    set_digital_input_and _pulldown(push_button_input_pin);     
    // config threads    
    PT_setup();    
     // setup system wide interrupts    
     INTEnableSystemMultiVectoredInt();     
     // init the threads   
      initialize_threads();     
      // config and init the display    
      tft_config();     
      // round-robin scheduler for threads    
      while (1) {        
      PT_SCHEDULE(protothread_button( & pt_button));   
      PT_SCHEDULE(protothread_computation( & pt_computation));    
         }
     }

    五.结果
    声音定位效果很好,计算延迟很小。当系统能够捕捉麦克风电路带通范围内的正弦扫描有效部分时,该器件工作最佳,因此可以完全捕捉录音的频率特性进行比较。这意味着系统的精度取决于点击按钮的用户的精度,也取决于系统使用的运算放大器,因为这将决定上限的位置。测试设备时捕获了以下图像。
    在这里插入图片描述
    在这里插入图片描述
    两条上迹线显示来自其中一个麦克风的记录信号,下迹线显示来自两个麦克风通道的互相关结果。互相关迹线使用高电平信号来显示数据何时开始和结束。这使我们能够看到互相关的起点和终点以及峰值的位置。在第一幅图像中,峰值明显向左移动,表明一个记录领先于另一个记录,而在另一幅图像中,峰值居中,表明两个记录大致在同一时间。虽然该系统通常是正确的,但存在一致性问题。项目范围缩小到检测与每个麦克风对齐的方向的原因是读数不一致,即使读数一致也不完全正确。这可能是麦克风电路的问题。运算放大器的增益带宽积引起的低通滤波可能会导致麦克风在输入信号上看到不同的相移。我们相信情况是这样的,因为互相关的峰值会像上面描述的那样以干净的波形返回,但是峰值会位于错误的部分。这表明麦克风电路或采样有问题。由于中央处理器时钟工作在60兆赫,模数转换器的采样频率也在兆赫范围内,所以我们通常不关心模数转换器采样之间的延迟,也不关心直接存储器将数据顺序复制到缓冲器中。这只会使麦克风电路在输入信号中产生一些不希望的相移。更糟糕的是,由于相移差可能与频率有关,并且测试信号是频率的线性扫描,这意味着采样和互相关的结果将取决于用户在频率扫描中在正确时间按下按钮的能力。这是不可靠的,因为大多数人不能捕捉到精确到不到十分之一秒的正确时间,所以如果系统也能自己触发采样会更好,因为这样会更一致。
    另一方面,这个项目实际上没有任何安全问题。由于该设备只需记录音频信号并在显示器上返回方向,因此它没有任何移动部件,也不发射/辐射任何电磁波、任何声波或任何可能对周围环境和生物特别有害或干扰的能量输出。就可用性而言,该设备需要相当多的工作。首先,移除按钮将是一个关键的改变,这将提高设备的可用性,因为目前,它需要一个正确定时的按钮,这将要求用户是准确的。第二,扩展带通电路的频率范围,以允许设备检测更宽范围的声音信号。最后,使用更多麦克风通道可能会提高声音方向的检测分辨率。因此,为了充分利用该设备,需要进一步开发该设备的许多方面。
    六.结论
    最终设计和原始设计没有达到最初为项目设定的预期。因此,项目范围缩小到指向最近的麦克风。我们遇到的主要问题是,系统没有从每对麦克风通道之间的相对时间延迟中给出特别一致的结果。在很大程度上,系统会分辨出正确的麦克风,但是不一致意味着它多次指向错误的方向。最初,我们希望能够以高得多的分辨率,十度,分辨出一个方向。互相关代码和代码中峰值的索引似乎给出了正确的结果。互相关波形看起来像理论上的预期,但偶尔会在错误的位置出现峰值。返回峰值索引的代码似乎也会根据观察到的波形峰值给出正确的索引。因此,误导性不一致性的来源很可能不是来自计算,而是麦克风电路。如结果部分所述,麦克风电路中滤波器所选择的截止频率不是我们希望系统运行的声音范围的正确频率。此外,运算放大器增益带宽积的低通也可能导致电路对音频施加不同的相移。如果我们要重做这个项目,我们可能会降低增益,选择增益带宽积更高的运算放大器。这可能会减少或消除我们得到的相关峰值的变化。此外,我们为低通滤波器选择了不同的截止频率,这将使我们的项目能够在更高的频率范围内工作。让系统自己触发采样也可能有助于减少我们看到的不一致性。该系统没有任何重大的安全问题。该项目只需读取音频读数,并尝试确定音频的来源方向。唯一的输出显示在薄膜晶体管显示器上。薄膜晶体管显示屏不够亮,不会损害人们的视力。关于隐私,音频记录的持续时间被限制在十分之一秒,一旦采集下一个样本,它们就会被丢弃。虽然理论上可以从用于调试的数模转换器通道中提取音频,但最终版本会删除该调试功能。
    七.物料清单
    项目 数量
    PIC32MX250F128B芯片 1
    大硬纸板19V电池 1
    薄膜晶体管液晶显示器 1
    麦克风 3
    小型焊接板 3
    运算放大器MCP6241 3
    跨接电缆 10
    扬声器 2
    SIP或插头插座/插头 20
    电压调节器MCP1702 1

    更多创意方案,长按识别下图中二维码,敬请关注本人的微信公众号“小科谈”,愿天下没有难做的电子产品。
    在这里插入图片描述

    展开全文
  • 目前基于麦克风阵列的声源定位方法大致可以分为三类:基于最大输出功率的可控波束形成技术、基于高分辨率谱图估计技术和基于声音时间差(time-delay estimation,TDE)的声源定位技术。 基于TDE的算法核心在于对...

    目前基于麦克风阵列的声源定位方法大致可以分为三类:

    基于最大输出功率的可控波束形成技术

    基于高分辨率谱图估计技术和基于声音时间差(time-delay estimation,TDE)。

    基于TDE的算法核心在于对传播时延的准确估计,一般通过对麦克风间信号做互相关处理得到。进一步获得声源位置信息,可以通过简单的延时求和、几何计算或是直接利用互相关结果进行可控功率响应搜索等方法。这类算法实现相对简单,运算量小,便于实时处理,因此在实际中运用最广。

    GCC-PHAT

    基于广义互相关函数的时延估计算法引入了一个加权函数,对互功率谱密度进行调整,从而优化时延估计的性能。根据加权函数的不同,广义互相关函数有多种不同的变形,其中广义互相关-相位变换方法(Generalized Cross Correlation PHAse Transformation,GCC-PHAT)方法应用最为广泛。GCC-PHAT方法本身具有一定的抗噪声和抗混响能力,但是在信噪比降低和混响增强时,该算法性能急剧下降。

    研究表明麦克风对的GCC-PHAT函数的最大值越大则该对麦克风的接收信号越可靠,也就是接收信号质量越高。

    1、计算传播时延

    广义互相关函数时延估计算法根据两个麦克风信号的互相关函数峰值来估计时延值。在声源定位系统中,麦克风阵列的每个阵元接收到的目标信号都来自于同一个声源。因此,各通道信号之间具有较强的相关性。理想情况下,通过计算每两路信号之间的相关函数,就可以确定两个麦克风观测信号之间的时延。

    阵列中两个麦克风的接收信号为:

                                

    其中s(t)为声源信号,n1(t)和n2(t)为环境噪声,τ1和τ2是信号从声源处传播到两个麦克风阵元的传播时间。相关参数可参见下图:

        

    互相关算法经常被用来做时延估计,表示为:

    代入信号模型,则有:

    此时因为s(t)和n1(t)互不相关,上式可以简化为:

    其中τ12=τ1-τ2,假设n1和n2是互不相关的高斯白噪声,则上式可以进一步简化为:

    由相关函数的性质可知,当τ12=τ1-τ2时,Rx1x2(τ)取最大值,是两个麦克风之间的时延。

    互相关函数和互功率谱的关系:

     在麦克风阵列信号处理实际模型中,由于存在混响和噪声影响,导致Rx1x2(τ)的峰值不明显,降低了时延估计的精度。为了锐化Rx1x2(τ)的峰值,可以根据信号和噪声的先验知识,在频域内对互功率谱进行加权,从而能抑制噪声和混响干扰。最后进行傅里叶逆变换,得到广义互相关函数Rx1x2(τ):

    其中φ12(w)表示频域加权函数。广义互相关时延估计算法框图如下:

     

     

    2、常用加权函数及其特点

     相位变换加权函数的表达式为:

    由上式可知,相位变换加权函数实质上是一个白化滤波器,使得信号间的互功率谱更加平滑,从而锐化广义互相关函数。经过PHAT加权之后,Rx1x2(τ)广义互相关函数的表达式为:

    可以看出,经过PHAT加权的互功率谱近似于单位冲激响应的表达式,突出了时延的峰值,能够有效抑制混响噪声,提高时延估计的精度和准确度。

     

    3、互相关函数

    x(n)和y(n)的互相关函数是将x(n)保持不动, y(n)左移m个样本点,两个序列逐个相乘的结果,顺序不能互换。但是,按照时域卷积的方式求互相关函数的方法计算复杂度较大,所以将在频域进行操作(FFT和IFFT),即线性卷积的FFT算法。

    两个信号的互相关函数的频域等于x信号频域的共轭乘以Y信号的频域。

     

    4、近场和远场

    需要说明的是,GCC-PHAT算法是用在近场模型下的。

    当声源足够远时,麦克风阵列的直径与声源距离相比可忽略,此时一般采用远场模型。远场模型认为声源位于无穷远处,麦克风接收到的声波为平面波,此时我们仅考虑声波的入射方向,而不考虑声源相对于麦克风阵列的的距离。

    当声源的距离较近时,我们需要考虑声源相对于麦克风阵列中的距离,此时远场模型里不再适用,应当采用近场模型。近场模型认为麦克风接收到的声波为球面波。近场模型更符合实际应用情况,能提供更多的声源位置信息,提高定位的精度。

    通常,判断近场和远场的经验公式为:

                 

    其中d为麦克风阵列的直径,λ为目标信号的波长,r为麦克风阵列和声源之间距离。
    在实际的近场模型应用中,麦克风阵列所接收到的信号主要包括3部分;声源直达信号、经过墙壁或障碍物的反射信号以及环境噪声信号。

    声波的波长:0.017--17米。 波长=波速/频率,波速一般是340米/秒;,人耳听到的声音的频率是20HZ--20KHZ,所以得出人耳听到的声音的波长:0.017--17米。 

    0.18*0.18*2/0.017 =3.8m

    SRP-PHAT

    SRP-PHAT(Steered Response Power - Phase Transform) 基于相位变换加权的可控响应功率的声源定位算法。

    基于麦克风阵列的声源定位方法很多,相位变换加权的可控响应功率SRP-PHAT声源定位算法在混响环境中有较强的鲁棒性,可实现真实环境中的声源定位,因此该算法得到了广泛应用。SRP-PHAT对阵型没有特定要求,因此也适用于分布式阵列,事实上很多基于分布式阵列的定位系统采用了该算法。

    SRP-PHAT算法的基本原理是在假想声源位置计算所有麦克风对接收信号的相位变换加权的广义互相关GCC-PHAT函数之和,在整个声源空间寻找使SRP值最大的点即为声源位置估计SRP-PHAT对混响有较强的鲁棒性,但是在低信噪比SNR(Signal-to-NoiseRatio)环境中其定位性能较差。

    SRP-PHAT算法的计算流程如下:

    其中, Q 为预先设定的搜索空间。

    SRP-PHAT法是一种对窄带和宽带信号均可适用的有效方法, 得到了广泛研究和应用。但是由于其全局搜索算法运算量较大,限制了该方法的实时性。

     

    扩展

    GCC时延估计中,信号x1和x2都采用理想模型,并没有过多考虑混响噪声,所以当混响较强时,GCC时延估计算法效果较差。而自适应最小均方算法采用麦克风信号的实际模型,通过自适应滤波产生h1(n)和h2(n),再从h1(n)和h2(n)中估计时延,可以有效抑制混响的影响。

    实际模型中,第i个麦克风接收的信号xi(t)可以表示为:

    其中aik表示第k条反射路径到达第i个麦克风的能量衰减,τik表示对应的时延。*表示信号卷积,hi(t)称之为房间单位冲激响应函数,从数学角度反映了房间互相的物理特性。麦克风阵列信号的实际模型见下图:

    如图所示,实际模型中,麦克风接收信号不仅包括声源的直达信号和环境噪声,还包括语音信号在墙壁以及房间的其他物体之间重复反射再到达麦克风的信号,我们称之为混响。

    更多地,麦克风阵列信号的理想模型参见下图:

    如上图所示,在理想模型中,假设麦克风阵列的所有阵元接收到的语音信号只包含直达信号与噪声信号,噪声信号为环境噪声(高斯白噪声),并且每个麦克风之间的噪声相互独立。

    展开全文
  • 首先阐述了声源定位原理,然后提出了改进的广义互相关算法。该算法利用两信号之间的相关性,估计出麦克风之间的时延,进而得到声程差,并根据几何关系确定声源在空间中的位置,最后在嵌入式平台上进行实验。实验结果...
  • 基于麦克风阵列的声源定位算法主要分类如下: 一、 波束形成(Beamforming) 基于最大输出功率的可控波束形成技术Beamforming,其基本思想为将各阵元采集的信号进行加权求和形成波束,通过搜索声源的可能位置来引导...
  • 因此,噪声及混响背景下的声源定位,是麦克风阵列信号处理必然要面对的一个重要问题。 本文首先介绍了麦克风阵列相关的理论基础,如语音信号和噪声信号特性,以及适用于麦克风阵列研究的远近场信号模型、混响信号...
  • 针对目前安防监控系统监控效率低、盲目性大的问题,设计了一种基于相位差(difference of phase,DOP)的声源定位系统,介绍了系统的组成原理、软硬件电路设计与实现,提出了一种基于DOP的定位算法。该系统以DSP芯片TMS320...
  • 目录远场模型自由场信号模型互相关方法(Cross-Correlation,CC)广义互相关方法(Generalized Cross-correlation, GCC)GCC-PHAT...远场信号可以视为平面波,空气中声速为c,因此两个麦克风之间的相对时延为 在麦...
  • AliOS Things声源定位应用演示

    千次阅读 2018-10-09 14:59:08
    利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 声源定位算法 本案例集成了...
  • 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 声源定位算法 本案例集成了...
  • 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 概述 利用麦克风阵列进行...
  • 声发射用于声源定位技术,原理分析,三位定位技术,很好很强大
  • 2.2.3 基于最大输出功率的可控波束形成技术该方法对麦克风所接收到的声源信号滤波并加权求和来形成波束,进而通过搜索声源可能的位置来引导波束,修改权值使传声器阵列的输出信号功率达到最大,波束输出功率最大的点...
  • 基于BP神经网络的室内声源定位算法(附有程序)

    千次阅读 多人点赞 2020-05-18 21:45:38
    本文只讨论基于麦克风阵列的声源定位(即利用麦克风收集声源信息)。目前解决这个问题的主流方法有三个,分别是基于最大输出功率的可控波束形成技术、基于高分辨率谱估计技术、基于声达时间差的定位技术。这三种方法...
  • 最近在优化频谱监测系统中的TDOA定位精度。TDOA中最重要的问题无外乎是信号时差的提取。看了国内外的文献,一致首推“广义相关(Generalized Cross Correlation–GCC)算法”。 查文献,在matlab中使用模拟正弦波...
  • 1 算法原理 MUSIC算法是空间谱估计测向理论的重要基石。如下: (1) 不管测向天线阵列形状如何,也不管入射来波入射角的维数如何,假定阵列由M个阵元组成,则阵列输出模型的矩阵形式都可以表示为:Y(t)=AX(t)+N
  • 基于麦克风阵列模拟人耳进行三维空间的声源定位,有着广泛应用前景,可应用于大型机械产品的故障检测以及新生婴儿先天性心脏病检测筛查等领域,这些应用要求定位精度高,空间定位分辨能力强,而声源的定位精度与声音...
  • 本篇博客希望通过通俗的方式讲清一些简单经典声源定位的方法,并能够按照这种方法自制一个声源定位系统。
  • 上篇博客中已经详细介绍了声源定位的一些概念以及MVDR波束形成法的原理,在本篇博客中,我将介绍另一种更为精准的波束形成算法:MUSIC算法以及这两种算法的Python代码实现。 二、MUSIC算法 MUSIC(Multiple Signal ...
  • 原文链接:...声源定位算法是利用麦克风阵列进行声音...
  • 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUSIC和DOA算法并不适用该场景,本仿真主要用TDOA算法进行定位。 常用的阵列信号定位算法主要有三大类:基于高分辨率谱估计的定位技术、基于可控...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 290
精华内容 116
关键字:

麦克风声源定位原理