算術編碼 解碼以及matlab實現

2021-09-28 23:15:39 字數 1423 閱讀 8990

m=2;

%二元資料p=[

0.80.2];

%需要自己給出x=[

1010

];%需要編碼的序列,發行方想要傳送的原始序列

low=0;

%區間下界

high=1;

%區間上界

for i=1:

length

(x)if

x(i)==0

high=high-

(high-low)*p

(2);

elseif x

(i)==

1 low=low+

(high-low)*p

(1);

endend

這樣子,我們得到[1 0 1 0]這個序列的區間上下界為0.9536和0.928

接著,我們取上界這個小數,作為我們要傳送的小數,但是,通道只能傳輸二進位制,不能傳輸小數,於是,我們首先要將其轉化成二進位制,至於多少位,我們算原始序列的熵,然後向上取整,即:

n=

ceil(-

log2

(p));y=

dectobin

(high,

2*n)

;%取high作為輸出值y=y

(1:n);

%輸出序列;

我們在通道中傳輸的就是y,這個序列。

接著,我們考慮接受方,接到y這個序列之後,怎麼解碼。

這裡我們分兩種情況來討論,若接收方很厲害,它神奇地知道傳送方原始序列的長度的話,那麼解碼過程就變得很簡單了,直接上**:

%接收方:

%如果知道長度即length

(x)r =

bintodec

(y);

high_r=1;

low_r=0;

rec=

zeros

(length

(x),1)

;for i=1:

length

(x)if low_r+

(high_r-low_r)*p

(1)rec

(i)=1;

low_r=low_r+

(high_r-low_r)*p

(1);

else

rec(i)=0

; high_r=high_r-

(high_r-low_r)*p

(2);

endendrec%rec就是我們解碼的結果

如果接收方很不幸,它不知道原始序列的長度,我們也有辦法準確解碼,只需要增加乙個額外的環節,想知道怎麼弄,可以看資源 算術碼整個過程、主函式及所有子函式,含超詳細注釋.rar

詳細**見資源:

算術碼整個過程、主函式及所有子函式,含超詳細注釋.rar

Matlab 算術編碼

資訊理論的第三個作業 終於是完完全全自己寫的 了!留下了不學無術的淚水qaq 算術編碼程式 輸入 信源u 信源分布p 需要進行編碼的序列s 輸入備註 輸入格式 a 0 1 p 1 4 3 4 s 1 0 1 1 1 輸出 該序列的算術編碼s 輸出備註 以序列所在區間的左端點值作為所求序列的碼字 輸入...

資訊理論課程設計 算術編碼 解碼

算術編碼是影象壓縮的主要演算法之一。是一種無損資料壓縮方法,也是一種熵編碼的方法。和其它熵編碼方法不同的地方在於,其他的熵編碼方法通常是把輸入的訊息分割為符號,然後對每個符號進行編碼,而算術編碼是直接把整個輸入的訊息編碼為乙個數,乙個滿足 0.0 n 1.0 的小數n。現在以 00111001111...

MATLAB初學 對於漢明碼編碼解碼的實現

今天上課,老師讓我們用matlab進行漢明碼編碼解碼的實現,之前上通訊原理課程的時候老師順帶提過一句,現在已然是記不太清了,所以上網搜尋了一下關於漢明碼的原理。漢明碼 hamming code 是在電信領域的一種線性除錯碼,以發明者理查德 衛斯里 漢明的名字命名。簡單來說,漢明碼就是乙個可以校驗和糾...