I2S音頻總線學(xué)習(xí)?(一)數(shù)字音頻技術(shù)?一、聲音的基本概念?? ? 聲音是通過一定介質(zhì)傳播的連續(xù)的波。
圖1 聲波 重要指標(biāo): - 振幅:音量的大小
- 周期:重復(fù)出現(xiàn)的時(shí)間間隔
- 頻率:指信號(hào)每秒鐘變化的次數(shù)
聲音按頻率分類:
圖2 聲音的頻率(語音信號(hào)頻率范圍:300Hz-3kHz) 聲音的傳播攜帶了信息,它是人類傳播信息的一種主要媒體。 聲音的三種類型: - 波形聲音:包含了所有聲音形式
- 語音:不僅是波形聲音,而且還有豐富的語言內(nèi)涵(抽象→提取特征→意義理解)
- 音樂:與語音相比,形式更規(guī)范。音樂是符號(hào)化的聲音。
二、聲音的數(shù)字化?1.聲音信號(hào)的類型 - 數(shù)字信號(hào)(計(jì)算機(jī))
2.聲音數(shù)字化過程? 圖3 聲音數(shù)字化過程 3.聲音數(shù)字化過程示意圖? 圖4 聲音數(shù)字化過程示意圖 4.聲音數(shù)字化三要素 | 采樣頻率 | ? | 量化位數(shù) | 聲道數(shù) | | 每秒鐘抽取聲波幅度樣本的次數(shù) | ? | 每個(gè)采樣點(diǎn)用多少二進(jìn)制位表示數(shù)據(jù)范圍 | 使用聲音通道的個(gè)數(shù) | 采樣頻率越高 聲音質(zhì)量越好 數(shù)據(jù)量也越大 | ? | 量化位數(shù)越多 音質(zhì)越好 數(shù)據(jù)量也越大 | 立體聲比單聲道的表現(xiàn)力豐富,但數(shù)據(jù)量翻倍 | 11.025kHz 22.05 kHz 44.1??kHz | ? | 8位=256 16位=65536 | 單聲道 立體聲 | 5.聲音數(shù)字化的數(shù)據(jù)量?音頻數(shù)據(jù)量=采樣頻率×量化位數(shù)×聲道數(shù)/8(字節(jié)/秒) 采樣頻率 (kHz) | 量化位數(shù) (bit) | 數(shù)據(jù)量(KB/s) | | 單聲道 | 立體聲 | | 11.025 | 8 | 10.77 | 21.35 | | 16 | 21.53 | 43.07 | | 22.05 | 8 | 21.53 | 43.07 | | 16 | 43.07 | 86.13 | | 44.1 | 8 | 43.07 | 86.13 | | 16 | 86.13 | 172.27 |
三、音頻的文件格式?1.WAV文件?WAV是Microsoft/IBM共同開發(fā)的PC波形文件。因未經(jīng)壓縮,文件數(shù)據(jù)量很大。 特點(diǎn):聲音層次豐富,還原音質(zhì)好 2.MP3文件?MP3(MPEG Audio layer3)是一種按MPEG標(biāo)準(zhǔn)的音頻壓縮技術(shù)制作的音頻文件。 特點(diǎn):高壓縮比(11:1),優(yōu)美音質(zhì) 3.WMA文件?WMA(Windows Media Audio)是Windows Media格式中的一個(gè)子集(音頻格式)。 特點(diǎn):壓縮到MP3一半 4.MIDI文件?MIDI(樂器數(shù)字接口)是由一組聲音或樂器符號(hào)的集合。 特點(diǎn):數(shù)據(jù)量很小,缺乏重現(xiàn)自然音 四、數(shù)字音頻壓縮標(biāo)準(zhǔn)?1.音頻壓縮方法概述?[img=734,71][/img] 圖5 壓縮編碼技術(shù)是指用某種方法使數(shù)字化信息的編碼率降低的技術(shù) 音頻信號(hào)能壓縮的基本依據(jù):?①聲音信號(hào)中存在大量的冗余度; ②人的聽覺具有強(qiáng)音能抑制同時(shí)存在的弱音現(xiàn)象。 音頻信號(hào)壓縮編碼的分類:?①無損壓縮(熵編碼) 霍夫曼編碼、算術(shù)編碼、行程編碼 ②有損壓縮 波形編碼--PCM、DPCM、ADPCM 、子帶編碼、矢量量化 參數(shù)編碼--LPC 混合編碼--MPLPC、CELP 2.音頻壓縮技術(shù)標(biāo)準(zhǔn) | 分類 | 標(biāo)準(zhǔn) | 說明 | 電話語 音質(zhì)量 | G.711 | 采樣8kHz,量化8bit,碼率64kbps | | G.721 | 采用ADPCM編碼,碼率32kbps | | G.723 | 采用ADPCM有損壓縮,碼率24kbps | | G.728 | 采用LD-CELP壓縮技術(shù),碼率16kbps | 調(diào)幅廣 播質(zhì)量 | G.722 | 采樣16kHz,量化14bit,碼率224(64)kbps | 高保真 立體聲 | MPEG 音頻 | 采樣44.1kHz,量化16bit,碼率705kbps (MPEG三個(gè)壓縮層次,384-64kbps) | 五、聲卡?1.聲卡的主要功能?聲卡是負(fù)責(zé)錄音、播音和聲音合成的一種多媒體板卡。其功能包括: ①錄制、編輯和回放數(shù)字音頻文件 ②控制和混合各聲源的音量 ③記錄和回放時(shí)進(jìn)行壓縮和解壓縮 ④語音合成技術(shù)(朗讀文本) ⑤具有MIDI接口(樂器數(shù)字接口)?2.芯片類型 - 數(shù)字信號(hào)處理器DSP(不依賴CPU)
(二)I2S總線協(xié)議?一、I2S總線概述?? ?? ?? ?音響數(shù)據(jù)的采集、處理和傳輸是多媒體技術(shù)的重要組成部分。眾多的數(shù)字音頻系統(tǒng)已經(jīng)進(jìn)入消費(fèi)市場,例如數(shù)字音頻錄音帶、數(shù)字聲音處理器。對(duì)于設(shè)備和生產(chǎn)廠家 來說,標(biāo)準(zhǔn)化的信息傳輸結(jié)構(gòu)可以提高系統(tǒng)的適應(yīng)性。I2S(Inter—IC??Sound)總線是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn),該總線專責(zé)于音頻設(shè)備之間的數(shù)據(jù)傳輸,廣泛應(yīng)用于各種多媒體系統(tǒng)。 二、I2S總線規(guī)范?I2S總線擁有三條數(shù)據(jù)信號(hào)線: 1、SCK: (continuous serial clock)??串行時(shí)鐘?? ?? ?? ?對(duì)應(yīng)數(shù)字音頻的每一位數(shù)據(jù),SCK都有1個(gè)脈沖。SCK的頻率=2×采樣頻率×采樣位數(shù)。 2、WS: (word select)??字段(聲道)選擇?? ?? ?? ?用于切換左右聲道的數(shù)據(jù)。WS的頻率=采樣頻率。 ? ?? ?? ?命令選擇線表明了正在被傳輸?shù)穆暤馈?br /> ? ?? ?? ?WS為“1”表示正在傳輸?shù)氖亲舐暤赖臄?shù)據(jù)。 ? ?? ?? ?WS為“0”表示正在傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。 ? ?? ?? ?WS可以在串行時(shí)鐘的上升沿或者下降沿發(fā)生改變,并且WS信號(hào)不需要一定是對(duì)稱的。在從屬裝置端,WS在時(shí)鐘信號(hào)的上升沿發(fā)生改變。WS總是在最高位傳輸 前的一個(gè)時(shí)鐘周期發(fā)生改變,這樣可以使從屬裝置得到與被傳輸?shù)拇袛?shù)據(jù)同步的時(shí)間,并且使接收端存儲(chǔ)當(dāng)前的命令以及為下次的命令清除空間。 3、SD: (serial data)??串行數(shù)據(jù)?? ?? ?? ?用二進(jìn)制補(bǔ)碼表示的音頻數(shù)據(jù)。 I2S 格式的信號(hào)無論有多少位有效數(shù)據(jù),數(shù)據(jù)的最高位總是被最先傳輸(在WS變化(也就是一幀開始)后的第2個(gè)SCK脈沖處),因此最高位擁有固定的位置,而最 低位的位置則是依賴于數(shù)據(jù)的有效位數(shù)。也就使得接收端與發(fā)送端的有效位數(shù)可以不同。如果接收端能處理的有效位數(shù)少于發(fā)送端,可以放棄數(shù)據(jù)幀中多余的低位數(shù) 據(jù);如果接收端能處理的有效位數(shù)多于發(fā)送端,可以自行補(bǔ)足剩余的位(常補(bǔ)足為零)。這種同步機(jī)制使得數(shù)字音頻設(shè)備的互連更加方便,而且不會(huì)造成數(shù)據(jù)錯(cuò)位。 為了保證數(shù)字音頻信號(hào)的正確傳輸,發(fā)送端和接收端應(yīng)該采用相同的數(shù)據(jù)格式和長度。當(dāng)然,對(duì)I2S格式來說數(shù)據(jù)長度可以不同。 對(duì)于系統(tǒng)而言,產(chǎn)生SCK和WS的信號(hào)端就是主設(shè)備,用MASTER表示,簡單系統(tǒng)示意圖如圖1所示:? ?? ?
圖1 簡單系統(tǒng)配置和基本接口時(shí)序
? ?? ? 另一個(gè)基本的接口時(shí)序圖可以參看圖2所示:??
圖2 I2S典型的接口時(shí)序 ? 4、時(shí)序要求?? ?? ???在IIS總線中,任何設(shè)備都可以通過提供必需的時(shí)鐘信號(hào)成為系統(tǒng)的主設(shè)備置,而從屬設(shè)備通過外部時(shí)鐘信號(hào)來得到它的內(nèi)部時(shí)鐘信號(hào),這就意味著必須重視主設(shè)備和數(shù)據(jù)以及命令選擇信號(hào)之間的傳播延遲,總的延遲主要由兩部分組成: 1.外部時(shí)鐘和從設(shè)備的內(nèi)部時(shí)鐘之間的延遲 2.內(nèi)部時(shí)鐘和數(shù)據(jù)信號(hào)以及命令選擇信號(hào)之間的延遲 ? ?? ???對(duì)于數(shù)據(jù)和命令信號(hào)的輸入,外部時(shí)鐘和內(nèi)部時(shí)的延遲不占據(jù)主導(dǎo)的地位,它只是延長了有效的建立時(shí)間(set-up time)。延遲的主要部分是發(fā)送端的傳輸延遲和設(shè)置接收端所需的時(shí)間。見圖3和圖4:
圖3 Timing for IIS Transmitter
圖4??Timing for IIS Receiver 其中:
T是時(shí)鐘周期,Tr是最小允許時(shí)鐘周期,T>Tr這樣發(fā)送端和接收端才能滿足數(shù)據(jù)傳輸速率的要求。 對(duì)于所有的數(shù)據(jù)速率,發(fā)送端和接收端均發(fā)出一個(gè)具有固定的傳號(hào)空號(hào)比(mark—space ratio)的時(shí)鐘信號(hào),所以t LC和tHC是由T所定義的。 t LC和tHC必須大于0.35T,這樣信號(hào)在從屬裝置端就可以被檢測到。 延遲(tdtr)和最快的傳輸速度(由Ttr定義)是相關(guān)的,快的發(fā)送端信號(hào)在慢的時(shí)鐘上升沿可能導(dǎo)致tdtr不能超過tRC而使thtr為零或者負(fù)。只有tRC不大于tRCmax的時(shí)候(tRCmax>:0.15T),發(fā)送端才能保證thtr大于等于0。 為了允許數(shù)據(jù)在下降沿被記錄,時(shí)鐘信號(hào)上升沿及T相關(guān)的時(shí)間延遲應(yīng)該給予接收端充分的建立時(shí)間(set-up time)。 數(shù)據(jù)建立時(shí)間(set-up time)和保持時(shí)間(hold time)不能小于指定接收端的建立時(shí)間和保持時(shí)間。
5、電氣特性?輸出電壓: ? ?? ???VL <0.4V? ??? ? ?? ?? ?? ?VH>2.4V 輸入電壓 ? ?? ?? ?VIL=0.8V? ? ? ?? ?? ?? ? VIH=2.0V 注:目前使用的TTL電平標(biāo)準(zhǔn),隨著其他IC(LSI)的流行,其他電平也會(huì)支持。?? I2S(InterIC Sound Bus)是飛利浦公司針對(duì)數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn),采用沿獨(dú)立的導(dǎo)線傳輸時(shí)鐘與數(shù)據(jù)信號(hào)的設(shè)計(jì),通過分離數(shù)據(jù)和時(shí)鐘信號(hào),避免了時(shí)差誘發(fā)的失真。I2S總線簡單有效,可以有效提升輸出數(shù)據(jù)的質(zhì)量,在各種嵌入式音頻系統(tǒng)中有廣泛應(yīng)用。但是在嵌入式音頻系統(tǒng)設(shè)計(jì)中,并不是所有的MCU都支持I2S總線格式,再加上I2S還沒有統(tǒng)一的接口標(biāo)準(zhǔn),不同的廠家生產(chǎn)的設(shè)備接口也是五花八門,采用軟件模擬實(shí)現(xiàn)I2S總線可有效解決在不支持其的MCU和設(shè)備之間通過I2S總線實(shí)現(xiàn)數(shù)據(jù)傳輸時(shí)出現(xiàn)的問題。 本文通過在以太網(wǎng)數(shù)字語音廣播系統(tǒng)中軟件模擬I2S總線實(shí)現(xiàn)語音數(shù)據(jù)傳輸,給出了軟件模擬實(shí)現(xiàn)I2S總線的方法。 1 I2S總線規(guī)范 I2S為三線總線,3個(gè)信號(hào)分別為: ① 串行時(shí)鐘SCK,也叫位時(shí)鐘(BCK)。即每發(fā)送1位數(shù)字音頻數(shù)據(jù),SCK上都有1個(gè)脈沖。SCK的頻率=2×采樣頻率×采樣位數(shù)。在數(shù)據(jù)傳輸過程中,I2S總線的發(fā)送器和接收器都可以作為系統(tǒng)的主機(jī)來提供系統(tǒng)的時(shí)鐘頻率。 ② 幀時(shí)鐘WS,即命令(聲道)選擇,用于切換左右聲道的數(shù)據(jù)。WS的頻率等于采樣頻率,由系統(tǒng)主機(jī)提供。WS為“1”表示傳輸?shù)氖亲舐暤赖臄?shù)據(jù),WS為“0”表示傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。 ③ 串行數(shù)據(jù)信號(hào)SD,用于傳輸二進(jìn)制補(bǔ)碼表示的音頻數(shù)據(jù)。 I2S格式的信號(hào)無論有多少位有效數(shù)據(jù),數(shù)據(jù)位的最高位(MSB)總是被最先傳輸,1次能夠發(fā)送的數(shù)據(jù)決定于I2S格式的有效位數(shù)。 1個(gè)典型的I2S信號(hào)時(shí)序如圖1所示
圖1 I2S總線典型時(shí)序圖 隨著技術(shù)的發(fā)展,在統(tǒng)一的I2S接口下出現(xiàn)了多種不同的數(shù)據(jù)格式。根據(jù)SD信號(hào)相對(duì)于SCK和WS位置的不同,分為左對(duì)齊和右對(duì)齊2種格式,如圖2和圖3所示。
圖2 16位有效位數(shù)的左對(duì)齊格式
圖3 16位有效位數(shù)的右對(duì)齊格式 在上面2種數(shù)據(jù)傳輸格式中,當(dāng)WS為“1”時(shí)傳輸?shù)氖亲舐暤赖臄?shù)據(jù),當(dāng)WS為“0”時(shí)傳輸?shù)氖怯衣暤赖臄?shù)據(jù)。為了保證數(shù)字音頻信號(hào)的正確傳輸,發(fā)送端和接收端必須采用相同的數(shù)據(jù)格式。 2 軟件模擬I2S 以太網(wǎng)數(shù)字語音廣播系統(tǒng)主要是指以以太網(wǎng)為傳播介質(zhì)提供音頻服務(wù)的廣播系統(tǒng),將語音信號(hào)以標(biāo)準(zhǔn)IP包的形式在以太網(wǎng)上進(jìn)行傳送,以實(shí)現(xiàn)語音廣播功能。該系統(tǒng)在PC機(jī)端通過麥克風(fēng)采集語音數(shù)據(jù),然后將采集到的語音數(shù)據(jù)通過以太網(wǎng)發(fā)送給嵌入式終端,嵌入式終端將接收到的語音數(shù)據(jù)進(jìn)行數(shù)/模轉(zhuǎn)換后進(jìn)行播放。系統(tǒng)實(shí)現(xiàn)框圖如圖4所示[5]。
圖4 以太網(wǎng)數(shù)字語音廣播系統(tǒng)框圖
圖5 LM3S8962與MS6336的連接圖 廣播系統(tǒng)終端的MCU LM3S8962將接收到的語音數(shù)據(jù)通過I2S總線發(fā)送給語音解碼芯片MS6336進(jìn)行數(shù)/模轉(zhuǎn)換并播放, LM3S8962和MS6336的連接如圖5所示。為了完整還原出語音信號(hào),需要保證軟件模擬I2S信號(hào)時(shí)序嚴(yán)格精確,高低電平的轉(zhuǎn)換采用延時(shí)程序?qū)崿F(xiàn)。MS6336為16位D/A芯片,其I2S時(shí)序如圖6所示。
圖6 MS6336的典型I2S時(shí)序圖 該系統(tǒng)中的語音數(shù)據(jù)雙聲道,16位采樣,1個(gè)采樣點(diǎn)的數(shù)據(jù)為4字節(jié),1個(gè)采樣點(diǎn)數(shù)據(jù)通過MCU發(fā)送給MS6336,數(shù)據(jù)發(fā)送流程如圖7所示。
圖7 1個(gè)采樣點(diǎn)數(shù)據(jù)發(fā)送流程 軟件模擬I2S引腳的定義如下: #define I2S_WS GPIO_PIN_5//模擬I2S聲道選擇時(shí)鐘控制位 #define I2S_BCK GPIO_PIN_6//模擬I2S位時(shí)鐘控制位 #define I2S_DATA GPIO_PIN_7//模擬I2S數(shù)據(jù)傳送位 根據(jù)MS6336的I2S總線格式以及數(shù)據(jù)發(fā)送流程,軟件模擬I2S總線的步驟如下: ① 根據(jù)語音數(shù)據(jù)采樣率及采樣位數(shù)計(jì)算得到SCK的值和WS的值(WS的值等于采樣頻率)。 系統(tǒng)采樣率為44.1 kHz,則SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1個(gè)SCK時(shí)鐘周期T=1/SCK=07 μs。采用延時(shí)程序模擬SCK時(shí)鐘周期需要應(yīng)用示波器來精確延時(shí)時(shí)間。本系統(tǒng)中一個(gè)SCK周期的延時(shí)為delayI2S(2)。 ② 將WS、BCK和DATA均置為高電平。 ③ 選擇左右聲道。首先發(fā)送左聲道數(shù)據(jù),將WS置低(若發(fā)送右聲道數(shù)據(jù)則將WS置高)。 for(ChannelCnt=0;ChannelCnt<2;ChannelCnt++){//雙聲道選擇播放 if(ChannelCnt==0){//右聲道選擇信號(hào)為高電平 HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = ~I2S_WS; } else{//左聲道選擇信號(hào)為低電平 HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS << 2))) = I2S_WS; } …… } ④ 選擇高低字節(jié)。將左聲道數(shù)據(jù)以高低字節(jié)的順序發(fā)送,在發(fā)送高字節(jié)第1位數(shù)據(jù)之前先發(fā)送1個(gè)周期的串行時(shí)鐘。 for(HorLCnt=0;HorLCnt<2;HorLCnt++){//聲道數(shù)據(jù)高低字節(jié)選擇 if(ChannelCnt==1){//左聲道 if(HorLCnt==0){//低字節(jié) c=*(SampleData+1);//SampleData指向音頻數(shù)據(jù)緩沖區(qū)首地址,即左聲道低字節(jié) delayI2S(2);//發(fā)送第一個(gè)數(shù)據(jù)位之前需要延遲一個(gè)位時(shí)鐘周期 } else{//低字節(jié) c=*SampleData; } } …… } ⑤ 開始傳輸音頻數(shù)據(jù)(音頻數(shù)據(jù)的傳輸在SCK下降沿準(zhǔn)備數(shù)據(jù),在SCK的上升沿發(fā) 送給數(shù)據(jù)接收端)。將采樣點(diǎn)左聲道數(shù)據(jù)的高字節(jié)最高位送給SD,設(shè)置SCK為低電平,此時(shí)為SCK的下降沿,數(shù)據(jù)準(zhǔn)備好。延時(shí)半個(gè)SCK周期以后將 SCK置為高電平,此時(shí)SD線上的數(shù)據(jù)發(fā)送給數(shù)據(jù)接收端,延時(shí)半個(gè)SCK周期。依次將左聲道剩余位數(shù)據(jù)按照最高位的方式發(fā)送出去。 for(BitCnt=0;BitCnt<8;BitCnt++){//1次傳送的數(shù)據(jù)長度為8位,先傳送高字節(jié)再傳送低字節(jié)置時(shí)鐘線SCK為低,開始準(zhǔn)備數(shù)據(jù)位 HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = ~I2S_BCK; if((c<<bitcnt)&0x80) { HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = I2S_DATA; } else{ HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA << 2))) = ~I2S_DATA; } delayI2S(1); //延時(shí)半個(gè)SCK時(shí)鐘周期置時(shí)鐘線為高,開始傳輸數(shù)據(jù)位 HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK << 2))) = I2S_BCK; delayI2S(1);//延時(shí)半個(gè)時(shí)鐘周期 } ⑥ 當(dāng)將1個(gè)采樣點(diǎn)的左聲道的數(shù)據(jù)發(fā)送完以后,延時(shí)2個(gè)SCK周期,然后發(fā)送右聲道的數(shù)據(jù)(同左聲道數(shù)據(jù)的發(fā)送過程)。 根據(jù)以上的過程對(duì)每個(gè)采樣點(diǎn)的數(shù)據(jù)進(jìn)行處理,就可以實(shí)現(xiàn)通過軟件模擬I2S總線傳輸音頻數(shù)據(jù)了。以上實(shí)現(xiàn)的是典型I2S時(shí)序模擬,而左對(duì)齊和右對(duì)齊2種格式只是時(shí)序稍有差異,模擬實(shí)現(xiàn)過程同典型I2S總線模擬實(shí)現(xiàn)過程基本相同。
結(jié)語 在以太網(wǎng)數(shù)字語音廣播系統(tǒng)中應(yīng)用軟件模擬實(shí)現(xiàn)I2S總線時(shí)序,能夠成功地實(shí)現(xiàn)語音信號(hào)的數(shù)據(jù)傳輸,實(shí)現(xiàn)語音信號(hào)的實(shí)時(shí)廣播,表明了軟件模擬實(shí)現(xiàn) I2S總線的可行性,為解決不支持I2S總線的MCU和各種I2S總線設(shè)備間的通信提供了一種可行的方法。但是,在應(yīng)用軟件模擬實(shí)現(xiàn)I2S的以太網(wǎng)數(shù)字語 音廣播系統(tǒng)實(shí)時(shí)播放語音信號(hào)時(shí),存在一些噪聲,表明在采用軟件模擬實(shí)現(xiàn)I2S的時(shí)序精確性上存在一些欠缺。 ? ? |