專(zhuān)利名稱:一種基于g726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,該軟硬件設(shè)計(jì)方案可以使得G726編碼器能夠進(jìn)行可改變路數(shù)的多路音頻編碼,屬于通信領(lǐng)域和嵌入式系統(tǒng)領(lǐng)域。
背景技術(shù):
G. 726 語(yǔ)音編碼是國(guó)際電信聯(lián)盟(International Telecommunications Union ;ITU)在1990年12月提出的一種自適應(yīng)量化ADPCM編碼。該編碼有四種編碼速率可選16/24/32/40kbps,可將音頻PCM信號(hào)編碼為上述碼率的碼流。具有編碼質(zhì)量好,算法復(fù)雜度適中的優(yōu)點(diǎn)。G726編碼是目前監(jiān)控行業(yè)通用的幾種編碼中最重要的一種。G726編碼是對(duì)音頻信號(hào)進(jìn)行量化編碼,一般的編碼器并不能處理多路音頻,但在實(shí)際應(yīng)用中,經(jīng)常需要對(duì)多路的音頻信號(hào)同時(shí)編碼。目前的G726及類(lèi)似編碼的多路實(shí)時(shí)音頻編碼方案中,主要的技術(shù)有兩種,第一種是整體通過(guò)專(zhuān)用集成電路來(lái)實(shí)現(xiàn),二是使用軟件編碼器來(lái)實(shí)現(xiàn)。這兩種方案中,前者是在數(shù)據(jù)處理性能方面具有較好的表現(xiàn),而后者是在使用成本以及由編碼方式變更時(shí)帶來(lái)的靈活性上體現(xiàn)優(yōu)勢(shì)。本發(fā)明提供了一種將以上兩者的優(yōu)勢(shì)相結(jié)合的實(shí)現(xiàn)方案,即在多路音頻信號(hào)的接收機(jī)制上采用軟件控制的硬件模塊來(lái)實(shí)現(xiàn)可變路數(shù)的接收這樣一種靈活的接收方式,在編碼器上則采用復(fù)用一塊專(zhuān)用集成電路編碼器來(lái)實(shí)現(xiàn)多路信號(hào)的編碼,當(dāng)編碼需要變更時(shí),可以直接將舊的編碼器替換成新的。這樣可以達(dá)到編碼路數(shù),編碼方式的靈活性以及生產(chǎn)、使用方便、成本低,而又達(dá)到實(shí)時(shí)編碼所需要的性能。本發(fā)明的意義在于,在多路編碼的應(yīng)用要求下,可以節(jié)省作為核心部件的音頻編碼器的數(shù)量和系統(tǒng)開(kāi)銷(xiāo),且方案易變通,具有普適性。
發(fā)明內(nèi)容
為了實(shí)現(xiàn)G. 726多路編碼,本發(fā)明提供了一種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案。該方案主要包括多路音頻接收機(jī)制模塊,包含一個(gè)多路模擬信號(hào)轉(zhuǎn)換一路數(shù)字信號(hào)硬件(其中每路信號(hào)經(jīng)過(guò)轉(zhuǎn)換后可以得到一條分時(shí)復(fù)用的信號(hào),周期性的依次呈現(xiàn)各路信號(hào)),信號(hào)緩沖硬件(其可將分時(shí)復(fù)用的的信號(hào)存入其硬件FIFO,當(dāng)數(shù)據(jù)多過(guò)設(shè)定值時(shí),硬件會(huì)發(fā)出數(shù)據(jù)滿信號(hào),以阻止FIFO的寫(xiě)操作繼續(xù)向FIFO中寫(xiě)數(shù)據(jù)而造成溢出);數(shù)據(jù)搬移模塊,這是由一個(gè)DMA控制器來(lái)構(gòu)成的,由軟件設(shè)置源地址和目的地址,并向Linux系統(tǒng)發(fā)出DMA傳輸開(kāi)始命令,將先前存在FIFO中的音頻數(shù)據(jù)傳輸?shù)街付ǖ刂返膬?nèi)存中;數(shù)據(jù)整合模塊,這個(gè)模塊是用來(lái)將每一次傳輸?shù)絻?nèi)存的分時(shí)復(fù)用數(shù)據(jù)拼接為各路連續(xù)數(shù)據(jù)的,由軟件來(lái)完成;多路音頻編碼模塊,該模塊是一塊編碼器硬件,對(duì)內(nèi)存中各路數(shù)據(jù)的每一幀進(jìn)行編碼并存入軟件指定的地址。具體步驟如下 步驟一多路音頻接收機(jī)制模塊將多路音頻模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),按照路數(shù)順序排列每個(gè)通道一個(gè)采樣點(diǎn)的數(shù)據(jù),下一個(gè)采樣點(diǎn)再按照上次的順序排列,每一個(gè)采樣點(diǎn)用16bit 二進(jìn)制表示。步驟二 軟件發(fā)出命令控制硬件FIFO開(kāi)始接收上述信號(hào)并存儲(chǔ),利用寄存器實(shí)時(shí)顯示所接收數(shù)據(jù)的數(shù)量。步驟三軟件配置源數(shù)據(jù)地址為上述硬件FIFO,目的地址為指定內(nèi)存地址,軟件控制DMA控制器啟動(dòng),并在中斷處理程序中啟動(dòng)下一次,這樣不斷啟動(dòng)DMA傳輸,將連續(xù)的音頻信號(hào)存到內(nèi)存中。步驟四軟件程序?qū)ι鲜鰞?nèi)存中的混合音頻數(shù)據(jù)進(jìn)行整合,將固定順序的數(shù)據(jù)整 合為其一路的音頻數(shù)據(jù),存至另外的多塊內(nèi)存。步驟五將各路待編碼的數(shù)據(jù)地址,各路編碼后數(shù)據(jù)要存到的地址,各路編碼的方式(G726編碼有4種速率的編碼),按照鏈表的方式鏈接起來(lái)。步驟六多路編碼硬件讀鏈表的第一個(gè)節(jié)點(diǎn),獲得第一路音頻的待編碼地址,編碼后地址,編碼方式,對(duì)該路數(shù)據(jù)進(jìn)行G726編碼和存儲(chǔ)。多路編碼硬件讀鏈表的第二個(gè)節(jié)點(diǎn),后面的操作與第一節(jié)點(diǎn)一致,一直編碼到最后一個(gè)節(jié)點(diǎn)。此時(shí),各路的一幀音頻數(shù)據(jù)編碼完畢,編碼硬件發(fā)出編碼完成中斷。步驟七軟件再次配置鏈表,進(jìn)行第二幀的編碼,如此反復(fù)。步驟八為了進(jìn)行實(shí)時(shí)編碼,采用的編碼硬件的工作頻率設(shè)置在能夠在一幀音頻數(shù)據(jù)時(shí)間內(nèi)將多路音頻數(shù)據(jù)編碼完畢,為了支持更多路數(shù)的編碼,可以在硬件工作允許頻率范圍內(nèi)增大工作頻率,保證實(shí)時(shí)編碼。其中,所述的步驟一中將多路音頻模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),按照路數(shù)順序排列每個(gè)通道一個(gè)采樣點(diǎn)的數(shù)據(jù)。其中,所述的步驟三中軟件控制DMA控制器啟動(dòng),并在中斷處理程序中啟動(dòng)下一次,這樣不斷啟動(dòng)DMA傳輸,將連續(xù)的音頻信號(hào)存到內(nèi)存中。其中,所述的步驟四中軟件程序?qū)ι鲜鰞?nèi)存中的混合音頻數(shù)據(jù)進(jìn)行整合,將固定順序的數(shù)據(jù)整合為其一路的音頻數(shù)據(jù),存至另外的多塊內(nèi)存。其中,所述的步驟五中將各路待編碼的數(shù)據(jù)地址,各路編碼后數(shù)據(jù)要存到的地 址,各路編碼的方式(G726編碼有4種速率的編碼),按照鏈表的方式鏈接起來(lái)。其中,所述的步驟六中多路編碼硬件讀鏈表的第一個(gè)節(jié)點(diǎn),獲得第一路音頻的待編碼地址,編碼后地址,編碼方式,對(duì)該路數(shù)據(jù)進(jìn)行G726編碼和存儲(chǔ)。多路編碼硬件讀鏈表的第二個(gè)節(jié)點(diǎn),后面的操作與第一節(jié)點(diǎn)一致,一直編碼到最后一個(gè)節(jié)點(diǎn)。編碼硬件發(fā)出編碼完成中斷。其中,所述的步驟八中為了支持更多路數(shù)的編碼,可以在硬件工作允許頻率范圍內(nèi)增大工作頻率,保證實(shí)時(shí)編碼。本發(fā)明的原理在開(kāi)源的G726編碼算法的基礎(chǔ)上設(shè)計(jì)出實(shí)際完成編碼工作的硬件,并將其置于Linux嵌入式系統(tǒng)環(huán)境下,利用其軟件,對(duì)多路音頻系統(tǒng)進(jìn)行控制和操作。使得接收到的多路音頻信號(hào)分時(shí)排列,并緩存到硬件FIFO中,再控制DMA傳輸該數(shù)據(jù),利用軟件模塊對(duì)數(shù)據(jù)進(jìn)行整合,將參數(shù)寫(xiě)入鏈表,編碼器硬件讀取鏈表并對(duì)各路分幀進(jìn)行編碼并輸出到指定的內(nèi)存。其中頻率擴(kuò)展是路數(shù)擴(kuò)展的關(guān)鍵技術(shù)。本發(fā)明與現(xiàn)有技術(shù)相比優(yōu)點(diǎn)在于
I. G726實(shí)現(xiàn)多路實(shí)時(shí)編碼,且路數(shù)可配置可擴(kuò)展。2.軟件與硬件分配合理,便于系統(tǒng)的擴(kuò)展和修改3.編碼效率高各路可采用不同的編碼方式,只要在編碼器硬件中添加新的編碼器,便可支持更多種編碼方式的多路編碼。
圖I是本發(fā)明提出的多路音頻實(shí)時(shí)編碼軟硬件方案整體流程2是本發(fā)明提出的多路音頻實(shí)時(shí)編碼音頻接收機(jī)制流程3是本發(fā)明提出的多路音頻實(shí)時(shí)編碼音頻整合模塊4是本發(fā)明提出的多路音頻實(shí)時(shí)編碼音頻編碼模塊流程圖
具體實(shí)施例方式
下面結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的說(shuō)明。本發(fā)明提供了一種基于G726編碼,但不限于本編碼模式的多路音頻實(shí)時(shí)編碼軟硬件方案。該方案設(shè)計(jì)方法主要包括多路音頻接收機(jī)制模塊,包含一個(gè)多路模擬信號(hào)轉(zhuǎn)換一路數(shù)字信號(hào)硬件(其中每路信號(hào)經(jīng)過(guò)轉(zhuǎn)換后可以得到一條分時(shí)復(fù)用的信號(hào),周期性的依次呈現(xiàn)各路信號(hào)),信號(hào)緩沖硬件(其可將分時(shí)復(fù)用的的信號(hào)存入其硬件FIFO,當(dāng)數(shù)據(jù)多過(guò)設(shè)定值時(shí),硬件會(huì)發(fā)出數(shù)據(jù)滿信號(hào),以阻止FIFO的寫(xiě)操作繼續(xù)向FIFO中寫(xiě)數(shù)據(jù)而造成溢出);數(shù)據(jù)搬移模塊,這是由一個(gè)DMA控制器來(lái)構(gòu)成的,由軟件設(shè)置源地址和目的地址,并向Linux系統(tǒng)發(fā)出DMA傳輸開(kāi)始命令,將先前存在FIFO中的音頻數(shù)據(jù)傳輸?shù)街付ǖ刂返膬?nèi)存中;數(shù)據(jù)整合模塊,這個(gè)模塊是用來(lái)將每一次傳輸?shù)絻?nèi)存的分時(shí)復(fù)用數(shù)據(jù)拼接為各路連續(xù)數(shù)據(jù)的,由軟件來(lái)完成;多路音頻編碼模塊,該模塊是一塊編碼器硬件,對(duì)內(nèi)存中各路數(shù)據(jù)的每一幀進(jìn)行編碼并存入軟件指定的地址。參見(jiàn)附圖2,多路音頻接受機(jī)制模塊將多路的音頻信號(hào)自多路AD轉(zhuǎn)換器量化、整合為一路分時(shí)復(fù)用的碼流。最多可復(fù)用的數(shù)據(jù)量安排為16路X16bit,如果需要支持更多路,則只要增加對(duì)應(yīng)數(shù)量的多路AD轉(zhuǎn)換器即可。此條復(fù)用碼流經(jīng)過(guò)I2S總線來(lái)傳輸,緩存到FIFO硬件中。這部分?jǐn)?shù)據(jù)是要被取走的,然而如果沒(méi)有來(lái)得及取走,F(xiàn)IFO的數(shù)據(jù)量就會(huì)離FIFO水線越來(lái)越高,超出水線時(shí),硬件會(huì)置位FIFO滿標(biāo)志,不再存入新的復(fù)用碼流。本系統(tǒng)中使用DMA控制器來(lái)取出碼流,在時(shí)序上可以保證取數(shù)據(jù)的速度大于數(shù)據(jù)產(chǎn)生的速度,因而只要系統(tǒng)正常工作,可以保證數(shù)據(jù)不會(huì)丟失。經(jīng)過(guò)這些操作之后,多路音頻數(shù)據(jù)就按照分時(shí)復(fù)用碼流的形式存到內(nèi)存中去了。附圖3是音頻整合模塊,在內(nèi)存中進(jìn)行。通過(guò)多路復(fù)用的對(duì)應(yīng)關(guān)系,這里由軟件來(lái)將內(nèi)存中的數(shù)據(jù)去復(fù)用,分別存到指定的各路內(nèi)存區(qū)域中。因?yàn)榻邮盏臄?shù)據(jù)是按照采樣點(diǎn)來(lái)進(jìn)行多路復(fù)用的,g726音頻編碼雖然也是按每采樣點(diǎn)來(lái)進(jìn)行編碼,但是編碼需要逐幀輸出編碼后數(shù)據(jù),且?guī)L(zhǎng)度可變,因而復(fù)用和去復(fù)用兩重操作是必要的。附圖4是音頻編碼模塊。指定一小塊內(nèi)存,作為鏈表存儲(chǔ)空間,每幀的多路編碼都會(huì)根據(jù)當(dāng)前鏈表提供的數(shù)據(jù)地址和編碼參數(shù)進(jìn)行編碼。
權(quán)利要求
1.一種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于該方法具體包括以下步驟 (1)多路音頻接收機(jī)制模塊將多路音頻模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),按照路數(shù)順序排列每個(gè)通道一個(gè)采樣點(diǎn)的數(shù)據(jù),下一個(gè)采樣點(diǎn)再按照上次的順序排列,每ー個(gè)采樣點(diǎn)用16bitニ進(jìn)制表示。
(2)軟件發(fā)出命令控制硬件FIFO開(kāi)始接收上述信號(hào)并存儲(chǔ),利用寄存器實(shí)時(shí)顯示所接收數(shù)據(jù)的數(shù)量。
(3)軟件配置源數(shù)據(jù)地址為上述硬件FIFO,目的地址為指定內(nèi)存地址,軟件控制DMA控制器啟動(dòng),并在中斷處理程序中啟動(dòng)下一次,這樣不斷啟動(dòng)DMA傳輸,將連續(xù)的音頻信號(hào)存到內(nèi)存中。
(4)軟件程序?qū)ι鲜鰞?nèi)存中的混合音頻數(shù)據(jù)進(jìn)行整合,將固定順序的數(shù)據(jù)整合為其ー路的音頻數(shù)據(jù),存至另外的多塊內(nèi)存。
(5)將各路待編碼的數(shù)據(jù)地址,各路編碼后數(shù)據(jù)要存到的地址,各路編碼的方式(G726編碼有4種速率的編碼),按照鏈表的方式鏈接起來(lái)。
(6)多路編碼硬件讀鏈表的第一個(gè)節(jié)點(diǎn),獲得第一路音頻的待編碼地址,編碼后地址,編碼方式,對(duì)該路數(shù)據(jù)進(jìn)行G726編碼和存儲(chǔ)。多路編碼硬件讀鏈表的第二個(gè)節(jié)點(diǎn),后面的操作與第一節(jié)點(diǎn)一致,一直編碼到最后ー個(gè)節(jié)點(diǎn)。此時(shí),各路的ー幀音頻數(shù)據(jù)編碼完畢,編碼硬件發(fā)出編碼完成中斷。
(7)軟件再次配置鏈表,進(jìn)行第二幀的編碼,如此反復(fù)。
(8)為了進(jìn)行實(shí)時(shí)編碼,采用的編碼硬件的工作頻率設(shè)置在能夠在ー幀音頻數(shù)據(jù)時(shí)間內(nèi)將多路音頻數(shù)據(jù)編碼完畢,為了支持更多路數(shù)的編碼,可以在硬件工作允許頻率范圍內(nèi)増大工作頻率,保證實(shí)時(shí)編碼。
2.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于所述步驟(I)中將多路音頻模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),按照路數(shù)順序排列每個(gè)通道一個(gè)采樣點(diǎn)的數(shù)據(jù)。
3.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在干所述步驟(3)中軟件控制DMA控制器啟動(dòng),并在中斷處理程序中啟動(dòng)下一次,這樣不斷啟動(dòng)DMA傳輸,將連續(xù)的音頻信號(hào)存到內(nèi)存中。
4.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于所述步驟(4)中軟件程序?qū)ι鲜鰞?nèi)存中的混合音頻數(shù)據(jù)進(jìn)行整合,將固定順序的數(shù)據(jù)整合為其一路的音頻數(shù)據(jù),存至另外的多塊內(nèi)存。
5.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于所述步驟(5)中將各路待編碼的數(shù)據(jù)地址,各路編碼后數(shù)據(jù)要存到的地址,各路編碼的方式(G726編碼有4種速率的編碼),按照鏈表的方式鏈接起來(lái)。
6.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于所述步驟出)中多路編碼硬件讀鏈表的第一個(gè)節(jié)點(diǎn),獲得第一路音頻的待編碼地址,編碼后地址,編碼方式,對(duì)該路數(shù)據(jù)進(jìn)行G726編碼和存儲(chǔ)。多路編碼硬件讀鏈表的第二個(gè)節(jié)點(diǎn),后面的操作與第一節(jié)點(diǎn)一致,一直編碼到最后ー個(gè)節(jié)點(diǎn)。編碼硬件發(fā)出編碼完成中斷。
7.根據(jù)權(quán)利要求I所述的ー種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案,其特征在于所述步驟(8)中為了支持更多路數(shù)的編碼,可以在硬件工作允許頻率范圍內(nèi)增大工作頻率,保證實(shí)時(shí)編碼。
8.本發(fā)明涉及所有采用或部分采用權(quán)利要求1-7所述技術(shù)的代碼、軟件和設(shè)備等。
全文摘要
本發(fā)明提供了一種基于G726編碼的多路音頻實(shí)時(shí)編碼軟硬件方案。該方案主要包括多路音頻接收機(jī)制模塊,包含一個(gè)多路模擬信號(hào)轉(zhuǎn)換一路數(shù)字信號(hào)硬件(其中每路信號(hào)經(jīng)過(guò)轉(zhuǎn)換后可得到一條分時(shí)復(fù)用信號(hào)),信號(hào)緩沖硬件(可將分時(shí)復(fù)用的信號(hào)存入其硬件FIFO,當(dāng)數(shù)據(jù)多過(guò)設(shè)定值時(shí),硬件會(huì)發(fā)出數(shù)據(jù)滿信號(hào));數(shù)據(jù)搬移模塊,由DMA控制器來(lái)構(gòu)成,由軟件設(shè)置源地址和目的地址,并向系統(tǒng)發(fā)出DMA傳輸開(kāi)始命令,將先前存在FIFO中的數(shù)據(jù)傳輸?shù)街付ǖ刂分?;?shù)據(jù)整合模塊,該模塊用于將每次傳輸?shù)絻?nèi)存的數(shù)據(jù)拼接為各路連續(xù)數(shù)據(jù),由軟件完成;多路音頻編碼模塊為一塊編碼器硬件,編碼內(nèi)存中各路數(shù)據(jù)的每一幀并存入指定的地址。
文檔編號(hào)H04B14/06GK102664015SQ201210114658
公開(kāi)日2012年9月12日 申請(qǐng)日期2012年4月18日 優(yōu)先權(quán)日2012年4月18日
發(fā)明者唐玲, 孟繁宇, 徐峰, 王正鑫 申請(qǐng)人:王正鑫