算術編碼的基本思想是將輸入序列的每個符號按照出現的概率映射到0到1之間的數字區域,用精度可變的二進制小數表示,出現頻率較低的數據用精度較高的小數表示。算術壓縮算法中的兩個基本要素是源數據的頻率和相應的編碼間隔。其中,源數據的頻率決定了算法的壓縮效果,也決定了編碼過程中源數據的對應範圍,而編碼範圍決定了算術壓縮算法的最終輸出數據。
算術編碼“a、b、d、a”的步驟如下:
1),分割範圍的初始值為【0,1】,即分割範圍的下限為低=0,上限為高=1,範圍的長度為range _ length =高-低=1。
2)根據算術編碼公式:C(S,r)= C(S)+A(S)Pr。
A(S,r)= A(S)Pr
其中累積概率P(S)用於表示碼字C(S),符號概率P(S)表示區間狀態A(S)。因為它是二進制符號序列,r=0,1。
將數據帶入公式,發現C(a,b,d,a)編碼後的碼字為01011。Matlab程序的具體實現過程如下。
k =菜單(‘選擇要輸入字符還是數字’,‘輸入字符’,‘輸入數字’)
如果K = = 1;
str = input(‘請輸入編碼字符串:‘);
l = 0;r = 1;d = 1;
p =【0.5 0.25 0.125 0.125】;
n =長度(str);
顯示(‘a b c d‘)
disp(num2 str(p))
for i=1:n
開關串(壹)
案例a
m = 1;
案例b
m = 2;
案例“c”
m = 3;
案例d
m = 4;
否則
錯誤(“請不要輸入其他字符!”);
結束
%判斷字符
pl = 0;pr = 0;
對於j = 1:(m-1)
pl = pl+p(j);
結束
對於j=1:m
pr = pr+p(j);
結束
%概率統計
l = l+d * pl;
r = l+d *(pr-pl);
strl = strcat(‘輸入數字‘,int 2 str(I),‘符號間隔:‘)的左右邊界);
disp(strl);
長格式
disp(l);disp(r );
d = r-l;
周期借款結束的結束百分比。
結果=l
否則K==2
LP 1(1)= 0;
p =【0.5 0.25 0.125 0.125】;
for i=1:3
LP 1(I+1)= LP 1(I)+p(I);
結束
result = input(‘請輸入數字‘);
while(result & lt;0.975 )
if(結果& gt= 0 & amp結果& lt0.5)
顯示(‘a‘)
else if(result & gt;= 0.5 & amp結果& lt0.75)
顯示(‘b‘)
else if(result & gt;= 0.75 & amp結果& lt0.875)
disp(‘c‘)
else if(result & gt;= 0.875 & amp結果& lt0.975)
顯示(d)
結束
對於j=1:4
if(結果& gt= LP 1(j)& amp;結果& ltLP 1(j+1)
結果=(結果-LP 1(j))/(LP 1(j+1)-LP 1(j))
打破;
否則繼續;
結束
結束
結束%while
disp(‘!‘))
顯示(“解碼結束”)
結束%if else