信息论中用c语言进行算术编码,信息论与编码之算术编码
例5-10 有4個符號a,b,c,d構成簡單序列S=(a,b,d,a),各符號及其對應概率如下表5-9所列。
符號
符號概率pi
符號累積概率Pj
a
0.100(1/2)
0.000
b
0.010(1/4)
0.100
c
0.001(1/8)
0.110
d
0.001(1/8)
0.111
答:算術編碼的基本思想是:將輸入序列的各個符號按照出現的概率映像到0~1之間數字區域內,該區域表示成可以改變精度的二進制小數,其中出現頻率越低的數據利用精度越高的小數表示。算術壓縮算法中兩個基本的要素為源數據出現的頻率以及對應的編碼區間。其中,源數據出現的頻率決定該算法的壓縮效果,同時也決定編碼過程中源數據對應的區間范圍,而編碼區間則決定算術壓縮算法的最終輸出數據。
對“a,b,d,a”進行算術編碼的步驟如下:
1)初始化時,被分割范圍的初始值是[0,1),即被分割范圍的下限為low=0,上限為 high =1,該范圍的長度為range_length=high-low =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=menu('choose whether you want to enter?a character or a number','enter character','enter number')
if K==1;
str=input('請輸入編碼的字符串:');
l=0;r=1;d=1;
p=[0.5 0.25 0.125 0.125];
n=length(str);
disp('a b c d ')
disp(num2str(p))
for i=1:n
switch str(i)
case 'a'
m=1;
case 'b'
m=2;
case 'c'
m=3;
case 'd'
m=4;
otherwise
error('請不要輸入其它字符!');
end
%判斷字符
pl=0;pr=0;
for j=1:(m-1 )
pl=pl+p(j);
end
for j=1:m
pr=pr+p(j);
end
%概率統計
l=l+d*pl;
r=l+d*(pr-pl);
strl=strcat('輸入第',int2str(i),'符號的間隔左右邊界:');
disp(strl);
format long
disp(l);disp(r);
d=r-l;
end %for循環借結束
result=l
else K==2
LP1(1)=0;
p=[0.5 0.25 0.125 0.125];
for i=1:3
LP1(i+1)=LP1(i)+p(i);
end
result=input('please enter the number');
while(result<0.975? )
if (result>=0 & result<0.5)
disp('a')
elseif (result>=0.5 &result<0.75)
disp('b')
elseif (result>=0.75 &result<0.875)
disp('c')
elseif (result>=0.875 &result<0.975)
disp('d')
end
for j=1:4
if (result>=LP1(j) &result
result=(result-LP1(j))/(LP1(j+1)-LP1(j))
break;
else continue;
end
end
end %while
disp('!')
disp('解碼結束')
end %if else
編碼結果如下:請輸入編碼的字符串:'abda'
a b c d
0.5??????? 0.25?????? 0.125?????? 0.125
輸入第1符號的間隔左右邊界:
0
0.50000000000000
輸入第2符號的間隔左右邊界:
0.25000000000000
0.37500000000000
輸入第3符號的間隔左右邊界:
0.35937500000000
0.37500000000000
輸入第4符號的間隔左右邊界:
0.35937500000000
0.36718750000000
result =
0.35937500000000
總結
以上是生活随笔為你收集整理的信息论中用c语言进行算术编码,信息论与编码之算术编码的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java大马后门_PHP大马后门分析
- 下一篇: 星球大战Java实验报告_一份被隐瞒多年
