編解碼器

編解碼器

在通信工程中,編解碼器(codec)是用來指進行數據轉換的集成電路或晶元。編解碼器也是一種演演算法或專門的計算機程序,它可以減少大文件和程序所佔用的位元組數。

正文


在通信工程中,編解碼器(codec)是用來指進行數據轉換的集成電路或晶元。在這種情況下,它是由編碼器(coder)和解碼器(decoder)這兩個詞的詞頭組成的縮寫詞。這種類型的編解碼器將模擬數字轉換(analog-to-digital conversion)和數字模擬轉換(digital-to-analog conversion)功能結合在一個單晶元上。在個人和商用計算應用程序上,這種裝置最常用在數據機上。
Codec也是壓縮(compression)和解壓縮(decompression)這兩詞的縮寫詞。編解碼器(codec)是一種演演算法或專門的計算機程序,它可以減少大文件和程序所佔用的位元組數。
為了盡量減少一個複雜的文件,如視頻,所需要的存儲空間,我們常常將其壓縮。壓縮是通過除去數據里的重複數據來實現的。任何類型的文件都可以進行壓縮,包括文本﹑程序﹑圖片﹑音頻﹑視頻和虛擬現實(VR)。在某些情況下,壓縮可以將文件的大小縮小一百倍或更多。例如,一個15兆位元組的視頻可能會減少到150千位元組。未壓縮文件可能由於太大而不能在適當的時間內從網上下載,但壓縮的文件通常只用幾秒鐘就可以下載。為了查看,我們需要使用解壓縮演演算法,它可以將壓縮“解開”。
有許多標準的編解碼器計劃。一些主要用於盡量減少文件傳輸時間,主要用在網際網路上。另外的主要是讓一個特定的磁碟空間或CD-ROM儲存儘可能多的數據。
編解碼器(codec)可用於許多流行的網際網路產品,包括QuickTime﹑NetMeeting﹑Cu-Seeme和VDOphone。

編碼器


1)發送正交鏡像濾波器QMF
發送QMF的作用是將音頻全頻帶50~7000Hz劃分為低頻區(50~4000Hz)和高頻區(4000~7000Hz)兩個子帶,它是一個帶通數字濾波器。發送QMF的輸入信號是由發送端音頻部分送來的輸出信號,取樣頻率為16kHz。另一方面,低頻區子帶和高頻區子帶的ADPCM的輸入信號DL、DH則分別是取樣頻率為8kHz的來自發送QMF的輸出信號。
2)低頻區子帶的ADPCM編碼器
低頻區子帶的ADPCM編碼器的輸入是低頻輸入信號X與預測信號S相減的差值信號E,差值信號E的量化採用60量級的非線性自適應量化器,各量化樣點用6bit的編碼表示。該量化器的輸出信號I作為低頻區自帶編碼器的輸出,以48kb/s的速率傳送到解碼器。
量化器的輸出信號I在自適應預測器經反饋后,LSB的2bit被消減,變為4bit的I信號,該信號使用的量化器是按量化規格因子△進行自適應量化的,具有15個量化級的自適應逆量化器。經此量化器后得到量化差值信號R,此信號R與預測信號S疊加生成重建信號R。
在低頻子帶ADPCM編碼器及解碼器中,使用4bit而不是6bit的編碼,並且因為有效地防止了兩個LSB所插入的數據信號流入自適應預測器的反饋環,從而避免了編碼器和解碼器因速率模式的誤匹配而導致性能下降的問題。
3)高頻區子帶的ADPCM編碼器
高頻區子帶的ADPCM編碼器的輸入信號是高頻輸入信號X與預測信號5H相減的差值信號S。差值信號E的量化採用4個量化級的非線性自適應量化器,各量化樣點用2bit的編碼表示。該量化器的輸出信號I作為高頻子帶編碼器的輸出,以16kb/s的速率傳送至解碼器。
自適應逆量化器利用2bit的傳輸編碼恢復出差值信號D。該量化差值信號D與預測信號S疊加,得到重建信號R。
2.解碼器
1)低頻區子帶的ADPCM解碼器
低頻區子帶的ADPCM解碼器依據速率模式選擇的指示信號,可以進行三種速率模式中任何一種模式的工作。量化差值信號按照速率模式的指示信號,選擇D、D和D信號中的一個,再與預測信號S疊加,產生重建信號R計算預測信號S的電路以及包括各逆量化的自適應信號通路,與前述的低頻子帶ADPCM編碼器的反饋電路原理相同。
2)高頻區子帶的ADPCM解碼器
高頻區子帶的ADPCM解碼器,與前述的高頻區子帶的ADPCM編碼器中的反饋電路原理相同。R為其輸出的重建信號。
3)接收正交鏡像濾波器QMF
接收QMF利用高頻子帶和低頻帶ADPCM解碼器輸出的重建信號R、R進行插值,生成16kHz的數字濾波器的輸出X,此信號將作為接收音頻部分的輸入信號。
根據發送和接收QMF的組合,在QMF內部所進行的信號處理和插值,會抵消處理過程中引入的部分誤差。因此若不考慮ADPCM的編碼解碼過程,可以認為QMF部分只是一個對於輸入音頻信號具有延遲特性的部件。

