音频文件分析监测程序设计
2020-02-23周悦颖
周悦颖
(国家广播电视总局二八一台,云南 昆明 650000)
1 简 介
1.1 软件介绍
广播节目的音频质量关系到播出质量。电平监测能反映过载和削波情况,预防失真。反相也会对播出质量造成严重影响。反相的音频左右声道相互中和,会导致输出电平过低,收听效果模糊,影响播出质量。利萨如图能反映音频的频率和相位差,避免音频的失真。本文介绍了Wave 文件的读取、Wave波形显示、DirectX 读取音频数据、电平分析、频谱原理与分析、利萨如图形算法、相位算法以及对电平和相位报警等内容,利用Delphi 语言实现了数字音频分析监测,可协助技术人员发现音频质量问题。
1.2 数字音频文件分析程序流程
数字音频文件分析程序流程如图1 所示。在读取Wave 文件后,先判断音频是否是双声道。若是单声道,退出流程并提示。根据采样率显示出波形图,并通过DirectSound 进行播发,显示出电平、相位及利萨如图形,并报警显示有异常的地方。
2 音频文件分析监控功能
2.1 电平分析
2.1.1 数字电平
以0.775 V 为基准电压时,所求得的电压电平单位为dBu。绝对电压电平U用分贝表示为:
dBFS 是数字音频信号的电平单位,简称为满度数字电平。电平值V的计算公式为:
我国广播电视系统中通常采用+4 dBu 作为音频系统的校准电平,满度数字电平为+24 dBu。
2.1.2 数字电平报警
根据式(2)计算出电平值,显示出电平大小。记录每1 s 的电平值,如果电平值在20 s 以内大于或小于报警值,开始报警。报警流程如图2 所示。读取音频文件后先获取音频的Buffer,根据电平值计算公式显示出电平VU 表,并做出高电平和低电平报警提示。
2.2 频谱分析
2.2.1 频谱分析原理
傅立叶是频谱分析的奠基人,在傅立叶变换中提出了信号采样和频域表示等概念。非正弦信号可用它包含的频率分量成分的特征来表征,将时域信号转化到频域后,可以得出频谱分量。使用FFT分析仪进行信号采样,把相关离散采样点进行傅立叶变换,可得到频域信息[1]。
2.2.2 频谱程序实现
应用傅立叶变换原理,逐次奇偶抽选采样的序列,以提高效率,避免浪费储存单元。打乱以前的顺序并对其重新进行排序,按照这个顺序来运算。在用Delphi 表示傅立叶变换复数中,可以先在数据结构中定义一个含有两个成员变量的数据结构。
两个成员变量可以分别通过倒序实现表示复数的虚部与实部:
TComplex=packed record
Im:TFloat;//复数的虚部
Re:TFloat;//复数的实部
end;
进行快速傅立叶变换有两种方法:第一种是按照自然序列排序输入(时域序列)和输出(频域序列);第二种方法是按照“蝴蝶图”所描述的计算方法,对奇偶分解后的序列排序输入(时域序列),并对输出按自然顺序排列(频域序列)[2]。第一种方法不符合“蝴蝶图”,但是对输入输出不需要进一步排序。第二种方法符合“蝴蝶图”,但需要倒序一次。本文采用第二种方法进行较多的采样,同时优化倒序算法。首先抽样量化输入或采集的时域波形数据,通过类的函数读取到缓存中,再对数据进行转换,使其满足长度为2 的整数次幂的复变量,最后运用“蝴蝶图”进行分解运算。在Delphi 中并没有表示复数的数据类型,通过定义一个含有两个成员变量的数据结构来表示复数,即用两个变量分别来表示复数的实部与虚部。
2.2.3 频谱分析具体流程
频谱分析具体流程如图3 所示。首先获取音频文件的Buffer,用倒序的方法编写出适合Delphi使用的复数数据类型,再对时域信号进行频谱分析,并将频谱显示出来。
2.2.4 频谱分析程序关键代码
频谱分析程序关键代码如下:
2.3 相位检测
2.3.1 相位定义
作为周期运动的声波,相位就是其在运动中表现出来的准确位置。波峰对邻波的波峰或者波谷对邻波的波谷属于同相位,相位差都是360°,同相位相加。波峰对邻波的波谷或者波谷对邻波的波峰属于反相位,相位差为180°,同相位相减。交流电在不同时刻的状态是通过相位来反映的。相位随时间变化,交流电的方向和大小也会产生变化。
2.3.2 相位程序实现及报警
2.3.3 相位监测具体流程
相位监测具体流程如图4 所示。读取音频文件后,取出左右声道的值,求左声道和、右声道和以及左右声道相乘的积。然后根据相位差公式计算后显示相位。对于反相情况,报警予以提示。
2.3.4 相位监测关键代码
相位监测关键代码如下:
2.4 利萨如图形
2.4.1 利萨如图形
音频矢量图反映的是左右声道的相位关系和幅度关系,是相位关系和幅度关系的一种直观表现。在实际运用中,一个质点经常会出现两个不同方向振动的情况,此时该质点的位移就是两个振动的矢量和。本文讨论的利萨如图的本质就是相互垂直的两个简谐振动的合成。
利萨如图上的每一个点都可以表示为:
式中,X表示质点在X轴的振动;Y表示质点在Y轴的振动;A1和A2分别表示最高点和最低点的位置。当X和Y值为整数比时,可以显示出一个直观封闭的曲线,就是利萨如图。将所有用到的量和公式进行数字化处理,式(3)可改动为:
式中,a和b是变量,用来表示输入的数值,只取其个位上的数字;ψ=ψ2-ψ1是用来输入的初始相差的值。为了方便绘图,将A1和A2的比例简化为1:1。
根据以上结论,实际t取到足够小时,可以将(X,Y)坐标绘制成图片形成利萨如图。如果将Wave 数据中的512 个点以每100 ms 为一组进行计算,将计算结果刷新后显示出来就可以呈现出动态的图形,即得到了模拟的利萨如图形。
2.4.2 利萨如图形程序流程
利萨如图形程序流程如图5 所示。读取音频文件后,计算出左右声道的最大值、最小值和最大差值,计算出左右声道的平均值,用左右声道的值分别减去左右声道的平均值,画出图形。
2.4.3 利萨如图形程序关键代码
利萨如图形程序关键代码如下:
2.5 分析监控程序的实现
程序运行界面如图6 所示。程序分为4 大部分:顶部显示了音频文件的波形图;左侧显示的是音频头文件的信息;中部显示了电平UV、相位信息及利萨如图形;右侧显示监控的报警信息。
3 结语
基于数字音频文件分析程序,使用Delphi 语言编程,且所有函数调用均使用统一封装,Wave 的音频流采用多个辅助缓冲区,为程序向专业的应用程序移植提供了可以扩展的空间,为以后的音频实施监控和通过网络传输音频来监控设备提供了应用可能,以更好地满足广播行业需要。