基于双麦克风声源定位的视频跟踪
摘要:声源定位跟踪技术在当今社会有着越来越广泛的应用。在此使用两个高灵敏度麦克风
作为传感器,配以音频信号处理芯片,接收音频信号并进行模数转换,使用 FPGA器件作为
核心控制器,结合 TDOA 算法和 ILD 算法,实现在室内环境下、二维平面内的声源定位。并
根据声源定位的信息驱动摄像头转动,使其一直对准于声源所在位置,并保持持续跟踪。FPGA
使用 NiosⅡ内核,方便使用高级语言进行程序设计。摄像头的视频输出信号可接于 PC 机或
其他视频设备。与其他定位算法相比,系统减少了使用传感器的数量。
本文引用地址:http://www.eepw.com.cn/article/201610/307131.htm
在日常生活中,声源跟踪定位技术有着广泛的应用。例如在视频会议中,声源定位被用于检
测讲话人的位置,并自动调整摄像头转动角度,使其对准讲话者;舞台演出中,声源定位跟
踪可是摄像头自动保持指向主持人或主角;安防保卫系统中,声源定位技术可使监控摄像头
在监控区域发生声响的瞬间对准于声源位置,并保持对移动声源的跟踪。
现在常见的麦克风声源定位算法多见于 TDOA 算法,其基本原理是根据信号到达两个不同位
置的麦克风的时间差,估计出信号到达两个不同位置麦克风的距离差,可以列出一个双曲线
方程,同时使用另外两个不同的麦克风同时检测信号可以得到另外一个双曲线方程,两个双
曲线方程的交点就是声源的位置坐标。使用这种方法进行声源定位时,至少要使用三个麦克
风,使用两次 TDOA 算法进行运算,才能完成一次定位操作。为了实现更精确的声源定位,
也常采用阵列技术,将多个麦克风组成线阵,或方阵采集信号进行声源定位。但这种定位技
术的算法更为复杂。本文采用两个高灵敏度麦克风作为传感器,选用 FPGA作为控制器,当
对声源实现定位后,控制步进电机转动,使摄像头对准声源。当声源位置发生移动时,可使
摄像头自动保持跟踪。
1 设计原理
ILD:
系统使用 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 显示出来。用户在使用时可根据具体的使用环境建立定位的坐标系。确定
坐标系后在系统启动初始化时将两个麦克风的位置和摄像头的位置的坐标通过矩阵键盘输
入到系统中。
3 系统软件设计
FPGA 编程中常用的语言是 VHDL 和 Verilog HDL 语言。这两种语言都是硬件编程语言,功能
强大,可用于描述数字系统的结构,功能等,逻辑性非常强,但是若用于一些信号处理方面
算法的编程,则难度和工作量都比较大。Altera 公司推出了可移植于 FPGA 芯片上的 NiosⅡ
内核。利用该内核可以方便的裁剪系统资源,同时使用 C/C++语言进行程序的开发,大大降
低了利用 FPGA 开发的难度。为了保证系统响应的实时性,本文使用 NIOSII/f 型内核。虽然
占用了大量的 FPGA 资源,但获得了最高的系统性能。同时添加的其他系统资源包括:片上
SRAM 63 KB,一个定时器,一个串口,一个 JTAG 接口,一个 FLASH 控制器 CFI,一个用于
矩阵键盘的 5 位的通用 I/O 口,用于液晶显示的 16 位通用 I/O 口,两个 9 位的通用 I/O 口
用于前端数据采集电路的输入,两个 1 位的 I/O 口用于控制两个步进电机。在 QuartersⅡ9.0
开发环境中完成对 NiosⅡ内核的配置和编译后,在 NiosⅡIDE 中使用 C++语言进行程序的编
写。图 2 为软件流程图。
系统启动后,首先进行初始化操作,设置 UDA1341 的工作方式,设置麦克风和摄像头的位置
坐标。声源所发出的音频信号经前端信号采集电路处理后变为离散时间信号。系统每次从前
端信号处理电路的两路输出中读取相同时间段的相同长度的序列后,将其存储在内存中,直
到下次读入数据进行更新。系统对读入的音频数据进行归一化运算,消除两个麦克风接收到
信号的能量的差异。然后对两列信号进行广义的互相关运算,判断是否有有效的声源信号的
输入。若有有效地声源信号输入,则根据前端信号采集电路的采样速率,计算出两个麦克风
接收到信号的时间差。并利用存储的原始信号计算出两个麦克风接收到信号的功率衰减,根
据式(6),式(7),计算出声源的位置坐标,并存储。
音频归一化:而数据做归一化处理以后,会让各个不同特征对距离计算的贡献大致相同,从
而避免人为的数据倾斜。音频信号进行幅度归一化
广义互相关:通过对比两路输入信号有无相同的波形,判断是否有有效声音输入,通过广义
互相关估算时延
广义互相关函数法:generalized cross correlation(GCC)
信号的功率衰减:常规参数:dB
若无有效的信号输入,则系统继续从前端处理电路中读取数据,继续判断。系统在安装时,
为避免摄像头的视线被障碍物所遮挡,摄像头的安装位置应高于两个麦克风的安装高度。因
此在计算摄像头的转动角度时即需要考虑摄像头的水平转动角度,也需要考虑摄像头在垂直
方向上的转动角度。系统计算出声源位置坐标后,根据当前摄像头的指向,分别计算出摄像
头在水平方向和垂直方向上需转动的角度,控制步进电机进行转动,使摄像头指向声源的位
置。完成一次定位操作后,统继续从前端电路中读取数据,进行下次定位操作。
4 实验测试
由于在设计时只使用了两个麦克风,仅能在二维平面内实现对麦克风正面 180°范围的定位
和跟踪,摄像头的安放高度应高于声源的高度,否则有可能出现摄像头看不到声源位置的情
况。在 10.8 m×7.5 m×3.5 m 的室内环境进行试验,将麦克风和摄像头置于边界,麦克风
安放高度为 1.5 m,和声源处于同一高度,摄像头安放高度 2.0 m,为了保证能够得到方程
的解,麦克风的坐标不能设置在坐标轴上;设麦克风 1 的坐标为(1.0,1.0),麦克风 2 的坐
标为(1.5,1.0)。使用由信号发生器产生的脉冲信号作为声源,每组信号仅有一个脉冲,频
率 2 kHz,幅度 3 V,每组脉冲发射间隔 2 s,通过一音箱播放,室内环境保持安静。将声
源以较慢的步速在室内移动,系统可实现对声源的正常跟踪,使摄像头一直将声源保持在镜
头的视野范围内。图 3 是计算机所监测到的音频信号的波形图。上面的波形是位于右侧的麦
克风所接收到的信号,下面的波形是位于左侧的麦克风所接收到的信号,其中右侧的麦克风
距离声源的位置更近一些。从波形图中可以看出左侧的麦克风接收到的信号相对于右侧的麦
克风有一定的时延,并且接收到信号的幅值也更小一些。系统在设计时仅使用两个麦克风作
为传感器,当声源移动至两个麦克风连线的中垂线位置时,由于两个麦克风接收到的信号的
能量衰减相同,无法将方程解出,此时将麦克风稍微偏转一下角度,使声源偏离中垂线位置,
即可继续定位跟踪。
5 结语
在舞台和视频会议中,声源定位跟踪技术相对于其他技术具有很多优点。声源定位跟踪可实
现全自动的工作模式,工作过程中不需要人为控制操纵。与相同功能的红外跟踪定位系统相
比,跟踪目标身上不需要携带红外发射装置,不必考虑红外发射的角度,频率等问题。与采
用图像识别实现跟踪的方法相比,其系统结构、算法等各方面更为简单。同时若将摄像头换
成聚光灯,也可实现灯管的自动跟踪控制。现有的设计中,如果要确定一个二维平面的点,
至少需要三个麦克风作为传感器接收信号。本设计采用两个麦克风作为系统传感器,使用
TDOA 算法和 ILD 算法相结合的方法实现定位操作。比现有的设计减少一个麦克风,使系统
体积更小,同时也降低了麦克风安放的要求,使麦克风可以根据具体环境更加灵活的放置。