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表中得到...