信息的編碼--轉載

1.2  信息的編碼

計算機是作爲數值計算工具而發明的,現代的計算機的內部是採用二進制(binary)代碼進行運算和儲存的。要使用計算機進行信息處理,就必須把要處理的信息用二進制代碼來表示,把問題求解轉變爲二進制數的計算問題。當今的計算機已經能夠處理文字、聲音、圖片、動畫(animation)和影像等信息,這得歸功於信息的數字化,或者說信息的編碼。

1.2.1 記數系統

記數系統(number representation system),簡稱記數制或數制,是用一組統一的符號和規則來表示數的方法。根據基數的不同,有十進制、二進制和十六進制等。在日常生活中,我們大多采用“十進制”,每位數都用“0~9”十個符號中的一個來表示,並按照“逢十進一”的規則進位:當每位數的值達到10時,向高位進一,而該位變爲0。其實,生活中還用到其他的進制,如時鐘的分秒用的是60進制,英制的許多度量單位用的是12進制。

由於計算機內部工作採用的是二進制,也就是說,數的每一位(bit)只用“0”和“1”兩個符號之一來表示,在計算時按照“逢二進一”的規則進位:當某位數的值達到2時,向高位進一,而該位變爲0。例如,1加1的結果爲10,讀作“幺零”。

計算機之所以採用二進制,是因爲它便於實現。晶體管的導通和截止、電壓的高和低、磁表面的磁極性相反的兩種狀態、光盤薄膜上有凹坑和無凹坑等,這些兩種截然不同的物理狀態都可以用來分別表示二進制數的1和0。順便提一下,在計算機採用的二進制表示法中,數的正號和負號也是分別用符號0和1來表示的。

下面簡要介紹十進制數和二進制數之間的轉換方法。

1.十進制數轉換成二進制數

對整數部分採用“除2取餘”法,即把一個十進制的整數部分連續地被2除,將依次得到的餘數按相反順序排列,得到的就是相應二進制數的整數部分。

對小數部分採用“乘2取整”法,即把一個十進制數的小數部分連續地乘以2,將依次得到的整數按順序排列,得到的就是相應二進制數的小數部分。

例如,把十進制數37.25轉換爲二進制數。其整數部分連續地被2除得到的餘數依次是1、0、1、0、0、1,而小數部分連續乘以2得到的整數依次是0、1,因此結果是100101.01。

2.二進制數轉換成十進制數

把二進制數小數點前的第n位的值值乘以2n-1,把小數點後的第m位的值乘以2-m,然後把這些結果值相加即可。例如,100101.01的十進制數是

1×25+0×24+0×23+1×22+0×21+1×20+0×2-1+1×2-2=37.25。

二進制數不便於書寫和記憶,人們經常採用十六進制數或八進制數來表示它們,因爲它們之間的轉換非常方便。例如,用十六進制數表示時,只要從小數點兩側每4位二進制數用一個十六進制數字(注意,10~15分別用A~F表示)代替即可。例如,上述的37.25,用十六進制表示時爲25.4。

1.2.2 文字的編碼

我們經常碰到的文字是英文和漢字,它們的二進制編碼(coding)有相應的國家標準。英文字母和常用的數學符號與標點符號等字符通常採用ASCII(American Standard Code for Information Interchange,美國信息交換標準碼)編碼(見圖1.2.1)。一個字符用七位二進制數表示,存放時佔八位即一個字節(byte)。ASCII碼共有128個碼位,前32個是控制字符,用於通信、外部設備和文本等方面的控制。例如,回車、換行符就在這個區域。第33個是空格符,而第128個是delete符,這34個字符是不可打印的。在圖1.2.1中,b7b6b5表示編碼的高三位,b4b3b2b1表示編碼的低四位。例如,字母H的七位ASCII碼爲1001000。英文字母按詞典順序進行編碼,這給英文詞彙的排序和檢索帶來很大方便;十進制數碼高三位編碼(011)相同,低四位按二進制編碼順序表示,這給十進制數字轉換爲二進制帶來很大方便 (對於其他拉丁語系的文字,ASCII碼有相應的版本)。IBM公司,除在PC機中改用ASCII碼外,在其他計算機中均採用他們的EBCDIC(擴充的二十進制交換碼)編碼。它採用八位二進制數表示,故有256個碼位。

b7b6b5

b4b3b2b1


圖1.2.1  ASCII碼錶

漢字編碼的國家標準是信息交換用漢字編碼字符集基本集(GB2312-80),一個漢字的交換碼用兩個ASCII字符表示,採用導入字符和導出字符指示文本中的漢字區域。該標準只使用ASCII編碼中第34至第127個可打印字符,一共94個。所以,最多可編94區×94位即8836個符號。該標準包括6763個漢字和682個特殊符號。爲了避免使用導入字符和導出字符並能與ASCII字符相區分,存放時每個字節的最高位處置1(即加128),稱爲內碼 (我國港臺地區採用的是Big5編碼體系)。

最近,我國開始使用新的GB1300標準。該標準採納國際標準通用多八位編碼字符集(UCS)標準,它用四個8位,分別表徵組、面、行、列,可表示264個符號。目前啓用的UCS-2,規定統一用兩個8位表示一個文字符號。它不是依據語言而是按文字編碼的,所以是跨國度、跨地區的。同一個拉丁字母、同一個漢字,同一個符號,不論是哪個國家,都採用相同的16位編碼。該標準包含65536個符號,其中有20902個漢字。

順便指出,漢字輸入法是另一種形式的編碼,它們是用鍵盤字符來表示漢字的方法。

1.2.3 聲音的編碼

聲音是由聲波傳遞的,而聲波是由各種頻率的正弦波合成的,波形如圖1.2.2所示。這是一種模擬信號,反映聲音強弱的是波的振幅,反映聲音高低的是波的頻率。最常用的編碼方法是脈衝編碼調製(PCM),它需要經過採樣、量化與編碼兩個步驟。當然,這些工作都是由硬件(如聲卡)完成的。

圖1.2.2  聲音編碼(註明:圖1.2.2已經替換,到印刷廠重新畫圖)

第一步是採樣,就是每隔一定的時間T,採集一個波幅“樣品”的值。譬如,對一個振幅在+4v~-4v間的波形,每隔時間T取它一個振幅值,以後就用這些值來代表原來的波形。顯然,T越小即採樣頻率越高越好,但結果得到的數據就越多。科學家已經證明,採樣頻率至少應該是原信號的最高頻率的兩倍,纔不會產生大的失真。目前,普通的音樂採用11.025kHz的採樣頻率,而高品質的音樂採用44.1kHz的採樣頻率。

第二步是量化與編碼。採樣得到的值是隨機變化的,如振幅在+4v~-4v間的波形,採樣值可以是+4v~-4v間的任意值。量化與編碼就是用一定位數的二進制數來表示採樣的值。現在的計算機通常使用16位聲卡(採樣值用16位二進制數表示),即將可能得到的採樣值劃分成65536個等級,相當於十進制-32768~32767。按上例,+4v~-4v之間的值分爲65536個等級,每一等級的值分別用相當於十進制-32768~32767範圍內的一個16位二進制數表示。所有的採樣值都按就近等級取值,好比十進制數的四捨五入。

這樣,對於一首歌曲的聲波,每隔固定的時間T(採樣頻率的倒數)採出一個樣品值,然後把這些樣品值用一定的二進制值表示,這些二進制數按採樣時間的先後順序存放在一起就是該歌曲的數字化表示。當該數字化的歌曲播放時,聲卡會將它們還原爲原來的聲波。

另一種音頻編碼方法稱爲MIDI(樂器數字化接口)。一首MIDI樂曲記錄的不是音樂本身,而是用數字描述的樂譜,包括有音符、節拍、定時以及所用樂器等。MIDI標準規定了128種樂器,一首樂曲中至多可用16種樂器。播放時,由聲卡根據“樂譜”產生基波、諧波合成爲音樂。利用MIDI,用戶可以通過鍵盤自己編曲子。類似的一種方法稱爲MOD,它的聲音是由預先錄製好的樂器標準聲音樣本合成的。這樣,用戶可以自己定義樂器,也不受128種或16種樂器的限制。缺點是聲音樣本製作麻煩,播放時需要花費比較多的CPU時間。

1.2.4 圖像的編碼

一幅彩色圖像(image)可以看成是由許許多多個彩色的點(像素)組成的,每個點有深淺不同的顏色。這種點越小,圖像越清晰。以分辨率爲800×600的計算機顯示屏爲例,一屏總共分成48萬個小方格。每個小方格稱爲一個像素,每個像素有一種顏色。我們知道,任何一種顏色均可以用紅、藍、綠三種原色調配出來,假如每種原色從淺到深分爲0~255共256個等級,那麼一個像素可以用三個字節二進制數據來表示。這樣,一幅圖像需要用144萬個字節的數據。採用這種方法表示的圖像文件是位圖(bitmap)圖像文件,其擴展名爲.bmp。