三種話音編解碼器


通常把已有的話音編解碼器分成以下三種類型:波形編解碼器(waveform codecs),音源編解碼器(source codecs)和混合編解碼器(hybrid codecs)。一般來說,波形編解碼器的話音質量高,但數據率也很高;音源編解碼器的數據率很低,產生的合成話音的音質有待提高;混合編解碼器使用音源編解碼技術和波形編解碼技術,數據率和音質介於它們之間。圖5表示了目前這三種編解碼器的話音質量和數據率的關係。
1. 波形編解碼器
波形編解碼的想法是,不利用生成話音信號的任何知識而企圖產生一種重構信號,它的波形與原始話音波形儘可能地一致。一般來說,這種編解碼器的複雜程度比較低,數據速率在16 kb/s以上,質量相當高。低於這個數據速率時,音質急劇下降。
最簡單的波形編碼是脈衝編碼調製(pulse code modulation,PCM),它僅僅是對輸入信號進行採樣和量化。典型的窄帶話音帶寬限制在4kHz,採樣頻率是8kHz。如果要獲得高一點的音質,樣本精度要用12位,它的數據率就等於96kb/s,這個數據率可以使用非線性量化來降低。例如,可以使用近似於對數的對數量化器(logarithmic quantizer),使用它產生的樣本精度為8位,它的數據率為64 kb/s時,重構的話音信號幾乎與原始的話音信號沒有什麼差別。這種量化器在20世紀80年代就已經標準化,而且直到今天還在廣泛使用。在北美的壓擴(companding)標準是μ律(μ-law),在歐洲的壓擴標準是A律(A-law)。它們的優點是編解碼器簡單,延遲時間短,音質高。但不足之處是數據速率比較高,對傳輸通道的錯誤比較敏感。
在話音編碼中,一種普遍使用的技術叫做預測技術,這種技術是企圖從過去的樣本來預測下一個樣本的值。這樣做的根據是認為在話音樣本之間存在相關性。如果樣本的預測值與樣本的實際值比較接近,它們之間的差值幅度的變化就比原始話音樣本幅度值的變化小,因此量化這種差值信號時就可以用比較少的位數來表示差值。這就是差分脈衝編碼調製(differential pulse code modulation,DPCM)的基礎—對預測的樣本值與原始的樣本值之差進行編碼。
這種編解碼器對幅度急劇變化的輸入信號會產生比較大的雜訊,改進的方法之一就是使用自適應的預測器和量化器,這就產生了一種叫做自適應差分脈衝編碼調製(adaptive differential PCM,ADPCM)。在20世紀80年代,國際電話與電報顧問委員會 (International Telephone and Telegraph Consultative Committee,CCITT),現改為國際電信聯盟-遠程通信標準部(International Telecommunications Union-Telecommunications Standards Section,ITU-TSS ),就制定了數據率為32kb/s的ADPCM標準,它的音質非常接近64 kb/s的PCM編解碼器,隨後又制定了數據率為16,24和40kb/s的ADPCM標準。
上述的所有波形編解碼器完全是在時間域里開發的,在時域里的編解碼方法稱為時域法(time domain approach)。在開發波形編解碼器中,人們還使用了另一種方法,叫做頻域法(frequency domain approach)。例如,在子帶編碼(sub-band coding,SBC)中,輸入的話音信號被分成好幾個頻帶(即子帶),變換到每個子帶中的話音信號都進行獨立編碼,例如使用ADPCM編碼器編碼,在接收端,每個子帶中的信號單獨解碼之後重新組合,然後產生重構話音信號。它的優點是每個子帶中的雜訊信號僅僅與該子帶使用的編碼方法有關係。對聽覺感知比較重要的子帶信號,編碼器可分配比較多的位數來表示它們,於是在這些頻率範圍里雜訊就比較低。對於其他的子帶,由於對聽覺感知的重要性比較低,允許比較高的雜訊,於是編碼器就可以分配比較少的位數來表示這些信號。自適應位分配的方案也可以考慮用來進一步提高音質。子帶編碼需要用濾波器把信號分成若干個子帶,這比使用簡單的ADPCM編解碼器複雜,而且還增加了更多的編碼時延。即使如此,與大多數混合編解碼器相比,子帶編解碼的複雜性和時延相對來說還是比較低的。
另一種頻域波形編碼技術叫做自適應變換編碼(adaptive transform coding,ATC)。這種方法使用快速變換(例如離散餘弦變換)把話音信號分成許許多多的頻帶,用來表示每個變換係數的位數取決於話音譜的性質,獲得的數據率可低到16 kb/s。
2.音源編解碼器
音源編解碼的想法是企圖從話音波形信號中提取生成話音的參數,使用這些參數通過話音生成模型重構出話音。針對話音的音源編解碼器叫做聲碼器(vocoder)。在話音生成模型中,聲道被等效成一個隨時間變化的濾波器,叫做時變濾波器(time-varying filter),它由白雜訊——無聲話音段激勵,或者由脈衝串——有聲話音段激勵。因此需要傳送給解碼器的信息就是濾波器的規格、發聲或者不發聲的標誌和有聲話音的音節周期,並且每隔10—20ms更新一次。聲碼器的模型參數既可使用時域的方法也可以使用頻域的方法確定,這項任務由編碼器完成。
這種聲碼器的數據率在2,4kb/s左右,產生的語音雖然可以聽懂,但其質量遠遠低於自然話音。增加數據率對提高合成話音的質量無濟於事,這是因為受到話音生成模型的限制。儘管它的音質比較低,但它的保密性能好,因此這種編解碼器一直用在軍事上。
3.混合編解碼
混合編解碼的想法是企圖填補波形編解碼和音源編解碼之間的間隔。波形編解碼器雖然可提供高話音的質量,但數據率低於16kb/s的情況下,在技術上還沒有解決音質的問題;聲碼器的數據率雖然可降到2.4kb/s甚至更低,但它的音質根本不能與自然話音相提並論。為了得到音質高而數據率又低的編解碼器,歷史上出現過很多形式的混合編解碼器,但最成功並且普遍使用的編解碼器是時域合成—分析(analysis—by—synthesis,AbS)編解碼器。這種編解碼器使用的聲道線性預測濾波器模型與線性預測編碼(1inear predictive coding,LPC)使用的模型相同,不使用兩個狀態(有聲/無聲)的模型來尋找濾波器的輸入激勵信號,而是企圖尋找這樣一種激勵信號,使用這種信號激勵產生的波形儘可能接近於原始話音的波形。AbS編解碼器由Atal和Remde在1982年首次提出,並命名為多脈衝激勵(multi—pulse excited,MPE)編解碼器。在此基礎上隨後出現的是等間隔脈衝激勵(regular—pulse excited,RPE)編解碼器、碼激勵線性預測(code excited linear predictive,CELP)編解碼器和混合激勵線性預測(mixed excitation linear prediction,MELP)等編解碼器。
AbS編解碼器把輸入話音信號分成許多幀(frames),一般來說,每幀的長度為20ms。合成濾波器的參數按幀計算,然後確定濾波器的激勵參數。從圖6(a)可以看到,AbS編碼器是一個負反饋系統,通過調節激勵信號u(n)可使話音輸入信號s(n)與重構的話音信號(n)之差為最小,也就是重構的話音與實際的話音最接近。這就是說,編碼器通過“合成”許多不同的近似值來“分析”輸入話音信號,這也是“合成-分析編碼器”名稱的來由。在表示每幀的合成濾波器的參數和激勵信號確定之後,編碼器就把它們存儲起來或者傳送到解碼器。在解碼器端,激勵信號饋送給合成濾波器,合成濾波器產生重構的話音信號,如圖6(b)所示。
合成濾波器通常使用全極點(all pole)的短期(short—term)線性濾波器
AbS編解碼器的性能與如何選擇激勵合成濾波器的波形u(n)有很大關係。從概念上說,可把每一種可能的波形輸送給合成濾波器試試看,這種激勵信號將會產生什麼樣的重構話音信號,它和原始話音信號之間的誤差如何變化,然後選擇產生最小加權誤差的激勵信號,並把它作為解碼器中的合成濾波器的驅動信號。由於編碼器是一個閉環系統,因此可以獲得比較高的音質而數據率又比較低。但由於可能的激勵信號的數目巨大,因此需要有某種方法來減少計算的複雜性而音質又不會犧牲太大。
MPE,RPE和CELP編解碼器之間的差別在於所使用的激勵信號的表示方法。在MPE中,對每幀話音所用的激勵信號u(n)是固定數目的脈衝,在一幀中脈衝的位置和幅度必須由編碼器來確定,這在理論上可以找到很好的值,但實際上不太可能,因為計算太複雜。因此在實際上就使用次佳方法,一般來說,每5ms使用4個脈衝,在數據率為10kb/s時可以獲得好的重構話音。
像MPE那樣,RPE編解碼器使用固定間隔的脈衝,於是編碼器就只需要確定第一個激勵脈衝的位置和所有其他脈衝的幅度,所需要的脈衝位置信息也就可以減少,而脈衝的數目則比MPE使用的數目多。數據率在10kb/s左右時,每5ms可使用10個脈衝,比MPE多6個,產生比MPE音質高一些的重構話音。然而RPE仍然顯得比較複雜,因此歐洲的GSM行動電話系統使用了一個帶長期預測的簡化了的RPE編解碼器,數據率為13kb/s。
雖然MPE和RPE編解碼器在10kb/s左右的數據率下可提供好的音質,但數據率低於10kb/s情況下提供的音質還不能接受,這是因為它們需要提供大量有關激勵脈衝的位置和幅度信息。對要求音質好而數據率又低於10kb/s的編解碼器,現在普遍使用的演演算法是1985年由Schroeder和AtM提出的CELP演演算法。與MPE和RPE的不同之處是,CELP使用的激勵信號是量化矢量。激勵信號由一個矢量量化大碼簿的表項給出,還有一個增益項用來擴展它的功率。典型的碼簿索引有10位,就是有1024個表項的碼簿,增益用5位表示。因此激勵信號的位數可以減少到15位,這與GSMRPE編解碼器中使用的47位相比減少了32位。
CELP最初使用的碼簿包含白高斯序列(white Gaussian sequences),這是因為作了這樣的假設:長期預測和短期預測能夠從話音信號中去除幾乎所有的冗餘度,產生隨機的像雜訊那樣的殘留信號。試驗也顯示出短期概率密度函數幾乎是高斯狀的。Schroeder和Atal發現,對長期和短期濾波器使用這樣的碼簿能夠產生高質量的話音。然而,在合成—分析過程中要選擇使用哪一個碼簿表項,這就意味每一個激勵序列都要傳送給合成濾波器,看看重構話音與原始話音的近似程度。這也就是說原始CELP編解碼器的計算量太大,難以實時執行。從1985年開始,在簡化CELP的碼簿結構方面做了大量的工作,使用數字信號處理晶元提高執行速度方面也取得了很大的進展,因此現在在低成本的單片DSP上實寸執行CELP演演算法相對容易了。在CELP基礎上制定了好幾個重要的話音編碼標準,例如美國的“Department of Defence(DoD)4.8kb/scodec”標準和CCITT的“low—delay16kb/s codec”標準。
CELP編解碼器在話音通信中取得了很大成功,話音的速率在4.8kb/s—16kb/s之間。近年來對運行在4.8kb/s以下的編解碼器作了大量的研究工作,其目標是開發運行在2.4kb/s或者更低數據率下的編解碼器。
通過對話音段進行分類,例如分成濁音幀、清音幀和過渡幀,CELP編解碼器的結構可以進一步得到改善,不同類型的話音段使用專門設計的編碼器進行編碼。例如,對於濁音幀編碼器不使用長期預測,而對於清音幀使用長期預測就顯得特別重要。這種按話音類型設計的編解碼器在數據率為2.4kb/s下呈現的音質已經得到認可。多帶激勵(multi—band excitation,MBE)編解碼器把頻域中的某些頻段看成是濁音頻段,其他頻段看成是清音頻段。它們傳送每幀的音節周期、頻譜的幅度和相位信息以及濁音/清音的判決。這種編解碼器經過改造以後也顯示出了它的潛力,在低數據率下可提供認可的音質。

