音频信号处理

  • 格式:pdf
  • 大小:378.89 KB
  • 文档页数:3

摘要
在机器人技术领域,由于嵌入式处理器的运算能力有限,在某些情况下,尤其是在处理音频信号时,可将一些运算转移至一个远程桌面或服务器上完成。

例如,在一个远程处理器上完成话语识别往往效率更高,更加迅速、准确。

大多数现代智能手机均以远程方式处理语音识别。

此外,用户可能会希望在机器人上直接使用自己的信号处理算法。

例如,用户会希望通过分析输入信号来探测诸如音乐、铃声、语音等不同发声事件。

本文将介绍机器人NAO 上的音频模块的组织方式、如何访问NAO 扩音器声音数据以及如何以本地或远程方式将数据输送至NAO 的扬声器。

相关研究成果
● 随着互联网的不断发展,研究人员成功实现了 众多研究项目,使人们可以通过网络传送大量(音频或视频)数据。

为此开发出的许多使用协议还可优化数据传输质量。

NAOqi 框架使用的正是其中的一种协议(即“SOAP ”,全称为“Simple Object Access Protocol ”),可以通过网络收发音频信号。

● 在NAO 上生成和记录声音时,使用的是ALSA (Advanced Linux Sound Architecture )库。

原理
目前,NAOqi 中包含六个相互关联的音频模块。

其组织方式如图1所示。

ALAudioDevice 模块管理音频输入与输出。

因此,所有试图向NAO 的扬声器发送声音的模块,或是处理来自NAO 扩音器声音的模块,都必须与ALAudioDevice 模块交流信息。

图1NAOqi 音频模块
构架
关键性能音频信号处理
实时声音处理
为了实时处理扩音器输入信号,首先需要创建一个“Aud io in”模块。

随后,该模块必须订阅至ALAudioDevice 模块。

后者将通过一个调回函数发送输入缓冲。

ALAudioDevice 按顺序发送缓冲,即输入缓冲首先发送至第一个订阅模块,待第一个模块完成处理后再发送至第二个订阅模块,以此类推。

该工作模式请见图2。

ALAudioDevice 模块按照由inputBufferSize 的设定值及输入样本率(48kHz )确定的时间间隔定期读取输入缓冲。

因此,订阅模块的总处理用时不得超过这一时间间隔,否则会错失音频缓冲,从而无法实现实时处理。

优点
远程处理声音信号的优点在于用户可较为轻松地调试或优化其声音处理算法,而且,与在机器人上运行相比,这些算法可占用更多CPU 负荷。

然而,如果用户的模块直接在NAO 上运行,音频缓冲的输送速度会较快。

局限
● 通过ALAudioDevice 模块可获得的最大输入缓冲大小为65536(每个扩音器频道为16384个16位样本)。

因此,一个缓冲的最长处理时间为341ms 。

● 通过ALAudioDevice 模块可发送的最大缓冲大小为32768(16384个16位立体声样本)。

● 由于输入样本率为48kHz ,远程声音处理所需的最低链接比特率为384kBits/s 。

如果用户使用的网络链接速度过低,或链接质量不佳,就会导致错失音频缓冲。

图2输入缓冲
发送与处理的工作模式
工作原理
●访问来自NAO扩音器的声音数据
为了访问来自NAO扩音器的声音数据,用户应首先创建一个NAOqi模块(使用C++或Python语言),模块中需包含一个回调函数,根据模块的执行方式分别命名:如果为本地执行,命名为“processSound”;如果为远程执行,则命名为“processSoundRemote”。

然后,根据该模块是本地或远程执行,它只需调用ALAudioDevice模块的“subsribeLocalModule”或“subsribeRemoteModule”函数,即可开始接收音频缓冲。

每当一个音频缓冲可以被处理时,ALAudioDevice模块就会通过“processSound”或“processSoundRemote”函数将其发送出去。

接收的缓冲包含4个16位、48kHz采样的扩音器信号。

这些样本为交替出现,即缓冲包含s1m1、 s1m2、s1m3、s1m4、s2m1、s2m2……其中,“simj”为扩音器j的样本号i。

扩音器的代号依次为:1为左侧扩音器,2为右侧扩音器,3为前方扩音器,4为后方扩音器。

在SDK中有一个范例:“/modules/src/examples/sounplayback”。

您也可以通过以下链接下载该范例:
/multimedia/soundplayback.zip
● 向NAO的扬声器发送声音
为了向NAO的扬声器发送声音,用户只需根据模块为本地或远程执行,调用ALAudioDevice模块的“sendLocalBufferToOutput”或“sendRemoteBufferToOutput”函数。

该函数自变量中给出的缓冲必须包含16位立体声声音样本。

如要调整输出样本率,只需调用ALAudioDevice模块的“setParameter”函数。

您可通过以下链接下载一个范例:
/multimedia/rms_level_calculation.zip
应用方法
NAO出色的音频性能可帮助研究人员完成人与机器人互动与交流领域的一系列实验和研究项目。

例如,NAO被用作交流工具,用户可以像同另一个人交谈一样与NAO互动(说话、倾听)。

信号处理无疑是一个很好的例子。

您可通过NAO的音频模块,运用您自己的编码,处理来自扩音器的实时原始音频信号。

例如,法国机械工程与信息技术实验室(LIMSI)正在研究人类声音中的情绪探测(更多信息,请见:http://gdr-isis.fr/uploads/comptes-rendus/reunion-123/04_Devillers. pdf)。