C語言實現HDB3編碼與解碼

2021-10-06 10:09:33 字數 1486 閱讀 8346

ami碼存在出現長的連0串的缺點,為了克服ami碼的缺點,人們設計了hdb3碼。hdb3碼的編碼規則如下:

把原二進位制序列變成ami碼,檢查ami碼的連0情況,當無3個以上連0碼時,ami碼就是hdb3碼。(我感覺實際應用時可以不要轉ami碼這一步)

當出現4個或4個以上的連0碼時,則將每4個連0小段的第4個0變成非0碼,這個非0碼用符號v表示。原來二進位制序列中所有的1碼稱為信碼,用符號b表示。b碼與v碼的正負必須滿足兩個條件:①b碼和v碼各自都應該保持極**替變換(確保編好的碼中沒有直流成分);②v碼必須與前乙個b碼同極性,如果不能滿足這個條件,則將4個連0碼的第1個0碼變成與v碼同極性的補信碼,補信碼用符號b』表示,同時要做出調整以保持b碼與b』碼保持極**替變換。

例如:原二進位制序列:0 1 0 0 0 0 1

hdb 3碼:0 1 0 0 0 1 -1

特殊情況:

原二進位制序列:0 0 0 0 0 0 0 0

hdb 3碼:1 0 0 1 -1 0 0 -1

/**

* @description: encode the source code as hdb3 code.

* @param: hdb3 is a pointer to hdb3 code.

* source is a pointer to source code.

* len is sequence length.

* @return: none

*/void

hdb3_encoding

(char

*hdb3,

const

char

*source,

int len)

}else

}else

else}}

}

/**

* @description: decode hdb3 code.

* @param: hdb3 is a pointer to hdb3 code.

* source is a pointer to source code.

* len is sequence length.

* @return: none

*/void

hdb3_decoding

(char

*source,

const

char

*hdb3,

int len)

else

}else

cnt_0 =0;}}}

將hdb3碼的編、解碼函式編譯成matlab可以呼叫的.mexw64檔案後,用matlab繪製的波形圖如下圖所示,可見解碼結果與原二進位制序列相同。

哈夫曼編碼與解碼 C語言實現

include include include include define maxnum 60 typedef struct huffnode typedef struct huffcode huffnode ht maxnum 2 存放哈夫曼樹 huffcode hcd maxnum 存放ht陣...

C語言實現Base64編碼 解碼

bse64是一種以64個可列印字元對二進位制資料進行編碼的編碼演算法。base64在對資料進行編碼時以三個8位字元型資料為一組,取這三個字元型資料的ascii碼,然後以6位為一組組成4個新的資料,這4個新的資料有6位,所以它的最大值為2 6 64。我們以4個6位資料的十進位制數從base64表中得到...

C語言實現Base64編碼 解碼

bse64是一種以64個可列印字元對二進位制資料進行編碼的編碼演算法。base64在對資料進行編碼時以三個8位字元型資料為一組,取這三個字元型資料的ascii碼,然後以6位為一組組成4個新的資料,這4個新的資料有6位,所以它的最大值為2 6 64。我們以4個6位資料的十進位制數從base64表中得到...