DIY之樂:基于PIC32的以太網音箱設計案例,硬件框圖、器件選型、數(shù)據(jù)結構、軟件流程
1 前言
在日常生活中人們聽到的各種聲音,其信號強度都是隨時間連續(xù)變化的,我們稱這種信號為模擬信號。傳統(tǒng)的聲音記錄方式是將這種模擬信號直接記錄下來,例如磁 帶錄音和密紋唱片(也稱EP唱片)就是將聲音拾取處理后以磁記錄或機械刻度的方式記錄下來,此時磁帶上剩磁的變化或密紋,唱片音槽內的紋路起伏變化都是與聲音信號的變化相對應、成正比的。記錄儲存這種模擬聲音信號的載體,諸如密紋唱片、盒式磁帶等,稱為模擬音響軟件,而能夠播放和(或)記錄這些軟件的信號 處理設備,諸如電唱機、磁帶錄音機等,則稱為模擬音響設備或模擬音響系統(tǒng)。模擬信號在錄制、傳輸、處理和放大過程中,很容易產生失真和噪聲,使得模擬音響軟件和硬件的電聲技術指標難以大幅度提高[1]。
數(shù)字信號抗干擾能力強、無噪聲積累。在模擬通信中,為了提高信噪比,需要在信號傳輸過程中及時對衰減的傳輸信號進行放大,信號在傳輸過程中不可避免地疊加上的噪聲也被同時放大。隨著傳輸距離的增加,噪聲累積越來越多,以致使傳輸質量嚴重惡化。對于數(shù)字通信,由于數(shù)字信號的幅值為有限個離散值(通常取兩個幅值),在傳輸過程中雖然也受到噪聲的干擾,但當信噪比惡化到一定程度時,即在適當?shù)木嚯x采用判決再生的方法,再生成沒有噪聲干擾的和原發(fā)送端一樣的數(shù)字信號,所以可實現(xiàn)長距離高質量的傳輸[2]。
數(shù)字通信的信號形式和計算機所用信號一致,都是二進制代碼,因此便于與計算機聯(lián)網,也便于用計算機對數(shù)字信號進行存儲、處理和交換,可使通信網的管理、維護實現(xiàn)自動化、智能化。數(shù)字通信采用時分多路復用,不需要體積較大的濾波器。設備中大部分電路是數(shù)字電路,可用大規(guī)模和超大規(guī)模集成電路實現(xiàn),因此體積小、功耗低。便于構成綜合數(shù)字網和綜合業(yè)務數(shù)字網。采用數(shù)字傳輸方式,可以通過程控數(shù)字交換設備進行數(shù)字交換,以實現(xiàn)傳輸和交換的綜合。占用信道頻帶較寬。一路模擬電話的頻帶為4kHz帶寬,一路數(shù)字電話約占64kHz,這是模擬通信目前仍有生命力的主要原因。隨著寬頻帶信道(光纜、數(shù)字微波)的大量利用(一對光纜可開通幾千路電話)以及數(shù)字信號處理技術的發(fā)展(可將一路數(shù)字電話的數(shù)碼率由64kb/s壓縮到32kb/s甚至更低的數(shù)碼率),數(shù)字電話的帶寬問題已不是主要問題了[3]。
以上介紹了數(shù)字信號具有很多優(yōu)點,克服了模擬音響技術的缺陷,數(shù)字音響技術應運而生,并從本世紀80年代起獲得了引人注目的發(fā)展。
傳統(tǒng)公共廣播系統(tǒng)(如校園、公園、商場等)同時只能播放一個節(jié)目,因此聽眾的選擇性較小;并且模擬信號在傳輸?shù)倪^程中會衰減、易受干擾而增加噪聲。隨著以太網基礎設施日趨完善,數(shù)字化信號處理已經成熟。因此本文提出了以太網音箱替代傳統(tǒng)模擬廣播音響,利用網絡傳輸數(shù)字音頻,既可以保證音頻信號質量,還可以根據(jù)應用環(huán)境和區(qū)域進行單播、組播,使廣播內容更有針對性。本項目使用PIC32 Ethernet Starter Kit,利用PIC32 Starter Board PIM Adapter外接DA驅動底板。利用以太網通信傳輸MP3碼流和基于PIC32的高性能軟解碼MP3文件,利用SPI接口驅動DA輸出模擬信號,實現(xiàn)了高效、高質量、低成本的以太網音箱。
2相關技術和原理
2.1相關技術
2.1.1 MP3
MP3全稱是動態(tài)影像專家壓縮標準音頻層面3(Moving Picture Experts Group Audio Layer III)。是當今較流行的一種數(shù)字音頻編碼和有損壓縮格式,它設計用來大幅度地降低音頻數(shù)據(jù)量,而對于大多數(shù)用戶來說重放的音質與最初的不壓縮音頻相比沒 有明顯的下降。它是在1991年由位于德國埃爾朗根的研究組織Fraunhofer-Gesellschaft的一組工程師發(fā)明和標準化的。
使用PCM信號進行MP3壓縮時,以1152個PCM采樣值為單位,封裝成具有固定長度的MP3數(shù)據(jù)幀,幀是MP3文件的最小組成單位。在解碼時,利用數(shù)據(jù)幀里的信息就可以恢復出1152個PCM采樣值。這1152個采樣值被分為2個粒度組,每個粒度組包含576個采樣值。一個MP3數(shù)據(jù)幀分為5個部分:幀頭、CRC校驗值、邊信息、主數(shù)據(jù)、附加數(shù)據(jù)。
數(shù)據(jù)流的同步以及幀頭信息的讀取MP3數(shù)據(jù)流的同步以幀為單位,每一幀的幀頭都包含同步信息。這個同步信息是連續(xù)的12比特的‘1’組成。MP3音頻解碼過程中的第一步就是使解碼器與輸入數(shù)據(jù)流同步。在啟動解碼器后,可以通過搜索數(shù)據(jù)流中的12比特長的同步字來完成。在取得同步以后跟著的數(shù)據(jù)就是幀頭信息,包括采樣率、填充位、比特率等信息。
主數(shù)據(jù)的讀取在MP3編碼過程中使用了比特池技術,所以當前幀的主數(shù)據(jù)不一定全部都在當前幀中,在解碼過程中,必須結合主數(shù)據(jù)開始指針的值來確定主數(shù)據(jù)的開始位置。主數(shù)據(jù)包含的數(shù)據(jù)有縮放因子、哈夫曼數(shù)據(jù)及附加數(shù)據(jù)。這些字段在主數(shù)據(jù)中有固定的格式。
哈夫曼解碼和反量化在MP3編碼過程中,根據(jù)心理聲學模型的輸出,對離散余弦變換的輸出樣本以粒度為單位進行的量化和分配,再對量化的結果進行哈夫曼編碼。量化和編碼主要是通過循環(huán)迭代完成的,循環(huán)模塊分為三層來描述,最高層為幀循環(huán),它調用外層迭代循環(huán),而外層迭代循環(huán)又調用內層迭代循環(huán)。但在解碼過程中,哈夫曼解碼和反量化過程是分開實現(xiàn)的。每個粒度組的頻率線都是用不同的哈夫曼表來進行編碼的,因此在解碼過程中,需要采用不同的解碼方法。反量化頻譜過程就是基于所得到的哈夫曼解碼數(shù)據(jù),根據(jù)逆量化全縮放公式和幀邊信息,對于不同的窗類型采用不同的公式以恢復576個頻率線的真實值。
反量化過程中得出的頻譜值不是按相同順序排列的。在編碼的MDCT過程中,對于長窗產生的頻譜值先按子帶然后按頻率排列;對于短窗,產生的頻譜值按子帶、窗、頻率的順序排列。為了提供哈夫曼編碼效率,短窗中的數(shù)據(jù)被重新排列,按照子帶、頻率、窗的順序排列。解碼時,重排序及時將短窗中的頻譜值重新排列。同樣,在編碼的MDCT過程中,為了得到更好的頻域特性,對長窗對應每個子帶進行了去混疊處理,為了得到正確的音頻信號,在解碼時必須對長窗對應的子帶進行混疊重建。
逆向離散余弦變換主要是使用逆向離散余弦變換的公式,對反量化得出的信號進行變換。逆向離散余弦變換的計算十分復雜,為了提高效率,可以對計算做一些優(yōu)化。
頻率反轉和子帶合成頻率反轉是對逆向離散余弦變換的輸出值中的奇數(shù)號子帶(0到31號子帶中的1,3,5,...,31)中的奇數(shù)號樣本值(每個子帶中的 0到17號樣本值的1,3,5,...,17號樣本值)進行反相處理,用來補償編碼時為提高離散余弦變換效率而進行的頻率反轉。子帶合成濾波器將32個帶寬相等的子帶中的頻域信號反變換成時域信號。子帶合成是逆向離散余弦變換后的一個通道中32個子帶的樣值,經過一系列的計算還原出32個PCM數(shù)字音頻信號的過程。子帶合成過程先將32個子帶樣值進行逆向離散余弦變換,生成64個中間值,將這64個中間值轉入到一個長為1024點的類似先進先出FIFO的緩存,再在這1024個值中抽取一半,構成一個512個值的矢量,再進行加窗運算,最后將加窗結果進行疊加生成32個時域輸出。
2.1.2 RTLL
應用程序開發(fā)人員可能考慮在他們的應用程序中使用開源的代碼組件。開源代碼的證書可能要求覆蓋特殊代碼。這個要求對開發(fā)人員的開發(fā)或擁有者很不方便。RTLL(Run-Time Library Loading),運行時庫載入技術便應用于這種情形下。利用這種技術不會將開源代碼鏈接到主應用程序。它們被另外編譯,兩者不相互聯(lián)系。開源程序庫是在運行時才會利用載入器將函數(shù)指針集合載入[4]。
2.2系統(tǒng)原理
本系統(tǒng)在PIC32 Ethernet Starter Kit硬件基礎上,利用PIC32 Starter Board PIM Adapter外接DA驅動底板,構成以太網音響終端設備。由PC作為服務器利用以太網以MP3幀為單位,將MP3音頻數(shù)據(jù)以播放速率傳輸?shù)揭蕴W音箱終端。在終端中利用PIC32運行網絡協(xié)議,接收由服務器發(fā)過來MP3幀,并解碼緩沖到終端的緩沖隊列里,保證終端設備的播放流暢。
圖1系統(tǒng)原理圖
圖1中描述了以太網音響的系統(tǒng)原理,描述了以太網音響的各個部分。圖2中描述了以太網音響的工作模型。以太網音響工作在局域網中,每個終端節(jié)點按需跟服務器相連,索要數(shù)據(jù)。
圖2系統(tǒng)模型圖
3硬件設計
3.1 PIC32 Ethernet Starter KIT簡介
PIC32 Ethernet Starter Kit[5]是一個非常簡單易用,低成本的用于體驗PIC3210/100Ethernet等功能的開發(fā)工具。PIC32可提供工作頻率80MHz的32位MIPS處理器內核、512KB的編程FLASH、32KB的RAM內存以及眾多的外圍設備。這些設備包括USB控制器、定時器/計數(shù)器、串口控制器、A/D轉換器以及更多的設備。該板具有大量的I/O接口和電源選項,其中也包括USB電源[5]。它同時還具有與Microchip MPLAB開發(fā)軟件相兼容的內置編程、調試、下載電路。圖3就是本文中所用到的開發(fā)板。
圖3PIC32 Ethernet Starter Kit實物圖
3.2 DAC7512芯片
DAC7512是德州儀器生產的一個DAC芯片。該DAC7512是款低功耗,單向,12位緩沖電壓輸出的數(shù)模轉換器(DAC)。其內置的精密輸出放大器允許軌對軌擺幅輸出。該DAC7512采用了通用的三線串行接口。工作時鐘速率最高30MHz,兼容標準的SPI,QSPI,Microwire和DSP接口。
DAC7512的參考電壓來自輸入電壓,從而在可能的最寬的動態(tài)輸出范圍。DAC7512采用了上電復位電路,確保DAC輸出上保持在0V直到有一個有效的寫操作在設備上。DAC7512包含省電特性,在串行接口訪問時,也可以降低電流消耗器件到50nA。正常模式工作的低功耗正好適用于便攜式電池供電設備。在5V電壓供電時,功率消耗為從0.7mW減少到掉電模式的1μW。
DAC7512可用于 SOT23-6 封裝和MSOP-8封裝。
圖4 DAC7512引腳視圖
3.3 PIC3 Starter Board PIM Adapter
以太網音箱中需要用到數(shù)模轉換,但PIC32 Ethernet Starter Kit中并未有DA和相應的音頻輸出接口。因此需要使用到一塊轉接板,然后接插上本次設計中所用的DA輸出電路。其實物圖如圖5所示。
圖5 PIC3 Starter Board PIM Adapter
3.4硬件設計
圖6描述了三塊電路板的連線圖,DAC7512的SYNC、SCLK和DIN連接上了PIC32 Ethernet Starter Kit電路板上U1的引腳40、引腳39和引腳50,通過J2連上了MCU PIC32MX795F512L的SPI3的 SS3A、SCK3A和SDO3A。
圖6連接圖
圖7是DA驅動電路圖。
圖7以太網音箱DA電路驅動圖
3.5硬件實物圖
從圖7中可以看出,左側為PIC32EthernetStarterKIT實物圖,右側為擴展的EMW-380-C模塊。
圖8以太網音箱實物圖
4軟件設計
本系統(tǒng)的整個設計包括以太網音響終端設備軟件設計和PC服務器軟件設計。以太網音響終端設備實現(xiàn)了UDP數(shù)據(jù)通信,MP3軟解碼和DAC 驅動。而PC服務器軟件實現(xiàn)了對MP3文件的初步分析,分析提取MP3幀;通過TCP/IP的socket,以MP3幀為最小單位,按每秒26耗描勻速發(fā)送給以太網音響終端設備。
4.1PC服務器軟件設計
4.1.1通信數(shù)據(jù)結構設計
PC服務器利用非連接UDP和以太網音響終端設備通信,因此在應用上傳輸?shù)臄?shù)據(jù)大小不宜超過數(shù)據(jù)鏈路層上的最大數(shù)據(jù)單元。因為,如果超過數(shù)據(jù)鏈路層的上最大數(shù)據(jù)單元,會造成數(shù)據(jù)在數(shù)據(jù)鏈路層上被拆分,而且由于數(shù)據(jù)在UDP上的不可靠性,會導致由于整批數(shù)據(jù)中的一個分段丟失導致了整個數(shù)據(jù)錯誤,因此應用上傳輸?shù)淖畲髷?shù)據(jù)大小應小于數(shù)據(jù)鏈路層上的最大數(shù)據(jù)單元。
上面就是發(fā)送的數(shù)據(jù)結構。usDataHeader是數(shù)據(jù)包頭部分,其高4為該數(shù)據(jù)的類型:0x1表示該數(shù)據(jù)的為MP3幀,0x03表示該數(shù)據(jù)為MP3最后一幀;第27位到第20位為數(shù)據(jù)序號;第19位到第16位為保留字段;低16位為MP3幀數(shù)據(jù)大小。ucDataBuffer為MP3數(shù)據(jù)幀。
4.1.2應用程序界面設計
圖9展示了PC程序的主界面,其分別有服務器設置,設置IP地址、端口和音頻文件。音頻屬性中顯示了選中音頻的相關信息。以太網音響信息,會顯示終端設備的IP地址和它的端口號。播放控制和現(xiàn)實中現(xiàn)實了播放間隔和相應的數(shù)據(jù)包長度,并且可以控制是否發(fā)送數(shù)據(jù)和停止。
圖9 PC程序界面
4.1.3應用程序設計
PC服務器可以配置綁定本機網卡地址和端口號。然后選擇MP3音頻節(jié)目,等待以太網終端設備發(fā)起數(shù)據(jù)請求。當收到終端設備發(fā)來的連接請求時,將其IP地址和發(fā)送數(shù)據(jù)的端口號記錄下來,作為向終端設備發(fā)送數(shù)據(jù)的地址并將該信息現(xiàn)實到PC程序的界面上。
圖10PC服務器主程序
圖11PC服務器等待請求線程
圖12PC服務器發(fā)送數(shù)據(jù)定時器中斷
PC服務器在開啟時候會運行主界面程序(其流程圖如圖9所示)和接收終端設備請求線程(其流程圖如圖10所示)。當用戶播放數(shù)據(jù)之后,程序會運行定時器終端程序,定時發(fā)送MP3數(shù)據(jù)幀。
4.2以太網終端設備軟件設計
4.1.1緩沖區(qū)數(shù)據(jù)結構設計
下面是一個數(shù)據(jù)單元的結構體。ucIndex為數(shù)據(jù)包序號;uiHeader該數(shù)據(jù)類型;uiSize為解碼的數(shù)據(jù)個數(shù),數(shù)據(jù)單位為字節(jié);ucBuffer為MP3解碼后的PCM碼流;fiInfo為針砭信息。解碼后的最大的數(shù)據(jù)長度為2304,因此將ucBuffer定義最大長度為2400。
考慮到網絡的傳輸?shù)目赡艹霈F(xiàn)一些抖動、PC軟件定時器的誤差和需要給MP3解碼預留時間,因此需要在終端設備中緩沖一定的數(shù)據(jù)量。又由于,MP3音頻要實時播放因此不需要緩沖太大的數(shù)據(jù)量。
在本次設計中,在終端設備里將上面的數(shù)據(jù)結構定義為20個緩沖區(qū)。當數(shù)據(jù)緩沖解碼到數(shù)據(jù)緩沖區(qū)個數(shù)的一半時,開始播放PCM碼流。
4.1.2以太網終端設備軟件設計
以太網終端設備模塊有三個分別是EthernetSpeaker.c、EthernetSpeakerPlayer.c和MP3Api.c。EthernetSpeaker.c的功能是負責網絡通訊模塊,EthernetSpeakerPlayer.c是DA驅動模塊,MP3Api.c中包含MP3庫載入初始化,和MP3解碼函數(shù)。
圖13以太網音響終端設備程序流程圖
圖13描述了以太網終端設備程序流程圖,通過SW3按鍵向PC程序發(fā)送請求數(shù)據(jù)。圖14中描述了以太網終端設備的SP3 TX空的中斷服務程序。
圖14以太網終端設備SPI TX空中斷服務程序流程圖
5總結
本文實現(xiàn)了以太網音響在現(xiàn)有的以太網上可以播放MP3文件,解決了傳統(tǒng)模擬廣播系統(tǒng)的模擬的信號的缺點。實現(xiàn)了PC服務器勻速發(fā)送MP3幀文件,終端設備軟解碼并實時播放。最后的成品可以在局域網上流暢播放、控制終端設備。設計基本達到了賽前的設計需求。當然,本次設計還是有遺憾和不足之處,遺憾的是由于PIC32不支持I2S,所以只有用SPI驅動DA,導致了只能播放單聲道。





