文献标识码:A
DOI:10.16157/j.issn.0258-7998.181931
中文引用格式:周静雷,李腾飞,冯源. 可用于电声测试系统的专业音频接口设计[J].电子技术应用,2019,45(1):105-108.
英文引用格式:Zhou Jinglei,Li Tengfei,Feng Yuan. Design of professional audio interface available for electroacoustic testing system[J]. Application of Electronic Technique,2019,45(1):105-108.
0 引言
电声测试系统主要用于测试扬声器、传声器等产品的电声性能,是电声产品研发和生产过程中不可缺少的设备。电声测试系统一般需要借助于声卡来实现音频信号的模数和数模转换[1-2]。声卡设计上更侧重于音质效果,声卡的音效处理功能在电声测试中是用不到的,使电声测试系统增加了不必要的成本;一般声卡需借助于同步协议才能完成连续扫频测试[2]。开发电声测试系统专用音频接口,有利于提高电声测试精度,简化测试流程,并降低成本。本文设计的音频接口上位机软件使用C++程序设计语言设计,提供了接口函数,可供电测量系统软件调用。高速USB2.0接口通信,能够以较快的速度传输音频数据[3]。下位机以STM32F429作为主控芯片,该芯片有FMC接口,可扩展SDRAM用于存储音频数据[4];使用WM8978音频编解码器实现对音频信号的数模和模数转换,该芯片采用了Δ-Σ技术[5],能够实现16位和24位采样精度,最高支持192 kHz采样率,满足了电声测试系统的需求[4-7]。
1 音频接口工作原理
在电声测试系统中,音频接口的作用实现D/A和A/D转换功能,为电声测量仪器提供激励信号,并将输入的信号转化为音频数据,供计算机软件分析,音频接口录音和播放功能流程如图1所示。下位机能够通过识别不同采样率、不同采样精度、不同声道数的wav文件对音频编解码器进行配置,按上位机的要求执行录音或播放功能。
2 音频接口硬件设计
如图2所示,音频接口由4路2通道音频接口组成,总共有8个输入通道和8个输出通道,因此能够用于扬声器功率试验系统[8-9]等需要多通道测试的电声测试系统中,软件通过4个2位DIP开关分配的设备ID号对4路2通道音频接口进行区分,4路2通道音频接口的USB接口汇总到一个USB HUB上,USB HUB通过1路USB接口与计算机相连,减少了对计算机USB接口数量的需求。
图3是使用1路2通道音频接口的电声测试系统,每个2通道音频接口能够实现单声道或立体声录音和播放,录音和播放功能既能单独进行,又能同步进行。音频接口的主控芯片为STM32F429,通过I2C串行总线对音频编解码器的功能进行设置;通过I2S内置音频总线与音频编解码器WM8978进行音频数据传输;通过ULPI接口外扩1片USB PHY芯片USB3300,实现高速模式的USB2.0通信;通过FMC灵活存储控制器接口外扩1片内存大小为32 MB的SDRAM芯片W9825G6KH-6,存储音频数据。
3 音频接口软件设计
3.1 下位机软件设计
下位机软件基于STM32标准库设计,程序流程图如图4所示。实验证明,硬件上电之后首先要延时一段时间才能对硬件进行初始化,否则会导致音频编解码器初始化失败,这是因为WM8978芯片上电后需要一定的时间启动,硬件启动之后I2C才能写入配置命令。
硬件初始化配置如图5所示。为了使录音和播放能够同步进行,主I2S为从I2S提供时钟,使主控芯片能够与音频编解码器进行同步全双工通信,但是导致了录音和播放的采样率只能相同。为了不间断地进行录音或播放,主I2S和从I2S都配置为DMA双缓冲模式[6],CPU对DMA的一个缓冲区进行读写时,不必停止录音或播放,DMA可以使用另一个缓冲区。USB初始化为高速模式的USB2.0 CDC设备,USB接收音频数据使用的是在SDRAM中申请的数据接收缓冲区。
硬件初始化完成后,下位机会等待USB连接,期间LED灯不断闪烁。USB连接之后LED灯常亮,当下位机接收到上位机的命令之后会根据命令值执行相应的功能,这些功能如下:
(1)查询设备状态功能,能够向上位机返回播放状态、录音状态、设备ID号、播放音量、采样率、采样精度等信息。其中录音状态包括录音关闭、录音开启、同步录音、录音完成4种状态,播放状态包括播放关闭和播放开启2种状态。
(2)设置采样方式功能,设置录音和播放的采样精度为24位或16位,采样率为8 kHz~192 kHz。
(3)播放开关和录音开关功能,从I2S使用的是主I2S的时钟信号,这样做可以保证录音和播放的同步,但是造成了主I2S关闭后,从I2S不能使用的问题。解决这个问题的方法是,硬件初始化完成后,主I2S不断发送DMA缓冲区的数据到音频编解码器,如果要打开播放功能,只需向主I2S的DMA缓冲区写入音频数据即可,如果要关闭播放功能,则写入空数据。如果通过关闭从I2S的方法关闭录音,会导致无法确定下一次从I2S开启后,传输的第一个数据属于哪个输入通道,造成录音数据的左右声道不确定,因此只能通过控制CPU是否读取从I2S缓冲区数据的方式控制录音功能的开启或关闭,只需使用一个录音开关标志位就能做到这一点。
(4)同步录音功能,同时开启播放和录音功能,录音和播放采用的是相同的时钟信号,理论上能够实现录音和播放的完全同步。
3.2 上位机软件设计
上位机软件分为主线程和通信线程,主线程能够查找接入计算机的USB设备,并将音频接口的USB设备句柄添加到通信线程。主线程提供的接口函数能够将用户对设备操作的信息发送到通信线程,通信线程根据查询到的设备运行状态信息和从主线程接收的设备操作信息决定要向下位机发送的控制命令类型以及如何进行数据传输。
上位机软件具体工作流程如图6所示,为了实现热插拔功能,上位机软件开启后首先向主窗体注册USB CDC设备,上位机软件就可以通过接收Windows操作系统的WM_DEVICECHANG消息识别USB插拔事件。上位机软件通过调用libusb库函数实现USB通信[10],主线程首先要初始化libusb库,然后查找USB总线和总线上的设备,根据设备描述符筛选出音频接口,依次打开所有的音频接口获得其USB设备的句柄,并查询其设备号,通过设备号可以得知当前句柄对应的音频接口通道。主线程将设备句柄和对应的设备号传送给通信线程,通信线程就可以对4路2通道音频接口分别进行操作了。最后软件进入等待操作状态,用户对USB设备进行插拔后软件会重新查找设备。用户通过设备接口函数进行操作之后,主线程会将设备的操作信息发送到通信线程中。
通信线程建立后会不停地查询设备状态信息,判断USB通信是否正常并查询下位机的运行状态。接收到主线程的设备操作信息之后,通信线程会将其与设备状态信息进行对比,根据信息的不同之处,向下位机发送相应的命令或进行数据传输。这种设计方案保证了上位机和下位机运行状态的同步,使整个系统运行更加稳定。
4 性能测试
4.1 信号输出性能测试
计算机分别使用PreSonus AudioBox 1818 VSL专业声卡和音频接口输出正弦信号,使用APx525音频分析仪分别测量其总谐波失真,测量结果如图7所示,音频接口在整个音频频段输出激励信号的总谐波失真均低于专业声卡,在1 000 Hz处的总谐波失真为-77 dB,而专业声卡为-53.7 dB。
4.2 信号采集性能测试
分别将声卡和音频接口用于电声测量系统中,采集由音频分析仪信号源输出的正弦信号,测量电压如图8所示,在10 Hz~20 kHz的范围内,音频接口的幅频特性与专业声卡类似,20 kHz以上性能优于专业声卡。
4.3 同步录音功能验证
上位机软件读取波形为1 kHz正弦信号,采样率为48 000 Hz,采样精度为16位,时长为1 s的wav文件之后,如图9所示,在第1个和第48 000个音频数据点处插入标记。然后将音频接口输入和输出通道相连,使用同步录音功能直接对输出信号进行同步采集,采集到图10所示的波形。图9和图10的标记值在相同的位置,说明音频接口的同步录音功能能够实现录音和播放完全同步。
5 结论
本文设计的音频接口与PreSonus AudioBox 1818 VSL专业声卡相比,输出通道的总谐波失真更低,输入通道的幅频特性更好,能够实现录音和播放的完全同步,同时又具有成本低的优点,完全可以取代专业声卡用于电声测量系统。
参考文献
[1] 胡良红.扬声器电声参数综合检测系统研制[D].桂林:桂林电子科技大学,2015.
[2] 郭庆,杨东奇,徐翠锋.扬声器电声参数自动测试系统的设计[J].科学技术与工程,2015,15(34):56-63.
[3] 冯剑锋,张波,杨东凯.基于高速USB3300接口的FPGA数据采集器设计与实现[C].全国信号和智能信息处理与应用学术会议会刊,2013.
[4] 田谞,王宏伟,其木苏荣.基于STM32F429的音频信号发生器[J].微型机与应用,2014(24):87-90.
[5] 张瑜,孟庆楠,杨开宇,等.基于Δ-Σ技术和FPGA的数据采集系统[J].电子技术应用,2011,37(6):141-144.
[6] 周静雷,孙长城.基于STM32的音频播放与记录控制器设计[J].微处理机,2017,38(1):67-70.
[7] 刘丽.嵌入式WM8960音频驱动及多线程播放器的设计[D].哈尔滨:哈尔滨工业大学,2015.
[8] 周静雷,王浩,李倩,等.大功率扬声器单元的功率试验系统设计[J].国外电子测量技术,2018,37(5):89-92.
[9] 杨军.关于扬声器功率试验的一些新趋势[J].电声技术,2017(Z4).
[10] 李生.基于SOPC的嵌入式数据传输系统设计[D].杭州:杭州电子科技大学,2012.
作者信息:
周静雷,李腾飞,冯 源
(西安工程大学 电子信息学院,陕西 西安710048)