專利名稱:一種數(shù)據(jù)編碼及解碼方法
技術(shù)領(lǐng)域:
本發(fā) 明涉及數(shù)字通信技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)編碼及解碼方法。
背景技術(shù):
隨著數(shù)字通信業(yè)務(wù)的增長,數(shù)據(jù)傳輸?shù)乃俾什粩嗵岣?,信?hào)惡化問題也更加嚴(yán)重。直流平衡技術(shù),為一種通過對數(shù)據(jù)進(jìn)行編碼,使數(shù)據(jù)流中的I與O的個(gè)數(shù)相等的技術(shù),可以很好的解決信號(hào)惡化的問題,減少數(shù)據(jù)傳輸過程中的數(shù)據(jù)失真與錯(cuò)誤,提高數(shù)據(jù)傳輸?shù)目煽啃浴,F(xiàn)有實(shí)現(xiàn)直流平衡技術(shù)的編碼方法多種多樣,如8B/10B編碼、9B/10B編碼、6B/8B編碼、7B/8B編碼等,統(tǒng)稱mB/nB編碼,即將m位的二進(jìn)制碼塊,通過查詢編碼表,轉(zhuǎn)變?yōu)棣俏欢M(jìn)制的碼字。以8Β/10Β編碼為例,編碼過程具體為將連續(xù)的8位數(shù)據(jù)分為兩組,其中,高3位為第一組,進(jìn)行3Β/4Β編碼,即通過查找編碼表得到對應(yīng)的4位碼字;低5位為第二組,進(jìn)行5Β/6Β編碼,即通過查找編碼表得到對應(yīng)的6位碼字;將上述6位碼字附加在4位碼字后面,組成一組10位的碼字,即原8位數(shù)據(jù)對應(yīng)的用于傳輸?shù)拇a字為10位。上述所有編碼方法都有一個(gè)缺點(diǎn)所有待傳輸?shù)臄?shù)據(jù)都要通過查編碼表編為固定長度的代碼。不僅需要占用一定的空間存儲(chǔ)該編碼表,而且查表過程會(huì)占用大量的時(shí)間,降低編碼效率。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種數(shù)據(jù)編碼、解碼方法,以解決現(xiàn)有編碼方法存在的效率低的問題。為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案一種快速編碼方法,包括將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為碼塊I、碼塊2、……、碼塊Τ;其中,T為正整數(shù);讀取碼塊t,計(jì)算碼塊t前已編碼數(shù)據(jù)的不均等值Rp[t]及碼塊t的不均等值RdW ;其中,t e {1,2,……,T};當(dāng)|Rp[t]|彡2時(shí),采用直流平衡法獲取碼塊t的碼字;當(dāng)|Rp[t]| >2時(shí),采用校正法獲取碼塊t的碼字;其中,所述當(dāng)|Rp[t] I ( 2時(shí),采用直流平衡法獲取碼塊t的碼字,包括當(dāng)|Rp[t] I彡2且Rd[t]=0或2時(shí),在碼塊t前添加“0”,作為碼塊t的碼字;當(dāng)|Rp[t]|彡2且&[幻=-2時(shí),在碼塊t前添加“1”,作為碼塊t的碼字;當(dāng)|Rp[t]|彡2且Rd[t] = ±4時(shí),根據(jù)F[t]的值確定碼塊t的碼字;當(dāng)|Rp[t]|彡2且Rd[t] = ±6時(shí),使用移位累加運(yùn)算得到碼塊t的碼字;當(dāng)|Rp[t]|彡2且Rd[t] = ±8時(shí),對碼塊t進(jìn)行奇位取反運(yùn)算,在所述運(yùn)算結(jié)果前添加“1”,作為碼塊t的碼字;
所述當(dāng)|Rp[t] I > 2時(shí),采用校正法獲取碼塊t的碼字,包括當(dāng)&[幻> 2且Rd[t]=0,或者,Rp[t]〈_2且Rd[t] = 4或6時(shí),在碼塊t前添加“00”,作為碼塊t的碼字;當(dāng)Rp[t]〈_2 且 Rd[t]=0,或者,Rp[t] > 2 且 Rd[t] =-4 或-6 時(shí),在碼塊 t 前添加“11”,作為碼塊t的碼字;當(dāng)Rp [t]〈-2 且 Rd[t] =2,或者,Rp [t] > 2 J.Rd[t] = _2 時(shí),在碼塊 t 前添加“01 ”,作為碼塊t的10位碼字;當(dāng)Rp [t]〈-2 且 Rd[t] = -2 或-4,或者,Rp [t] > 2 且 Rd[t] =2 或 4 時(shí),對碼塊 t 取反,在所述取反結(jié)果前添加“10”,作為碼塊t的碼字;當(dāng)Rp [t]〈-2且Rd [t]= - 6,或者,Rp [t] >2且Rd [t] =6時(shí),先進(jìn)行移位與取反運(yùn)算, 再在碼塊t前添加“01”,作為碼塊t的10位碼字;當(dāng)|Rp[t]| >2且Rd[t] = ±8時(shí),在預(yù)設(shè)的8位數(shù)據(jù)串前添加“01”,作為碼塊t的碼字;其中,所述預(yù)設(shè)的8位數(shù)據(jù)串包括當(dāng)Rp[t]〈-2且Rd[t] =8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“11011011” ;當(dāng)Rp [t]〈-2且Rd [t] =-8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“ 10110111” ;當(dāng)&[幻>2且&[幻=8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“00100100”;當(dāng)&[幻>2且&[幻=-8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“01001000”。一種數(shù)據(jù)解碼方法,包括計(jì)算碼字串中已解碼部分的不均等值Rp[t] ;t為正整數(shù);若|Rp[t] I ( 2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字,對所述9位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t;若|Rp[t]| >2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字,對所述10位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t ;其中,所述對所述9位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,包括若所述9位碼字的首位為“0”,則將所述9位碼字的后8位碼字作為碼塊t ;若所述9位碼字的首位為“1”,后8位碼字的不均等值Rm[t]=_2,則將所述后8位碼字作為碼塊t ;若所述9位碼字的首位為“ 1”,后8位碼字的不均等值Rm[t] =0,則根據(jù)所述后8位碼字的奇偶分布值F[t]解碼,并將解碼結(jié)果作為碼塊t ;其中,所述根據(jù)F[t]解碼,包括若F[t]古0,則對所述后8位碼字進(jìn)行奇位取反,將所述奇位取反結(jié)果作為碼塊t ;所述對所述10位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,包括當(dāng)所述10位碼字的前兩位為“00”或“11”時(shí),將所述10位碼字的后8位碼字作為碼塊t ;當(dāng)所述10位碼字的前兩位為“10”時(shí),對所述10位碼字的后8位碼字取反,將所述取反結(jié)果作為碼塊t ;當(dāng)所述10位碼字的前兩位為“01”,后8位碼字的不均等值Rm[t] = ±2時(shí),將所述后8位碼字作為碼塊t ;當(dāng)所述10位碼字的前兩位為“01”時(shí),若所述后8位碼字為“10110111”或“01001000”,則將數(shù)據(jù)串“00000000”作為碼塊t ;若所述后8位碼字為“11011011”或“01001000 ”,則將數(shù)據(jù)串“ 11111111”作為碼塊t。從上述的技術(shù)方案可以看出,本發(fā)明首先對待編碼的數(shù)據(jù)以字節(jié)為單位分為若干碼塊,編碼時(shí),每讀取一個(gè)碼塊t,即計(jì)算一次所有已編碼數(shù)據(jù)的不均等值Rp[t],根據(jù)Rp[t]的大小對該碼塊進(jìn)行初步分類|Rp[t] I ( 2,說明碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較好,將碼塊t編為9位的碼字即可滿足數(shù)據(jù)的直流平衡性;I Rp [t] I > 2,說明碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較差,將碼塊t編為10位的碼字才能滿足數(shù)據(jù)的直流平衡性。初步分類后,即可結(jié)合碼塊t的不均等值Rd[t]的大小,確定是直接在碼塊t前添加相應(yīng)位數(shù)的二進(jìn)制數(shù)得到碼字,還是,先對碼塊t進(jìn)行奇位取反或取反運(yùn)算,再添加二進(jìn)制數(shù)得到碼字。所添加的二進(jìn)制數(shù)的具體值也根據(jù)碼塊t的不均等值Rd[t]確定,保證了碼塊t的碼字的直流平衡性。可見,本發(fā)明對數(shù)據(jù)進(jìn)行編碼的過程中,同時(shí)考慮了已編碼數(shù)據(jù)的整體直流平衡性和當(dāng)前待編碼的碼塊的直流平衡性,既能提高碼字傳輸時(shí)的可靠性,又能盡量減少碼字的位數(shù),節(jié)省傳輸時(shí)間,提高傳輸效率;同時(shí),本發(fā)明還通過直接對應(yīng)或簡單的取反、奇位取反運(yùn)算,得到各個(gè)碼塊的碼字,既節(jié)約了編碼表存儲(chǔ)所占用的空間,又免去了查表操作,大大減少了編碼時(shí)間,提高了編碼效率。因此,本發(fā)明實(shí)施例解決了現(xiàn)有編碼方法存在 的編碼效率低的問題。
圖I為本發(fā)明實(shí)施例提供的編碼方法的流程圖;圖2為本發(fā)明另一實(shí)施例提供的編碼方法的流程圖;圖3為本發(fā)明實(shí)施例提供的解碼方法的流程圖;圖4為本發(fā)明另一實(shí)施例提供的解碼方法的流程圖;圖5為本發(fā)明又一實(shí)施例提供的編碼方法的流程圖;圖6為本發(fā)明又一實(shí)施例提供的解碼方法的流程圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供了一種數(shù)據(jù)編碼、解碼方法,以解決現(xiàn)有編碼方法存在的編碼效率低的問題。參照圖1,本發(fā)明實(shí)施例提供的數(shù)據(jù)編碼方法,包括如下步驟SlOl :將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為碼塊I、碼塊2、……、碼塊T;S102 :逐個(gè)讀取碼塊t,計(jì)算碼塊t前已編碼數(shù)據(jù)的不均等值Rp[t]及碼塊t的不均等值Rd [t];T為正整數(shù),用于標(biāo)記分塊后所得碼塊的總個(gè)數(shù);t作為本方法的循環(huán)變量,在{1,2,……,T}中由小到大依次取值,當(dāng)取至t=T時(shí),說明此時(shí)的碼塊t為最后一個(gè)碼塊,對其編碼完畢后,對整個(gè)數(shù)據(jù)串的編碼即完成。一段數(shù)據(jù)的不均等值R是指該段數(shù)據(jù)中邏輯I和邏輯O的數(shù)量之差,若R > 0,則“ I”比“O”多R個(gè);R < 0,則“O”比“ I”多-R個(gè);R=0,則“ I”與“O”的個(gè)數(shù)相等。R的計(jì)
算公式為· 淇中,η為該段數(shù)據(jù)串的總位數(shù),h為該段數(shù)據(jù)串的第i位數(shù)據(jù)值。因此,令η為8,biSD[t]的第i位數(shù)據(jù)時(shí),可計(jì)算得到D [t]的不均等值
Rd[t] = 2*ElA _8。進(jìn)一步的,計(jì)算時(shí),亦可令η為D[t]前已編碼數(shù)據(jù)的總位數(shù),匕為其中的第i位,利用R的計(jì)算公式計(jì)算得到Rp[t];但為提高計(jì)算效率,當(dāng)已編碼數(shù)據(jù)較多時(shí),可采用累加法計(jì)算&[幻,即&[幻=&[卜1]+1^[卜1],其中,1^[卜1]為D[t]的碼字M[t]的不均等值。 S103 :判斷|Rp[t] I是否小于等于2 ;通過I Rp [t] I對碼塊t進(jìn)行分類若|Rp[t] I ( 2,則執(zhí)行步驟siorsioe,即碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較好時(shí),采用直流平衡法對碼塊t進(jìn)行編碼,得到9位的碼字即可保證碼塊t傳輸時(shí)的直流平衡性;若|Rp[t] I >2,則執(zhí)行步驟S107飛111,即碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較差時(shí),采用校正法對碼塊t進(jìn)行編碼,得到10位的碼字,用較多位數(shù)的碼字來保證碼塊t傳輸時(shí)的直流平衡性。S104:當(dāng)Rp[t]彡2且Rd[t]=0或2時(shí),直接在碼塊t前添加“0”,作為碼塊t的
碼字;S105:當(dāng)|Rp[t]|彡2且&[幻=-2時(shí),直接在碼塊t前添加“1”,作為碼塊t的碼字;S106:當(dāng)|Rp[t]|彡2且&[幻=±8時(shí),首先對碼塊t進(jìn)行奇位取反運(yùn)算,再在所述運(yùn)算結(jié)果前添加“I”,作為碼塊t的碼字;S107 ^Rp[t] >2 且 Rd[t]=0,或者,Rp[t]〈_2 且 Rd[t]=4 或 6 時(shí),直接在碼塊 t 前添加“00”,作為碼塊t的碼字;S108 :當(dāng) Rp[t]〈_2 且 Rd[t]=0,或者,Rp[t] > 2 且 Rd[t] =_4 或 _6 時(shí),直接在碼塊t前添加“ 11 ”,作為碼塊t的碼字;3109:當(dāng)&[幻〈-2且&[幻=2,或者,&[幻> 2且Rd[t] =_2時(shí),直接在碼塊t前添力口 “01”,作為碼塊t的10位碼字;SI 10:當(dāng) Rp[t]〈-2 且 Rd[t] =-2 或-4,或者,Rp[t] > 2 且 Rd[t] =2 或 4 時(shí),首先對碼塊t取反,再在該取反結(jié)果前添加“10”,作為碼塊t的碼字;Slll :當(dāng)|Rp[t]| > 2且Rd[t] = ±8時(shí),在預(yù)設(shè)的8位數(shù)據(jù)串前添加“01”,作為碼塊t的碼字。由上述技術(shù)方案可知,本發(fā)明實(shí)施例首先對待編碼的數(shù)據(jù)以字節(jié)為單位分為若干碼塊,編碼時(shí),每讀取一個(gè)碼塊t,即計(jì)算一次所有已編碼數(shù)據(jù)的不均等值Rp[t],根據(jù)Rp[t]的大小對該碼塊進(jìn)行初步分類|Rp[t] I ( 2,說明碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較好,將碼塊t編為9位的碼字即可滿足數(shù)據(jù)的直流平衡性;I Rp [t] I > 2,說明碼塊t之前的已編碼數(shù)據(jù)的直流平衡性較差,將碼塊t編為10位的碼字才能滿足數(shù)據(jù)的直流平衡性。初步分類后,即可結(jié)合碼塊t的不均等值Rd[t]的大小,確定是直接在碼塊t前添加相應(yīng)位數(shù)的二進(jìn)制數(shù)得到碼字,還是,先對碼塊t進(jìn)行奇位取反或取反運(yùn)算,再添加二進(jìn)制數(shù)得到碼字。所添加的二進(jìn)制數(shù)的具體值也根據(jù)碼塊t的不均等值Rd[t]確定,保證了碼塊t的碼字的直流平衡性??梢?,本發(fā)明實(shí)施例對數(shù)據(jù)進(jìn)行編碼的過程中,同時(shí)考慮了已編碼數(shù)據(jù)的整體直流平衡性和當(dāng)前待編碼的碼塊的直流平衡性,既能提高碼字傳輸時(shí)的可靠性,又能盡量減少碼字的位數(shù),節(jié)省傳輸時(shí)間,提高傳輸效率;同時(shí),本發(fā)明實(shí)施例還通過直接對應(yīng)或簡單的取反、奇位取反運(yùn)算,得到各個(gè)碼塊的碼字,既節(jié)約了編碼表存儲(chǔ)所占用的空間,又免去了查表操作,大大減少了編碼時(shí)間,提高了編碼速度。因此,本發(fā)明實(shí)施例解決了現(xiàn)有編碼方法存在的編碼效率低的問題。進(jìn)一步的,當(dāng)|Rp[t] I > 2時(shí),需要通過碼塊t的碼字對已編碼數(shù)據(jù)進(jìn)行校正,因此,上述實(shí)施例中預(yù)設(shè)的8位數(shù)據(jù)串包括如下4種當(dāng)Rp[t]〈_2且Rd[t]=8時(shí),說明已編碼數(shù)據(jù)中“O”的個(gè)數(shù)較多,碼塊t的各位均為“1”,故校正折中后,以“11011011”為該預(yù)設(shè)的8位數(shù)據(jù)串;當(dāng)Rp[t]〈-2且Rd[t] =-8時(shí),說明已編碼數(shù)據(jù)中“O”的個(gè)數(shù)較多,碼塊t的各位均為“0”,故校正折中后,以“10110111”為該預(yù)設(shè)的8位數(shù)據(jù)串;當(dāng)Rp[t]>2且Rd[t] = 8時(shí),說明已編碼數(shù)據(jù)中“I”的個(gè)數(shù)較多,碼塊t的各位均為“1”,故校正折中后,以“00100100”為該預(yù)設(shè)的8位數(shù)據(jù)串;當(dāng)Rp[t] >2且Rd[t] =-8時(shí),說明已編碼數(shù)據(jù)中“ I”的個(gè)數(shù)較多,碼塊t的各位均為“0”,故校正折中后,以“01001000”為該預(yù)設(shè)的8位數(shù)據(jù)串。參照圖2,本發(fā)明另一實(shí)施例提供的數(shù)據(jù)編碼方法的步驟為S201 :將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為碼塊I、碼塊2、……、碼塊T ;其中,T為正整數(shù),S202 :逐個(gè)讀取碼塊t,計(jì)算碼塊t前已編碼數(shù)據(jù)的不均等值Rp[t]及碼塊t的不均等值 Rd[t];其中,te{l,2,......,T};為方便敘述,本實(shí)施例以D[t]表示碼塊t,以M[t]表示碼塊t對應(yīng)的碼字。S203 :判斷|Rp[t] |是否小于等于2,若|Rp[t] | ( 2,則執(zhí)行步驟S204 S211,否則執(zhí)行步驟S212 S217,S204:當(dāng)Rp [t]彡2且Rd[t]=0或2時(shí),直接在D[t]前添加“O”,作為D [t]的碼字 M[t],即 M[t]=0*28+D[t];S205:當(dāng)|Rp[t]|彡2且Rd[t] = _2時(shí),直接在D [t]前添加“ 1”,作為D [t]的碼字 M[t],即 M[t]=l*28+D[t];S206 :當(dāng)Rp[t] |彡2且Rd[t] = ±8時(shí),首先對D[t]進(jìn)行奇位取反運(yùn)算,再在運(yùn)算結(jié)果前添加“1”,作為D [t]的碼字M[t];所謂“奇位取反”,即將數(shù)據(jù)串奇數(shù)位上的“I”置為“0”、“0”置為“I”。例如,對“00000000”進(jìn)行奇位取反,得到“10101010”;對“11111111”進(jìn)行奇位取反,得到“01010101”。應(yīng)用計(jì)算機(jī)執(zhí)行步驟S206時(shí),計(jì)算機(jī)會(huì)設(shè)置預(yù)置碼01010101”,奇位取反結(jié)果M(.)[t]= (/)[/] A .V) V (/)[/] a S),故 M[t]=l*28+M0[t] O
S207 :當(dāng)0<Rp[t]彡2且Rd[t] =_6時(shí),對D [t]進(jìn)行一次右移3位累加運(yùn)算,在該累加運(yùn)算結(jié)果前添加“I”作為D[t]的碼字M[t];本申請中涉及的移位運(yùn)算均為循環(huán)移位。所謂“右移累加運(yùn)算”,即循環(huán)右移的結(jié)果與原數(shù)據(jù)按位進(jìn)行邏輯或。假設(shè)上述對D[t]進(jìn)行一次右移3位累加運(yùn)算的結(jié)果為MJt],則 MJt] =D [t] V (0[幻>>3),故釘幻=1*28+厘。[幻。S208 :當(dāng)-2彡Rp[t] < O且Rd[t] =_6時(shí),對D[t]進(jìn)行兩次右移3位累加運(yùn)算,并對該累加運(yùn)算結(jié)果取反,在取反結(jié)果前添加“I”作為D[t]的碼字M[t];假設(shè)上述對D[t]進(jìn)行兩次右移3位累加運(yùn)算的結(jié)果為MJt],則M0[t]=D[t] V (D[t] 3) V (D [t]》6),故M[t]= I*2^+M0[t]。S209 :當(dāng)O彡Rp[t]彡2且Rd[t] =6時(shí),對D [t]取反,對取反結(jié)果進(jìn)行一次右移2位累加運(yùn)算,在該累加結(jié)果前添加“I”作為D [t]的碼字;
該累加結(jié)果M0[t]=/)[/]V (/)[/] 2),碼字 M[t]=l*28+M0[t]。S210^-2<Rp[t] < O且Rd [t] =6時(shí),對D [t]取反,對取反結(jié)果進(jìn)行兩次右移2位累加運(yùn)算,對該累加結(jié)果取反,在第二次取反運(yùn)算結(jié)果前添加“I”作為D[t]的碼字;該累加結(jié)果M0[t]=T^]V (7)\T] 2) V (D[i] 4),碼字M[t]= I。S211:當(dāng)|Rp[t]|彡2且Rd[t] = ±4時(shí),計(jì)算0[幻的奇偶分布值F[t],根據(jù)F[t]計(jì)算碼塊t的預(yù)編碼字,在該預(yù)編碼字前添加“1”,作為D [t]的碼字;所謂奇偶分布值,即數(shù)據(jù)串中偶數(shù)位上“I”的個(gè)數(shù)與奇數(shù)位上“I”的個(gè)數(shù)之差。利用計(jì)算機(jī)計(jì)算D[t]的奇偶分布值時(shí),仍取預(yù)置碼S= “01010101”,分別計(jì)算數(shù)據(jù)串D[t] Λ S和的不均等值R(D[t] Λ S)和用Ζ)|7]λ V) D[t]的奇偶分布值
Fft]=/^(/)[/] Λ S)- /、)(/)[/] A S ) O為敘述方便,首先進(jìn)行如下定義對原數(shù)據(jù)進(jìn)行第一運(yùn)算,即判斷原數(shù)據(jù)的低4位數(shù)據(jù)和高4位數(shù)據(jù)是否相同,若相同,則將原數(shù)據(jù)的高4位右移I位、低4位左移I位,并與原數(shù)據(jù)累加;若不同,則對原數(shù)據(jù)進(jìn)行右移I位累加運(yùn)算。上述根據(jù)F[t]計(jì)算碼塊t的預(yù)編碼字Mtl [t]的具體實(shí)施方式
為當(dāng)F[t] = O時(shí),對D[t]進(jìn)行奇位取反得到D[t]的預(yù)編碼字Mtl [t];即預(yù)編碼字IVl0[t]=(/)[_(]A .V) V (/)[/] A S、,進(jìn)而碼字 M[t]=l*28+M0[t] ο當(dāng)F[t]古0且&[幻=-4時(shí),以D[t]為原數(shù)據(jù)進(jìn)行第一運(yùn)算得到D[t]的預(yù)編碼字吣[幻;iF[t]古0且&[幻=4時(shí),對D[t]取反,以該取反結(jié)果為原數(shù)據(jù)進(jìn)行第一運(yùn)算,并對運(yùn)算結(jié)果進(jìn)行奇位取反,得到D [t]的預(yù)編碼字MJt];例如,D[t] = [11011101],滿足F[t]古O且Rd[t] =4,計(jì)算其碼字的過程如下先對取反得“00100010” ;再對以“00100010”為原數(shù)據(jù)進(jìn)行第一運(yùn)算,由于該數(shù)據(jù)串高4位“0010”與低4為“0010”相同,故將其高4位右移I位、低4位左移I位得到“00010100”,與原數(shù)據(jù)“00100010”累加得第一運(yùn)算結(jié)果“00110110” ;最后對運(yùn)算結(jié)果進(jìn)行奇位取反,得Mtl [t] = [10011100]。S212:iRp[t] > 2 且 Rd[t]=0,或者,Rp[t]〈-2 且 Rd[t]=4 或 6 時(shí),在 D[t]前添加“00”,作為0[幻的碼字M[t];
即此時(shí)D[t]的碼字 M[t]=0*29+D[t]。S213 :當(dāng)&[幻〈-2且&[幻=0,或者,&[幻 > 2 且 Rd[t]=_4 或 _6 時(shí),在 D[t]前添力口 “11”,作為D [t]的碼字M[t];即此時(shí)D[t]的碼字 M[t]=l*29+1*28+D[t]。S214 :當(dāng)&[幻〈-2 且 Rd[t]=2,或者,Rp[t] >2 且 Rd[t]=_2 時(shí),在 D[t]前添加“01”,作為D[t]的10位碼字M[t];即此時(shí)D[t]的碼字 M[t]=0*29+1*28+D[t]。S215 :當(dāng) Rp [t]〈-2 且 Rd[t]=_2 或 _4,或者,Rp [t] > 2 且 Rd [t] =2 或 4 時(shí),對 D[t]取反,在所述取反結(jié)果前添加“10”,作為D[t]的碼字M[t];即此時(shí)D[t]的碼字M[t]=l*29+ S216:當(dāng)|Rp[t]| >2且Rd[t] = ±8時(shí),在預(yù)設(shè)的8位數(shù)據(jù)串前添加“01”,作為D[t]的碼字M[t];具體的,Rp[t]<-2且Rd[t]=8時(shí),預(yù)設(shè)的8位數(shù)據(jù)串為“11011011”,即M[t] =
;Rp [t]〈-2 且 Rd [t] =-8 時(shí),預(yù)設(shè)的 8 位數(shù)據(jù)串為 “10110111”,即M[t] =
;Rp[t]>2 且 Rd[t]=8 時(shí),預(yù)設(shè)的 8 位數(shù)據(jù)串為“00100100”,即 M[t] =
;Rp[t]>2 且Rd[t]=-8 時(shí),預(yù)設(shè)的 8位數(shù)據(jù)串為“01001000”,即 M[t] =
。S217 :當(dāng)&[幻〈-2且&[幻=-6,或者,&[幻> 2且Rd[t]=6時(shí),對D[t]取反,將該取反結(jié)果進(jìn)行右移2位累加運(yùn)算,在運(yùn)算結(jié)果前添加“01”,作為D [t]的碼字M[t]。對D[t]取反后右移2位累加的結(jié)果為V (7ψ2),碼字M[t]=0*29+l*28+MQ[t]。上述編碼方法中,根據(jù)Rp[t]和Rd[t]的多種數(shù)值組合,列出了多種不同的計(jì)算碼字M[t]的方法,但其執(zhí)行的概率是不同的。實(shí)際應(yīng)用中,不需對D[t]進(jìn)行處理即可直接得到碼字M[t]的執(zhí)行概率約為71. 1%,如步驟S204 S205、S212 S214、S216,只需進(jìn)行取反或奇位取反就可得到M[t]的概率為13. 3%,如步驟S206、S215,其余要進(jìn)行多步運(yùn)算才能得到M[t]的概率只有15. 6%,如步驟S207飛211、S217,因此小概率的多步運(yùn)算不會(huì)對編碼效率產(chǎn)生太大影響。而整個(gè)編碼過程都避免了查詢編碼表,節(jié)約了編碼表存儲(chǔ)所占用的空間,減少了編碼時(shí)間,提高了編碼速度。參照圖5,本發(fā)明另一實(shí)施例提供的數(shù)據(jù)編碼方法的步驟為S51 :將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為0[1]、0[2]、...一、0[1'];其中,T為正整數(shù),552:讀取碼塊0[幻,計(jì)算0[幻前已編碼數(shù)據(jù)的不均等值Rp[t]及D[t]的不均等值 Rd[t] ;t e {1,2,……,T};S53 :判斷|Rp[t] I是否小于等于2 ;如果是,執(zhí)行步驟S54,否則執(zhí)行S55 ;S54 :判斷Rd[t]的大小,并選擇執(zhí)行S541 S546中的一個(gè)步驟;S541 |Rp[t]彡 2,Rd[t]=0 或 2 時(shí),D[t]的 8 位預(yù)編碼字 Mtl[t] =D [t];S5411 :在M0[t]前添加一位二進(jìn)制數(shù)“0”,得到對應(yīng)于D[t]的9位碼字M[t]=0*28+Mq [t],再執(zhí)行步驟S56 ;
S542 |Rp[t]彡 2,Rd[t]=_2 時(shí),D[t]的 8 位預(yù)編碼字 Mtl[t] = D[t];S5421 :在M0[t]前添加一位二進(jìn)制數(shù)“ 1”,得到對應(yīng)于D[t]的9位碼字M[t]=l*28+MQ[t],再執(zhí)行步驟S56 ;S543 |Rp[t]彡 2,Rd[t] = ±4 時(shí),計(jì)算 D[t]的奇偶分布值 F[t];S5431 :判斷F[t]是否等于O ;S5432 F[t]=0時(shí),對D[t]進(jìn)行奇位取反得到Mtl [t],再執(zhí)行S5421 ;
S5433 F[t] Φ O 時(shí),判斷 Rd[t]的大??;S5434 :Rd[t] =_4時(shí),若D[t]的高4位與低4位不同,則對D[t]進(jìn)行I次右移I位累加運(yùn)算得到Mjt],再執(zhí)行S5421 ;gD[t]的高4位與低4位相同,則將D[t]的高4位右移I位、低4位左移I位得至IJ M1 [t],并與D[t]累加得到M0[t],再執(zhí)行S5421 ;S5435 :Rd[t]=4時(shí),先對D[t]取反得到\12[丨]=萬[7]:若M2 [t]的高4位與低4位不同,則對M2 [t]進(jìn)行I次右移I位累加運(yùn)算得到M1 [t];若仏[幻的高4位與低4位相同,則將咖的高4位右移I位、低4位左移I位,并與D [t]累加得到M1W ;對咖進(jìn)行奇位取反得到M0[t] =( M![t]AS)v(MJt] Λ S ),再執(zhí)行 S5421 ;S544 |Rp[t]彡 2,Rd[t]=_6 時(shí),判斷 Rp[t]是否大于等于 O ;S5441 Rp [t]彡0,對D[t]進(jìn)行I次右移3位累加運(yùn)算得到Mtl [t],再執(zhí)行S5421 ;S5442 :Rp [t]〈0,對D [t]進(jìn)行2次右移3位累加運(yùn)算得到M1 [t],對M1 [t]取反得到M0[t],再執(zhí)行 S5421 ;S545 |Rp[t]彡 2,Rd[t] =6 時(shí),判斷 Rp[t]是否大于等于 O ;S5451 Rp [t]彡0,對D[t]取反后進(jìn)行I次右移2位累加運(yùn)算得到Mjt];再執(zhí)行S5421 ;S5452 :Rp [t]〈0,對D [t]取反后進(jìn)行2次右移2位累加運(yùn)算得到M1 [t],對M1 [t]取反得到Mtl [t];再執(zhí)行S5421 ;S546 |Rp[t] |彡2,Rd[t] = ±8時(shí),對D[t]進(jìn)行奇位取反運(yùn)算得到Mtl[t];再執(zhí)行S5421 ;S55 :判斷Rd[t]和Rp[t]的大小,并選擇執(zhí)行S551 S556中的一個(gè)步驟;S551:gRp[t] > 2 且 Rd[t] =0,或者,Rp[t]〈_2 且 Rd[t] =4 或 6,則 D[t]的 8 位預(yù)編碼字 Mtl [t] =D [t];S5511 :在MQ[t]前添加兩位二進(jìn)制數(shù)“00”,得到對應(yīng)于D[t]的10位碼字M[t]=0*29+Mq [t],再執(zhí)行步驟S56 ;S552 :若&[幻〈-2 且 Rd[t]=0,或者,Rp[t] > 2 且 Rd[t] =_4 或 _6,則 D [t]的 8 位預(yù)編碼字Mtl [t] =D [t];S5521 :在MQ[t]前添加兩位二進(jìn)制數(shù)“ 11”,得到對應(yīng)于D [t]的10位碼字M [t] =1*29+1*28+Mq [t],再執(zhí)行步驟 S56 ;S553 :若 Rp[t]〈-2 且 Rd[t] =-2 或-4,或者,Rp[t] > 2 且 Rd[t] =2 或 4,則對 D[t]取反得到Mtl [t];S5531 :在MQ[t]前添加兩位二進(jìn)制數(shù)“ 10”,得到對應(yīng)于D [t]的10位碼字M[t]=l*29+MQ[t],再執(zhí)行步驟 S56 ;S554 :若&[幻〈-2 且 Rd[t]=2,或者,Rp[t] > 2 且 Rd[t]=_2,則 D[t]的 8 位預(yù)編碼字 MQ[t]=D [t];S5541 在Mtl [t]前添加兩位二進(jìn)制數(shù)“01”,得到對應(yīng)于D [t]的10位碼字M[t]=0*29+l*28+MQ[t],再執(zhí)行步驟 S56 ;S555 :若&[幻〈-2且1^[幻=-6,或者,1^[幻> 2且Rd[t] =6,則對D [t]取反后進(jìn)行右移2位與運(yùn)算,得到MQ[t],再執(zhí)行S5541 ;S556 :若Rd[t] = ±8,則采用直接對應(yīng)法得到碼塊t的8位預(yù)編碼字,再執(zhí)行S5541。具體的,Rp[t]〈_2且 Rd[t]=8 時(shí),則 D[t]的 8 位預(yù)編碼字 Mtl[t]對應(yīng)“ 11011011”;Rp [t]〈-2 且 Rd [t] =-8 時(shí),則 D [t]的 8 位預(yù)編碼字 Mtl [t]對應(yīng) “10110111 ” ;Rp [t] >2 且 Rd [t] =8 時(shí),則 D [t]的 8 位預(yù)編碼字 Mtl [t]對應(yīng) “00100100” ; Rp [t] >2 且 Rd [t] =-8 時(shí),則 D [t]的 8 位預(yù)編碼字 Mtl [t]對應(yīng) “01001000”。S56 :將碼塊t的碼字M[t]置于碼塊t-Ι的碼字M[t-1]之后,組成碼字串;S57 :判斷t是否等于T,如果否,則將t的值加1,返回步驟S52。本發(fā)明上述實(shí)施例通過自動(dòng)循環(huán)的方式完成多個(gè)(T>1)碼塊的編碼,即首先t=l,讀取第一個(gè)碼塊D[l],按照圖I或2所示的步驟得到其對應(yīng)的碼字M[l],由于此時(shí)無已編碼數(shù)據(jù),故M[l]前無數(shù)據(jù),M[l]作為當(dāng)前碼字串;由于t古T,故將t的值加I后為2,即繼續(xù)讀取第二個(gè)碼塊D[2],重復(fù)執(zhí)行圖I或2所示的步驟,得到D[2]對應(yīng)的碼字M[2],將M[2]置于M[l]之后,組成當(dāng)前碼字串;若〖仍不等于T,繼續(xù)讀取第三個(gè)碼塊D[3]……如此循環(huán),直至t=T,編碼完成,M[l] M[T]組成的碼字串即為最終編碼結(jié)果。下面結(jié)合圖5所示的編碼方法,以待傳輸數(shù)據(jù)串“11111111 100110010010010011011101 11110101 11111110 11111110 00000000 11101101” 為例進(jìn)行編碼,以對本發(fā)明實(shí)施例作進(jìn)一步描述。首先,如步驟S51所述,對數(shù)據(jù)串以字節(jié)為單位分塊,得到D[l] = [llllllll],D [2] = [10011001],D [3] =
,D [4] = [11011101],D[5] = [11110101],D[6] = [11111110],D[7] = [11111110],D[8] =
,D[9]=[11101101]。即 T=9。然后,如步驟S52所述,讀取碼塊D [t],計(jì)算D[t]前已編碼數(shù)據(jù)的不均等值Rp [t]及D[t]的不均等值Rd [t]。第I 次循環(huán)(t=l):讀取第I個(gè)碼塊D[l] = [llllllll],由于D[l]前沒有已編碼的數(shù)據(jù),故Rp[l]=0,不均等值 R|[1]=2*ZL4 — 8=2*8-8=+8。經(jīng)判斷,|Rp[t] |=0彡2,且Rd[I] =8,故執(zhí)行步驟S546,對D[I]進(jìn)行奇位取反運(yùn)算得到Mtl[I] =
,在Mtl[I]前添加“I”得到D[I]對應(yīng)的碼字M[l]=l*28+M0[I] = [101010101]。繼續(xù)執(zhí)行步驟S56,由于不存在M
,故M[l]前無數(shù)據(jù),由于t=l〈T=9,故執(zhí)行S57,t的值加I,返回步驟S52,進(jìn)入第2次循環(huán)。第2 次循環(huán)(t=2):讀取第2 個(gè)碼塊 D[2] = [10011001],Rp[2]= 2* -9 =1 5 R^2]=
2*ZL^-8=2*4-8=0
由于Rp [2] |=1 ( 2,Rd[l]=0,故執(zhí)行步驟 S541,MQ[2]=D[2] = [10011001],進(jìn)而執(zhí)行步驟 S5411, M[2] =0*28+M0 [2] =
。繼續(xù)執(zhí)行步驟S56,將M[2]置于M[I]之后,由于t=2〈T=9,故執(zhí)行S57,t的值加1,返回步驟S53,進(jìn)入第3次循環(huán)。第3 次循環(huán)(t=3):讀取第3 個(gè)碼塊 D[3] =
,M[2]的不均等值^!^= 2*_9=-1,故Rp [3] =Rp [2] +Rm [2] =1+ (-1) =0,Rd [3] =2*2_8=_4。由于I Rp [3] |=0彡2,Rd[3] =-4,故執(zhí)行步驟S543,計(jì)算D [3]的奇偶分布值F[3],由于D[3]奇數(shù)位和偶數(shù)位上各有一個(gè)“1”,故F[3]=0,故執(zhí)行步驟S5432,對D[3]進(jìn)行奇位取反運(yùn)算得到 M0[3] = [10001110],進(jìn)而執(zhí)行步驟 S5421,M[3] = 1*28+M0[3] = [110001110]。繼續(xù)執(zhí)行步驟S56,將M[3]置于M[2]之后,由于t=3〈T=9,故執(zhí)行S57,t的值加1, 返回步驟S52,進(jìn)入第4次循環(huán)。第4 次循環(huán)(t=4):讀取第4 個(gè)碼塊 D[4] = [11011101],Rm[3] =2*5=1, Rp[4] =Rp[3]+Rm[3] =0+1 = 1,Rd[4]=2*6-8=40由于|Rp[4] |=1 ( 2,Rd[4] =4,故執(zhí)行步驟S543,計(jì)算D[4]的奇偶分布值F[4] =2古0,故執(zhí)行步驟S5433,Rd[4] =4,故執(zhí)行步驟S5435,對D[4]取反得M2[4] =
;M2[4]的低4位與高4位相同,故對M2[4]高4位右移I位、低4位左移I位得
,再與M2[4]累加得札[4] =
;對M1 [4]奇位取反得到M。[4] = [10011100],執(zhí)行步驟 S5421,得至Ij M[4]=l*28+M0[4] = [110011100]。繼續(xù)執(zhí)行步驟S56,將M[4]置于M[3]之后,由于t=4〈T=9,故執(zhí)行S57,t的值加1,返回步驟S52,進(jìn)入第5次循環(huán)。第5 次循環(huán)(t=5):讀取第5 個(gè)碼塊 D [5] = [11110101],Rm[4]=2*5-9=1, Rp [5] = Rp [4]+Rm [4] =1+1 =2,Rd[5]=2*6-8=4。由于|Rp[5] I =2 ( 2,Rd[5] =4,故執(zhí)行步驟S543,計(jì)算D[5]的奇偶分布值F[5] =2古0,故執(zhí)行步驟S5433,Rd[5] =4,故執(zhí)行步驟S5435,對D[5]取反得M2[5] =
;M2[5]的低4位與高4位不同,故對M2[5]進(jìn)行右移I位累加運(yùn)算得 M1 [5] =
;對 M1 [5]奇位取反得 M0 [5] = [10100101],執(zhí)行步驟 S5421,M[5]=l*28+M0[5] = [110100101]。繼續(xù)執(zhí)行步驟S56,將M[5]置于M[4]之后,由于t=5〈T=9,故執(zhí)行S57,t的值加1,返回步驟S52,進(jìn)入第6次循環(huán)。第6 次循環(huán)(t=6):讀取第6 個(gè)碼塊 D [6] = [11111110],Rm[5]=2*5-9=1, Rp [6] =Rp [5]+Rm [5] =2+1 = 3,Rd [6]=2*7-8=6o由于|Rp[6] I =3 > 2,Rd[6] =6,故執(zhí)行步驟S555,對D[6]取反后得M1 [6] =
,對M1 [6]進(jìn)行右移2位累加運(yùn)算得到凡[6] =
,再執(zhí)行步驟S5541 得 M[6]=0*29+1*28+Mq[6] =
。繼續(xù)執(zhí)行步驟S56,將M[6]置于M[5]之后,由于t=6〈T=9,故執(zhí)行S57,t的值加1,返回步驟S52,進(jìn)入第7次循環(huán)。第7 次循環(huán)(t=7):讀取第7 個(gè)碼塊 D[7] = [11111110],1^[6]=2*3-10 = -4,Rp [7] =Rp [6] +Rm [6] =3+ (-4) =_1,Rd [7] =2*7_8=6。由于Rd [6] =6,故執(zhí)行步驟S545,又_2彡Rp[7]=_l〈0,故執(zhí)行步驟S5452,對D[7]取反后得札[7] =
,對M1 [7]進(jìn)行2次右移2位累加運(yùn)算再取反得M0[7] = [10101110],再執(zhí)行步驟 S5421 # M[7]=l*28+M0[7] = [110101110]。繼續(xù)執(zhí)行步驟S56,將M[7]置于M[6]之后,由于t=7〈T=9,故執(zhí)行S57,t的值加1,返回步驟S52,進(jìn)入第8次循環(huán)。第8 次循環(huán)(t=8):
讀取第8 個(gè)碼塊 D [8] =
,Rni [7] =2*6-9=3,Rp [8] = Rp [7]+Rm [7] =-1+3=2,Rd[8] =-8,故執(zhí)行步驟S546,對D [8]進(jìn)行奇位取反運(yùn)算得到Mtl[8] = [10101010],再執(zhí)行步驟S5421,在 Mq[8]前添加 “I”得到 D[8]對應(yīng)的碼字 M[8]=1*28+MQ[8] = [110101010]。繼續(xù)執(zhí)行步驟S56,將M[8]置于M[7]之后,由于t=8〈T=9,故執(zhí)行S57,t的值加1,返回步驟S52,進(jìn)入第9次循環(huán)。第9 次循環(huán)(t=9):讀取第9 個(gè)碼塊 D[9] = [11101101],Rm[8]=2*5-9=1, Rp[9] =Rp[8]+Rm[8] =2+1 = 3,Rd [9] = 2*6-8=4。由于Rp[8]>2,Rd[9]=4,故執(zhí)行步驟 S215,對 D[9]取反得 MQ[9] =
,在M0[9]前添加 “10” 得到 D[9]對應(yīng)的碼字 M[9] = [1000010010]。繼續(xù)執(zhí)行步驟S56,將M[9]置于M[8]之后,由于t=9=T,故編碼結(jié)束。上述9個(gè)字節(jié)的數(shù)據(jù)串編碼后得到83位的碼字串“101010101#010011001#110001110#110011100#110100101#0101000001#110101110#110101010#1000010010”,該碼字串的不均等值Rp = Rp[9]+Rm[9] =3+(2*3-10) =-1,即|RP|彡2,達(dá)到了直流平衡的目的,保證了數(shù)據(jù)傳輸?shù)目煽啃?。為充分說明本發(fā)明實(shí)施例所述的方法,上述數(shù)據(jù)串的9個(gè)字節(jié)中,有6個(gè)字節(jié)屬于上文所述執(zhí)行概率為15. 6%的情況,故編碼過程計(jì)算較多,但實(shí)際應(yīng)用中,此情況極少。對應(yīng)于圖I所示的數(shù)據(jù)編碼方法,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)解碼方法,可在不查詢編碼表的情況下,完成對采用圖I所示的編碼方法得到的碼字串的解碼。參見圖3,該數(shù)據(jù)解碼方法包括S31 :計(jì)算碼字串中已解碼部分的不均等值&[幻;t為正整數(shù);S32:判斷|Rp[t]|是否小于等于2;當(dāng)|Rp[t]|彡2時(shí),執(zhí)行步驟S33 ;當(dāng)| Rp | >2時(shí),執(zhí)行步驟S34 ;S33 :當(dāng)|Rp[t] I ( 2時(shí),從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字,根據(jù)步驟S330f S3303中的條件選擇執(zhí)行其中之一,完成對讀取到的9位碼字的解碼;S3301 :若讀取到的9位碼字的首位為“0”,則將該9位碼字的后8位碼字作為碼塊t ;S3302 :若讀取到的9位碼字的首位為“ 1”,后8位碼字的不均等值Rm[t]=_2,則將后8位碼字作為碼塊t ;
S3303 :若讀取到的9位碼字的首位為“ 1”,后8位碼字的不均等值Rm[t] = 0,則根據(jù)后8位碼字的奇偶分布值F[t]解碼,并將解碼結(jié)果作為碼塊t ;具體的,根據(jù)F[t]解碼包括若F[t]古0,則對后8位碼字進(jìn)行奇位取反,將奇位取反結(jié)果作為碼塊t ;S34 :當(dāng)IrpI > 2時(shí),從碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字,根據(jù)步驟S340fS3404中的條件選擇執(zhí)行其中之一,完成對讀取到的10位碼字的解碼;S3401 :當(dāng)讀取到的10位碼字的前兩位為“00”或“11”時(shí),直接將該10位碼字的后8位碼字作為碼塊t ;S3402 :當(dāng)讀取到的10位碼字的前兩位為“ 10”時(shí),對該10位碼字的后8位碼字取反,將取反結(jié)果作為碼塊t;
S3403 :當(dāng)讀取到的10位碼字的前兩位為“01”,后8位碼字的不均等值Rm[t]=±2時(shí),直接將上述后8位碼字作為碼塊t ;S3404 :當(dāng)讀取到的10位碼字的前兩位為“01”時(shí),若其后8位碼字為“10110111”或“01001000”,則將數(shù)據(jù)串“00000000”作為碼塊t ;若其后8位碼字為“11011011”或“01001000 ”,則將數(shù)據(jù)串“ 11111111”作為碼塊t。上述解碼方法與圖I所示的編碼方法互為逆運(yùn)算,數(shù)據(jù)傳輸之前,通過圖I所示方法進(jìn)行編碼,碼字傳輸完成后,再通過上述解碼方法進(jìn)行解碼,得到原數(shù)據(jù)。編碼解碼過程均不需查詢編碼表,僅僅通過直接對應(yīng)或簡單的計(jì)算即可完成,節(jié)約了編碼表存儲(chǔ)所占用的空間,減少了編碼解碼時(shí)間,提高了編碼解碼速度。對應(yīng)于圖2所示的編碼方法,本發(fā)明另一實(shí)施例提供了一種數(shù)據(jù)解碼方法,可在不查詢編碼表的情況下,完成對采用圖2所示的編碼方法得到的碼字串的解碼。參見圖4,該數(shù)據(jù)解碼方法包括如下步驟S41 :計(jì)算碼字串中已解碼部分的不均等值&[幻;t為正整數(shù);S42:判斷|Rp[t]|是否小于等于2;當(dāng)|Rp[t]|彡2時(shí),執(zhí)行步驟S43 ;當(dāng)| Rp | >2時(shí),執(zhí)行步驟S44 ;S43 當(dāng)I Rp [t] I < 2時(shí),從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字,根據(jù)步驟S430f S4303中的條件選擇執(zhí)行其中之一,完成對讀取到的9位碼字的解碼;S4301 :若讀取到的9位碼字的首位為“0”,則將該9位碼字的后8位碼字M[t]作為碼塊t ;為方便敘述,本實(shí)施例中,以M[t]表示讀取到的碼字中的后8位碼字,D[t]表示解碼得到的原始數(shù)據(jù)的碼塊t。即本步驟解碼得到的原始數(shù)據(jù)的碼塊D[t]=M[t]。S4302 :若讀取到的9位碼字的首位為“ 1”,后8位碼字M[t]的不均等值Rm[t] =_2,則將M[t]作為碼塊t ;即,D[t]=M[t]。S4303 :若讀取到的9位碼字的首位為“ 1”,后8位碼字M[t]的不均等值Rm[t] =0,則根據(jù)后8位碼字M[t]的奇偶分布值F[t]解碼,并將解碼結(jié)果作為碼塊t ;具體的,根據(jù)F[t]解碼包括若F[t]古0,則對后8位碼字M[t]進(jìn)行奇位取反,將奇位取反結(jié)果作為碼塊t ;應(yīng)用計(jì)算機(jī)執(zhí)行奇位取反運(yùn)算時(shí),計(jì)算機(jī)會(huì)設(shè)置預(yù)置碼S= “01010101”,奇位取反結(jié)果D[t]= (A/[/] a Λ) V (Λ/[/] a Λ) 若F[t] =0,則對后8位碼字M[t]進(jìn)行I后置0運(yùn)算得到數(shù)據(jù)塊D1M ;^D1M的不均等值Rdl[t] =-4 ^D1M中的兩個(gè)“I”的位置之差Edl [t] =3時(shí), 中的后一個(gè)“I”右移一位,將該移位結(jié)果作為碼塊t;當(dāng)Rdl [t]=-2且Edl[t]古3且
Edl [t]關(guān)5時(shí),將D1 [t]作為碼塊t ;
當(dāng)Rdl[t]古-4或Edl[t]=5時(shí),對后8位碼字M[t]先進(jìn)行奇位取反運(yùn)算,再進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D2[t] ^D2[t]中的兩個(gè)“I”的位置之差Ed2[t] =3時(shí),將D2[t]中的后一個(gè)“ I ”右移一位,并對該移位結(jié)果取反,將取反結(jié)果作為碼塊t ;當(dāng)Ed2 [t]古3且Edl [t]古5時(shí),對D2 [t]取反,將取反結(jié)果作為碼塊t。例如,讀取至IJ 9位碼字“110011100”,首位為“1”,后8位碼字M[t]的不均等值Rm[t] =2*4-8=0,奇偶分布值 F[t] = 0,對 M[t]進(jìn)行 I 后置 O 運(yùn)算,得到 D1 [t] = [10010100],D1Lt]的不均等值Rdl[t]=2*3-8=-2 Φ -4,故對M[t]進(jìn)行奇位取反運(yùn)算得到“00110110”,再進(jìn)行I后置O運(yùn)算得到D2[t] =
,D2[t]中的兩個(gè)“ I”的位置之差Ed2 [t] =3,故將其后一個(gè)“I”右移一位得到“00100010”,再取反得到原始數(shù)據(jù)的碼塊D[t] = [11011101]。S4304 :若讀取到的9位碼字的首位為“1”,后8位碼字M[t]的不均等值Rm[t] = 2,則在后8位碼字M[t]中循環(huán)查找碼字串“01010”或“0110110”:若查找到碼字串“01010”,則將M[t]中碼字串“01010”的首位所在的位置置0,M[t]的其余7位置1,作為碼塊t;若查找到碼字串“0110110”,則將M[t]中碼字串“0110110”的首位所在的位置置1,M[t]的其余7位置O,作為碼塊t ;所謂循環(huán)查找,即若在8位數(shù)據(jù)串S[t]中循環(huán)查找數(shù)據(jù)串S,當(dāng)在S[t]中未查找到時(shí),繼續(xù)在S[t]+S[t]*28構(gòu)成的16位數(shù)據(jù)串中查找S。例如,讀取至IJ 9位碼字“110101110”,首位為“1”,后8為碼字M[t]的不均等值Rm[t] = 2*5-8=2,在 M[t]中循環(huán)查找碼字串 “01010” 或“0110110”,在 M[t]+M[t]*28 構(gòu)成的16位數(shù)據(jù)串“1010111010101110”的第8 12位(即M[t]的第8位及第I 4位)查找到了 “01010”,則將“01010”的首位所在的位置(即M[t]的第8位)置0,M[t]的其余7位(即M[t]的第廣7位)置1,得到該9位碼字對應(yīng)的原始數(shù)據(jù)碼塊D[t] = [11111110]。S4305 :若讀取到的9位碼字的首位為“ 1”,后8位碼字M[t]的不均等值Rm[t] =_4,則在后8位碼字M[t]中循環(huán)查找碼字串“101”或“1001”:若查找到碼字串“101”,則將M[t]中碼字串“101”的首位所在的位置置1,M[t]的其余7位置0,作為碼塊t ;若查找到碼字串“1001”,則將M[t]中碼字串“1001”的首位所在的位置置0,M[t]的其余7位置1,作為碼塊t ;S44 :當(dāng)IrpI > 2時(shí),從碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字,根據(jù)步驟S440fS4404中的條件選擇執(zhí)行其中之一,完成對讀取到的10位碼字的解碼;S4401 :當(dāng)讀取到的10位碼字的前兩位為“00”或“11”時(shí),直接將該10位碼字的后8位碼字M[t]作為碼塊t ;BP, D[t] = M[t] οS4402 :當(dāng)讀取到的10位碼字的前兩位為“10”時(shí),對該10位碼字的后8位碼字M[t]取反,將取反結(jié)果作為碼塊t ;SP,D[t]=ii7f7j。
S4403 :當(dāng)讀取到的10位碼字的前兩位為“01”,后8位碼字M[t]的不均等值Rm[t]=±2時(shí),直接將上述后8位碼字M[t]作為碼塊t;即,D[t]=M[t]。S4404:當(dāng)讀取到的10位碼字的前兩位為“01”時(shí),若其后8位碼字M[t]為“10110111”或“01001000”,則將數(shù)據(jù)串“00000000”作為碼塊t ;若其后8位碼字M[t]為“11011011” 或 “01001000”,則將數(shù)據(jù)串 “11111111” 作為碼塊 t ;S4405 :若讀取到的10位碼字的前兩位為“01”,則計(jì)算該10位碼字的后8位碼字M[t]的不均等值Rm[t];當(dāng)Rm[t]=4時(shí),若在后8位碼字M[t]中循環(huán)查找到數(shù)據(jù)串“010”,則將M[t]中碼字串“010”的首位所在的位置置1,其余7位置0,作為碼塊t ;
當(dāng)Rm[t]=_4時(shí),若在后8位碼字M[t]中循環(huán)查找到數(shù)據(jù)串“ 101”,則將M[t]中碼字串“101”的首位所在的位置置0,其余7位置1,作為碼塊t。上述解碼方法與圖2所示的編碼方法互為逆運(yùn)算,針對圖2所示的編碼方法中可能執(zhí)行的所有編碼步驟進(jìn)行解碼,還原其原始數(shù)據(jù),保證了由圖2編碼得到的碼字在整個(gè)編碼解碼過程都不需要編碼表,且準(zhǔn)確無誤地得到原始數(shù)據(jù),節(jié)約了編碼表存儲(chǔ)所占用的空間,減少了編碼、解碼時(shí)間,提高了編碼、解碼速度。相應(yīng)于圖5所示的編碼方法,本發(fā)明又一實(shí)施例提供了一種解碼方法,參見圖6,包括步驟S601 :計(jì)算碼字串中已解碼部分的不均等值&[幻,若|Rp[t]|彡2,則執(zhí)行步驟S602,否則執(zhí)行步驟S662 ;S602 :從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字M^t],當(dāng)Mjt]的首位是“O”時(shí)執(zhí)行步驟S603,否則執(zhí)行步驟S613 ;S603 :直接將Mtl [t]的后8位碼字M[t]作為碼塊D [t],執(zhí)行步驟S604 ;S613:計(jì)算并判斷MQ[t]的后8位碼字M[t]的不均等值Rm[t],若Rm[t]=_2,則執(zhí)行 S603,g Rm[t]=0,則執(zhí)行 S614,g Rm[t]=2 或-4,則執(zhí)行 S654 ;S614 :計(jì)算后8位碼字的奇偶分布值F[t],若F[t] Φ 0,則執(zhí)行步驟S615,否則執(zhí)行步驟S625 ;S615 :對后8位碼字M[t]做奇位取反運(yùn)算得碼塊D[t],執(zhí)行步驟S604 ;S625 :先對M[t]進(jìn)行“ I”后置“O”運(yùn)算得到D1 [t];S626:計(jì)算D1Et]的Rdl [t],當(dāng)Rdl [t] =_2時(shí)計(jì)算D1 [t]中兩個(gè)I的位置之差Edl [t];判斷是否滿足Rdl [t] =-2且Edl [t] Φ 5,若不滿足,則執(zhí)行步驟S645 ;若滿足上述條件,則當(dāng)Edl [t]關(guān)3時(shí),執(zhí)行步驟S627,當(dāng)Edl [t] =3時(shí),執(zhí)行步驟S637 ;S627 :將D1 [t]作為碼塊D。[t],進(jìn)入步驟S648 ;S637 :將D1 [t]后一位“ I ”后移I位得碼塊D0 [t],進(jìn)入步驟S648 ;S645 :先對M[t]進(jìn)行奇位取反運(yùn)算得到D2[t],再對D2[t]進(jìn)行“I”后置“O”運(yùn)算得到D1 [t],再次進(jìn)入步驟S626 ;S648:判斷是否執(zhí)行了步驟S645,若是,則對DJt]取反得到D[t],否則直接將D0W作為D[t];執(zhí)行步驟S604 ;S654 :在后8位碼字M[t]中循環(huán)查找到碼字串,根據(jù)查找到的碼字串串值,將碼字串的首位所在的位置和其余7位分別置“O”或“I” ;具體的,當(dāng)Rm[t]=2時(shí),若在后8位碼字M[t]中循環(huán)查找到碼字串“01010”,則將M[t]中碼字串的首位所在的位置置“0”,其余7位置“1”,得到8位碼塊D[t];若在后8位碼字M[t]中循環(huán)查找到碼字串“0110110”,則將M[t]中碼字串的首位所在的位置置“1”,其余7位置“0”,得到8位碼塊D[t];當(dāng)Rm[t] =-4時(shí),若在后8位碼字M[t]中循環(huán)查找到碼字串“101”,則將M[t]中碼字串的首位所在的位置置“1”,其余7位置“0”,得到8位碼塊D[t];若在后8位碼字M[t]中循環(huán)查找到碼字串“1001”,則將M[t]中碼字串的首位所在的位置置“0”,其余7位置“1”,得到D[t]。S662 :從碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字,當(dāng)前兩位碼字是“00”或“11”時(shí),執(zhí)行S663 ;當(dāng)前兩位碼字是“10”時(shí),執(zhí)行S673 ;當(dāng)前兩位碼字是“01”時(shí),計(jì)算并判斷后8位碼字M[t]的不均等值Rm[t],當(dāng)Rm[t] = ±2時(shí),執(zhí)行S673,當(dāng)Rm[t]=4時(shí),執(zhí)行S683,當(dāng)Rm [t] =-4時(shí),執(zhí)行S693 ; S663 :直接將后8位碼字M[t]作為碼塊D [t];S673 :對后8位碼字M[t]取反得到碼塊D [t];S683 :在后8位碼字M[t]中循環(huán)查找碼字串“010”,若找到,則執(zhí)行步驟S684 ;若未找到,則執(zhí)行步驟S685 ;S684 :將M[t]中碼字串“010”的首位所在的位置置“ 1”,其余7位置“0”,得到8位碼塊D[t];S693 :在后8位碼字M[t]中循環(huán)查找碼字串“ 101”,若找到,則執(zhí)行步驟S694 ;若未找到,則執(zhí)行步驟S685 ;S694 :將M[t]中碼字串“101”的首位所在的位置置“O”,其余7位置“1”,得到8位碼塊D[t];S685 :根據(jù)后8位碼字M[t]的值,對應(yīng)獲取碼塊D [t];具體的,當(dāng)后8位碼字M[t]為“10110111”時(shí),碼塊D[t]對應(yīng)為“00000000” ;當(dāng)后8 位碼字 M[t]為 “11011011” 時(shí),碼塊 D[t]對應(yīng)為 “11111111”;當(dāng)后8 位碼字 M[t]為 “01001000” 時(shí),碼塊 D [t]對應(yīng)為 “00000000” ;當(dāng)后8 位碼字 M[t]為 “00100100” 時(shí),碼塊 D [t]對應(yīng)為 “ 11111111”。S604 :將碼塊t置于碼塊t-Ι之后,即將D[t]置于D[t_l]之后,組成原始數(shù)據(jù)串;S605 :判斷是否還有未解碼的碼字串,如果是,則將t的值加1,返回步驟S601,進(jìn)入下一個(gè)循環(huán)。本發(fā)明上述實(shí)施例實(shí)現(xiàn)了解碼步驟的自動(dòng)循環(huán),可自動(dòng)完成對任意長度的碼字串的解碼。下面結(jié)合圖6所示解碼方法,以上文所述的編碼過程得到的83位碼字串“10101010101001100111000111011001110011010010101010000011101011101101010101000010010”
為例進(jìn)行解碼,以對本發(fā)明實(shí)施例作進(jìn)一步描述。第I 次循環(huán)(t=l):如步驟S601所述,碼字串中已解碼部分的不均等值,由于此時(shí)碼字串中沒有已解碼部分,故Rp [I] =0。
由于|Rp[l] I ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mq[1] = [101010101]進(jìn)行解碼。由于Mq[1]的首位為“1”,故執(zhí)行步驟S613,計(jì)算后8位碼字M[l]的不均等值Rm[l]=2*4-8=0,進(jìn)而執(zhí)行步驟S614,計(jì)算后8位碼字M[l]的奇偶分布值F[l]。由于F[l]=4#0,故執(zhí)行步驟S615,對M[l]進(jìn)行奇位取反,得到原始數(shù)據(jù)的第I個(gè)碼塊D[l] = [llllllll]。繼續(xù)執(zhí)行步驟S604,由于不存在D [O],故D [I]前無數(shù)據(jù),由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第2次循環(huán)解碼。第2 次循環(huán)(t=2):Mtl[I]的不均等值Rtl[I] =2*5-9=I,故碼字串中已解碼部分的不均等值 Rp [2]=Rp[I]+R0[I] =I0由于|Rp[2] |=1 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mq[2] =
,由于Mq[2]的首位為“0”,故執(zhí)行步驟S603,直接將后8位碼字作為原始數(shù)據(jù)的第2個(gè)碼塊,即D[2] = M[2] = [10011001]。繼續(xù)執(zhí)行步驟S604,將D[2]置于D[l]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第3次循環(huán)解碼。第3 次循環(huán)(t=3):M0 [2]的不均等值Rtl [2] = 2*4-9=_1,故碼字串中已解碼部分的不均等值&[3]=Rp [2]+R0 [2] =1-1=0。由于|Rp[3] |=0 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mtl [3] = [110001110],由于Mtl[3]的首位為“ I ”,故執(zhí)行步驟S613,計(jì)算后8位碼字M[3]的不均等值Rm[3]=2*4-8=0,進(jìn)而執(zhí)行步驟S614,計(jì)算后8位碼字M[3]的奇偶分布值F[3]。由于F[3]=-2#0,故執(zhí)行步驟S615,對M[l]進(jìn)行奇位取反,得到原始數(shù)據(jù)的第3 個(gè)碼塊 D [3] =
。繼續(xù)執(zhí)行步驟S604,將D[3]置于D[2]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第4次循環(huán)解碼。第4 次循環(huán)(t=4):M0 [3]的不均等值Rtl [3] =2*5_9=1,故碼字串中已解碼部分的不均等值Rp [4] =Rp [3]+Rtl [3] =0+1=1。由于I Rp[4] I =1 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字M0 [4] = [110011100],由于Mtl[4]的首位為“ I ”,故執(zhí)行步驟S613,計(jì)算后8位碼字M[4]的不均等值Rm[4]=2*4-8=0,進(jìn)而執(zhí)行步驟S614,計(jì)算后8位碼字M[4]的奇偶分布值F[4]。由于F[4]=0,故執(zhí)行步驟S625飛626,對M[4]進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D1 [4] = [10010100],并計(jì)算 D1 [4]的不均等值 Rdl [4] =2*3_8=_2 ^ _4,故執(zhí)行步驟 S645,對M [4]先進(jìn)行奇位取反運(yùn)算得到D2 [4] =
,再對D2 [4]進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊0^41 = ^0100100] O由于D1 [4]的不均等值Rdl [4] =_4,D1 [4]中的兩個(gè)“ I”的位置之差Edl [4]=3,故執(zhí)行步驟56374^0^4]中的后一個(gè)“I”右移I位得到Dtl[4] =
,并執(zhí)行步驟S648,由于執(zhí)行了 S645,對Dq[4]取反得到原始數(shù)據(jù)的第4個(gè)碼塊D[4] = [11011101]。繼續(xù)執(zhí)行步驟S604,將D[4]置于D[3]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第5次循環(huán)解碼。
第5 次循環(huán)(t=5):M0 [4]的不均等值Rtl [4] = 2*5_9=1,故碼字串中已解碼部分的不均等值Rp[5]=Rp [4]+R0 [4] =1+1=2。由于I Rp[5] I =2 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mtl [5] = [110100101],由于Mtl [5]的首位為“ 1”,故執(zhí)行步驟S613,計(jì)算后8位碼字M[5]的不均等值Rm[5]=2*4-8=0,進(jìn)而執(zhí)行步驟S614,計(jì)算后8位碼字M[5]的奇偶分布值F[5]。由于F[5]=0,故執(zhí)行步驟S625飛626,對M[5]進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D1 [5] =
,計(jì)算 D1 [5]的不均等值 Rdl [5] =2*3_8=_2 關(guān)-4,故執(zhí)行步驟 S645,對M[5]先進(jìn)行奇位取反運(yùn)算得到D2[5] =
,再對D2[5]進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D1 [5] =
,繼續(xù)執(zhí)行步驟S626,計(jì)算D1 [5]的不均等值Rdl [5] =-4,且D1 [5]中的兩個(gè)“I”的位置之差Edl [5] = 2關(guān)3且Edl [5]古5,故執(zhí)行步驟56274^0^5]作為Dtl [5],并執(zhí)行步驟S648.由于執(zhí)行了 S645,故需對DJ5]取反得到原始數(shù)據(jù)的第5個(gè)碼塊D[5]=[1110101]。
繼續(xù)執(zhí)行步驟5604,將0[5]置于D[4]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第6次循環(huán)解碼。第6 次循環(huán)(t=6):M0[5]的不均等值Rq[5] = 2*5_9=1,故碼字串中已解碼部分的不均等值Rp [6] =Rp [5]+Rtl [5] =2+1=3。由于|Rp[6] I =3>2,故執(zhí)行步驟S662,從碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字Mq[6] =
。由于Mq[6]的前兩位為“01”,且后8位碼字M[6]的不均等值Rm[6]=2*2-8=-4,故執(zhí)行步驟S693,在M[6]中循環(huán)查找碼字串“ 101”。在M[6]的第8^2位上查找到該碼字串,故執(zhí)行步驟S694,將M [6]的第8位置0,其余7位置1,得到原始數(shù)據(jù)的第6個(gè)碼塊D[6] = [11111110]。繼續(xù)執(zhí)行步驟5604,將0[6]置于D[5]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第7次循環(huán)解碼。第7 次循環(huán)(t=7):M0[6]的不均等值RQ[6]=2*3-10=-4,故碼字串中已解碼部分的不均等值Rp[7]=Rp [6]+R0 [6] =3-4=-1。由于|Rp[7] |=1 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mq[7] = [110101110]。由于Mq[7]的首位為“ 1”,故執(zhí)行步驟S613,計(jì)算后8位M[7]的不均等值RJ7] = 2*5-8=2,進(jìn)而執(zhí)行步驟S654 S655,在M[7]中循環(huán)查找碼字串“01010”或“0110110”。在M[7]的第8 4位查找到了 “01010”,則將M[7]的第8位置0,其余7位置1,得到原始數(shù)據(jù)的第7個(gè)碼塊D[7] = [11111110]。繼續(xù)執(zhí)行步驟5604,將0[7]置于D[6]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第8次循環(huán)解碼。第8 次循環(huán)(t=8):M0 [7]的不均等值Rq[7]=2*6_9=3,故碼字串中已解碼部分的不均等值Rp [8] =Rp [7]+R0 [7] =-1+3=2。由于|Rp[8] =2 ( 2,故執(zhí)行步驟S602,從碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字Mtl [8] = [110101010]。由于Mtl [7]的首位為“ I ”,故執(zhí)行步驟S613,計(jì)算后8位M[7]的不均等值Rm[7] = 2*4-8=0,進(jìn)而執(zhí)行步驟S614,計(jì)算后8位碼字M[8]的奇偶分布值F[8]。由于F[8]=-4 Φ 0,故執(zhí)行步驟S615,對M[8]進(jìn)行奇位取反,得到原始數(shù)據(jù)的第8個(gè)碼塊 D [8] =
。繼續(xù)執(zhí)行步驟S604,將D[8]置于D[7]之后,由于仍有未解碼碼字,故執(zhí)行步驟S605,t的值加I,返回步驟S601,進(jìn)入第9次循環(huán)解碼。第9 次循環(huán)(t=9):M0 [8]的不均等值Rq[8]=2*5_9=1,故碼字串中已解碼部分的不均等值Rp [9] =Rp [8]+Rtl [8] =2+1=3。由于|Rp[9] I =3>2,故執(zhí)行步驟S662,從碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字M。[9] = [1000010010]。由于Mtl[9]的前兩位為“ 10”,故執(zhí)行步驟S663,對M0[9]的后8位取反得到原始數(shù)據(jù)的第9個(gè)碼塊D[9] = [11101101]。繼續(xù)執(zhí)行步驟S604,將D[9]置于D[8]之后,由于沒有未解碼碼字,故解碼結(jié)束。上述解碼過程共得到9個(gè)字節(jié)的原始數(shù)據(jù)[11111111]、[10011001]、
、[11011101]、[11110101]、[11111110]、[11111110]、
、[11101101]。與上文編碼前的數(shù)據(jù)串一致,故解碼準(zhǔn)確無誤,且完全不需要編碼表,僅僅通過直接對應(yīng)或簡單計(jì)算即完成,充分說明了本發(fā)明所述的編碼解碼方法能節(jié)約編碼表存儲(chǔ)所占用的空間,減少編碼、解碼時(shí)間,提高編碼、解碼速度。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件完成,所述的程序可存儲(chǔ)于各類計(jì)算機(jī)的可讀取存儲(chǔ)介質(zhì)中,所述程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random AccessMemory, RAM)等。對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。權(quán)利要求
1.一種快速編碼方法,其特征在于,包括 將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為碼塊I、碼塊2、……、碼塊T ;其中,T為正整數(shù); 讀取碼塊t,計(jì)算碼塊t前已編碼數(shù)據(jù)的不均等值Rp[t]及碼塊t的不均等值Rd[t];其中,t e {1,2, ......,T}; 當(dāng)|Rp[t]| <2時(shí),采用直流平衡法獲取碼塊t的碼字;當(dāng)|Rp[t]| >2時(shí),采用校正法獲取碼塊t的碼字;其中, 所述當(dāng)|Rp[t] I ( 2時(shí),采用直流平衡法獲取碼塊t的碼字,包括 當(dāng)|Rp[t]|≤2且Rd[t]=0或2時(shí),在碼塊t前添加“O”,作為碼塊t的碼字; 當(dāng)|Rp[t]|≤2且Rd[t]=-2時(shí),在碼塊t前添加“1”,作為碼塊t的碼字; 當(dāng)|Rp[t]| <2且&[幻=±8時(shí),對碼塊t進(jìn)行奇位取反運(yùn)算,在所述運(yùn)算結(jié)果前添加“ I ”,作為碼塊t的碼字; 所述當(dāng)|Rp[t] I > 2時(shí),采用校正法獲取碼塊t的碼字,包括 當(dāng)Rp[t] > 2且Rd[t]=0,或者,Rp [t]〈-2且Rd [t] =4或6時(shí),在碼塊t前添加“00”,作為碼塊t的碼字;當(dāng) Rp [t]〈-2 且 Rd[t]=0,或者,Rp [t] > 2 且 Rd [t] =-4 或-6 時(shí),在碼塊 t 前添加 “11”,作為碼塊t的碼字; 當(dāng)Rp[t]〈-2且Rd[t] =2,或者,Rp[t] > 2且Rd[t]=-2時(shí),在碼塊t前添加“01”,作為碼塊t的10位碼字; 當(dāng)Rp[t]〈-2且Rd[t] = -2或-4,或者,Rp[t] > 2且Rd[t]=2或4時(shí),對碼塊t取反,在所述取反結(jié)果前添加“10”,作為碼塊t的碼字; 當(dāng)|Rp[t]| >2且Rd[t] = ±8時(shí),在預(yù)設(shè)的8位數(shù)據(jù)串前添加“01”,作為碼塊t的碼字;其中,所述預(yù)設(shè)的8位數(shù)據(jù)串包括 當(dāng)Rp[t]〈-2且Rd[t] =8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“11011011”; 當(dāng)Rp [t]〈-2且Rd [t] =-8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“ 10110111” ; 當(dāng)Rp[t] >2且Rd[t] =8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“00100100” ; 當(dāng)Rp[t] >2且Rd[t] =-8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“01001000”。
2.根據(jù)權(quán)利要求I所述的編碼方法,其特征在于,所述當(dāng)|Rp[t]|彡2時(shí),采用直流平衡法獲取碼塊t的碼字,還包括 當(dāng)O < Rp[t] < 2且Rd[t] =-6時(shí),對碼塊t進(jìn)行一次右移3位累加運(yùn)算,在所述累加運(yùn)算結(jié)果前添加“ I ”作為碼塊t的碼字; 當(dāng)-2<Rp[t] <0且&[幻=_6時(shí),對碼塊t進(jìn)行兩次右移3位累加運(yùn)算,并對所述累加運(yùn)算結(jié)果取反,在所述取反結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)O < Rp[t] < 2且Rd[t] = 6時(shí),對碼塊t取反,對所述取反結(jié)果進(jìn)行一次右移2位累加運(yùn)算,在所述累加結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)-2 < Rp[t] < O且Rd[t] =6時(shí),對碼塊t取反,對所述取反結(jié)果進(jìn)行兩次右移2位累加運(yùn)算,對所述累加結(jié)果取反,在第二次取反運(yùn)算結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)|Rp[t] |<2且&[幻=±4時(shí),利用公式戸田=/《/)[/]八5()-尺(/)[/]八文)計(jì)算碼塊七的奇偶分布值F[t],根據(jù)F[t]計(jì)算碼塊t的預(yù)編碼字,在所述預(yù)編碼字前添加“1”,作為碼塊t的碼字;其中,預(yù)置碼S為“01010101”,D [t]為碼塊t,R(D[t] Λ S)為數(shù)據(jù)串D [t] Λ S的不均等值,
3.根據(jù)權(quán)利要求I所述的編碼方法,其特征在于,所述當(dāng)|Rp[t]|>2時(shí),采用校正法獲取碼塊t的碼字,還包括 當(dāng)Rp[t]〈-2且Rd[t] =-6,或者,Rp [t] > 2且Rd[t] =6時(shí),對碼塊t取反,將所述取反結(jié)果進(jìn)行右移2位累加運(yùn)算,在所述運(yùn)算結(jié)果前添加“01”,作為碼塊t的碼字。
4.根據(jù)權(quán)利要求Γ3任一項(xiàng)所述的編碼方法,其特征在于,在得到碼塊t的碼字后,還包括 將碼塊t的碼字置于碼塊t-Ι的碼字之后,組成碼字串; 判斷t是否等于T,如果否,則將t的值加1,返回執(zhí)行所述讀取碼塊t。
5.根據(jù)權(quán)利要求Γ3任一項(xiàng)所述的編碼方法,其特征在于,所述計(jì)算Rd[t]具體為令不均等值計(jì)算公式
6.一種數(shù)據(jù)解碼方法,其特征在于,基于一種數(shù)據(jù)編碼方法; 所述數(shù)據(jù)編碼方法包括 將需要傳輸?shù)臄?shù)據(jù)以字節(jié)為單位分塊,并依次記為碼塊I、碼塊2、……、碼塊T ;其中,T為正整數(shù); 讀取碼塊t,計(jì)算碼塊t前已編碼數(shù)據(jù)的不均等值Rp[t]及碼塊t的不均等值Rd[t];其中,t e {1,2, ......,T}; 當(dāng)|Rp[t]| <2時(shí),采用直流平衡法獲取碼塊t的碼字;當(dāng)|Rp[t]| >2時(shí),采用校正法獲取碼塊t的碼字;其中, 所述當(dāng)|Rp[t] I ( 2時(shí),采用直流平衡法獲取碼塊t的碼字,包括 當(dāng)|Rp[t]|≤2且Rd[t]=0或2時(shí),在碼塊t前添加“0”,作為碼塊t的碼字; 當(dāng)|Rp[t]|≤2且Rd[t]=-2時(shí),在碼塊t前添加“1”,作為碼塊t的碼字; 當(dāng)|Rp[t]| ≤2且&[幻=±8時(shí),對碼塊t進(jìn)行奇位取反運(yùn)算,在所述運(yùn)算結(jié)果前添加“ I ”,作為碼塊t的碼字;所述當(dāng)|Rp[t] I > 2時(shí),采用校正法獲取碼塊t的碼字,包括 當(dāng)Rp[t] > 2且Rd[t]=0,或者,Rp [t]〈-2且Rd [t] =4或6時(shí),在碼塊t前添加“00”,作為碼塊t的碼字;當(dāng) Rp [t]〈-2 且 Rd[t]=0,或者,Rp [t] > 2 且 Rd [t] =-4 或-6 時(shí),在碼塊 t 前添加 “11”,作為碼塊t的碼字; 當(dāng)Rp[t]〈-2且Rd[t] =2,或者,Rp[t] > 2且Rd[t]=-2時(shí),在碼塊t前添加“01”,作為碼塊t的10位碼字; 當(dāng)Rp[t]〈-2且Rd[t] = -2或-4,或者,Rp[t] > 2且Rd[t]=2或4時(shí),對碼塊t取反,在所述取反結(jié)果前添加“10”,作為碼塊t的碼字;當(dāng)|Rp[t]| >2且&[幻=±8時(shí),在預(yù)設(shè)的8位數(shù)據(jù)串前添加“01”,作為碼塊t的碼字;其中,當(dāng)Rp[t]〈_2且Rd[t]=8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“11011011”;當(dāng)Rp[t]〈_2且Rd [t] =-8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“ 10110111”;當(dāng)Rp [t] >2且Rd [t] =8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“00100100”;當(dāng)&[幻>2且1^[幻=_8時(shí),所述預(yù)設(shè)的8位數(shù)據(jù)串為“01001000”;所述數(shù)據(jù)解碼方法包括 計(jì)算碼字串中已解碼部分的不均等值&[幻;t為正整數(shù); 若|Rp[t]| <2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字,對所述9位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t;若|Rp[t]| >2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字,對所述10位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t ;其中, 所述對所述9位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,包括 若所述9位碼字的首位為“0”,則將所述9位碼字的后8位碼字作為碼塊t ; 若所述9位碼字的首位為“1”,后8位碼字的不均等值Rm[t]=-2,則將所述后8位碼字作為碼塊t ; 若所述9位碼字的首位為“1”,后8位碼字的不均等值Rm[t]=0,則根據(jù)所述后8位碼字的奇偶分布值F[t]解碼,并將解碼結(jié)果作為碼塊t ;其中, 所述根據(jù)F[t]解碼,包括若F[t]古0,則對所述后8位碼字進(jìn)行奇位取反,將所述奇位取反結(jié)果作為碼塊t ; 所述對所述10位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,包括 當(dāng)所述10位碼字的前兩位為“00”或“11”時(shí),將所述10位碼字的后8位碼字作為碼塊t ; 當(dāng)所述10位碼字的前兩位為“10”時(shí),對所述10位碼字的后8位碼字取反,將所述取反結(jié)果作為碼塊t ; 當(dāng)所述10位碼字的前兩位為“01”,后8位碼字的不均等值Rm[t] = ±2時(shí),將所述后8位碼字作為碼塊t ; 當(dāng)所述10位碼字的前兩位為“O I”時(shí),若所述后8位碼字為“10110111”或“01001000”,則將數(shù)據(jù)串“00000000”作為碼塊t ;若所述后8位碼字為“11011011”或“01001000”,則將數(shù)據(jù)串“11111111”作為碼塊t。
7.根據(jù)權(quán)利要求6所述的解碼方法,其特征在于,所述編碼方法還包括 當(dāng)|Rp[t]| <2且&[幻=±4時(shí),計(jì)算碼塊t的奇偶分布值F[t],根據(jù)F[t]計(jì)算碼塊t的預(yù)編碼字,在所述預(yù)編碼字前添加“1”,作為碼塊t的碼字;其中, 所述根據(jù)F[t]計(jì)算碼塊t的預(yù)編碼字的具體方法為 當(dāng)F[t] = O時(shí),對碼塊t進(jìn)行奇位取反得到碼塊t的預(yù)編碼字; 當(dāng)F[t]古O且Rd[t] = -4時(shí),以碼塊t為原數(shù)據(jù)進(jìn)行第一運(yùn)算得到碼塊t的預(yù)編碼字; 當(dāng)F[t] Φ O且Rd[t]=4時(shí),對碼塊t取反,以所述取反結(jié)果為原數(shù)據(jù)進(jìn)行所述第一運(yùn)算,并對運(yùn)算結(jié)果進(jìn)行奇位取反,得到碼塊t的預(yù)編碼字; 所述第一運(yùn)算具體為判斷所述原數(shù)據(jù)的低4位數(shù)據(jù)和高4位數(shù)據(jù)是否相同,若相同,則將所述原數(shù)據(jù)的高4位右移I位、低4位左移I位,并與所述原數(shù)據(jù)累加;若不同,則對所述原數(shù)據(jù)進(jìn)行右移I位累加運(yùn)算; 所述編碼方法中,所述計(jì)算所述后8位碼字的奇偶分布值F[t]具體為利用公式FLtJ= R(MV1 A S) - R(M[i\ A .V )if# F[t];其中,S 為預(yù)置碼“01010101”,M[t]為所述后8位碼字,R(M[t] AS)為數(shù)據(jù)串M[t] Λ S的不均等值,Λ(Μ[ ] λ f)為數(shù)據(jù)串Α [ ] Λ 5的不均等值; 所述根據(jù)F[t]解碼還包括若F[t] =0,則對所述后8位碼字進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D1 [t];iDjt]的不均等值Rdl[t] =-4 ^D1M中的兩個(gè)“I”的位置之差Edl[t]=3時(shí),將D1W中的后一個(gè)“I”右移一位,將所述移位結(jié)果作為碼塊t;當(dāng)Rdl[t]=-2且Edl [t]古3且Edl [t]關(guān)5時(shí),將D1 [t]作為碼塊t ; 當(dāng)Rdl [t] Φ -4或Edl [t] =5時(shí),對所述后8位碼字先進(jìn)行奇位取反運(yùn)算,再進(jìn)行I后置O運(yùn)算得到數(shù)據(jù)塊D2[t] @D2[t]中的兩個(gè)“I”的位置之差Ed2[t] =3時(shí),將D2[t]中的后一個(gè)“ I ”右移一位,并對所述移位結(jié)果取反,將所述取反結(jié)果作為碼塊t ;當(dāng)Ed2 [t]古3且Edl [t]古5時(shí),對D2 [t]取反,將所述取反結(jié)果作為碼塊t。
8.根據(jù)權(quán)利要求6所述的解碼方法,其特征在于,所述編碼方法還包括 當(dāng)O < Rp[t] < 2且Rd[t] =-6時(shí),對碼塊t進(jìn)行兩次右移3位累加運(yùn)算,在所述累加結(jié)果前添加“ I ”作為碼塊t的碼字; 當(dāng)-2 < Rp[t] < O且Rd[t] = -6時(shí),對碼塊t進(jìn)行兩次右移3位累加運(yùn)算,對所述累加結(jié)果取反,在所述取反結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)O < Rp[t] < 2且Rd[t] = 6時(shí),對碼塊t取反,對所述取反結(jié)果進(jìn)行一次右移2位累加運(yùn)算,在所述累加結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)-2 < Rp[t] < O且Rd[t] =6時(shí),對碼塊t取反,對所述取反結(jié)果進(jìn)行兩次右移2位累加運(yùn)算,對所述累加結(jié)果取反,在第二次取反運(yùn)算結(jié)果前添加“I”作為碼塊t的碼字; 當(dāng)Rp[t]〈-2且Rd[t] =-6,或者,Rp [t] > 2且Rd[t] =6時(shí),對碼塊t取反,將所述取反結(jié)果進(jìn)行右移2位累加運(yùn)算,在所述運(yùn)算結(jié)果前添加“01”,作為碼塊t的碼字;所述解碼方法中,對所述9位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,還包括若所述9位碼字的首位為“1”,后8位碼字的不均等值Rm[t]=2,則在所述后8位碼字中循環(huán)查找碼字串“01010”或“0110110” 若查找到碼字串“01010”,則將所述后8位碼字中碼字串“01010”的首位所在的位置置0,所述后8位碼字的其余7位置1,作為碼塊t ;若查找到碼字串“0110110”,則將碼字串“0110110”的首位所在的位置置1,所述后8位碼字的其余7位置O,作為碼塊t ; 若所述9位碼字的首位為“1”,后8位碼字的不均等值Rm[t]=-4,則在所述后8位碼字中循環(huán)查找碼字串“ 101”或“ 1001”:若查找到碼字串“ 101”,則將碼字串“ 101”的首位所在的位置置1,所述后8位碼字的其余7位置0,作為碼塊t ;若查找到碼字串“1001”,則將碼字串“1001”的首位所在的位置置0,所述后8位碼字的其余7位置1,作為碼塊t ; 對所述10位碼字進(jìn)行解碼,得到解碼結(jié)果,記為碼塊t,還包括 若所述10位碼字的前兩位為“01”,則計(jì)算所述10位碼字的后8位碼字的不均等值Rm[t]; 當(dāng)Rm[t]=4時(shí),若在所述后8位碼字中循環(huán)查找到數(shù)據(jù)串“010”,則將所述后8位碼字中碼字串“010”的首位所在的位置置1,其余7位置0,作為碼塊t ; 當(dāng)Rm[t]=_4時(shí),若在所述后8位碼字中循環(huán)查找到數(shù)據(jù)串“101”,則將所述后8位碼字中碼字串“101”的首位所在的位置置0,其余7位置1,作為碼塊t。
9.根據(jù)權(quán)利要求61任一項(xiàng)所述的解碼方法,其特征在于,在得到所述碼塊t之后還包括 將所述碼塊t置于碼塊t-Ι之后,組成原始數(shù)據(jù)串; 判斷是否還有未解碼的碼字串,如果是,則將t的值加1,返回執(zhí)行所述計(jì)算碼字串中已解碼部分的不均等值Rp [t]。
10.根據(jù)權(quán)利要求61任一項(xiàng)所述的解碼方法,其特征在于,所述后8位碼字的不均等值Rm[t]的計(jì)算方法為令不均等值計(jì)算公式中的η為8,匕為所述后8位碼字的第i位數(shù)據(jù); 所述計(jì)算RpW具體為:利用公SRp[t]=Rp[t-l]+Rm[t-l]計(jì)算得到&[幻;其中,碼塊t-Ι的碼字的不均等值Rm[t-1]通過令不均等值計(jì)算公式中的η為碼塊t-1對應(yīng)的碼字的位數(shù)、匕為碼塊t-Ι對應(yīng)的碼字的第i位數(shù)據(jù)計(jì)算得到。
全文摘要
本發(fā)明實(shí)施例公開了一種數(shù)據(jù)編碼、解碼方法。該編碼方法為計(jì)算碼塊t的不均等值Rd[t]及其之前已編碼數(shù)據(jù)的不均等值Rp[t];根據(jù)Rd[t]和Rp[t]的大小,通過直接對應(yīng)、取反運(yùn)算、奇位取反運(yùn)算等方式獲取各個(gè)碼塊對應(yīng)的碼字。相應(yīng)的,該解碼方法為計(jì)算碼字串中已解碼部分的不均等值Rp[t];若|Rp[t]|≤2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取9位碼字;若|Rp[t]|>2,則從所述碼字串中未解碼部分的高位到低位連續(xù)讀取10位碼字;通過直接對應(yīng)、取反運(yùn)算、奇位取反運(yùn)算等方式獲取讀取到的碼字對應(yīng)的碼塊。本發(fā)明實(shí)施例提供的數(shù)據(jù)編碼、解碼方法通過直接對應(yīng)或簡單運(yùn)算完成,不需查詢編碼表,節(jié)約了編碼表存儲(chǔ)所占用的空間,提高了編碼效率。
文檔編號(hào)H03M13/11GK102780495SQ201210302430
公開日2012年11月14日 申請日期2012年8月23日 優(yōu)先權(quán)日2012年8月23日
發(fā)明者張西彥, 朱艷琴, 李領(lǐng)治, 楊哲, 紀(jì)其進(jìn) 申請人:蘇州大學(xué)