基于树莓派4B及Jetson Nano的多路音频采集传输系统
2020-01-11徐绍峰陈静轩刘都鑫蔡希昌鲍志平陈钰婷刘通于东池乔子凌
徐绍峰 陈静轩 刘都鑫 蔡希昌 鲍志平 陈钰婷 刘通 于东池 乔子凌
摘 要: 为解决多路音频信号的采集传输及后续信息处理问题,研究一种高性能前端与嵌入式AI后端相结合的系统设计。硬件设计方面,前端采用树莓派4B及6麦克的环形麦克风阵列实现采集及预处理,并通过Wi-Fi進行语音传输;后端处理采用Jetson Nano模块,作为实现语音处理的嵌入式AI平台。软件设计方面,采用C/S架构,进行Linux下的C++编程,其中树莓派作为服务器,实现麦克风信号的采集、编码和网络传输;Jetson Nano模块作为客户机,实现网络通信及实时语音处理功能。测试结果表明,多声道音频处理系统运行稳定,架构合理,具有良好的工程应用潜力。
关键词: 嵌入式AI平台;音频传输;树莓派;Jetson Nano模块;多声道音频处理系统
中图分类号:TN91 文献标识码:A 文章编号:2095-8412 (2020) 06-040-05
工业技术创新 URL: http://gyjs.cbpt.cnki.net DOI: 10.14103/j.issn.2095-8412.2020.06.007
引言
在当前的音频测量领域,麦克风阵列技术逐渐成为主流,其多声道输出的特性在语音识别、声源定位和声音监测等应用场景中被广泛使用[1-3]。但是,由此也会带来多路音频信号传输的问题。原始传感器(麦克风)的输出信号一般为模拟信号或者TDM数字信号,难以直接进行长线传输[4]。常见的I2S及PCM等数字总线属于板内信号传输,不能满足长线传输的要求[5-6]。对于嵌入式设备来说,阵列大小及麦克风个数也会受到一定的限制[7]。为解决上述问题,途径之一是利用具备较高性能的微处理器进行前端信号采集、数据传输及预处理。
基于以上应用需求,本文从硬件上对嵌入式AI、多路音频采集及传输系统进行了研究,提出了一种基于树莓派4B及Jetson Nano的多路音频采集传输系统。软件方面,应用树莓派4B和Jetson Nano模块及TCP/IP协议,实现麦克风阵列的多声道音频数据实时传输、实时采集以及实时播放等功能。
1 需求分析
为了实现多路音频数据实时传输、实时采集以及实时播放的功能,需要系统具有较高的性能和进行网络通信的能力。同时作为嵌入式音频采集和传输系统,整个系统应具备小型化、低功耗和易部署的特点。基于以上要求,选择了树莓派和Jetson Nano作为主要模块。
树莓派作为嵌入式前端设备,采用ARM系列的处理器,具备体积小、功耗低、性能强大等特点。同时,集成了无线网卡和40 Pin的扩展IO接口,方便进行语音信号的无线传输和多声道麦克风的连接。因此选择树莓派作为音频信号的前端采集及传输设备。
后端处理部分则需要强大的数据处理能力和AI计算能力,可以运行目前主流的Tensorflow、Pytorch和Keras等深度学习框架,因此选择了Jetson Nano开发套件。该套件由NVIDIA在2019年NVIDIA GPU技术大会(GTC)发布,具有强大的AI处理性能,能够满足后续对多路音频的实时处理。
为保证音频信号采集的清晰和完整性,音频采集的硬件设备应具有多声道、兼容性好、灵敏度高等特点。因此,选择了矽递科技的ReSpeaker 6-Mic圆形麦克风阵列,作为音频采集的硬件设备。
软件设计方面,一方面需要满足数据实时传输的要求,另一方面需要较高的传输带宽以满足无压缩多路音频信号传输的要求。因此需要满足高实时性和高带宽的要求,并尽量满足拓展需求。
2 技术方案
2.1 系统架构
该多路音频采集传输系统架构由三个模块组成,分别为声音采集模块、服务器模块及客户端模块。系统总体框图如图1所示。其中,声音采集模块采用基于树莓派的ReSpeaker 6-Mic圆形阵列套件;服务器模块为树莓派4B;客户端模块为嵌入式AI平台Jetson Nano。
ReSpeaker 6-Mic圆形阵列套件是一款适用于AI和语音应用的六声道麦克风扩展模块。该圆形阵列套件包含有两个ADC芯片和一个DAC芯片,用于声电信号的相互转换;含有八个输出通道,用于进行数据传输;含有六个全向麦克风,可全方位地采集声音信号;该阵列套件与树莓派的40 Pin接口兼容。
树莓派4B的核心处理器为博通BCM2711(四核1.5 GHz,Cortex A72架构),其使用LPDDR4内存,供电方式为5 V/3 A USB-C或GPIO 5 V。外围方面,支持双频Wi-Fi、蓝牙5.0、2个Micro HDMI 2.0接口、千兆网口、MIPI DSI接口、MIPI CSI相机接口、立体声耳机接口、2个USB 3.0、2个USB 2.0、40 Pin GPIO扩展接口。树莓派的主要任务是将采集到的音频数据通过无线传输发送给Jetson Nano。
Jetson Nano 的CPU为四核Cortex-A57,而GPU是规模较小的Maxwell架构显卡,拥有128个CUDA单元。Jetson Nano性能强大,可以提供高达472 GFLOPS的浮点运算能力。此外Jetson Nano支持高分辨率传感器,可以并行处理多个传感器的数据,并且可在每个传感器数据流上运行多个神经网络。Jetson Nano主要任务是接收树莓派传输的音频数据并进行处理,最后通过声卡将接受到的声信号播放出来。
硬件连接方面,首先将ReSpeaker 适配板与 ReSpeaker 6-Mic通过专用数据线进行连接;然后再将适配板插到树莓派的40 pin扩展IO接口上,并通过SPI总线将麦克风阵列采集到的音频信号传输到树莓派上;再然后通过Wi-Fi将树莓派与Jetson Nano互联;最后Jetson Nano通过信号转换,将接收到的音频信号进行输出。硬件实物图如图2所示。
2.2 软件方案
树莓派和Jetson Nano均运行在Linux系统之上,具有很强的扩展性能。考虑到运行效率,采用C++进行编程,实现相关采集、传输与处理功能。由于使用Wi-Fi通信,因此选择了网络编程的技术路线,并将软件設计划分为客户端程序和服务器端程序。编程基本思想如下:
(1)服务端程序在初始化之后,开始尝试采集音频。若从麦克风阵列中采集到了音频数据,则开始尝试发送该音频信号,确认发送成功后,将继续实时发送从麦克风阵列采集到的音频信号;若采集失败或发送失败则会导致程序自动终止。
(2)客户端程序在初始化之后,会开始不断检测数据的接收状态。若接收成功则将音频信号写入文件并保存为PCM格式,若接收失败则会结束程序。同时在程序执行时,会监听SIGINT用户中断,以方便用户可随时终止程序。
3 程序设计
程序设计分为服务端程序和客户端程序两部分。服务端通过libasound2(ALSA库)进行音频的采集,客户端使用librosa库进行音频数据的后续处理。客户端和服务器端程序都在Linux环境下进行编写,并分别在树莓派和Jetson Nano上使用ARM专用的GCC编译器进行编译。音频文件格式采用PCM流格式,程序流程图如图3所示。服务器和客户端工作流程相互配合。
3.1 服务器端程序
服务器端程序在树莓派上进行编译,并将树莓派设置为服务器端。首先注册回调函数,以便在收到用户中断(SIGINT)后自行完成收尾工作。随后设置音频采集格式为八通道S32_LE格式等初始化声卡操作,准备采集音频。随后,启动TCP套接字,并开始监听。采用阻塞式的监听模式。此模式下,服务器端会持续等待连接,只有当接收到用户中断时才会停止。
当有客户端连接后,服务器端通过ALSA库提供的软件接口持续采集数据,并将这些数据发给客户端。服务端器会直接向客户端发送原始的PCM数据流,不会发送任何额外数据,它也不从客户端接收任何数据。当客户端断开连接,服务器端会在数据发送接口返回失败状态时终止连接。服务端以单线程工作,即只接受一个客户端的连接请求,连接结束后服务端程序立即退出结束。服务端不响应除了用户中断外的任何键盘输入。
3.2 客户端程序
客户端程序在Jetson Nano上进行编译,并将Jetson Nano配置为客户端。客户端启动后,同样先注册回调函数以便完成收尾。随后,客户端会在本地工作目录下创建一个负责接收的PCM文件,准备以二进制写入数据。准备就绪后,客户端会尝试连接预设的服务器端IP地址和端口。如果客户端先于服务端启动,会产生拒绝连接错误,不会进行阻塞并持续等待连接成功。连接成功后,客户端会从服务端接收数据,并不断地写入文件。若一定时间接收不到数据(即产生timeout错误),客户端会主动终止。与服务端类似,客户端不响应除了用户中断外的任何键盘输入。
完成录音并接收到数据后,可以使用ffplay命令播放音频文件。并在后续调用Jetson Nano上的librosa库生成梅尔倒谱图,以方便进行后续的音频处理。
4 实验验证
4.1 实验步骤
首先将ReSpeaker 6-Mic 圆形麦克风阵列的底板与树莓派的IO口相连接,并在树莓派中将麦克风配置为树莓派的音频采集设备。随后将树莓派和Jetson Nano 连接到同一无线路由器中,并固定两个设备的IP地址,为音频传输做好准备。
启动树莓派中的服务器程序,作为服务器端,等待Jetson Nano与其进行连接。
启动Jetson Nano中的客户端程序,并输入服务器端的IP地址,作为音频的接收端。启启动程序后Jetson Nano将自动与树莓派连接,并开始自动接收服务器端的音频数据。接收完毕后将音频数据保存为PCM格式的音频文件。
4.2 实验结果与分析
实验内容:在客户端启动后,实验人员在麦克风附近讲话8 s,随后关闭服务器端。通过ffplay命令实时播放在Jetson Nano中实时接收到的音频信号的声纹图,如图4所示。可以看到,在前8 s有正常的声音波形,8 s后服务器关闭,不在接收数据后,声音波形消失。
ReSpeaker 6-Mic 圆形麦克风阵列中六个麦克风所形成的六个声道在8 s内产生的声音波形图如图5所示。从中可以看出,所有麦克风工作正常。由于实验人员距麦克风较近,六个麦克风的波形图基本近似。
在Jetson Nano 中将保存的PCM 格式文件转为WAV格式,随后利用在Jetson Nano中的librosa库生成录音的梅尔倒谱图,以方便之后进行深度学习或人工智能的应用。Jetson Nano生成的梅尔倒谱图如图6所示。
5 结论
本文通过ReSpeaker 6-Mic 圆形麦克风阵列、树莓派4B与Jetson Nano模块的配合与编程,实现了一种嵌入式多路音频采集传输系统。该系统具有较高的性能,也具备较高的灵活度,可广泛应用于可智能家居、家庭安防报警、家庭环境中危险信号检测等音频及信号处理领域中。
参考文献
[1] 张晓娜, 常乐冉, 吴炜等. Linux系统下Socket通信的实现[J]. 电声技术, 2020, 44(1): 87-89.
[2] 张润午, 赵海舟, 曾凡瑞等. 基于树莓派的智能语音提醒系统[J]. 物联网技术, 2019, 9(10): 79-81, 83.
[3] 张美平, 吴德平, 王灿杰等. 基于树莓派的智能家居设计与实现[J]. 计算机系统应用, 2019, 28(8): 109-114.
[4] 蒋达. 基于Socket的网络接口编程[J]. 办公自动化, 2018, 23(23): 29-30, 32.
[5] 刘华, 田占生, 冯宇飞. 基于树莓派的智能家居语音控制系统[J]. 制造业自动化, 2018, 40(10): 128-131.
[6] 严谦, 阳泳. 网络编程tcp/ip协议与socket论述[J]. 电子世界, 2016(8): 68, 70.
[7] 陈奎. 语音PCM编码通信系统的SIMULINK仿真[J]. 福建电脑, 2012, 28(10): 115-117.
作者简介:
徐绍峰,本科生。主要研究方向:Linux上的C++软件开发及嵌入式AI移植等。
蔡希昌,通信作者,高级工程师。研究方向:微弱信号及其智能处理。
E-mail: caixc20_ncut@126.com
(收稿日期:2020-10-09)