周悅穎
(國家廣播電視總局二八一臺,云南 昆明 650000)
廣播節(jié)目的音頻質(zhì)量關(guān)系到播出質(zhì)量。電平監(jiān)測能反映過載和削波情況,預(yù)防失真。反相也會對播出質(zhì)量造成嚴(yán)重影響。反相的音頻左右聲道相互中和,會導(dǎo)致輸出電平過低,收聽效果模糊,影響播出質(zhì)量。利薩如圖能反映音頻的頻率和相位差,避免音頻的失真。本文介紹了Wave 文件的讀取、Wave波形顯示、DirectX 讀取音頻數(shù)據(jù)、電平分析、頻譜原理與分析、利薩如圖形算法、相位算法以及對電平和相位報警等內(nèi)容,利用Delphi 語言實現(xiàn)了數(shù)字音頻分析監(jiān)測,可協(xié)助技術(shù)人員發(fā)現(xiàn)音頻質(zhì)量問題。
數(shù)字音頻文件分析程序流程如圖1 所示。在讀取Wave 文件后,先判斷音頻是否是雙聲道。若是單聲道,退出流程并提示。根據(jù)采樣率顯示出波形圖,并通過DirectSound 進(jìn)行播發(fā),顯示出電平、相位及利薩如圖形,并報警顯示有異常的地方。
2.1.1 數(shù)字電平
以0.775 V 為基準(zhǔn)電壓時,所求得的電壓電平單位為dBu。絕對電壓電平U用分貝表示為:
dBFS 是數(shù)字音頻信號的電平單位,簡稱為滿度數(shù)字電平。電平值V的計算公式為:
我國廣播電視系統(tǒng)中通常采用+4 dBu 作為音頻系統(tǒng)的校準(zhǔn)電平,滿度數(shù)字電平為+24 dBu。
2.1.2 數(shù)字電平報警
根據(jù)式(2)計算出電平值,顯示出電平大小。記錄每1 s 的電平值,如果電平值在20 s 以內(nèi)大于或小于報警值,開始報警。報警流程如圖2 所示。讀取音頻文件后先獲取音頻的Buffer,根據(jù)電平值計算公式顯示出電平VU 表,并做出高電平和低電平報警提示。
2.2.1 頻譜分析原理
傅立葉是頻譜分析的奠基人,在傅立葉變換中提出了信號采樣和頻域表示等概念。非正弦信號可用它包含的頻率分量成分的特征來表征,將時域信號轉(zhuǎn)化到頻域后,可以得出頻譜分量。使用FFT分析儀進(jìn)行信號采樣,把相關(guān)離散采樣點進(jìn)行傅立葉變換,可得到頻域信息[1]。
2.2.2 頻譜程序?qū)崿F(xiàn)
應(yīng)用傅立葉變換原理,逐次奇偶抽選采樣的序列,以提高效率,避免浪費儲存單元。打亂以前的順序并對其重新進(jìn)行排序,按照這個順序來運算。在用Delphi 表示傅立葉變換復(fù)數(shù)中,可以先在數(shù)據(jù)結(jié)構(gòu)中定義一個含有兩個成員變量的數(shù)據(jù)結(jié)構(gòu)。
兩個成員變量可以分別通過倒序?qū)崿F(xiàn)表示復(fù)數(shù)的虛部與實部:
TComplex=packed record
Im:TFloat;//復(fù)數(shù)的虛部
Re:TFloat;//復(fù)數(shù)的實部
end;
進(jìn)行快速傅立葉變換有兩種方法:第一種是按照自然序列排序輸入(時域序列)和輸出(頻域序列);第二種方法是按照“蝴蝶圖”所描述的計算方法,對奇偶分解后的序列排序輸入(時域序列),并對輸出按自然順序排列(頻域序列)[2]。第一種方法不符合“蝴蝶圖”,但是對輸入輸出不需要進(jìn)一步排序。第二種方法符合“蝴蝶圖”,但需要倒序一次。本文采用第二種方法進(jìn)行較多的采樣,同時優(yōu)化倒序算法。首先抽樣量化輸入或采集的時域波形數(shù)據(jù),通過類的函數(shù)讀取到緩存中,再對數(shù)據(jù)進(jìn)行轉(zhuǎn)換,使其滿足長度為2 的整數(shù)次冪的復(fù)變量,最后運用“蝴蝶圖”進(jìn)行分解運算。在Delphi 中并沒有表示復(fù)數(shù)的數(shù)據(jù)類型,通過定義一個含有兩個成員變量的數(shù)據(jù)結(jié)構(gòu)來表示復(fù)數(shù),即用兩個變量分別來表示復(fù)數(shù)的實部與虛部。
2.2.3 頻譜分析具體流程
頻譜分析具體流程如圖3 所示。首先獲取音頻文件的Buffer,用倒序的方法編寫出適合Delphi使用的復(fù)數(shù)數(shù)據(jù)類型,再對時域信號進(jìn)行頻譜分析,并將頻譜顯示出來。
2.2.4 頻譜分析程序關(guān)鍵代碼
頻譜分析程序關(guān)鍵代碼如下:
2.3.1 相位定義
作為周期運動的聲波,相位就是其在運動中表現(xiàn)出來的準(zhǔn)確位置。波峰對鄰波的波峰或者波谷對鄰波的波谷屬于同相位,相位差都是360°,同相位相加。波峰對鄰波的波谷或者波谷對鄰波的波峰屬于反相位,相位差為180°,同相位相減。交流電在不同時刻的狀態(tài)是通過相位來反映的。相位隨時間變化,交流電的方向和大小也會產(chǎn)生變化。
2.3.2 相位程序?qū)崿F(xiàn)及報警
2.3.3 相位監(jiān)測具體流程
相位監(jiān)測具體流程如圖4 所示。讀取音頻文件后,取出左右聲道的值,求左聲道和、右聲道和以及左右聲道相乘的積。然后根據(jù)相位差公式計算后顯示相位。對于反相情況,報警予以提示。
2.3.4 相位監(jiān)測關(guān)鍵代碼
相位監(jiān)測關(guān)鍵代碼如下:
2.4.1 利薩如圖形
音頻矢量圖反映的是左右聲道的相位關(guān)系和幅度關(guān)系,是相位關(guān)系和幅度關(guān)系的一種直觀表現(xiàn)。在實際運用中,一個質(zhì)點經(jīng)常會出現(xiàn)兩個不同方向振動的情況,此時該質(zhì)點的位移就是兩個振動的矢量和。本文討論的利薩如圖的本質(zhì)就是相互垂直的兩個簡諧振動的合成。
利薩如圖上的每一個點都可以表示為:
式中,X表示質(zhì)點在X軸的振動;Y表示質(zhì)點在Y軸的振動;A1和A2分別表示最高點和最低點的位置。當(dāng)X和Y值為整數(shù)比時,可以顯示出一個直觀封閉的曲線,就是利薩如圖。將所有用到的量和公式進(jìn)行數(shù)字化處理,式(3)可改動為:
式中,a和b是變量,用來表示輸入的數(shù)值,只取其個位上的數(shù)字;ψ=ψ2-ψ1是用來輸入的初始相差的值。為了方便繪圖,將A1和A2的比例簡化為1:1。
根據(jù)以上結(jié)論,實際t取到足夠小時,可以將(X,Y)坐標(biāo)繪制成圖片形成利薩如圖。如果將Wave 數(shù)據(jù)中的512 個點以每100 ms 為一組進(jìn)行計算,將計算結(jié)果刷新后顯示出來就可以呈現(xiàn)出動態(tài)的圖形,即得到了模擬的利薩如圖形。
2.4.2 利薩如圖形程序流程
利薩如圖形程序流程如圖5 所示。讀取音頻文件后,計算出左右聲道的最大值、最小值和最大差值,計算出左右聲道的平均值,用左右聲道的值分別減去左右聲道的平均值,畫出圖形。
2.4.3 利薩如圖形程序關(guān)鍵代碼
利薩如圖形程序關(guān)鍵代碼如下:
程序運行界面如圖6 所示。程序分為4 大部分:頂部顯示了音頻文件的波形圖;左側(cè)顯示的是音頻頭文件的信息;中部顯示了電平UV、相位信息及利薩如圖形;右側(cè)顯示監(jiān)控的報警信息。
基于數(shù)字音頻文件分析程序,使用Delphi 語言編程,且所有函數(shù)調(diào)用均使用統(tǒng)一封裝,Wave 的音頻流采用多個輔助緩沖區(qū),為程序向?qū)I(yè)的應(yīng)用程序移植提供了可以擴(kuò)展的空間,為以后的音頻實施監(jiān)控和通過網(wǎng)絡(luò)傳輸音頻來監(jiān)控設(shè)備提供了應(yīng)用可能,以更好地滿足廣播行業(yè)需要。