光碟裡頭的東東Part3



贊助商連結


PIANO
2002-07-07, 10:04 AM
***介紹之前,容小弟先聲明粉重要的一點,那就是以下內容皆為小弟個人的心得,所以有些部份含有小弟自己的理解推敲,並無法保證所言絕對正確!同時亦因為如此,所以希望能有幸接受各位大大與先進的指誤,糾正或點解小弟的錯誤!****
光碟資料的保護技術
在part1裡已介紹過光碟用來儲存訊號的坑(pit),其長度是非常細小的,因此只要一個小污點或是損傷,便已經破壞掉一大堆坑面訊號,資料也將難以被完整保存。所以需要一個強而有力的保護技術來防範,甚至是可以進一步對錯誤做復原。
有關應用在光碟片資料的保護與修復技術,基本上應該稱為二種,第一種是防範損傷,稱為ci交插內跳(cross interleave),第二種則是驗錯修補,稱為rc李德索羅門編解碼(reed solomon code),但一般都是兩者合稱在一起,稱為circ,因為它們倆雖然目的不同,但應用在光碟資料上時,是兩者交互合作達到更強大的保護與修補。
ci的原理簡單說來,就是把原本一連串的資料,經分組後再打散,然後再分組。因為儲存在碟片上的第二次分組資料,其組內的各資料彼此是獨立的(也就是這些資料對照到原資料上時,是位在不連續的位置上),因此當外力破壞到這一組資料時,縱使整組都無一幸免全部損失,但在經過[反向解開ci]恢復成原始資料狀態後,等於是原資料上只有幾處小損壞。而以所有資料的大小看來,雖然ci前後的資料損失量相等,但ci前的損傷可是連續的,但ci後則是分散且變弱小。以下面這個例子來說:假設原資料是abcdef...z,四個一組,同時前四個資料被破壞,如果沒有ci的情況,則資料變成????efgh...z,請問你能很確定前四個是什麼嗎?但如果先加入ci,則資料經ci後是dgjmahkn...,被破壞後變成????ahkn...,一時也看不出前四個是什麼,但可用ci做反向解開得到abc?ef?hi?kl?mnop...,這時對於第一個?值,至少還可以保守地用前後的c與e去推測,得到[應該是d]的結果。(這樣嚐試找出錯誤並且修補回來的工作,就是由rc所負責,但以上述的例子來說,rc能解第一種情況的效果肯定比第二種差勁)

贊助商連結


takuro
2002-07-08, 09:31 AM
CIRC用來防止資料遺失的方法有兩種
一種就如piano兄所言
是用interleave
另一層保險是用redundancy
就是加入一定比例(約25%)的重複資料

PIANO
2002-07-08, 12:30 PM
RC的解編碼技術,本身就具有嚴謹的一套數學理論,不過以小弟個人的遭遇情況來看,每次為學員上課到此,幾乎都一面倒地夢周公,所以在此小弟略過枯燥的數學公式,舉個類似但比較簡單的例子來說明:
假設原資料有ABCDEF共6個值
開始進行RC編碼:
1.A+B+C+D+E+F=X
2.SET Y=-X (Y稱為第一編碼值)
3.A+2B+3C+4D+5E+6F=W
4.SET Z=-W (W稱為第二編碼值)
5.把原資料改成ABCDEFYW (共8個)
6.完成編碼,並將8個值寫入CD_ROM內
---------------------------------
讀取時得到ABCDEFYW(但此時尚無法確定有無錯誤產生)
開始解碼做驗錯修正
1.算出A+B+C+D+E+F+Y=M
2.算出A+2B+3C+4D+5E+6F+W=N
3.透過以下的法則可以找出錯誤,並做修正
3-1.M=N=0 --->資料全部沒有錯誤
3-2.M=N<>0 --->A錯了,同時真正原始的A應該是N
3-3.M=2N<>0 --->B錯了,同時真正原始的B應該是N
3-4.M=3N<>0 --->C錯了,同時真正原始的C應該是N
[[ 依此類推到M=6N<>0 ]]
3-8.M=0,N<>0 --->Z錯了,不影響原資料
3-9.M<>0,N=0 --->Y錯了,不影響原資料
4.經上述方式後,得到正確的原資料ABCDEF
------------------------------------
使用RC的好處,是其檢驗修正能力很有效,但壞處就是得再加入額外的編碼值,造成資料空間的使用率變差,就以PART2中所介紹的BLOCK來說,其真正可儲存的空間是具有33BYTE,但我們總習慣說只有24BYTE,因為其中的8BYTE被RC給佔用掉了(另一個BYTE是子頻)。而以此看來,RC是在所有格式的光碟當中都有使用,至於DATA CD的部份,換算一個FRAME應該等於2352BYTE,但卻又說只有2048BYTE,那是因為DATA CD還有第二重的RC,其編碼值又佔用掉2352BYTE中的一部份空間,造成只剩2048BYTE,這麼做是因為DATA CD的目的是儲存DATA,比娛樂用的AUDIO資料還重要,所以需要第二重的RC做保護。(第二重RC的實際解編碼方式,和第一重有些不太一樣,但其原理是相同的)
雖然CI和RC已經具有很好的保護能力,但實際上用在光碟片的CIRC,是更進一步對CIRC做交互混合應用,比較簡單地說應是RC+CI+RC,也就是在原始資料尚未CI前,先執行一次RC,會得到一組編碼值(A),然後再將原資料與A一起執行CI,得到一串內容不連續的資料列,再對此資料列(含有A)進行第二回RC,得到第二組編碼值(B),最後將這串資料與B,一同寫入光碟裡。
RC+CI+RC的交互應用,讓保護檢驗修正能力相對變得更強大,在B無法解開錯誤的時候,可以先不要解碼而做[反向CI],這時讓B無法解的嚴重錯誤,將因為反向CI而分散且變弱小,便可再用A去解開,同理對於A無法解的嚴重錯誤,則保留CI後的狀態,交給B去解,這樣A和B一搭一唱的反覆應用,可以讓原本極為嚴重的錯誤,一層層地被解開,讓[完全無法解開]的機率降低到兆分之一以下(如果小弟沒記錯應該是這個機率)
而當CIRC在解碼修正時,使用到A和B的次數,就是許多大大常說常看的C2C1值,它們代表該光碟在讀取過程中,資料錯誤的程度。

PIANO
2002-07-08, 12:36 PM
抱歉,更正一下:
4.SET Z=-W (W稱為第二編碼值)
-----> 4.SET Z=-W (Z稱為第二編碼值)
5.把原資料改成ABCDEFYW (共8個)
-----> 5.把原資料改成ABCDEFYZ (共8個)
讀取時得到ABCDEFYW(但此時尚無法確定有無錯誤產生)
-----> 讀取時得到ABCDEFYZ(但此時尚無法確定有無錯誤產生)
2.算出A+2B+3C+4D+5E+6F+W=N
-----> 2.算出A+2B+3C+4D+5E+6F+Z=N

tisnet
2002-07-13, 02:52 PM
看了三Part
可以少買幾本書和節省很多時間
謝謝啦

idiot
2002-07-13, 04:52 PM
pushing again