一、實驗目的
掌握算數編碼原理。
二、實驗內容
利用matlab
編寫程式實現算數編碼,包括:
1、對檔案符號進行概率統計,生成編碼表;
2、對檔案進行壓縮編碼;
3、(選做)對檔案進行解壓縮,比較原始資料和解壓後的資料之間是否有損耗。
四、實驗原理
算術編碼的編碼物件是一則訊息或乙個字串行,其編碼思路是將該訊息或字串行表示成0和1
之間的乙個間隔
(interval)
上的乙個浮點小數。
在進行算術編碼之前,需要對字串行中每個字元的出現概率進行統計,根據各字元出現概率的大小,將每個字元對映到[0,1]
區間上的某個子區間中。然後,再利用遞迴演算法,將整個字串行對映到
[0,1]
區間上的某個
interval
中。在進行編碼時,只需從該
interval
中任選乙個小數,將其轉化為二進位制數。
符號串行越長,編碼表示它的interval
的間隔就越小,表示這一間隔所需的二進位制位數就越多,編碼輸出的碼字就越長。
五、實驗步驟
對字串行「state_tree
」進行算術編碼的步驟如下:
1、對檔案符號「state_tree
」進行概率統計,生成編碼表;
2、初始化時,被分割範圍的初始值是[0,1],即被分割範圍的下限為low=0
,上限為
high =1,該範圍的長度為
range_length=high-low =1。
第一題:
clc;
a=['_','a','e','r','s','t'];
s=input('字串');
space=0;a1=0;e1=0;r1=0;s1=0;t1=0;
for i=1:length(s)
c=find(a==s(i));
switch c
case 1
space=space+1;
case 2
a1=a1+1;
case 3
e1=e1+1;
case 4
r1=r1+1;
case 5
s1=s1+1;
case 6
t1=t1+1;
endenddisp('_,a,e,r,s,t概率分別是');
p=[space,a1,e1,r1,s1,t1]/length(s)
sp=cumsum(p);
low=0;high=1;range_length=high-low;
for i=1:length(s)
c=find(a==s(i));
high=sp(c);
low=high-p(c);
next_low=low+range_length*low;
next_high=low+range_length*high;
low=next_low;high=next_high;range_length=high-low;
disp([vpa(low,11),vpa(high,11)])
end
結果:字串'state_tree'
_,a,e,r,s,t概率分別是
p =0.100000000000000 0.100000000000000 0.300000000000000 0.100000000000000 0.100000000000000 0.300000000000000
[ 0.6, 0.7]
[ 0.67, 0.7]
[ 0.673, 0.676]
[ 0.6751, 0.676]
[ 0.67528, 0.67555]
[ 0.67528, 0.675307]
[ 0.6752989, 0.675307]
[ 0.67530295, 0.67530376]
[ 0.675303112, 0.675303355]
[ 0.6753031606, 0.6753032335]
第二題:
clc;
format long
p=[0.1,0.1,0.3,0.1,0.1,0.3];
s='_aerst';
high=cumsum(p);
low=high-p;
number=input('輸入數值');
while(number)
c=find((number>=low)&(number結果:
輸入數值0.6753031606 s
tate
tree
感想:先設計思路,再步步分析。控制輸出數字位數,vpa(a,n)
輸出的是
syms
,不能進行邏輯運算,故需要定義
16位格式,將其
double
格式轉換。而原題是
11位有效數字,故後來必須
vpa(a,11)
將number
設定,否則
while
迴圈無窮解得一堆錯誤字串。
實驗四 dpcm編碼
一 實驗原理 dpcm編碼,是差分 編碼調製的縮寫,是典型的 編碼系統。這種方式是用已經過去的抽樣值來 當前的抽樣值,對它們的差值進行編碼。之所以不用原始樣本做 是因為在解碼端無法得到原始樣本資料,只能得到存在誤差的樣本。差值編碼可以提高編碼頻率,這種技術已應用於模擬訊號的數字通訊之中。二 實驗步驟...
PHP 編碼轉換實驗
一 utf 8 轉換為 gb2312 header content type text html charset utf 8 本頁面編碼是 utf 8 bom str 陶喆 echo utf 8 str echo str iconv utf 8 gb2312 ignore str convert t...
實驗報告 實驗一
實驗結論 1.使用debug將程式段寫入記憶體,逐條執行,觀察每條指令執行後cpu相關暫存器中內容的變化 用a命令寫入彙編指令,然後用t指令逐條檢視相關暫存器中的內容。下面是用e指令寫入機器碼,並和上方的a指令彙編指令相互驗證 如下圖,使用 u反彙編檢視彙編指令同上圖a中輸入的指令一致。然後用t命令...