編解碼器應用實例


(1)編碼器的應用
1.微控制器報警編碼電路
圖7所示為利用74LSl48編碼器監視8個化學罐液面的報警編碼電路。若8個化學罐中任何一個的液面超過預定高度時,其液面檢測感測器便輸出一個0電平到編碼器的輸入端。編碼器輸出3位二進位代碼到微控制器。此時,微控制器僅需要3根輸入線就可以監視8個獨立的被測點。
這裡用的是Intel 8051微控制器,它有4個輸入/輸出介面。我們使用其中的一個口輸入被編碼的報警代碼,並且利用中斷輸入接收報警信號(是編碼器輸入信號有效的標誌輸出,只要有一個輸入信號為有效的低電平,就變成低電平)。當Intel 8051在端接收到一個0時,就運行報警處理程序並做出相應的反應,完成報警。
2.用編碼器構成A/D轉換器
圖8為74LSl48構成的A/D轉換器。這個電路主要由比較器、寄存器和編碼器三部分組成。
輸入信號U(模擬電壓),同時加到7個比較器(C~C)的反相端。基準電源U經串聯電阻分壓為8級,量化單位q=U/7。各基準電壓分別加到比較器的同相端。若U大於基準電壓時,比較器C的輸出電壓=0,否則=1。7個比較器的基準電壓依次為,,,,,,
寄存器74LS373由8個D觸發器構成。它的作用是寄存器緩衝比較器輸出的信號,以避免因比較器響應速度不一致可能造成的邏輯錯誤。比較器的輸出量保存一個時鐘周期后,供編碼使用。
編碼器根據寄存器提供的信號進行編碼,編碼可以反碼輸出,也可以是原碼輸出。
當時,7個比較器輸出為,。這7個信號就是7個D觸發器的輸入信號。在時鐘信號CP的上升沿時,7個D觸發器的輸出信號為Q=Q=Q=Q= 1,Q=Q=Q= 0。74LSl48解碼器輸出\overline{Y}_2\overline{Y}_1\overline{Y}_0=100,經非門輸出原碼CBA=011。這樣A/D轉換器就把輸入的模擬信號U變成了3位數字信號。
通常R選用1ktΩ,U=5V,CP周期要大於手冊中給出的比較器、寄存器、編碼器、非門的平均傳輸延遲時間之和的2倍,而脈衝寬度只要大於寄存器的平均傳輸延遲時間即可。該轉換器的轉換精度取決於電阻分壓網路的精度。這種轉換器適合於高速度、低精度的情況應用。
(2)解碼器的應用
解碼器的應用範圍很廣,除了能驅動顯示器外,還能實現存儲系統的地址解碼和指令解碼,實現邏輯函數,作多路分配器,以及控制燈光等。下面介紹解碼器的幾種典型應用。
1.解碼器作地址解碼器
實現微機系統中存儲器或輸入/輸出介面晶元的地址解碼是解碼器的一個典型用途。圖9所示是四輸入變數解碼器用於半導體只讀存儲器地址解碼的一個實例。圖中,解碼器的輸出用來控制存儲器的片選端\overline{CS},該輸出信號取決於高位地址碼A~A。A~A四位地址有16個輸出信號。利用這些輸出信號從16片存儲器中選用一片,再由低位地址碼A~A從被選片中選中一個存儲單元,讀出選中單元的內容。
2.用解碼器構成數據分配器或時鐘分配器
數據分配器也稱為多路分配器,它可以按地址的要求將一路輸入數據分配到多輸出通道中某一個特定輸出通道去。由於解碼器可以兼作分配器使用,廠家並不單獨生產分配器組件,而是將解碼器改接成分配器。下面舉例說明。
將帶使能端的3—8線解碼器74LSl38改作8路數據分配器的電路圖,如圖10(a)所示。解碼器使能端作為分配器的數據輸入端,解碼器的輸入端作為分配器的地址碼輸入端,解碼器的輸出端作為分配器的輸出端。這樣分配器就會根據所輸入的地址碼將輸人數據分配到地址碼所指定的輸出通道。
例如,要將輸入信號序列00100100分配到Y通道輸出,只要使地址碼XXX=000,輸入信號從D端輸入,端即可得到和輸入信號相同的信號序列。波形圖如圖10(b)所示。此時,其餘輸出端均為高電平。若要將輸入信號分配到E輸出端,只要將地址碼變為001即可。以此類推,只要改變地址碼,就可以把輸入信號分配到任何一個輸出端輸出。
74LSl38作分配器時,按圖10(a)接法可得到數據的原碼輸出。若將數據加到S端,而、接地,則輸出端得到數據的反碼。
在圖10(a)中,如果D輸入的是時鐘脈衝,則可將該時鐘脈衝分配到~的某一個輸出端,從而構成時鐘脈衝分配器。
3.用解碼器實現邏輯函數
由於全解碼器在選通時,各輸出函數為輸入變數相應最小項之非,而任意邏輯函數總能表示成最小項之和的形式。因此,全解碼器加一個與非門可實現邏輯函數。
【例1】用全解碼器實現邏輯函數。
解(1)全解碼器的輸出為輸入變數的相應最小項之非,故先將邏輯函數式F寫成最小項之反的形式。由摩根定理
(2)F有三個變數,因而選用三變數解碼器。
(3)變數A、B、C分別接三變數解碼器的AAA端,則有: