數位圖像與音訊之基礎知識

單維彰

E-mail: shann@math.ncu.edu.tw
Home Page: http://libai.math.ncu.edu.tw/~shann

2003 年 7 月 16 日
http://libai.math.ncu.edu.tw/~shann/Teach/liberal/CMW/digi-img.html

前言

雖然在應用上我們幾乎都能夠在電腦上瀏覽圖片、觀賞影片、聆聽音樂, 有些人還知道怎樣擷取 CD 唱片的歌曲然後壓縮成比較小的檔案。 感謝電腦軟體工業的發達,使得我們每個人幾乎都可以執行這些例行工作。 但是,或許為了能夠在消費之外還有生產的能力、 或許為了提昇自己成為更專業的使用者、 也可能只是純粹為了好奇,有些人希望在無意識的操作之外, 增加一些知識或對於這些神秘過程的瞭解。 這篇文章即企圖提供一些基礎知識, 希望幫助那些有足夠好奇心的讀者們踏出第一步。

電子計算機所呈現的所有物件, 不論對我們而言是文字、數字、表格、圖畫還是影片, 總歸都是數位圖像 (digital graphics), 或者又稱為電腦圖像 (computer graphics)。 它們的成像原理全都一樣, 就是將不同顏色的小點聚集在一起,因為它們聚得很密,所以唬弄了我們的大腦, 讓我們從視覺印象中得到某種意義,以為看到了字或圖像。 這種小點稱為像素 (pixel),它是數位圖像的最基本元素, 每個像素只有一個顏色,在像素之內並無顏色變化。

數位圖像和數位音訊 (digital audio) 構成電腦多媒體資料的核心元素。 間隔短暫時間差串接而成的圖像序列,利用眼睛的視覺暫留造成連續變化的動態印象, 再配上同步播放的音訊,便成了數位影片 (digital video) 或電腦動畫 (computer animation)。 通常我們稱真人實景的動畫為影片,而人工繪製的影片為動畫。 不過隨著兩者的數位化處理,越來越難以區分彼此, 也越來越沒有區分的必要。在技術上,它們都是動態的數位圖像。

在音訊的基本概念之後,我們要介紹描述型圖像與音訊、 資料壓縮的分類和原理、動畫以及承載大量資料的光學類媒體。 礙於篇幅及預設的學習目標,這些知識都只能簡略帶過, 期望帶給讀者一個清晰的輪廓而已。

監視器

監視器 (monitor) 是電腦的最基本輸出裝置。 最常見的監視器外形就像電視機,在螢光屏的背後由一組陰極射線投射成像, 所以大家經常將監視器稱為螢幕。 但是也有些其他外形的監視器:例如以液晶或電漿技術製作的監視器可以薄如一幅畫框; 或者以投影技術製作的監視器,它本身並不成像, 而是以強光將圖像投射到牆壁或布幕上。 不論如何,電腦就是透過監視器呈現各種數位圖像, 讓人看到執行的結果、或是滑鼠和鍵盤的回應。

早期的監視器只能呈現文字、數字和少數用來製作表格的邊角圖案, 稱為文字監視器;它們顯然不能用來呈現圖形操作介面。 文字監視器每一列只能顯示固定個數的字符, 每一幕只能顯示固定列數的字符, 而每一個字符也都只能有固定的寬度和高度。 最常見的規格是每列 80 字元、每幕 25 列,稱作 80x25 字元。 早期的終端機都配有文字監視器。

如今常見的監視器都可以顯示任意設計的數位圖像, 因此稱為圖形監視器。 圖形監視器每一列可以顯示固定個數的光點 (screen dot), 每一幕可以顯示固定列數的光點, 而每一個光點都有固定的大小,每兩個相鄰光點的距離,原則上也都相同。 如果一個圖形監視器每列 800 個光點、每幕有 600 列, 我們說它有 800x600 光點。 如今的監視器通常有 800x600、1024x768 或 1280x1024 光點。 早期的監視器只能有一種固定的光點數。 如今,監視器多半可以配合顯示卡 (video adapter) 調整幾種不同的光點數。

即使文字監視器,也是以光點來呈現字符,只是每個字符的光點數都一樣。 例如一個 80x25 的文字監視器,若每個字符佔用 24 列、每列 12 個光點, 則這個文字監視器有 960x600 光點。

雖然實際的文字監視器已成古董,但是虛擬的文字監視器還很常見。 許多圖形操作介面中,總有個所謂的文字操作模式, 例如微軟視窗的 MS-DOS 模式、X 視窗的 X 終端機; 或者是提供遠程簽入的視窗應用軟體, 例如在微軟視窗內執行的 NetTerm、在 MacOS 內執行的 MacBlue Telnet。 這一類的程式,都需要提供一個文字操作介面。 而此類介面通常被含在一個模擬終端機的視窗內, 有時也將整個圖形監視器當做文字監視器來用。 不論如何,我們都會看到一個虛擬的文字監視器, 常見的規格是 80x25 或 132x25 字元。

