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 是在電信領域的一種線性除錯碼,以發明者理查德 衛斯里 漢明的名字命名。簡單來說,漢明碼就是乙個可以校驗和糾...