實驗一 算數編碼實驗

2021-07-03 11:19:20 字數 2601 閱讀 1136

一、實驗目的

掌握算數編碼原理。

二、實驗內容

利用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命令...