點陣字型

以一個 8x16 像素的字圖 (glyph) 為例。 為了方便在紙上印刷,就假設每個像素只能表現黑或白兩種顏色。 當這些像素聚集成像,我們便看到某種圖騰,進而獲得某種意義。 例如下面左邊的字圖,讀者應該會認為那是一個 G 字母。 在抽象概念上,數位圖象可以用矩陣來表達。 矩陣中的元素,代表像素的顏色。 以下圖左邊那個 G 字圖為例,假設 0 代表白色、1 代表黑色, 則右邊的 16x8 矩陣就可以表達左邊的 8x16 圖像。

[圖一]

字型提供實際的資料給電腦 (或者說給作業系統), 使得她可以在監視器上呈現字符。 因此字型必須將字圖以電子資料的形式,儲存在電腦裡面。 以前面那個 G 字圖的矩陣表達為例, 因為每個元素不是 0 就是 1,可以用一個位元來記錄一個元素。 則一個 8x16 的字圖需要 128 嗶來記錄。 若將前述矩陣中的數值看成二進制數字, 從上到下一列接著一列可以寫成一串 128 個二進制數字, 就是 G 的 8x16 字圖資料。 這些資料,以十六進制數字表示就是:

00003E41404040474141413E00000000
這樣以矩陣表達圖像中每個像素的顏色, 稱為點陣圖 (bitmap)。

將某個編碼系統 (例如 ASCII 或 Big-5) 定義的字集, 一一製作成數位圖像的字圖,則成為一個字型 (font)。 字圖的設計,可以有其藝術風格,但是應該合理地呈現字集所定義的圖樣。 例如 G 和 [圖二] 應該都看得出來還是 G, 但是 [圖三] 就未必容易辨識。 原則上,字集中的每個字符,在字型內都應該有一個、且僅有一個字圖。 而同一個字型中的字圖,理論上沒必要具備任何同樣的規格, 但是實際上它們總是具有類似的高度、寬度, 而且也屬於同一種藝術風格。 例如與 G 同屬一個字型的 A B C、 和與 [圖三] 同屬一個字型的 [圖四], 就各有各的藝術風格。

如果字型中的字圖是點陣圖,則稱之為點陣字型 (bitmap font)。 若一個點陣字型中記錄了 94 個字符的字圖 (128 個 ASCII 字集內的 94 個可以印出來的符號), 每個字圖有 8x16 像素,每個像素用一個位元記錄, 則這個字型的資料含量就是 94 * 16=1504 拜 (bytes)。

原則上,一個字型以一個檔案來儲存字圖的資料,稱為字型檔。 但是並不絕對如此,例如 Big-5 碼或 Unicode 碼的字型, 因為資料較多,有時候就分成幾個檔案來儲存。 字型檔案多半儲存在磁碟機裡面,稱為軟體字型。 但是也有些最基本的字型, 儲存在電腦的唯讀記憶體 (ROM) 內,稱為硬體字型。 當您剛打開電腦的電源,在作業系統和操作介面尚未開始運作之前所看到的訊息, 例如檢查記憶體或是警告周邊設備錯誤的訊息, 都是由硬體字型顯示的。

色彩原理

牛頓發現三原色光是紅綠藍 (RGB: Red, Green, Blue)。 三種光以飽和的亮度重疊在一起,我們就看到白色; 以中等強度重疊在一起,我們就看到灰色。 三種光都沒有,就是黑色。 如果我們以 x-y-z 三維直角坐標系統代表 RGB 各自的強度, 則此坐標系統的第一象限就定義了色彩空間 (color space)。 在這個空間中的一個點 (x,y,z) 就代表一個顏色, 而 sqrt(x^2+y^2+z^2) 就是它的亮度。 例如原點 (0,0,0) 是黑色,三個坐標軸上是各種明暗的三原色, 在 x=y=z 的直線上是明暗不同的灰色。

正如同三維空間除了 x-y-z 直角坐標之外, 還有其他的坐標系統 (例如圓柱坐標或球面坐標), 色彩空間也是除了 RGB 坐標之外,還有其他坐標系統。 RGB 可能是光學工程師的最愛, 但 HSV (Hue, Saturation, Value) 可能是藝術家比較喜歡的坐標; 它以基本色調 (H)、濃度 (S) 和亮度 (V) 來描述色彩空間, 符合藝術家作畫的經驗和技巧。 此外,還有以顏料為主角的坐標系統。

顏料的性質與原色光相反。一種能夠完全吸收紅色光與藍色光的顏料, 就會反射出綠色光,而成為綠色顏料。 因此,我們定義顏料的三原色是非紅 (吸收紅光):反射綠與籃光,呈現青藍 (cyan); 非綠:反射紅與藍光,呈現紫紅 (magenta); 非藍:反射紅與綠光,呈現黃色 (yellow),合稱為 CMY

