目前工程上针对非声学信号的采集主要是基于多个串行处理的单一传感器,当多路传感器同时工作时不能保证数据采集的同步性,这就导致在后续进行数据的处理与计算时会产生错误。在一些工程实现中,为避免这个问题,提出在多路传感器后加一台信号同步调节器的解决方案,但这会使得整个系统复杂且操作麻烦。
针对上述问题,本文搭建了一个基于FPGA的主动噪声控制平台。该平台能够实时正确地采集信号,满足多通道信号的同步性,同时也方便根据所需功能扩展通道,整个平台也操作简单。
主动噪声控制平台由传感-作动系统与降噪算法模块构成[3],传感-作动系统由相关传感器及FPGA中对应的数据处理模块、数据储存模块构成,负责参考信号(与初级信号相关的各种形式的信号,如振动、转速信号)的采集以及次级声信号的产生,降噪算法模块由硬件语言搭成,主要是对参考信号进行分析从而产生次级声信号。
车内噪声主要是发动机噪声、进排气噪声与传动系的噪声。研究表明[4],发动机振动引起的低频噪声是车内噪声的主要成分,同时发动机振动噪声以及其他传动系引起的噪声与发动机振动以及车身各点振动成正比,噪声的主频率也与发动机的转速成正比。基于此,本文在该平台上通过采集汽车的转速与发动机的振动加速度等这些非声学信号来构建车内噪声的参考信号,继而产生次级声信号,以此来避免声反馈问题。
主动噪声控制平台如图1所示。其中,MPU6065芯片负责振动信号的采集,GCAN-600模块负责转速信号的采集,在由非声学信号产生噪声参考信号的过程中,需要初级噪声信号的参与以及相关的算法,因此需要WM8731芯片以及音频输入输出模块来完成初级声信号的采集与次级声信号的输出,同时SDRAM芯片将采集到的数据存储起来,从而研究相关的算法。
2.1 振动加速度的采集
振动加速度的采集所用的芯片是MPU6065芯片,芯片与FPGA之间通过UART协议进行信号传输。采样频率是100 Hz。
该芯片可采集多种物理信号(如加速度、角速度、角度等),不同的信号有不同的数据包格式与检验位,每个数据包包括10个数据位与1个检验位,FPGA检测到这个正确的包头之后,将前面10个数暂存起来与检验位进行比较,正确则进行数据处理,错误则返回初始状态等待下一帧正确数据到来。
2.2 转速的采集
汽车转速的采集是基于GCAN-600模块,该模块可支持所有标准CAN总线物理层及ISO 15765汽车OBD接口诊断协议,可将汽车电控系统的各项传感器数值自动转换为串口格式的数据,给模块输入相对应的AT指令读取所需要的数据,并通过UART协议将数据输出[5]。采样率为200 Hz。
发动机转速信号对应的指令为ATPID=012,以ASCII码形式传输,接收到的每帧数据是指令PID012=XXXX对应的ASCII码。完成一个收发周期表示采集到一次转速,连续不断地对转速信号采集意味着上述收发周期需要不断地循环。但接收到的每一帧数据并没有结束标志位,同时由于转速的位数不确定(3位数或4位数),导致上述循环没法自动进行,需要借助标识符。
使用UART协议接收数据时,每当一个数接收完毕时,就在该数的末尾产生一个标识符rx_done。用逻辑分析仪对接收到的数据信号进行分析发现,每帧数据中两个rx_done的时间间隔为T1(与UART协议选择的波特率相关),上一帧末尾rx_done与下一帧起始rx_done的时间间隔为T2(与采样率相关),且T2>>T1。由此设计一个计时器,每次检测到rx_done信号,计时器开始计时,若是在T1+Δt(Δt<<T1)内检测到下一个rx_done信号,表明该帧数据还没有结束;若没有检测到标志信号,则表明该数已是最后一个数,产生该帧数据传输结束标识符done。检测到done信号后,FPGA再次给模块发送指令ATPID=012,如此循环,即可不间断地获取转速信号。
2.3 音频的输入输出
音频信号的采集及输出所采用的芯片是低功耗的音频编解码芯片WM8731。音频传输模块是连接FPGA与音频编解码芯片WM8731的接口模块,它需要实现两个功能[6]:第一个功能是向WM8731芯片发送配置参数的命令,使芯片在系统所需要的模式下工作;第二个功能是在参数配置完成后,控制麦克风采集音频数据。
FPGA通过I2C协议向芯片传输配置参数,配置完成后,FPGA与芯片进行音频数据传输。在音频的采集过程中涉及几个参数:BCLK为音频数据传输(包括发送和接收)过程中的位时钟线,ADCLRC和DACLRC分别为芯片发送和接收音频数据的帧时钟线,ADCDAT和DACDAT分别为发送和接收音频数据的信号线。
由非声学信号生成参考信号后,该参考信号经过降噪算法模块后产生次级声信号。
在初级声信号的采集与次级声信号的输出过程中都遵循I2S模式。即音频数据有效位的传输开始于ADCLRC或DACLRC信号发生跳变后BCLK信号的第二个上升沿,并且音频数据是从最高位开始传输的。当芯片工作在从模式下时,BCLK信号是由FPGA控制器生成的。
2.4 数据存储
采集到的信号需要通过一个以状态机为主体的SDRAM控制器来控制信号实时地存入SDRANM芯片中。
由于SDRAM存储数据是由起始位置开始按给定的存储长度进行顺序存储的,3种信号需要实时存入。同时信号之间不能相互影响或覆盖,这就需要在SDRAM中给3种信号分配好位置区间。每种信号有自己不同的起始位置,在进行存储的过程中,SDRAM是按顺序存储的,存储地址是逐次加1,当存储地址进行多位变动时,存储数据会遗失或者出错[7],故针对多路信号存入SDRAM时,需要对多路信号整体进行一个顺序控制。另外,由于数据在存入SDRAM的过程中存在跨时域的操作,因此平台中还需要搭建异步FIFO模块。
FIFO是一种先进先出的数据缓存器,没有外部读写地址线,只能顺序地写入、读出数据,其数据地址由内部读写指针自动加1完成。异步FIFO在读写两部分分别采用不同的时钟[8]。本文中,SDRAM工作频率是27 MHz,加速度、转速、音频的采集模块工作的频率是50 MHz,数据需要跨时域传输。另外在多路信号存入SDRAM过程中也需要借助异步FIFO进行顺序控制:当一种信号在存储时,其他信号先暂存在FIFO中,待上一类信号存完产生标志后,再存入下一类信号。即多路信号是同时采集,先后存储。
整个采集系统是在DE2-115开发板上搭建的,所选用的FPGA是Cyclone IV EP4CE115F29芯片,为了验证所搭建采集系统的正确性,在用该系统对汽车进行数据采集的同时,也分别利用录音器采集音频信号;加速度传感系统采集相同位置的振动加速度;转速传感系统采集发动机转速。用此参考系统采集的信号来验证所搭建平台对信号采集的正确性与实时性。
在实验过程中,3个单一信号的传感系统同时按下各自的开始按钮进行信号的采集,总共采集时间为5 s,大约1 s后,按下所搭建平台的开始按钮,3种信号同时采集,采集3 s后停止。这样所搭建平台采集的信号是3个参考传感系统采集信号的子信号,将两个系统采集到的3种信号做互相关,得到的相关系数与子信号的起点时间如图2所示。从图2可以发现,转速信号起始时间t1=1.1 s,与自搭建系统采集信号的相关系数为1;振动加速度信号起始时间t1=0.91 s,与自搭建系统采集信号的相关系数为0.98;音频信号起始时间t1=1.34 s,与自搭建系统采集信号的相关系数为0.94(对于音频信号,由于各自系统的拾音器不同,造成采集到音频信号的幅值的数量级不同,为了更方便地比较,对两个系统采集到的信号均进行归一化处理)。根据相关系数的定义可得,两个系统采集到的3段信号可认为对应相等[9],将子信号的起始时间对应到参考信号中,3种信号的时域图如图3所示,这也证明了自搭建平台采集的转速信号的实时正确性。
通过图2的横向对比可看出,自搭建平台采集的3种信号对应于3个独立参考系统中起始的时间t1、t2、t3互不相等,这也证明对于多路信号的采集,多个采集系统同时工作时不能保证采集数据的严格同步性,还需要专门的仪器进行信号的同步调整[10]。而自搭建的平台,对于多路信号的操作都是由同一个按钮进行,可以严格地保证数据的同步性,这样可以得到任意时刻汽车的多种参数。
本文基于FPGA搭建了针对汽车主动降噪的平台,该平台的作动-传感系统可以有效地采集汽车运行中的转速、振动加速度、噪声信号。同时该平台也是主动降噪算法实现的硬件系统,是后续主动降噪研究的重要基础。
数据在存入SDRAM前,需要先暂存在FIFO中,导致存入的数据量与FIFO的容量相关,后续可以利用Nios II来对多通道信号进行存储顺序的控制,就可以极大扩充数据存储的容量,但开发周期较长。
综合而言,该平台具有以下优点:
(1)平台可以正确并且实时采集到参考信号。这为在主动降噪过程中产生次级声信号的实现打下了很好的基础。
(2)平台对采集的多通道信号有严格的时间同步性,即能保证对多路信号的同时操作,这也是其他的基于串行处理器所搭建系统所不能达到的优点[10]。
(3)FPGA的可编程性可以使平台按需增加功能,方便扩展通道数目,而不必增加其他的芯片或者处理器。
(4)使用硬件语言来编程各种逻辑功能模块(如控制模块、降噪算法模块),可以反复地编程、查错、再编程,这样就可以对平台进行充分的设计开发与验证。
联系客服