CD光碟的編碼與糾錯
趙效民 于 2005.01.18 14:42:04 | 源自:www.stor-age.com | 版權:轉載 | 平均/總評分:10.00/190

CD光碟的數據結構

可以說,CD光碟是人類資訊化歷史上的一個重要的突破。CD最早于1982年10月份誕生,雖然距今已經有20多年的歷史,但它的相關設計在今天看來,仍是非常先進的,而且生命力仍然旺盛,即使是在DVD日益盛行的今天,也是重要的數據載體(媒介)。

要想了解CD光碟的糾錯原理,就不能不先了解CD光碟的數據結構,確切的說就是CD光碟上數據的編碼原理,它幾乎囊括了當時最先進的編碼技術,DVD與之相比,也并沒有本質的變化。

CD光碟最早的產品是CD-Audio,其技術規范被稱為紅皮書(Red Book),應用于唱片領域,所以即使有了日后的其他擴展規范,也都是以它為基礎制定的。CD光碟的規范被業界以不同顏色的Book來區分,目前共有以下幾種:

  • 除此之外,還有兩個從黃皮書和綠皮書擴展出來的規范,它們分別是Multisession CD和Photo CD,索尼與飛利浦(CD的發明者)并沒有給它們單獨規定顏色。

    在CD光碟中,數據的最小的可訪問存儲單位是Block(塊),在CD-ROM規范中則稱之為Sector(扇區)。在Red Book規范中規定,它們由若干個子塊組成,這個子塊就是比較難于理解的幀(Frame)。什么叫幀呢?我們可以理解為CD光碟編碼的單位。從下面這張CD光碟的數據流程圖中,我們可以了解幀與塊的關系和概念。

  • CD光碟的數據流程,以CD-Audio為例(點擊放大)

    我們現在可以反向的來理解CD-Audio的數據結構的設計原理。由于CD-Audio分為左右立體聲道,每個聲道的取樣精度為16bit,取樣頻率為44.1KHz,也就是說每秒取樣44100次。CD-Audio規定,每一秒鐘所讀取的塊數為75個,每個塊又包含98個幀,那么采樣數分攤下來是多少呢?44100÷75÷98=6,也就是說每一幀的取樣次數為6次,每次兩個聲道,每聲道的取樣精度為16bit,因此一幀的容量就是6×2×16=192bit=24字節。這就是一幀數據為什么是24字節的來歷(請注意圖中紅圈的部分,那就是決定CD光碟糾錯的重要部分,也將是下文中著重介紹的內容)。

    我們現在知道了CD光碟一個塊的容量就是2352字節,這也是所有CD規范的通用塊容量。但是,后來出現的CD-ROM規范中則將扇區的內部設計進行了更改,

  • CD-ROM的幾種扇區格式(點擊放大):Mode 1就是我們常用的CD-ROM電腦數據光碟的格式,Mode 2則是CD-I、VCD、CD-ROM XA等光碟的格式(其中Form 1也是電腦數據光碟格式)。其中ECC代表額外的錯誤糾正碼,EDC為錯誤檢測碼(CRC校驗)

    注意,上圖只是扇區(塊)的格式圖,不要將它與上面的CD數據流程圖弄混了,尤其是ECC部分,與圖1中的“校驗”是兩碼事,這一點我們將在下文會進一步講到。

    CD光碟的編碼與流程

    CD光碟使用了兩種編碼來分別保證光碟的燒錄質量,一個是從資訊的邏輯正確性上保證,一個是從物理燒錄的通道脈沖的識別可靠性上保證。它們分別是CIRC編碼與EFM調制編碼。

    CIRC的全稱是交叉交錯理德-所羅門編碼(Cross Interleaved Read-Solomon Code),它的主旨是除了增加二維糾錯編碼外,還將源數據打散,根據一定的規則進行擾頻和交錯編碼,使數據相互交叉交錯,從而進一步提高糾錯的能力,因為這樣一來用戶數據的錯誤將很難連續起來,有利于提高整體的糾錯能力。

  • 我們現在再來看看上面這張CD數據流程圖(點擊放大),圖中的編號就是CD燒錄時的數據生成的過程。

    第一步首先生成一個幀的原始數據,24字節,我們可以稱之為初始幀(在相關標準中則叫Frame-1,簡稱F1)

    第二步就是加入CIRC編碼,一共8個字節,我們可以稱之為校驗幀(在相關標準中則叫Frame-2,簡稱F2),總字節數為32個。我們常說的,所謂的C1與C2糾錯碼就是在這一階段加進去的,C1與C2的C就是CIRC編碼的縮寫。

    第三步就是加入控制碼,一個字節,我們可以稱之為數據幀(在相關標準中則叫Frame-3,簡稱F3),此時幀的容量為33字節。

    之后每個F3幀再加入3個字節的同步資訊碼就成為了最終用于燒錄的幀,總容量為36字節。最后經過EFM調制,基本上是以每字節8bit轉換成每字節17 bit的方式生成最終的信道脈沖(Channel bit)以控制燒錄激光的開與關。

    什么是EFM編碼呢?就是Eight to Fourteen Modulation的縮寫,即8至14調制。為什么會使用這樣的編碼對源數據進行“修改”呢?這還要從光碟的讀取原理說起。

  • 光碟上的凹坑與平面并不直接代表0和1

    光碟的讀取是根據反射激光的強弱來進行邏輯1與0的分辨,但激光反射功率的強與弱并不直接代表1或0。反射功率強弱的突變點,也就是反射電平的翻轉點,將被判斷為邏輯值1,長時間的凹坑與平面則都是邏輯值0。

    這樣一來,如果是連續的1,那么就意味著凹坑與平面要突變多次,會占用更多的燒錄空間,從而將影響有效的數據容積(或者說是資訊量),而若以電平的高低來代表1和0,如果連續的0或1很長,又很難判斷有多少個1和0,0與1的轉變也較難分辨,所以必須要加以一定的規則限制。這個規則可以借助某種編碼方式來禁止連續的1,并且又能把連續的0的長度限制在某種范圍之內以利于識別,這就是所謂的“游程限制(RLL,Run Length Limited)編碼規則”。

    EFM就是這樣的一種專用于資訊記錄的信道調制編碼,它將原始數據重新進行編排,以保證不會有連續的1出現,而連續的0則被控制在2至10個之間,可以表示為RLL(2,10)。也就是說,光碟上的資訊中,兩個邏輯1之間,最多有連續10個0,最少要有連續兩個0。這樣,有了相應的規則后,再配合時鐘計時資訊(每個信道脈沖的時間長度),就可以準確的分辨出數據了。需要指出的是,當8bit數據重新編成14bit數據后,兩個14bit代碼之間則還要符合RLL(2,10)的要求,因此還要根據相鄰14bit代碼的情況加入3bit的合并碼(Merging bit),從而使最終的編碼長度變為17bit。

  • EFM調制編碼示意圖,為了保證兩個14位編碼之間仍符合RLL(2,10)的要求又加入了3位合并碼,因此EFM其實是8至17編碼

    了解了CIRC與EFM在CD數據燒錄中的作用,就不難理解與之相關的CD燒錄質量標準的含義,下面我們就將深入介紹有關CD光碟的C1與C2編碼與糾錯標準。而與EFM相關的就是我們常常能聽到“高手”們討論的Jitter,將在本專題后面的章節詳細講述。

    CIRC編碼流程

    上文已經講過,每個24字節的原始數據幀都要附加上8字節的校驗碼以保證幀數據的可靠性,而這個校驗碼則分為兩個步驟來生成,我們來具體看一下。

  • CIRC編碼流程圖(點擊放大),圖出的W12代表組成一個F1幀的12個字(16bit),n代表F1幀的編號,A、B代表組成一個字的兩個字節(8bit)

    第一步:交叉交錯后生成C2校驗碼

    在介紹CD數據生成過程的時候,我們知道CIRC編碼處于F2生成階段,因此要先導入F1原始數據幀,也就是24字節。要知道,之所以稱為CIRC編碼,是因為在編碼的過程中,源數據有交叉和交錯的過程。首先,源數據要按兩個字(圖中的A、B)一組分成6個大組,偶數組進行兩個字節的延遲,從而形成擾頻交錯編碼。

    這里要解釋一下所謂的延遲,兩個字節的延遲意味著延遲兩幀。也就是說,當進行交錯之后,偶數組已經不再是原來F1幀中的源數據,而是當前幀的前兩幀中的偶數組數據(相對于前兩幀,當前幀就意味著兩個字節的延遲),原始的偶數組將在后兩幀的交錯編碼中出現。另外,從圖中可以看出,字的順序在交錯后發生了很大不同,這種前后幀數據交叉并且順序交錯的過程就是擾頻交錯編碼。

    此后,擾頻交錯后生成的新數據進入C2編碼器生成Q校驗碼。Q校驗碼為4字節,最后生成的新數據為28字節,因此C2也被稱為(28,24)編碼,意思是指輸入24個字節,輸出28個字節。

    由此可見,C2編碼并是針對原始F1幀的數據進行,但為什么要進行如此復雜的交叉交錯的編碼呢?這是為了保證糾錯效率而設計,下文將有更詳細的講述。

    第二步:字節依次延遲4幀后生成C1編碼

    將C2編碼完成后,將進行大規模的字節延遲交錯編碼,執行這個操作的就是延遲線,延遲單位為4字節,也就是說4幀,操作單位是每個字中的單個字節。這個要怎么理解呢?比方說,C2編碼后的的第一個字節不延遲,第二個字節則將延后4幀,第三字節將延后8幀……如此反復直至第28個字節,將被延后108幀。也就是說,C2編碼后的28個字節,將被有規律的分散到109個幀中(第一個字節延后0幀,加上最后一個字節延后108幀,一共是109幀)。

    延遲操作之后則進入了C1編碼器,顯然此時的數據與原始的F1幀數據差別更大了,C1編碼器將在28個字節的基礎上再生成4個字節的P校驗碼,從而完成了建立了F2幀的操作。由于輸入28個字節,輸出32個字節,因此C1也被稱為(32,28)編碼。從這個過程中不難看出,C1編碼的對象中包含了C2編碼(雖然是交錯延后的),也承擔了對Q校驗碼進行保護的任務。

    現在的F2幀已經與F1幀有了很大不同,如果幀編號為n,那么F2-n幀中只有一個字節來自于F1-n幀。所以,嚴格的講,C1、C2并不是對F1幀的校驗編碼,因為從C2編碼開始,對象就已經不再是F1幀中的原始數據。這樣(交叉交錯)的目的就在于防止一幀中出現連續大量的錯誤而無法糾正,如果原原本本地按原始F1——C2編碼——C1編碼的過程生成校驗碼,將是非常脆弱的,如果這一幀的24個字節中出現連續大量的錯誤碼,僅憑CIRC的設計,糾錯能力仍然有限。若將源數據分散到不同的數據幀中,然后再進行校驗,將大大提供單個數據幀的糾錯能力。理論上即使24個字節原始數據全有問題,但由于每個字節最終分布在間距為4的28個幀(跨度為109幀)中,也有可能被完全修復。顯然,如果不進行交叉交錯的話,這種可能性是不會存在的。

    C1與C2解碼糾錯

    好啦,當我們了解了CD光碟的CIRC編碼過程之后,就不難理解CD的解碼過程,而解碼過程就涉及到了糾錯,糾錯的效果將體現燒錄的質量,或者說是驅動器的讀盤能力。

  • CD光碟中的C1與C2解碼流程圖(點擊放大)

    在解碼時,其實就是CIRC解碼的反過程,原先C2先編碼,現在是C1先解碼,原先延遲的,解碼時不延遲,而原先不延遲的則會根據規則進行延遲以反交叉交錯進行數據還原。

    從流程圖中,我們可以發現,C1、C2解碼是必經的過程,而并不像某些文章中所說的,C1應付不了的錯誤才會交給C2解碼。事實上,不管C1解碼過程中有沒有錯誤,都要C2解碼。從編碼過程中,我們可以知道,兩者所解碼的對象完全不同,這也是為什么C1糾正不了的錯誤,C2反而能糾正,其實就是這個道理,而并不是說C2的糾錯級別比C1高。

    言歸正傳,C1與C2的糾錯標準是怎樣的呢?這里,業界使用了錯誤等級來對C1與C2解碼進行了規定,可簡寫為En1和En2,其中E代表Error(錯誤),n代表出現錯誤的次數,1代表一次C1解碼過程,2代表一次C2解碼過程。

    如果在一次C1解碼中,發現了一個錯誤字節,即為E11,如果發現了兩個錯誤字節即為E21,如果發現3個或更多的錯誤字節即為E31。其中,E11與E21都可以在C1階段糾正,而E31則不行。但是,不要忘了延遲交錯的設計,當前幀(F2)的錯誤字節是分散在跨度為109幀的28個幀中,經過反延遲后,這些錯誤的字節肯定不會再在同一幀中了,所以通過C2編碼仍然有可能被糾正。此時,如果在一次C2解碼中,發現了一個錯誤字節,即為E12,如果發現了兩個錯誤字節即為E22,如果發現了3個或更多的錯誤字節,即為E32。與E31一樣,E32也不能在C2解碼過程被糾正,由于C2是最后一個CIRC解碼器,所以E32的出現就意味著出現了一個不可修復的錯誤幀,因此它又稱為CU(C-Uncorrectable,不可修復),對于CD來說,CU是絕對要盡量避免出現的。

    在CD測試系統中,專門為C1與C2設定了狀態標記(Flag),通過它們即可知道當前的糾錯狀態:

  • 通過4個C1、C2狀態標記來表示糾錯狀態表

    有關CD光碟糾錯的業界標準

    在業界標準中,并沒有對C2錯誤水準進行明確規定,而是更多的對C1錯誤率進行了限定,這是因為如果C2錯誤肯定會有C1錯誤,但如果有C1錯誤,不見得會有C2錯誤。

    在CD-ROM的規范中規定,隨機錯誤的標準是,每10秒鐘出現C1解碼的錯誤(E11、E21或E31)幀數不超過3%。我們可以算一下,按一倍速1秒讀取75個扇區,每扇區98個幀計算,10秒鐘里共有10×75×98=73500個幀,3%就是2205個幀,約為平均一秒220個幀。由于一個壞幀就意味著一個壞塊(扇區),因此也可以認為塊錯誤率(BLER,BLock Error Rate)為每秒220個,我們可以理解為1秒鐘C1錯誤的總合(E11+E21+E31)不能超過220個。

    對于連續的突發性錯誤,CD-ROM規范中規定,當在C1解碼時出現E31,則視為不可修復的幀錯誤,連續出現C1不可修復錯誤的幀要少于7個。

    這里需要指出的是,BLER并不區分哪些塊是可以被修復的,哪些塊是不能被修復的,因為這里仍包括E31這一C1解碼器所不能修復的錯誤。所以低的BLER并不能說明光碟質量的好壞。比如一張光碟的BLER=210,但沒有E31錯誤,而另一張光碟的BLER=50,但全是E31錯誤,那么完全可以說后者的質量不及前者,雖然它的BLER更低,但有著E32的隱患。

    小常識:關于CD光碟的C3解碼

  • 在很多相關的文章中,大都提到CD光碟還會有一個C3解碼的過程,但這并不確切。

     在上文中,我們已經講到CD光碟有多種規范,而各規范中的扇區格式并不相同,有的有ECC校驗碼,有的沒有ECC校驗碼,而這個ECC校驗就是所謂的C3解碼,可見并不是每個CD光碟規格都具備。

    嚴格的說,扇區的ECC校驗并不是C3解碼,而是被稱為RSPC(Reed-Solomon Product-like Code,理德-所羅門乘積編碼)解碼。注意,CIRC是給每一幀進行校驗的編碼,而RSPC是給數據扇區進行校驗的編碼,兩者不要混淆。我們可以這樣理解:每個扇區——RSPC編碼——分成98個幀——每個幀再進行CIRC編碼——生成最后的 燒錄數據。

    在支援CD-ROM/-R/-RW的驅動器中,也都會有相應的RSPC解碼器,由于RSPC的存在,因此即使在C2解碼中出現了E32錯誤,仍有可能在RSPC解碼過程中進行修正。這也是為什么CD-ROM(Mode 1和Mode 2-Form 1)是針對計算機數據存儲而開發的原因,保證數據檔案的準確性遠比保證歌曲數據的準確性更重要。如果是普通的CD-Audio播放機,則不會有RSPC解碼器(Decoder)。

    請評分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    192.069.***.***
    192.069.***.***
    12
    001.085.019.***
    001.085.019.***
    發表于2012.10.17 22:22:24
    11
    113.076.***.***
    113.076.***.***
    acwell刪除此貼于2012.07.21 00:12:56
    發表于2012.07.20 23:54:27
    10
    058.100.123.***
    058.100.123.***
    發表于2012.06.08 19:08:16
    9
    119.166.***.***
    119.166.***.***
    怎样下载使用啊?
    發表于2012.05.03 18:41:37
    8
    180.125.120.***
    180.125.120.***
    發表于2012.02.18 16:15:40
    7
    03
    發表于2010.05.04 11:24:27
    6
    發表于2005.05.11 16:19:49
    5
    發表于2005.01.19 11:19:24
    3
    221.197.***.***
    221.197.***.***
    發表于2005.01.18 20:53:18
    1
    提示
    本貼不可匿名回復,回復等級為:1 ,您現在正處在潛水狀態
    回復
    驗證碼
    0476 為防止廣告機貼垃圾,不得已而為之
    表情
    正文
    京ICP備11010137號 京ICP證110276號 京公網安備110114000469號