RGB、HSV、CMY 都可以成為色彩空間的坐標系統。 亦即,同樣的一個顏色,或者說色彩空間中同樣的一個點, 在 RGB 系統中的坐標值 (r,g,b) 和在 CMY 系統中的坐標值 (c,m,y) 並不相同。 從 (r,g,b) 換算到 (c,m,y) 的計算稱為坐標變換 (反之亦然)。 理論上,坐標變換是線性映射, 所以存在一個 3x3 矩陣,將 RGB 坐標映射到 CMY 坐標 或是 HSV 坐標。 所以理論上,對於每一種坐標變換,只要找到那矩陣中的九個元素, 就有了計算公式。但是實際上可沒這麼簡單。

實際上,電腦是透過輸出裝置 (output device) 產生色彩, 例如陰極射線監視器、液晶監視器、投影機、彩色印刷機這類周邊設備。 不同品牌、甚至於不同年齡的設備, 都不見得會將理論上的同樣顏色呈現出視覺上的同樣效果。 這就是為什麼數位藝術家 (digital artists) 總是需要利用特殊的工具軟體, 仔細調校他/她的輸出裝置,使它們在視覺上有一致的效果。

自己會發光的輸出裝置,多半遵循 RGB 坐標來產生色彩。 但是彩色印刷機就不僅僅遵循 CMY 坐標而已,它們通常還要增加幾種基本顏料。 最常見的就是增加黑色 (black),因此成為 CMYK 系統。 這樣做的明顯原因,是為了節省顏料---在白紙上列印黑字的時候, 不需要使用 CMY 三種顏料來合成黑色。 更深入的原因是,雖然理論上 CMY 就能合成黑色, 但是工業技術卻辦不到,因此需要另配黑色顏料。 有些彩色印刷機還配備了更多的基本顏料。

彩色數位圖像

數位圖像中的每個像素,只能從預先設定的 $k$ 種顏色當中,挑選一種顏色。 例如字圖的每個像素只有兩種選擇,就是 k=2。 為了配合計算機的二進位設計,通常我們選擇 k=2d, 而 d 是個正整數。 d=log2k 稱為色層深度 (color depth)。 常見的深度有 1、4、8、16、24。深度越深, 表示將人類可見光譜切割得越細、 色彩變化越細膩、在色彩空間中可以取得的點數越多, 但是也表示數位圖像的資料量越大。

雖然色彩空間中有連續變化的無窮多種顏色, 但是一般相信人眼並不能分辨非常細微的顏色差異。 因此,從無光到一般人能夠接受的最大亮度之間, 只要分割出有限的幾種亮度即可。 現在常見的規格,是在每個原色光的亮度上等分 255 段, 令 0 是不亮,1,2,3,... 漸次增強到 255 最亮。 因為 RGB 三個坐標軸上各有 256 個節點, 所以在色彩空間內決定了具有 2563 個點的離散色彩空間, 也就是,具有大約一千七百萬種不同顏色。 這些顏色當中的 140 種被認為是網頁設計中常用到的顏色, 因此 Netscape 為其命名並定義它們的坐標值。 例如珊瑚色 (coral) RGB 坐標值定義為 (255,127,80)。 在本文中不適合印出那 140 種顏色,讀者可以參考以下網頁, 實際看到那 140 種顏色和它們的 RGB 坐標值:

http://libai.math.ncu.edu.tw/bcc16/pool/5.08.shtml

雖然顏色的名字和 RGB 坐標值有了嚴格的定義, 但是在不同的監視器上卻未必顯示一樣的顏色, 甚至同一台監視器,都有可能因為亮度與對比的設定,而表現些微不同。 所以,一般人實在沒必要在顏色上緇銖必計。

當數位圖像的色層深度是 4 或 8,稱之為 16 色圖或 256 色圖。 小型的圖標經常使用 16 色圖,而網路上最常流通的數位圖像,通常都是 256 色圖。 對於這種只用了少數幾種顏色的圖像,我們採取色盤 (colormap) 設計。 一個 k 色色盤在概念上就是 kx3 矩陣, 每一列以 RGB 坐標記錄離散色彩空間中的一個顏色。 如下面左邊的矩陣就是一個色盤,它定義了 k 種顏色, 依序編號是 0 號、1 號、...、k-1 號。 其中 k 介於 1 與 16 或 256 之間 (含兩端)。

[圖五]

一張 n 乘 m 的 16 或 256 色數位圖像, 在概念上就是一個 m 乘 n 矩陣。 如上面右邊的矩陣就可以代表一個數位圖像。 矩陣中的元素都是介於 1 與 16 之間的整數 (或者 0 與 15 之間), 要不然就是 1 與 256 之間的整數 (或者是 0 與 255 之間), 就代表像素的顏色編號,實際的顏色由色盤決定。 在紙張上不便實際舉例,讀者請參考以下網頁,可以看到一份實際的 256 色圖, 以及它的色盤;您還可以在這張網頁中看到數位圖像與光點之間的解析度關係, 以及色盤按照亮度排序的慣例。