圖1.2.3  圖像編碼

電視和電影是由連續的圖像幀組成,電視每秒25幀,電影每秒24幀。以800×600的分辨率爲例,一秒鐘的電視需要處理144×25萬字節的數據,其容量大約是36M字節。所以,能夠播放視頻的計算機需要有處理速度較高的CPU和容量較大的存儲器。

1.2.5 信息的壓縮

顯然,一個多媒體文件,例如一幅畫,一段音樂或一段影視節目數字化後所生成的信息量比較大。所以,聲音、圖像和視頻的數字化信息一般都要採用壓縮(compress)技術。比如,MP3是音樂信息壓縮標準,JPG是靜態圖像信息的壓縮標準,MPEG和RM是視頻信息的壓縮標準等。這些標準都有很高的壓縮比。

一般地說,信息都是可以壓縮的。之所以可以壓縮,是因爲有冗餘信息存在的緣故。在用高級語言編寫的規範格式的程序中,也會出現比較多的冗餘數據。例如,比較多的空格,如果對於一串空格用一個字節表示空格的代碼外加一個字節表示空格數,則可以壓縮一定的數據量。又如,高級語言使用的關鍵字出現的頻率比較高,如BIGEN、END、THEN、PROCEDURE等,如果用一個控制字符加一個編碼表示它們也能減少一定的存儲量。我們可以看一個例子,設有8個字節的數據:

    00000000  00000111  10000000  00000000

    00000000  00000000  00000000  111111111

這是一串0和1組成的數據,0和1的重複的次數很多。假定用一個字節表示一串0或1,字節的第一位表示是0的串還是1的串,後七位表示0或1的個數,因爲有七位,可以表示從0到127之間的任一整數,若0或1的重複次數超過127則再用一個字節。這樣,上述數據可用下列字節表示:

    00001101(13個0) 10000100(4個1)

    00100111(39個0) 10001000(8個1)

這裏只用了4個字節就完整地表示出原來8個字節的數據內容,壓縮了50%。

另一種方法是利用碼元的出現頻率,對於出現頻率高的用較短的編碼,對於出現頻率低的用較長的編碼。例如,在英語的文章中,英文字母出現的頻率大不相同:頻率最高的三個字母是E、T和A,分別佔13%、9%和8%;頻率最低的是Z、Q和X,分別佔0.25%、0.25%和0.5%。如果用000、0010和0011表示E、T和A,用1111111、11111110和111110表示Z、Q和X,其他字母類似,則能夠壓縮不少存儲量。這種不定長編碼是霍夫曼(Huffman)發明的,故稱爲霍夫曼編碼。

上述壓縮方法是無損壓縮,也就是說,能夠完全還原爲原來的數據。另一種方法是有損壓縮,也就是說,還原的數據沒有原來的精確,質量有所損失,但在可接受的限度之內。這種方法主要用於音頻和視頻數據,它們除了使用類似於上述方法外,還利用了人們感觀能力的限制。例如,普通人對於過低的和過高的頻率的聲音不太能夠分辨,如果將這部分略去,則能夠大大壓縮數據量,又能夠使復原後的聲音質量保持在可接受的限度之內。

同樣,對於圖形和圖像,冗餘表現在三個方面。一是空間冗餘。如在一幅照片上,許多相鄰的像素具有同樣的顏色和亮度,例如藍色的天空和白色的衣服等。二是時序冗餘。像一部電影的武打場面,雖然動作眼花繚亂,但實際上(如果不切換場景)後面一幀圖像與前面一幀圖像相比,畫面上大部分像素都沒有變,特別是背景。電影每秒鐘要放24幀,即使正在打鬥中的人,在1/24秒中也不是身體的每個部位都在動的。三是光譜(spectral)冗餘。明亮的像素在所有的顏色中都明亮,不侷限於個別顏色。而且,人眼對亮度比對顏色敏感。利用這些冗餘特徵,多媒體信息可以大幅度地壓縮。例如,MPEG-1的壓縮比,理論值是200:1,一般實際實現的是50:1。VCD就是一種採用MPEG-1標準來壓縮圖像信息的。

 

 

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章