江波
摘 要 SHARC DSP廣泛應(yīng)用于數(shù)字音頻產(chǎn)品中,為分析SHARC DSP音頻算法開(kāi)發(fā)中的調(diào)試數(shù)據(jù),采用了文件讀寫、數(shù)據(jù)流、操作數(shù)組和存儲(chǔ)空間等4種數(shù)據(jù)輸入輸出方法,以及在軟件開(kāi)發(fā)平臺(tái)VisualDSP++中實(shí)現(xiàn)的主要步驟及關(guān)鍵代碼。以參量均衡算法為例說(shuō)明如何用MATLAB對(duì)調(diào)試數(shù)據(jù)進(jìn)行分析。
【關(guān)鍵詞】音頻 數(shù)據(jù)模擬 SHARC DSP VisualDSP++
1 引言
目前很多數(shù)字音頻產(chǎn)品都是采用DSP作為信號(hào)處理平臺(tái)。為降低產(chǎn)品開(kāi)發(fā)難度、加快進(jìn)度,國(guó)內(nèi)廠家目前使用較多的是基于圖標(biāo)編程的專用音頻DSP,如ADI公司的ADAU1701 SigmaDSP和TI公司的TAS3108。然而這類基于圖標(biāo)編程的DSP雖然使用方便,但算法功能卻受限于現(xiàn)有的算法圖標(biāo),僅適合較常用的功能,且不同廠家開(kāi)發(fā)的產(chǎn)品易出現(xiàn)同質(zhì)化的現(xiàn)象。為提升產(chǎn)品的競(jìng)爭(zhēng)力,有些廠家研究出自己的音頻處理算法,在通用DSP上通過(guò)編程實(shí)現(xiàn)。ADI公司生產(chǎn)的SHARC系列DSP是數(shù)字音頻產(chǎn)品中常用的通用DSP,其軟件開(kāi)發(fā)平臺(tái)是VisualDSP++(近年推出了CCES軟件,支持與SigmaDSP開(kāi)發(fā)軟件平臺(tái)的互連,目前VisualDSP++還是得到廣泛應(yīng)用)。在SHARC DSP上調(diào)試音頻算法時(shí),除了需將算法通過(guò)程序?qū)崿F(xiàn)外,還需對(duì)算法程序調(diào)試的調(diào)試數(shù)據(jù)進(jìn)行分析。以下討論DSP開(kāi)發(fā)平臺(tái)上音頻數(shù)據(jù)輸入輸出模擬的實(shí)現(xiàn)方法及如何用MATLAB對(duì)調(diào)試數(shù)據(jù)進(jìn)行分析。
2 音頻數(shù)據(jù)輸入輸出模擬
常見(jiàn)的DSP音頻信號(hào)處理框圖如圖1所示。
其中音頻算法一般需要在DSP軟件開(kāi)發(fā)平臺(tái)中先通過(guò)軟件仿真的方式進(jìn)行調(diào)試,在這個(gè)過(guò)程中沒(méi)有外部聲音信號(hào)輸入,也無(wú)法將處理好的聲音信號(hào)輸出給外部設(shè)備,所以需要對(duì)圖1中的信號(hào)輸入輸出部分進(jìn)行模擬。下面討論在VisualDSP++5.0上模擬輸入輸出音頻數(shù)據(jù)的幾種方法。
2.1 通過(guò)文件讀寫進(jìn)行模擬
通過(guò)調(diào)用文件操作函數(shù),對(duì)WAV、PCM等常用的聲音文件進(jìn)行讀寫,圖2是操作框圖。
本例程有兩點(diǎn)需要注意:一是WAV文件有44個(gè)字節(jié)的文件頭,不能作為聲音數(shù)據(jù)進(jìn)行處理,因?yàn)槲募^有保存文件類型大小等,不是聲音的具體數(shù)據(jù);二是在SHARC DSP中各種數(shù)據(jù)類型的比特?cái)?shù),比如short int/int/float等數(shù)據(jù)類型均為32比特。
2.2 通過(guò)數(shù)據(jù)流進(jìn)行模擬
數(shù)據(jù)流可以模擬通過(guò)外部端口或存儲(chǔ)器與DSP處理器進(jìn)行數(shù)據(jù)傳輸。在VisualDSP++菜單中選擇“Settings\Streams\Add”,彈出圖3所示界面。
共有Source和Destination兩欄,通過(guò)對(duì)這兩欄的相關(guān)參數(shù)進(jìn)行設(shè)置即可模擬數(shù)據(jù)的輸入輸出。
模擬數(shù)據(jù)輸入:在Source欄設(shè)定File路徑,在Destination欄設(shè)定Debug target,既可以是各種接口,也可以是存儲(chǔ)器地址。為方便處理,可以在程序中定義一個(gè)變量,然后將該變量地址作為接收文件數(shù)據(jù)的Debug target。
模擬數(shù)據(jù)輸出:在Source欄設(shè)定Debug target,在Destination欄設(shè)定File路徑。實(shí)際的算法仿真時(shí),可以將保存輸出數(shù)據(jù)的變量地址作為Debug target,程序運(yùn)行時(shí)系統(tǒng)就會(huì)將輸出數(shù)據(jù)保存到輸出文件中。
數(shù)據(jù)流模擬時(shí)都要使用到數(shù)據(jù)文件(后綴名為dat),這種dat文件要滿足一定的格式,即將所有數(shù)據(jù)排成一列,可以通過(guò)Matlab或C語(yǔ)言編程對(duì)dat文件進(jìn)行讀寫。更簡(jiǎn)便的方法是通過(guò)CoolEdit軟件進(jìn)行dat文件讀寫:若要寫一個(gè)dat文件,則先打開(kāi)一個(gè)聲音文件,然后選擇另存,類型選txt,最后寫自己定義的文件名(后綴寫dat);并將該dat文件中的前面幾行文件頭信息去掉;若要讀一個(gè)dat文件,直接打開(kāi)該文件,然后選定采樣率和數(shù)據(jù)量化比特?cái)?shù)即可。
2.3 通過(guò)操作數(shù)組進(jìn)行模擬
以上兩種方法主要模擬數(shù)據(jù)量較大、無(wú)法預(yù)存到存儲(chǔ)空間的情況,對(duì)于少量數(shù)據(jù)的情況,輸入數(shù)據(jù)的模擬可以定義一個(gè)輸入數(shù)組,用原始聲音數(shù)據(jù)對(duì)其初始化。輸出數(shù)據(jù)的模擬也可以定義一個(gè)輸出數(shù)組,將所有處理好的數(shù)據(jù)都存入這個(gè)數(shù)組。
輸入數(shù)組的初始化有幾種方法,最直接的方法是將所有數(shù)據(jù)列出來(lái),但對(duì)于幾百甚至幾千個(gè)數(shù)據(jù)的情況,顯得頁(yè)面不夠簡(jiǎn)潔,建議用以下兩種方法。
2.3.1 匯編語(yǔ)言環(huán)境下用dat文件初始化數(shù)組
首先將原始數(shù)據(jù)寫入一個(gè)dat文件(例如input.dat),然后新建一個(gè)asm文件,定義數(shù)組名(例如_inputx),選擇存儲(chǔ)區(qū)(例如seg_dmda)。以下是相關(guān)代碼:
.global _inputx;// 聲明全局變量
.SECTION/DM seg_dmda;// 定義數(shù)組存放的存儲(chǔ)區(qū)
.VAR _inputx[N]= "input.dat"; // 用input.dat文件的數(shù)據(jù)對(duì)數(shù)組初始化
然后在C語(yǔ)言文件中先將_inputx聲明為外部變量:extern int inputx[N],這樣就可以調(diào)用了。這里有兩點(diǎn)需要注意:一是在asm文件中數(shù)組名前面有一個(gè)“_”,而在C語(yǔ)言文件中則無(wú)需加這個(gè)符號(hào);二是在C語(yǔ)言中inputx數(shù)組的數(shù)據(jù)類型由input.dat中的數(shù)據(jù)類型確定,若為float型,則將聲明外部變量語(yǔ)句改為:extern float inputx[N]。
2.3.2 C語(yǔ)言環(huán)境下用dat文件初始化數(shù)組
2.4 通過(guò)操作存儲(chǔ)空間進(jìn)行模擬
在VisualDSP++菜單中選擇Memory\Two column,將彈出DM(數(shù)據(jù)存儲(chǔ)空間)界面,如圖4所示。在空白欄中輸入絕對(duì)地址或數(shù)組名(例如圖4中的InputData),則在存儲(chǔ)空間欄內(nèi)將顯示相應(yīng)地址的內(nèi)容,此時(shí)可以直接查看數(shù)據(jù)或手動(dòng)修改相關(guān)地址上的數(shù)值。在菜單中若選擇Memory\Three column,則將彈出與圖4類似的PM(程序存儲(chǔ)空間)界面。
也可以在菜單中選擇Memory\Fill,對(duì)某個(gè)地址直接填充數(shù)據(jù),或通過(guò)dat文件對(duì)存儲(chǔ)空間的數(shù)據(jù)進(jìn)行填充。同樣的,也可以在菜單中選擇Memory \Dump,將存儲(chǔ)空間中的數(shù)據(jù)導(dǎo)出為一個(gè)dat文件。
3 調(diào)試數(shù)據(jù)的MATLAB分析
為分析VisualDsp++軟件平臺(tái)中音頻算法的調(diào)試數(shù)據(jù)是否正確,選擇上述數(shù)據(jù)模擬方法將調(diào)試數(shù)據(jù)從DSP開(kāi)發(fā)平臺(tái)導(dǎo)出,然后導(dǎo)入MATLAB中進(jìn)行分析。這里以參量均衡算法為例進(jìn)行說(shuō)明。
3.1 參量均衡算法原理
參量均衡器是由一種峰值帶通濾波器,用來(lái)調(diào)整聲音信號(hào)的幅頻特性。參量均衡器的Q值、增益和中心頻率3個(gè)參數(shù)可調(diào)。當(dāng)增益大小在0dB以上稱為峰值濾波器,反之稱作陷波器(對(duì)信號(hào)的某一頻段起到衰減的作用)。
3.2 MATLAB數(shù)據(jù)分析
參量均衡算法DSP軟件實(shí)現(xiàn)流程如圖5所示。實(shí)驗(yàn)中所用的音頻數(shù)據(jù)來(lái)自于TIMIT數(shù)據(jù)庫(kù)中NeoSpeech_Ashley.wav(男聲)語(yǔ)音。通過(guò)CoolEdit軟件將.wav格式的語(yǔ)音轉(zhuǎn)換為后綴為.dat格式。
整個(gè)實(shí)現(xiàn)過(guò)程中參量均衡器的參數(shù)設(shè)置如下:Q值為14,中心頻率w0=1000Hz,濾波器增益G為-6dB。對(duì)程序經(jīng)行編譯后,在VisualDSP++菜單中選擇“Settings\Streams\Add”進(jìn)行數(shù)據(jù)的導(dǎo)入與導(dǎo)出。采用上述2.2中的方法進(jìn)行聲音數(shù)據(jù)的導(dǎo)入與導(dǎo)出,采用上述2.4中的方法導(dǎo)出參量均衡器的濾波器系數(shù)。將DSP中參量均衡器的濾波器系數(shù)和DSP中經(jīng)參量均衡器濾波后的聲音數(shù)據(jù)導(dǎo)入到MATLAB中,并將其與用MATLAB進(jìn)行計(jì)算和處理的結(jié)果進(jìn)行對(duì)比,從而來(lái)進(jìn)行判斷DSP算法程序的準(zhǔn)確性。
圖6,是MATLAB直接計(jì)算和通過(guò)DSP計(jì)算得到的參量均衡器的幅頻響應(yīng)圖像,只有通過(guò)對(duì)MATLAB得到的圖形進(jìn)行加粗才能看出有兩條曲線。圖7參量均衡器濾波后的聲音數(shù)據(jù)時(shí)域波形圖和幅頻圖,曲線重合,說(shuō)明了DSP濾波處理得出的輸出結(jié)果和用MATLAB仿真得出結(jié)果是一致的。
4 結(jié)語(yǔ)
在VisualDSP++軟件平臺(tái)中用軟件仿真的方式來(lái)調(diào)試SHARC DSP音頻算法程序時(shí),可以通過(guò)文件讀寫或數(shù)據(jù)流操作的方法模擬大量的數(shù)據(jù)輸入輸出。對(duì)于數(shù)據(jù)量較少的情況,則可以通過(guò)操作數(shù)組或存儲(chǔ)空間的方法對(duì)輸入輸出數(shù)據(jù)進(jìn)行模擬。使用者可以根據(jù)自己需求選取適合的數(shù)據(jù)模擬的方法,從而減少軟件仿真所需要的時(shí)間。DSP音頻算法的調(diào)試數(shù)據(jù)可導(dǎo)入到MATLAB中進(jìn)行分析對(duì)比,驗(yàn)證算法程序是否正確。
參考文獻(xiàn)
[1]ADI.ADAU1701:SigmaDSP? 28/56-Bit Audio Processor with Two ADCs and FourDACs [G/OL].(2013-8-1)http://www.analog.com/en/processors-dsp/sigmadsp/ADAU1701/products/product.html.
[2]TI.TAS3108Digital Audio Processor[G/OL].(2013-8-1).http://www.ti.com/product/tas3108.
[3]張承云,高星輝.音頻專用DSP的軟件設(shè)計(jì)方法[J].電聲技術(shù),2009,33(10):39-42.
[4]ADI.CrossCore? Embedded Studio for Analog Devices Processors[G/OL].(2013-8-1).http://www.anal-og.com/en/evaluation/adswt-cces/eb.html.
[5]馮小平,羅勇江,羅明.ADSP技術(shù)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2008.
[6]Regalia P,Mitra S.Tunable digital frequency response equalization filters[J].IEEE Transactio-ns on Acoustics Speech & Signal Processing,1987,35(01):118-120.
作者單位
廣州大學(xué)機(jī)械與電氣工程學(xué)院 廣東省廣州市 510006