http://libai.math.ncu.edu.tw/bcc16/pool/1.20.shtml

每張 16 或 256 色的數位圖像,都伴隨一份自己的色盤。 色盤中的顏色個數,可以不足 16 或 256。 通常色盤是按照顏色的亮度排序 (從暗到亮)。 這使得彩色圖像很容易轉換成灰階 (gray scale) 圖像。 所謂灰階就是不同亮度的灰色。 俗稱的黑白圖片,其實是灰階圖片。 灰階通常分為 16 階、64 階或 256 階。 對任何一個介於 0 與 255 之間的整數 s,則 (s,s,s) 就是亮度為 s 的灰色。 當 s=0,17,34,41,...,255 時,它們就定義了 16 階的灰色; 當 s=0,1,2,3,...,255 時,它們就定義了 256 階的灰色。

當數位圖像的色層深度是 15 或 16,商業上稱為高彩 (high color) 圖。 當數位圖像的色層深度是 24,則離散色彩空間中的所有顏色都可能用得上, 故商業上稱為全彩 (full color) 圖。 但是讀者必須明白,這些名詞都是商業或廣告用語,未必有一個固定的意義。 因為顏色已經夠多,所以不另外定義色盤, 而是直接將顏色的 RGB 坐標換算成一個整數,填入矩陣之中。 所謂全彩圖只是說每個像素可以有大約一千七百萬種顏色的選擇, 並不是說整張圖出現了一千七百萬種顏色。 例如用數位相機拍攝一張四百萬像素的照片, 就算每個像素的顏色都不一樣,整張照片也不過出現了四百萬種顏色而已。 比起整個離散色彩空間的一千七百萬種顏色,少之又少。

圖像檔案

數位圖像總是要儲存在電腦檔案裡面,通稱為圖像檔案。 圖像檔案的內容,就是那個代表像素顏色的矩陣、有時還要儲存色盤矩陣; 它們都是非文字檔。 圖像檔案各有它所能接受的圖像大小、色層深度、壓縮方式、 像素和色盤的排列方式等等不同特性,通稱為它的檔案格式。 理論上,如果色層深度是 d,則每個像素需要 d 個位元來記錄顏色。 所以一個 n 乘 m 像素的圖像,資料含量就是 m*n*d 嗶 (bits)。 例如一個四百萬像素的全彩數位照片,其資料含量就大約是
96000000 bits 大約是 11719 KB 大約是 11 MB
而一張 300 x 200 之 256 色圖, 連同色盤的資料含量大約是 60768 bytes、也就是 59KB。 實際上,檔案中免不了要儲存其他輔助資料, 而且圖像檔案總以某種算法先壓縮像素資料再儲存, 所以檔案大小經常不是理論上的圖像資料含量。

這裡簡介幾個常見的圖像檔案格式。BMP (Microsoft Windows Bitmap) 接受 1, 4, 8, 24 三種色層深度,有壓縮或不壓縮兩種選擇。 但是因為 BMP 的壓縮算法 (RLE) 太單純,可能在壓縮後反而產生更多資料, 所以還是不壓為妙。 而 GIF (Graphics Interchange Format) 大概是目前網頁中最常見的圖像檔案格式, 它接受 1--8 的色層深度,但通常所見的是 8,亦即 256 色圖。 GIF 採用效率很高的 LZW 壓縮算法,但是因為 LZW 算法屬於某企業的專利, 所以一旦寫程式使用了 LZW 演算法,就要付權利金,否則即有可能觸法受控。 為了擺脫這個專利權的陰影, 就有人發起另一種符合公開軟體精神的壓縮算法與圖像檔案格式, 便是 PNG (Portable Network Graphics)。 PNG 的規格可以函蓋 GIF,而且迴避了專利權。

PNG 和 GIF 都提供了「透明」色。這其實不是一種色彩, 而是一種記號。數位圖像總要靠著軟體,將它呈現在輸出裝置上。 當兩張圖要「重疊」呈現的時候,軟體應該要呈現上面那張的像素; 如果像素是一個透明記號,而且軟體認得的話,就會呈現下面那張的像素。 因此,就造成了上面那張圖的透明效果。

高彩或全彩圖像,通常用 TIFF (Tag Image File Format) 或 JPEG (Joint Photographic Experts Group) 檔案格式來儲存。 TIFF 可能是最有彈性的檔案格式,它提供許多種壓縮或排列資料的組合。 JPEG 提供一套針對很多像素的全彩圖像特別有效的壓縮算法, 而且容許使用者視需要來決定壓縮比。 上述只是常見的圖像檔案格式,某一本圖像百科裡面,列了 87 種檔案格式。 大部分的檔案格式,是可以互相轉換的,而且有許多軟體做這種事。

關於壓縮,我們稍後還會與數位音訊一起介紹。

製圖軟體

最原始的圖像製作軟體,稱為點陣編輯器 (bitmap editor)。 您可以用它來一一決定每一個像素的顏色。 對於字型或圖標的設計工作而言,這或許是合適的工具, 但是若要用它製作超過壹萬像素的圖像,就未免太瘋狂了。

