基于计算机声卡的噪声采集与频谱分析系统
2020-09-15吕华溢张金换
吕华溢,王 波,黄 晗,谢 政,张金换
(1.清华大学汽车安全与节能国家重点实验室,北京 100084;2.长安汽车智能化研究院,重庆 401120)
0 引言
工业设备及自动化装置在工作过程中产生的噪声是一种主要环境污染源[1-2]。常规的声级计主要以检测声压幅值为主,缺乏噪声频域信息,数据保存及离线处理不便,不适宜长期在线监测、设备价格昂贵。声卡已经成为计算机的标准配置设备,遵循统一的软硬件接口规范、具有16位的模/数转换精度和不低于44.1 kHz的采样频率,因此可基于声卡外接传声器采集噪声信号,并通过编写计算机程序进行数据的实时处理、显示和保存。
基于计算机声卡的数据采集、处理软件开发主要有3种实现方法:基于MATLAB实现[3-4],利用其数据采集工具箱(Data Acquisition Toolbox)提供的数据采集函数控制声卡获取信号数据,该方法优势在于MATLAB提供了丰富的数据处理函数,易于进行数据后期处理分析,劣势在于未安装MATLAB的计算机需要安装MCR(MATLAB Compiler Runtime)后才可运行开发的程序;基于LabVIEW[5-6]实现,利用图形化编程语言配置声卡参数并获取、处理信号数据,该方法优势在于软件开发直观、简洁,数据处理模块较丰富,劣势在于开发的程序在发布时需将运行支持环境Runtime Engine共同打包,造成软件安装包过大;基于Visual Studio实现[7-8],利用DirectX提供的多媒体编程函数获取声卡信号数据,该方法优势在于开发的程序可在其他运行Windows操作系统的计算机上运行,软件兼容性好,劣势在于软件开发难度较高,数据处理函数不够丰富。
比较上述3种实现方法,针对工业设备噪声采集与分析的需求特点,本文采用Visual Studio工具包中的C#作为软件开发工具,实现了通过DirectX接口函数获取声卡数据,并实时进行频域分析、波形显示与数据保存的功能。
1 工作原理与系统组成
噪声在振动形式上属于纵波,作为一种机械波作用在传声器的敏感元件上,可实现由机械振动到电信号的能量转换;声卡通过自身的模/数转换器件经采样、量化后将该模拟电信号变换为相应的数字信号;经由计算机内部数据总线发送到内部存储器,CPU根据所运行软件的指令对噪声数据进行处理和分析;经过处理后的噪声数据仍存放在内部存储器中,根据软件指令分别由显示设备将噪声数据和处理结果以波形图等形式进行显示,以及将噪声数据以文件的形式保存到计算机的外存储器中。系统整体工作原理示意图如图1所示。
图1 系统工作原理示意图
噪声采集与分析系统的构成可分为传声器、采集设备和计算机部分,如图2所示。其中传声器由麦克风实现,通过3.5 mm同轴音频线缆连接至计算机中由声卡实现的采集设备接口上,计算机完成噪声数据的分析处理后,通过自身的显示器和硬盘实现结果显示和数据保存。
图2 系统组成结构图
2 噪声采集与数据处理
系统的硬件构成基于现有计算机和声卡,因此噪声采集与分析系统的实现主要以软件开发为主,包括噪声数据采集、频谱分析、时域和频域数据显示、噪声数据保存功能模块,如图3所示。
图3 噪声采集与分析系统功能模块
2.1 软件架构设计
噪声采集与分析系统基于.Net平台采用C#语言开发,不需要直接调用Windows操作系统的API函数即可实现用户操作界面、数据显示和文件保存等功能;声卡数据获取通过调用DirectX多媒体接口函数实现。软件整体架构采用面向对象的设计方法和模块化实现方式,通过用户或系统定时器触发调用相关函数模块完成功能需求,软件架构工作流程如图4所示。
图4 软件工作流程图
系统启动后首先进行用户界面初始化和声卡设备的枚举初始化,声卡初始化成功则显示系统用户界面,等待用户操作触发相应功能函数模块;初始化失败则直接退出系统。如果用户选择保存噪声数据,系统将建立wav格式的声音文件头,用以记录保存噪声音频文件。用户启动噪声数据的采集分析后,系统将实时获取声卡数据存入内部存储器中建立的缓冲区,系统定时器将周期性地触发操作从缓冲区读取噪声数据进行频谱分析、时域和频域波形显示,以及噪声音频文件保存。用户停止数据采集后,系统定时器将停止触发不再进行频谱分析和波形显示更新,所保存的音频文件进行关闭。噪声采集与分析系统软件界面如图5所示,其中1为频域波形显示,2为时域波形显示,3为噪声量值显示,4为文件保存设置按钮,5为系统启动/停止按钮,6为系统退出按钮。
图5 噪声采集与分析系统软件界面
2.2 数据采集与保存
声卡采集参数需在Windows操作系统的控制面板项“声音”中进行设置,本文中设置模/数转换精度为16位,采样频率为44.1 kHz,根据Nyquist采样定理可以满足对人耳听力范围20 kHz内的噪声信号进行频谱分析的要求。噪声信号在保存为wav格式的声音文件时,需要在文件头中写明声音数据的采样频率、转换精度,以及由这2个参数决定的存储块对齐标识和每s数据字节数,保证声音文件数据在回放时可以被正确解析处理。
2.3 信号频谱分析
噪声信号的频域信息采用快速傅里叶变换方法(FFT)计算得到,本文中所使用FFT处理方法为基于FFTW[9]所开发的C语言开源代码修改适配,遵循开源软件的GPL许可证(GNU General Public License)版权规定[10]。
噪声采集与分析系统中设置的系统定时器触发间隔为250 ms,如图4所示,在定时器到期后将从缓冲区读取此段时间内的噪声数据进行FFT计算得到频域信息,并在软件界面中显示噪声的时域和频域波形,因此系统软件界面的波形显示刷新频率为4 Hz。由声卡采样频率44.1 kHz和FFT计算周期250 ms,可知FFT的计算点数为11 025个,因此系统的噪声频谱分辨率为4 Hz。
3 噪声采集系统标定
在本系统的设计中传声器采用YC-LM20型麦克风实现,通过音频线缆连接至声卡,并由计算机对声卡模/数转换后得到的量化数据进行处理。因此,需要建立噪声幅值与声卡量化步长二者之间的对应关系。参考GB/T 12060.4—2012《声系统设备:第4部分 传声器测量方法》、JJG 482—2005《实验室标准传声器(自由场互易法)检定规程》和JJG 1019—2007《工作标准传声器(耦合腔比较法)检定规程》等[11-13]中所给出的传声器灵敏度标定方法,对本文中所设计的噪声采集与分析系统采用与声级计测量值比较的方法,进行噪声幅值标定,其原理如图6所示,声源发射频率1 kHz的正弦波噪声信号,被与声源距离相等的声级计和待标定系统传声器所接收,分别输出单位为dB的噪声幅值以及被声卡模/数转换后的量化值,将二者相除即得到待标定系统的噪声幅值灵敏度,单位为dB/量化步长。
图6 噪声幅值标定方法示意图
按照上述方法对所设计系统进行标定测试,声源发出频率为1 kHz正弦波的94 dB噪声激励信号,标定过程中系统软件界面所显示的测试数据波形如图7所示,通过计算得到噪声采集与分析系统的噪声幅值灵敏度为0.14 dB/量化步长。
图7 系统灵敏度标定数据波形
4 系统测试分析实例
使用本文中所设计的噪声采集与分析系统经过标定后,对试验室内加速牵引装置电机及配电柜制冷系统在工作时产生的噪声进行了现场实时测试。将传声器设置在距噪声源5 m处,系统所记录到的噪声时域波形和实时分析得到的噪声频域波形如图8所示,可知被测现场噪声等级已接近90 dB,噪声频率主要分布在12 kHz以内,在1 kHz、1.8 kHz、3.9 kHz、7 kHz和10 kHz频率点附近存在较显著的噪声频谱波峰。
图8 噪声现场测试记录
5 结束语
本文设计了一种基于计算机声卡的噪声采集与频谱分析系统,该系统采用Visual Studio工具包中的C#语言开发,实现通过DirectX接口函数操作声卡并获取噪声数据,能够实时完成对数据进行时域波形显示、频域分析与显示、wav格式声音文件保存的功能。参考传声器灵敏度标定的国标与检定规程,使用声级计对本文中所设计系统进行了噪声幅值标定,其灵敏度为0.14 dB/量化步长;所设计系统的噪声频谱分辨率为4 Hz。使用所设计系统对试验室内实际噪声源进行了现场实时测试,得到了噪声等级和频谱成分信息,可满足工业设备及自动化装置噪声环境监测方面的需求,实现了系统的设计目标。