樊昌信,曹麗娜 . 《通訊原理》(第7版)
(這個ppt給了很多啟發)
hdb3碼(high density bipolar of order 3),三階高密度雙極性碼,它是ami碼的一種改進,目的是克服ami的缺點,使連續「0」的個數不超過3個。其編碼規則如下:
(1) 先檢查連「0」個數,若小於等於3,則與ami碼相同;
(2)當連「0」個數大於3時,將每4個連「0」化作乙個小節,用「000v」代替,其中v取值+1或-1,v的極性與前乙個相鄰的非「0」脈衝極性相同(這破壞了極**替規則,故稱v為破壞脈衝);
(3) 相鄰的v極性必須交替,當v滿足(2)但不滿足(3)時,將「000v」更改為「b00v」,b的極性與後面的v一致,b稱調節脈衝,==>即兩個相鄰v之間的「1」的個數為偶數時v的極性不滿足交替,需要替換為「b00v」;為奇數時v的極效能滿足交替,不需要替換;
(4)v後面的傳號碼極性也要交替。
訊息碼: 1 0 0 1 1 0 0 0 0 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0
ami碼: +1 0 0 -1 +1 0 0 0 0 -1 0 +1 -1 0 +1 0 0 0 0 -1 +1 -1 +1 0
加v : +1 0 0 -1 +1 0 0 0+v-1 0 +1 -1 0 +1 0 0 0+v-1 +1 -1 +1 0
我們可以看到,兩個相鄰v之間的非0個數為偶數,造成兩v的極性相同,不符合(3),所以加b
加b : +1 0 0 -1 +1 0 0 0+v-1 0 +1 -1 0 +1-b0 0-v-1 +1 -1 +1 0
若對0、1、b、v用兩位二進位制數表示(00,01,10,11),則在不考慮極性的情況下,加b後應該輸出
01 00 00 01 00 00 001101 00 01 01 00 011000 001101 01 01 01 00
由此,我們使用verilog語言進行編寫hdb3碼的編碼程式。
(1)先不考慮極性(+或-),只考慮輸出是0、1、b還是v,對上述4個數編碼,0--00,1--01,b--10,v--11
(2)加v操作,判斷輸入的字元是「1」還是「0」,1=>01, 0=>00,若為4個連「0」,前三個輸出「00」,第四個輸出「11」
always @ ( posedge clk or negedge rst_n )
begin
if( !rst_n ) begin
count0 <= 0;
endelse begin
if( codein == 1'b1 ) begin //輸入1
codeout_v <= 2'b01;
count0 <= 2'b00; //出現1後就要重新對0計數
endelse begin //輸入0
count0 <= count0 + 1'b1; //對0的計數加1
if( count0 == 2'b11 ) begin //0的個數等於3,因為是並行,其實是4個了,只是在下乙個時鐘上公升沿變為4
codeout_v <= 2'b11; //輸出v
count0 <= 2'b00; //重新對0計數
endelse begin
codeout_v <= 2'b00;
endend
endend
(3)加b操作,判斷兩個相鄰的v之間的非「0」(此時兩v之間非0的應該只有1,即「01」)的個數是否為偶數,若為偶數,從後乙個v往前數,第三個0變為b;若為奇數,正常輸出;
注意:此處如何操作v前面的第三個0很關鍵,按照正常的邏輯似乎不太好把已經輸出的0變為b,所以我們可以將輸出的資料進行一定的延時,這樣要操作的數還在暫存器裡沒有輸出(正要輸出最好),即可進行更改後再輸出,延時的方法可以使用移位暫存器,利用非租塞賦值(<=)的延時,使輸出延時3個週期,操作後正好輸出
always @ ( posedge clk )
begin
buffer[0] <= codein_v; //移位暫存器延時
buffer[1] <= buffer[0];
buffer[2] <= buffer[1];
endalways @ ( posedge clk or negedge rst_n )
begin
if( !rst_n ) begin
count01 <= 0;
first_v <= 0;
endelse begin
if( codein_v == 2'b11 ) begin //11-->v
if( first_v == 1'b0 ) begin //還沒出現過v,就不存在兩個v之間非0數為偶數的情況,不需要對1計數
first_v <= 1; //已經出現了v
count01 <= 2'b00; //出現11後就要重新對01計數
codeout_b <= buffer[2]; //延時後的輸出
endelse begin
if( count01[0] == 0 ) begin //1的個數為偶數
hdb3編碼(2)——極性變換
通訊原理 FPGA HDB3解碼
參考我的上兩篇hdb3編碼,給出hdb3解碼的verilog實現 編碼 編碼 續 解碼規則主要參考下面的資料 解碼主要參考資料 1 若3連 0 前後非零脈衝同極性,則將最後乙個非零元素譯為零,如 1000 1 就應該譯成 10000 若2連 0 前後非零脈衝極性相同,則兩零前後都譯為零,如 100 ...
HDB3碼的編碼
1 原始碼是1時,暫時不變 2 連0不超過3個時不變,有4個或以上連0時把每4個0換為取代節,即b00v 3 確定b是0還是 1 第乙個b一般取0,若兩個取代節之間1的個數為偶,易推得後者的b一定是 1,此時b和1遵循的規則完全相同,可以直接記為1,即100v 為奇則一定是0,記為0,即000v。4...
通訊原理 7 信源編碼和差錯控制編碼
信源編碼的功能 為什麼要數位化?a d轉換 數位化編碼 的技術 波形編碼和參量編碼 一 抽樣定理 抽樣 將取值連續,時間連續的模擬訊號變換為取值連續,時間離散的pam訊號。pam 脈衝序列的幅度隨著m t 變化的一種模擬脈衝調製方式。1.低通抽樣定理 2.帶通抽樣定理 帶通抽樣定理 設帶通型模擬訊號...