平面數位圖像依其畫面性質,可以粗分為測繪 (plot)、 圖畫 (painting 或 drawing) 和影像 (image)。 測繪是按照計算所得、或是給定的數據來製圖; 例如表現統計結果的圓餅圖或長條圖、表現股市價格的折線圖、 表現對應關係的函數曲線圖,都是常見的測繪圖像。 測繪軟體通常被整合在試算表、統計計算或科學計算的軟體之內, 例如 Excel、SAS、Matlab 和 Maple。 圖畫就相當於我們自幼在美術課裡面學習的繪畫。 製作圖畫的軟體常稱為繪圖軟體,例如 CorelDraw、Painter。 它們利用滑鼠、光筆、壓力板或其他周邊設備, 模擬各種筆觸,諸如鉛筆、水彩筆、油彩刮刀、壓克力等等, 協助數位藝術家創造數位圖畫。 影像則是拍攝實景所得的數位照片, 我們利用數位照相機、(圖片或底片) 掃瞄機這些週邊設備取得原始影像, 再運用影像處理軟體 (例如 PhotoShop) 調整其亮度、色調, 或是剪接、潤飾。

圖畫、影像與測繪三種圖像,本質上都是一樣的數位圖像, 因此可以很方便地運用想像力將它們融合與互補, 於是為藝術家開啟了全新的創作天地。 此外,具有數學、物理、化學或工程專業知識的人, 也有機會可以將自己專業內的特殊想像力與美感, 透過數位圖像技術呈現出來,而不必親自學會傳統藝術家操作筆、刀、刷的技巧。 同樣地,這份紙版文件並不適合印刷那些創作, 請讀者移駕以下網頁,看一些特殊範例。

http://libai.math.ncu.edu.tw/bcc16/pool/4.11.shtml

監視器成像

數位圖像在監視器上的顯像方式, 就是將像素對應成為監視器光點的顏色。 我們仍然以點陣字型為例,補充兩個觀念。 首先,字圖資料中,雖然 0 和 1 各代表一色,但是未必是黑白兩色; 這兩種顏色可以由作業系統或應用軟體決定。 總之 0 代表底色,而 1 代表面色;底色通常是透明的。 其次,像素未必和監視器的光點一一對應, 但是通常點陣圖與點陣字型的確將像素與光點一一對應。 因此成像的大小就和監視器的解析度 (resolution) 有關。 例如某個監視器的光點直徑是 0.25mm, 則一個 8x16 點陣字型所呈現的圖像只有大約 2mm 寬、4mm 高。 這是幾乎看不見的。 由此可見,對於一個固定的點陣圖 (例如圖標) 或點陣字型, 呈現在解析度越高的監視器上,看起來就越小。

解析度的常用單位是每英吋點數 (dpi: dots per inch) 或是光點直徑。 一英吋是 25.4mm,所以光點直徑是 0.25mm 的監視器,解析度大約是 100dpi。

電腦並不直接將像素送交監視器, 而是將所有想要呈現在監視器上的圖像, 寫進影像暫存佇列 (通常附在顯示卡內),等待監視器小廝過來拿去顯示在監視器上。 那小廝每秒來拿幾次資料,就是監視器的掃瞄頻率。 例如掃瞄頻率 90Hz 就是每秒來拿九十次,或是每 1/90 秒拿一次。

影像暫存佇列必須有足夠多的記憶體,用來儲存監視器每個光點的顏色。 例如,若一個監視器有 1024x768 光點, 則影像暫存佇列必需有 786,432 個位置來儲存這些光點的顏色。 如果監視器設定的色層深度是 8 (256 色), 則每個光點需要 8 嗶,總共需要 768KB 的記憶體; 如果監視器設定的色層深度是 16 (高彩),則每個光點需要 16 嗶, 總共需要大約 1.5MB 的記憶體。 由此可見,對於一個容量固定的影像暫存佇列, 如果想提高監視器的解析度,就得降低色彩數; 如果想提高色彩數,就得降低解析度。

類比與數位訊號

人的耳朵接受到頻率大約介於 2--22,000Hz (Hertz,每秒週期數) 的振動, 便感覺聽到了聲音。通常聲音以空氣為媒介,發聲體振動空氣形成縱波, 將聲音傳到我們的耳朵。在一個固定點測量並紀錄空氣的壓力變化, 就可以將縱波畫成一條壓力隨時間變化的函數。 令 t 代表時間,p 代表壓力, 則一段聲音就轉換成一個函數 p=f(t)。 讀者可以想像聲波是一個連續函數,亦即 p=f(t) 在座標平面上對應的圖形 (以 t 為橫軸、p 為縱軸) 是一條連續不斷的曲線。 這條連續曲線稱為聲音的類比訊號 (analogue signal)。

舉例來說,若 t 的單位是秒,則 sin(2*pi*t) 是 1Hz 的振動, 而 sin(1200*pi*t) 是 600Hz 的振動。 我們可以聽到 600Hz 的聲音,但是那極為單調無趣。 電話聽筒中傳來等待撥號的嗚嗚聲、按下手機按鍵發出的嗶嗶聲, 差不多就是這種簡單振動的聲音。自然界中幾乎沒有這麼單調的聲音; 不論是生物還是樂器發出的聲音,都是許許多多頻率的振動混合在一起的結果 (通常會有一個最主要的頻率,配上許多其他頻率)。 所謂 f(t) 的頻譜圖 (spectrum graph), 就能顯示某段時間內的聲音含有哪些不同頻率的振動。

以前的聲音媒體,都紀錄了類比訊號。 例如唱片以刻在溝槽中高低起伏的紋路, 錄音帶以夾在磁帶內疏密不同的磁粉,將類比訊號紀錄下來。 而唱盤上面的針頭和錄放音機裡面的磁頭, 將唱片或錄音帶紀錄的類比訊號轉換成連續的電波, 這微弱的電波通過擴大機推動揚聲器 (俗稱喇叭),揚聲器的音盆便振動空氣, 就這樣將類比訊號轉換成聲波傳到耳朵。 而一般的廣播電台,則是利用無線電波傳送類比訊號到收音機, 然後同樣經過擴大機與揚聲器將訊號轉換成聲波。

相對於類比訊號的數位訊號 (digital signal),不再是一個連續函數, 而是一個接著一個的整數。光碟唱片 (CD: compact disk) 和所有透過電腦傳輸與播放的音樂檔案,都紀錄了數位訊號。 所謂的數位廣播和現在通用的行動電話,也都在傳遞數位訊號。 但是聲波本來就是連續的, 所以任何數位訊號必定先經過 AD 轉換 (analogue to digital convertion) 步驟, 而在播放之前還必須經過反向的 DA 轉換, 然後還是經過傳統的擴大機與揚聲器將訊號轉換成聲波。 光碟唱盤 (CD player)、電腦中的音效卡 (audio adapter)、 行動電話的聽筒,都是內含 DA 轉換的電子器材。 我們常看到音效卡直接連線到揚聲器,但是它輸出的其實只是微弱電波, 那些揚聲器都內附擴大機。

取樣頻率與解析度

每隔一小段時間,從類比訊號 f(t) 取出來一個函數值,稱為取樣 (sampling)。 取出來的函數值,稱為一個樣本 (sample)。 相隔的時間,記做 Dt (唸 delta t), 也就是每隔 Dt 秒取一個樣本, 因此每秒就有 1/Dt 個樣本。 例如,若 Dt=0.25,則取得樣本 f(0), f(0.25), f(0.5), f(0.75), f(1), f(1.25), f(1.5), ...。 如果我們所謂的「每秒」只的是包含開頭但不含結束的一秒鐘間隔, 則每秒有 1/Dt = 4 個樣本。 例如 0 <= t < 1 當中有 4 個樣本,而 1.3 <= t < 2.3 當中也有 4 個樣本。 1/Dt 就是取樣頻率 (sampling rate),單位仍然用 Hz。

每一個樣本都是一個實數,它可能在小數點下有無窮多位, 而電腦的記憶體不能儲存無窮多位,所以要把每個樣本數位化: 首先,我們規定樣本只能有 2n 種不同的數值, 依序為 p0 < p1 < ... < p2n-1。 然後,將樣本 f(t) 改成「最靠近」的某個 p_k (細節不表)。 那麼 f(t) 數位化的結果就是 k。

舉例來說,如果 n=3,而規定

p0=74,   p1=74.5,   p2=75,   ...   p7=77.5
那麼以下這些樣本 73.2, 74.27, 75.8, 77.4446, ... 就被數位化成 0, 0, 4, 7, ...。

前面說的 2n 就是數位化的解析度 (resolution), 常常又寫成 n-bit 的形式。 若解析度是 2n,則 k 的二進制數字恰有 n 位, 因此可以用 n 嗶來紀錄與儲存。 將一個聲音的類比訊號,取樣之後再數位化,就得到數位訊號, 又稱為數位音訊 (digital audio)。

CD 音質的數位音訊

所謂 CD 音質就是常見之音樂光碟所紀錄的數位音訊規格。 它並不等於聆聽音樂的品質, 因為那還關係到錄音與播放時的音響器材。 這一套規格是由 Philips 與 Sony 公司共同研發制定的, 發表於 1980 年公佈的技術手冊; 因為它的封面是紅色的,圈內人稱之為「紅皮書」。 紅皮書不但定義了數位音訊的規格,還定義了光碟片的硬體規格。 此後所有 CD 家族的光學媒體 (optical storage media), 都殿基於這份文件。

如果原來的聲波類比訊號是 f(t),取出樣本 f(t0), f(t1), f(t2), ... (但不將它們數位化)。因為這裡只有有限多個樣本, 比起連續函數 f(t) 所蘊含無窮盡的資訊而言,少得可憐。 因此,讀者應可體會,用這有限多個樣本轉換出來的類比訊號 Tf(t) (唸 tilde f),並不能「還原」到 f(t)。 一般而言 Tf(t) 和 f(t) 雖然相近但不盡相等。 Shannon 有一個非常著名的定理 (注意這個定理說的是未經數位化的樣本,因此留給紅皮書一點可議的空間), 就是說如果取樣頻率是 S, 則只有當 f(t) 內含的所有頻率都不超過 S/2 的時候, 才能夠 Tf(t)=f(t)。

Philips 與 Sony 的工程師相信科學家的實驗結論, 認為人類只能聽到 22,000Hz 以下的頻率, 因此將類比訊號先行「過濾」,濾掉了 22,000Hz 以上的頻率 (細節不表)。 然後他們應用 Shannon 定理,再擴充一點點當作容許錯誤的空間, 因此規定取樣頻率為 44,100Hz。 為了搭配 CD 的容量,又規定了解析度為 216。 換句話說,紅皮書規定每秒鐘取 44,100 個樣本,每個樣本用 16 嗶 (也就是兩個字元) 來儲存。 若是單聲道 (mono) 的類比訊號,則每秒鐘轉換成 88,200 拜; 而立體聲 (stereo) 分成左右兩個聲道,要分別從類比轉換成數位音訊, 因此每秒鐘轉換成 176,400 拜。 一首 3 分 48 秒的 CD 音質歌曲,就有 40,219,200 拜、大約 38MB 的數位資料。

1980 以後,技術上的進步,可以辦得到更高資料量的數位音訊規格。 例如 96,000Hz 的取樣頻率配上 224 的解析度。 這麼一來,同樣一首 3 分 48 秒的歌曲,就轉換出 83MB 的資料。 用這些資料來填滿容量越來越大的磁碟或 DVD 碟片,倒是不錯的主意。

音訊檔案

最常見的 WAV (稱為波形 (wave) 檔案) 檔案,沒有經過壓縮, 所以其檔案含量可以用聲音長度 (以秒為單位)、取樣頻率以及解析度計算出來。 實際檔案總有個檔頭 (header), 儲存的不是音訊資料本身,而是關於這筆音訊的其他資訊。 所以實際檔案含量,會比計算出來的資料量稍微大一點點。 市面上有許多種軟體,可以擷取 CD 唱片內的歌曲,儲存為 WAV 檔案。 WAV 檔案除了可以儲存 CD 音質的數位音訊之外, 還可以接受許多不同規格的音訊。

與 WAV 類似,還有 AU 和 SND 這些檔案格式,也都是儲存未經壓縮的音訊資料。 另一類型的檔案格式,則附帶規定了某種壓縮技術或規格。 最常見的可能就是 MP3,它是 MPEG-1 Layer 3 的縮寫。 MPEG 代表 Moving Picture Experts Group, 那是一個以發展數位影片的技術與標準為宗旨的團體。 MPEG-1 是他們制定的第一套標準,所謂的 VCD 影音光碟就採用這個標準。 而數位影片一定要配上同步的聲音,因此他們順便研發音訊壓縮的技術和標準。 依照壓縮技術的效能,分成 Layer 1 和 2 和 3 三種。 Layer 3 是 MPEG-1 規格中最高級的音訊壓縮標準, 當然這並不表示 MP3 就是最有效率的音訊壓縮方法。

MP3 以資料流量 (bitrate) 來測度資料含量, 其單位是 kbps (k-bits per second)。 而使用者可以指定壓縮後的資料流量。 譬如指定了 128kbps,那麼 MP3 就依約將數位音訊壓縮成每秒只有 128*1024 = 131,072 嗶的資料,或者是每秒 16,384 字元。 因此一首 3 分 48 秒的歌曲,就壓縮成 3,735,552 拜、大約 3.5MB 的 MP3 檔案。 對同一份數位音訊,指定的資料流量越低,壓縮之後的資料也就越少, 但是播放的品質就會越差。 使用者可以自己權衡資料量和播放品質,取得一個最佳的協調。 當然,在紙版文件中更不可能呈現聲音範例,因此還是要請讀者移駕光臨以下網頁, 如果您的電腦配備了音效卡和輸出裝置,可以聽到示範的聲音, 也可以看到示範的 f(t)。

http://libai.math.ncu.edu.tw/bcc16/pool/1.24.shtml

當電腦 (或者任何電子器材) 要播放未經壓縮的數位音訊, 她只要讀取資料、做 DA 轉換、輸出給擴大機,就行了。 但是如果她要播放經過壓縮的數位音訊, 就得要讀取資料、解壓縮計算、做 DA 轉換,然後才能輸出。 增加的「解壓縮」步驟,需要相當多的計算, 所以運算能力稍微弱一點的電腦,或者同時處理太多工作的電腦, 就會顯得力不從心。

資料壓縮

至此,我們知道數位圖像和音訊,都各有壓縮的方法; 以前也已經介紹過有一種稱為 ZIP 的壓縮工具, 常被用來壓縮電腦中所有類型的檔案。 其實,所謂一個壓縮 (compress) 的方法, 就是一套數學計算的程序,學名叫做演算法 (algorithm)。 對每一個壓縮算法,必定有一個相對的解壓縮 (decompress) 算法。 假如原來的資料是 (b0, b1, b2, ..., bm$, 其中每個 bi 代表一個字元 (介於 0 和 255 之間的整數)。 假設壓縮之後,變成 (d0, d1, d2, ..., dp)。 我們將 p:m 約分成 1:r 的形式, 稱為壓縮比 (compression rate)。 例如將一首 3 分 48 秒的 CD 音質歌曲,從 40,219,200 拜壓縮成 3,735,552 拜, 壓縮比就大約是 1:10.8。

假設將 (d0, d1, d2, ..., dp) 解壓縮之後, 得到 (g0, g1, g2, ..., gm)$。 如果數學證明 bi=gi, 我們說這一套壓縮和解壓縮的算法是無失真壓縮 (lossless compression)。 譬如 ZIP、GIF 和 PNG 都採用無失真壓縮。 假如 bi 和 gi 雖然相近但不盡相同, 則這套算法是破壞性壓縮 (lossy compression)。 譬如 JPEG 和 MP3 都採用破壞性壓縮。

無失真壓縮根據離散數學理論設計,計算量和壓縮比都比較低; 破壞性壓縮根據分析數學理論設計,計算量和壓縮比都比較高。 如果被壓縮的對象,在解壓縮之後不容許有任何誤差, 譬如純文字文件、電腦程式等等,就當然要選擇無失真壓縮。 但是像畫面複雜的圖像、交響繁複的音訊,就算有一點點差別, 眼睛和耳朵也感覺不出來 (或者雖不滿意但可接受), 那就可以採用破壞性壓縮以爭取較高的壓縮比。

一旦經過了破壞性壓縮,就再也無法還原了 (除非保存了原來的檔案)。 譬如說,如果不滿意某個 MP3 檔案的音質, 就算把檔案格式再轉成 WAV 也不能還原品質。

描述型圖像與音訊

點陣圖和數位音訊在道理上是同一類的: 它們把影像和聲音,用某種規則轉換成數,並一五一十地儲存這些數, 因此它們的資料量都很大,即使經過壓縮,還是頗大。 一個另起爐灶的想法是,何不設計一套程式語言來描述影像或聲音, 讓電腦的解讀軟體去執行繪圖或發聲的工作。 譬如要在監視器上顯示一個圓,與其儲存一個圓的像素矩陣, 何不告訴電腦圓心座標和半徑,由解讀軟體去畫? 再譬如要播放鋼琴彈奏中央 C 四分音符的琴聲, 與其儲存一段琴聲的數位音訊, 何不告訴電腦音譜和演奏的樂器,由解讀軟體去播放? 讀者應可想像,如果真的辦到上述理想,則可以大大降低圖像與音訊的資料量。

計算機科學家朝著這個理想分頭邁進,有些人做圖像,有些人做音訊。 圖像那頭,要描述自然景觀恐怕真的很難,但是要描述字形或是人工繪製的圖案, 則頗為可行。事實上,商場中已經有所謂描邊字型 (outline font) 和向量圖的商品, 它們都是描述型的圖像,以其專屬的程式語言描述曲線和顏色等等。

但是監視器與印刷機終究還是由光點或墨點來呈現圖像, 所以描述型的圖像只有在儲存和操作 (譬如旋轉、放大縮小、製造陰影) 的時候有用, 一旦要真正呈現在人的眼前,還是必須先經過一個解讀軟體去計算, 按照描述的指令當場製造出對應的像素矩陣,然後才能呈現。 因此,描邊字型雖然有檔案小、縮放自如又可以做特效這些優點, 卻需要運算能力夠強的電腦,才能消受。

在音訊這頭,因為早就有電子琴,恰好用這項技術來發展描述型的音訊。 電子琴可以發出許多種樂器的聲音,通稱為電子合成音效。 音效的品質或逼真程度,當然就隨著電子琴的技術 (和價格) 而異。 1983 年制定的數位樂器介面 (MIDI: Musical Instrument Digital Interface) 恰好為描述型音訊鋪好了路。 我們可以透過 MIDI 介面,從電腦下操縱電子琴或其他合成音效的電子樂器, 讓它們演奏;也可以在電子樂器上面彈奏,透過 MIDI 介面將音符傳到電腦, 再儲存為操縱電子樂器的指令。

那些操縱電子樂器的指令,就儲存在 MID 檔案內。 因為它基本上只要紀錄五線譜和相對的樂器,因此 MID 檔案非常小。 理論上,這個檔案的內容,應該輸出給電子樂器去演奏, 但是目前的音效卡大多附帶有合成音效的晶片, 可以直接將 MIDI 指令轉換成對應的類比訊號,輸出給擴大機。