實驗一信息熵與圖像熵計算_第1頁
實驗一信息熵與圖像熵計算_第2頁
實驗一信息熵與圖像熵計算_第3頁
實驗一信息熵與圖像熵計算_第4頁
實驗一信息熵與圖像熵計算_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

實驗一信息熵與圖像熵計算(2學時)一、實驗目的1.復習MATLAB的基本命令,熟悉MATLAB下的基本函數(shù);2.復習信息熵基本定義,能夠自學圖像熵定義和基本概念。二、實驗內(nèi)容1.能夠?qū)懗鯩ATLAB源代碼,求信源的信息熵;2.根據(jù)圖像熵基本知識,綜合設計出MATLAB程序,求出給定圖像的圖像熵。三、實驗儀器、設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPU;2.MATLAB編程軟件。四實驗流程圖五實驗數(shù)據(jù)及結果分析四、實驗原理1.MATLAB中數(shù)據(jù)類型、矩陣運算、圖像文件輸入與輸出知識復習。2.利用信息論中信息熵概念,求出任意一個離散信源的熵(平均自信息量)。自信息是一個隨機變量,它是指某一信源發(fā)出某一消息所含有的信息量。所發(fā)出的消息不同,它們所含有的信息量也就不同。任何一個消息的自信息量都代表不了信源所包含的平均自信息量。不能作為整個信源的信息測度,因此定義自信息量的數(shù)學期望為信源的平均自信息量:1()1()[log]()log()iniipaiHEpapaX信息熵的意義:信源的信息熵H是從整個信源的統(tǒng)計特性來考慮的。它是從平均意義上來表征信源的總體特性的。對于某特定的信源,其信息熵只有一個。不同的信源因統(tǒng)計特性不同,其熵也不同。3.學習圖像熵基本概念,能夠求出圖像一維熵和二維熵。圖像熵是一種特征的統(tǒng)計形式,它反映了圖像中平均信息量的多少。圖像的一維熵表示圖像中灰度分布的聚集特征所包含的信息量,令Pi表示圖像中灰度值為i的像素所占的比例,則定義灰度圖像的一元灰度熵為:2550logiiippH圖像的一維熵可以表示圖像灰度分布的聚集特征,卻不能反映圖像灰度分布的空間特征,為了表征這種空間特征,可以在一維熵的基礎上引入能夠反映灰度分布空間特征的特征量來組成圖像的二維熵。選擇圖像的鄰域灰度均值作為灰度2分布的空間特征量,與圖像的像素灰度組成特征二元組,記為(i,j),其中i表示像素的灰度值(0<=i<=255),j表示鄰域灰度(0<=j<=255),2(,)/ijpfijN上式能反應某像素位置上的灰度值與其周圍像素灰度分布的綜合特征,其中f(i,j)為特征二元組(i,j)出現(xiàn)的頻數(shù),N為圖像的尺度,定義離散的圖像二維熵為:2550logijijippH構造的圖像二維熵可以在圖像所包含信息量的前提下,突出反映圖像中像素位置的灰度信息和像素鄰域內(nèi)灰度分布的綜合特征。五、實驗步驟1.求解信息熵過程:(1)輸入一個離散信源,并檢查該信源是否是完備集;(2)去除信源中符號分布概率為零的元素;(3)根據(jù)平均信息量公式,求出離散信源的熵。2.圖像熵計算過程:(1)輸入一幅圖像,并將其轉換成灰度圖像;(2)統(tǒng)計出圖像中每個灰度階象素概率;(3)統(tǒng)計出圖像中相鄰兩象素的灰度階聯(lián)合分布矩陣;(4)根據(jù)圖像熵和二階熵公式,計算出一幅圖像的熵。六、實驗報告要求1.按照本節(jié)內(nèi)容后實驗報告形式書寫;2.實驗總結和心得要詳細,可以根據(jù)自己實驗情況,寫出建議。七、實驗注意事項1.MATLAB語言課下多復習,盡量采用模塊化編程方法,通過函數(shù)調(diào)用形式運行程序。2.仔細理解、體會圖像熵的概念,能夠?qū)⑵渎?lián)合熵的概念理解透徹。八、思考題舉例說明圖像熵、信息熵在現(xiàn)實中有何實踐指導意義?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗一信息熵與圖像熵計算3一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄2:圖像一維二維熵程序:closeall;clc;I=imread('C:\DocumentsandSettings\AllUsers\Documents\MyPictures\picture\Sunset.jpg');img=rgb2gray(I);imview(I),imview(img);[ix,iy]=size(img);P1=imhist(img)/(ix*iy);temp=double(img);temp=[temp,temp(:,1)];CoefficientMat=zeros(256,256);forx=1:ixfory=1:iyi=temp(x,y);j=temp(x,y+1);CoefficientMat(i+1,j+1)=CoefficientMat(i+1,j+1)+1;endendP2=CoefficientMat./(ix*iy);H1=0;H2=0;fori=1:256ifP1(i)~=0H1=H1-P1(i)*log2(P1(i));endforj=1:256ifP2(i,j)~=0H2=H2-P2(i,j)*log2(P2(i,j));endendendH2=H2/2;sprintf('1ordimageentropyis:%d',H1)sprintf('2ordimageentropyis:%d',H2)、實驗二香農(nóng)編碼(2個學時)一、實驗目的1.了解香農(nóng)編碼的基本原理及其特點;2.熟悉掌握香農(nóng)編碼的方法和步驟;3.掌握MATLAB編寫香農(nóng)編碼的程序。二、實驗內(nèi)容1.根據(jù)香農(nóng)編碼的方法和步驟,用香農(nóng)編碼編寫程序;2.用編寫的源程序驗證書中例題的正確性。三、實驗儀器、設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPU;2.MATLAB編程軟件。四、實驗原理1.香農(nóng)編碼原理:香農(nóng)第一定理指出了平均碼長與信源之間的關系,同時也指出了可以通過編碼使平均碼長達到極限值,這是一個很重要的極限定理。香農(nóng)第一定理指出,選擇每個碼字的長度iK滿足下式:I(Xi)KI(Xi)1,i就可以得到這種碼,這種編碼方法就是香農(nóng)編碼。2.香農(nóng)編碼算法:1.將信源消息符號按其出現(xiàn)的概率大小依次排列:12nP(X)P(X),,P(X)2.確定滿足下列不等式整數(shù)碼長iK;log2p()log2()1iiixKpx3.為了編成唯一可譯碼,計算第i個消息的累加概率;11()iikkppx4.將累加概率iP變成二進制數(shù);5.取iP二進制數(shù)的小數(shù)點后iK位即為該消息符號的二進制碼字。五、實驗步驟1.根據(jù)實驗原理,設計香農(nóng)編碼程序;2.輸入一組信源消息符號概率,可以求香農(nóng)編碼、平均碼長和編碼效率。六、實驗報告要求51.按照本節(jié)內(nèi)容后實驗報告形式書寫;2.實驗總結和心得要詳細,可以根據(jù)自己情況寫出建議。七、實驗注意事項1.香農(nóng)編碼是符號概率大的用短表示,小長程序中香農(nóng)編碼是符號概率大的用短表示,小長程序中香農(nóng)編碼是符號概率大的用短表示,小長程序中需要對概率進行排序,此我們調(diào)用MATLABMATLABMATLABMATLABMATLAB的庫函數(shù);2.最后需要注意的是,求得碼字依次與排序符號概率對應;3.向無窮方取最小正整數(shù)位ceilceilceil函數(shù)。八、思考題舉例說明香農(nóng)編碼在現(xiàn)實中有際作用,列一個子并簡要說明?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗二香農(nóng)編碼一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄2:香農(nóng)編碼程序:closeall;clc;n=input('輸入信源符號個數(shù):');p=zeros(1,n);fori=1:np(1,i)=input('輸入信源符號概率:');endifsum(p)<1||sum(p)>1error('輸入概率不符合概率分布')end6y=fliplr(sort(p));D=zeros(n,4);D(:,1)=y';fori=2:nD(1,2)=0;D(i,2)=D(i-1,1)+D(i-1,2);endfori=1:nD(i,3)=-log2(D(i,1));D(i,4)=ceil(D(i,3));endDA=D(:,2)';B=D(:,4)';Code_length=0;forj=1:nCode_length=Code_length+p(j)*D(j,4);endH=0;forj=1:nH=H+p(j)*log2(1/p(j));endforj=1:nfprintf('輸入信源符號概率為%f的碼字為:',p(1,j));C=deczbin(A(j),B(j));disp(C)endEfficiency=H/(Code_length)fprintf('平均碼長:\n');disp(Code_length)fprintf('\n香農(nóng)編碼效率:\n');disp(Efficiency)A:累加概率;B:碼子長度。:碼子長度。function[C]=deczbin(A,B)C=zeros(1,B);temp=A;fori=1:Btemp=temp*2;iftemp>1temp=temp-1;C(1,i)=1;elseC(1,i)=0;endend7實驗三費諾編碼(2學時)一、實驗目的掌握費諾編碼方法的基本步驟及優(yōu)缺點。二、實驗內(nèi)容對于給定的信源的概率分布,按照費諾編碼的方法進行計算機實現(xiàn)。三、實驗儀器、設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPU;2.MATLAB編程軟件。四、實驗原理1.費諾編碼原理:費諾編碼就是通過使編碼中各個句號出現(xiàn)的概率大致相等,實現(xiàn)概率均勻化,從而減少冗余度,提高編碼效率。凡是能載荷一定的信息量,且碼字的平均長度最短,可分離的變長碼的碼字集合稱為最佳變長碼。在編N進制碼時首先將信源消息符號按其出現(xiàn)的額概率一次又小到大排列開來,并將排列好的心愿符號按概率值分N大組,使N組的概率之和近似相同,并對各組賦予一個N進制碼元0、1...N-1。之后再針對每一個大組內(nèi)的心愿符號做如上處理,即再分為概率相同的N組,賦予N進制碼元。如此重復,直到每組只剩下一個心愿符號為止。此時每個信源符號所對應的碼字即為費諾碼。針對同一個心愿,費諾碼比香農(nóng)碼平均碼長小,消息出書速率大,編碼效率高。費諾編碼是一種信源編碼,它編碼后的費諾碼要比香農(nóng)碼的平均碼長小,消息傳輸速率大,編碼效率高。但它屬于概率匹配編碼它不是最佳的編碼方法。2.費諾編碼算法:(1)將信源消息符號按其出現(xiàn)的概率大小依次排列:12()()...()nPXPXPX(2)將依次排列的信源符號按概率值分為兩大組,使兩個組的概率之和近似相同,并對各組賦予一個二進制碼元“0”和“1”;(3)將每一大組的信源符號再分成兩組,使劃分后的兩個組的概率之和近似相同,并對各組賦予一個二進制符號“0”和“1”;(4)如此重復,直至每個組只剩下一個信源符號為止;(5)信源符號所對應的碼子即為費諾碼。五、實驗步驟1.根據(jù)實驗原理,設計費諾編碼程序;2.輸入一組信源消息符號概率,可以求費諾編碼,平均碼長和編碼效率。8六、實驗報告要求1.按照本節(jié)內(nèi)容后實驗報告形式書寫;2.實驗總結和心得要詳細,可以根據(jù)自己情況寫出建議。七、實驗注意事項1.MATLAB1.MATLAB1.MATLAB1.MATLAB1.MATLAB語言課下多復習,盡量采用模塊化編程方法通過函數(shù)調(diào)形式語言課下多復習,盡量采用模塊化編程方法通過函數(shù)調(diào)形式語言課下多復習,盡量采用模塊化編程方法通過函數(shù)調(diào)形式語言課下多復習,盡量采用模塊化編程方法通過函數(shù)調(diào)形式運行程序;2.仔細理解、體會費諾編碼。八、思考題舉例說明費諾編碼在現(xiàn)實中際應用,列舉一個例子并簡要說明?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗三費諾編碼一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄2:費諾編程程序:clc;clearall;N=input('輸入信源符號的個數(shù):');s=0;l=0;H=0;fori=1:Nfprintf('第%d個',i);p(i)=input('p=');if(p(i)<=0)||(p(i)>=1)error('不符合分布概率');ends=s+p(i);9H=H+(-p(i)*log2(p(i)));endif(s<=0.999999||s>=1.000001)error('不符合分布概率')endfori=1:N-1forj=i+1:Nifp(i)<p(j)m=p(j);p(j)=p(i);p(i)=m;endendendx=f1(1,N,p,1);fori=1:NL(i)=length(find(x(i,:)));l=l+p(i)*L(i);endn=H/l;fprintf('按概率降序排列的碼子:\n');disp(x)fprintf('平均碼長:\n');disp(l)fprintf('編碼效率:\n');disp(n)functionx=f1(i,j,p,r)globalx;x=char(x);if(j<=i)return;elseq=0;fort=i:jq=p(t)+q;y(t)=q;endfort=i:jv(t)=abs(y(t)-(q-y(t)));endfort=i:jif(v(t)==min(v))fork=i:tx(k,r)='0';10endfork=(t+1):jx(k,r)='1';endd=t;f1(i,d,p,r+1);f2(d+1,j,p,r+1);f1(d+1,j,p,r+1);f2(i,d,p,r+1);elseendendendreturn;functionx=f2(i,j,p,r)globalx;x=char(x);if(j<=i)return;elseq=0;fort=i:jq=p(t)+q;y(t-i+1)=q;endfort=1:j-(i-1)v(t)=abs(y(t)-(q-y(t)));endfort=1:j-(i-1)if(v(t)==min(v))d=t+i-1;fork=i:dx(k,r)='0';endfork=(d+1):jx(k,r)='1';endf2(d+1,j,p,r+1);f1(i,d,p,r+1);f2(i,d,p,r+1);f1(d+1,j,p,r+1);elseendendend11實驗四哈夫曼編碼(2學時)一、實驗目的1.掌握哈夫曼編碼原理;2.熟練掌握哈夫曼樹的生成方法;3.學會利用MATLABMATLABMATLABMATLABMATLAB實現(xiàn)哈夫曼編碼;4.提高獨立進行算法編程的能力。二、實驗內(nèi)容1.用MATLABMATLABMATLABMATLABMATLAB實現(xiàn)哈夫曼哈夫曼編碼算法程序;2.要求程序輸出顯示所有的碼字以及編效率;3.設計簡單的輸入界面(可以是文字提示信息),程序運行時用設計簡單的輸入界面(可以是文字提示信息),程序運行時用設計簡單的輸入界面(可以是文字提示信息),程序運行時用設計簡單的輸入界面(可以是文字提示信息),程序運行時用設計簡單的輸入界面(可以是文字提示信息),程序運行時用戶輸入代表信源符號概率的向量;要對用進行合法性檢查戶輸入代表信源符號概率的向量;要對用進行合法性檢查;4.(選做)隨機生成一幅圖像,隨機生成一幅圖像,實現(xiàn)哈夫曼圖像編碼,比較前后圖像編碼,比較前后圖片大小。三、實驗儀器設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPUCPUCPU;2.MATLABMATLABMATLABMATLABMATLAB編程軟件。編程軟件。四、實驗原理1.二進制哈夫曼編碼的基本原理及算法(1)把信源符號集中的所有按概率從大到小排隊把信源符號集中的所有按概率從大到小排隊;(2)取概率最小的兩個符號作為片葉子合并(縮減)到一節(jié)點取概率最小的兩個符號作為片葉子合并(縮減)到一節(jié)點;(3)視此節(jié)點為新符號,其概率等于被合并(縮減)的兩個之和參視此節(jié)點為新符號,其概率等于被合并(縮減)的兩個之和參與概率排隊;(4)重復(2)(3)(2)(3)兩步驟,直至全部符號都被合并(縮減)到根兩步驟,直至全部符號都被合并(縮減)到根;(5)從根出發(fā),對各分枝標記從根出發(fā),對各分枝標記從根出發(fā),對各分枝標記0和1。從根到葉的路徑就給出了各個碼字。從根到葉的路徑就給出了各個碼字編碼和長。2.哈夫曼樹的編碼原理(1)程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行程序的輸入:以一維數(shù)組形式要進行哈夫曼哈夫曼哈夫曼編碼的信源符號編碼的信源符號編碼的信源符號編碼的信源符號編碼的信源符號編碼的信源符號編碼的信源符號編碼的信源符號概率,在運行該程序前顯示文字提信息所要輸入的矢量;概率,在運行該程序前顯示文字提信息所要輸入的矢量;概率,在運行該程序前顯示文字提信息所要輸入的矢量;概率,在運行該程序前顯示文字提信息所要輸入的矢量;然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在然后對輸入的概率矢量進行合法性判斷,原則為:如果中存在小于0的項,則輸入不合法提示重新;如果概率矢量求和大于1,則輸入也不合法,提示重新。(2)在輸入的概率矩陣p正確的前提條件下,對p進行排序,并用矩陣L記錄p排序之前各元素的順,然后將概率數(shù)組p的前兩項,即概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后概率最小的兩個數(shù)加和,得到新一組序列重復以上過程后得到一個記錄概率加和過程的矩陣p以及每次排序之前概率順的矩陣;12(3)新生成一個n-1行n列,并且每個元素含有n個字符的空白矩陣,然后進行哈夫曼編碼。五、實驗步驟1.輸入一個離散信源,并檢查該是否完備集;2.使用哈夫曼編碼原理進行哈夫曼程序編寫;3.輸出離散信源中每個符號的哈夫曼編碼及平均碼長和編碼效率,并與手工,并與手工運算的結果進行比較。六、實驗報告要求1.按照本節(jié)內(nèi)容后實驗報告形式書寫;2.實驗總結和心得要詳細,可以根據(jù)自己情況寫出建議。七、實驗注意事項1.比較大小在MATLABMATLABMATLABMATLABMATLAB中,調(diào)用的是sort函數(shù);2.仔細理解、體會哈夫曼編碼思想。八、思考題比較香農(nóng)編碼、費諾哈夫曼并說出他們的優(yōu)缺點?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗四哈夫曼編碼一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄2:哈夫曼編碼程序:clearall;closeall;clc;13n=input('輸入信源符號數(shù):');p=zeros(1,n);fori=1:np(1,i)=input('輸入信源符號概率:');endq=p;ifsum(p)<1||sum(p)>1error('輸入概率不符合概率分布')enda=zeros(n-1,n);n=length(p);fori=1:n-1[q,l]=sort(q);a(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];endfori=1:n-1c(i,1:n*n)=blanks(n*n);endc(n-1,n)='1';c(n-1,2*n)='0';fori=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1)));c(n-i,n)='1';c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='0';forj=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,:)==j+1));endendfori=1:nh(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))~=32));endCode_length=0;fori=1:nCode_length=Code_length+p(1,i)*ll(i);EndEfficiency=H/(Code_length);fprintf('\n哈夫曼編碼:\n');disp(h)fprintf('\n平均碼長:\n');disp(Code_length)fprintf('\n哈夫曼編碼效率:\n');disp(Efficiency)14實驗五算術編碼(2學時)一、實驗目的1.掌握算數(shù)編碼原理;2.學習算術編碼基本流程,學會調(diào)試算術編碼程序;3.根據(jù)給出資料,自學適應0階算術編碼方法。二、實驗內(nèi)容1.利用MATLABMATLABMATLABMATLABMATLAB編寫程序?qū)崿F(xiàn)算數(shù)碼;編寫程序?qū)崿F(xiàn)算數(shù)碼;2.對文件符號進行概率統(tǒng)計,生成編碼表;3.對文件進行壓縮編碼;3.(選做)對文件進行解壓縮,比較原始數(shù)據(jù)和后的之間是否有損(選做)對文件進行解壓縮,比較原始數(shù)據(jù)和后的之間是否有損(選做)對文件進行解壓縮,比較原始數(shù)據(jù)和后的之間是否有損(選做)對文件進行解壓縮,比較原始數(shù)據(jù)和后的之間是否有損耗。三實驗儀器、設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPUP4CPUP4CPUP4CPU;2.MATLABMATLABMATLABMATLABMATLAB編程軟件。四、實驗原理算術編碼的編碼對象是一則消息或一個字符序列,其編碼思路是將該消息或字符序列表示成0和1之間的一個間隔(Interval)上的一個浮點小數(shù)。在進行算術編碼之前,需要對字符序列中每個字符的出現(xiàn)概率進行統(tǒng)計,根據(jù)各字符出現(xiàn)概率的大小,將每個字符映射到[0,1]區(qū)間上的某個子區(qū)間中。然后,再利用遞歸算法,將整個字符序列映射到[0,1]區(qū)間上的某個Interval中。在進行編碼時,只需從該Interval中任選一個小數(shù),將其轉化為二進制數(shù)。符號序列越長,編碼表示它的Interval的間隔就越小,表示這一間隔所需的二進制位數(shù)就越多,編碼輸出的碼字就越長。五、實驗步驟項目文件建立步驟同實驗二,下面列出對給定序的算術編碼:1.編碼器在開始時將“當前間隔”[L,H)設置為設置為[0,1);2.對每一事件,編碼器按步驟(a)和(b)進行處理;(a)編碼器將“當前間隔”分為子,每一個事件;(b)一個子間隔的大小與下將出現(xiàn)事件概率成比例,編碼器選擇子間隔對應于下一個確切發(fā)生的事件相,并使它成為新“當前子間隔對應于下一個確切發(fā)生的事件相,并使它成為新“當前子間隔對應于下一個確切發(fā)生的事件相,并使它成為新“當前隔”。隔”。3.最后輸出的“當前間隔”下邊界就是該給定事件序列算術編碼。六、實驗報告要求1.按照本節(jié)內(nèi)容后實驗報告形式書寫;152.算術編碼學習心得,特別是根據(jù)自適應模型算術編碼學習心得,特別是根據(jù)自適應模型0階編碼,調(diào)整概率分布方法。階編碼,調(diào)整概率分布方法。根據(jù)自己實驗情況,寫出的做中遇到具體問題對本提建根據(jù)自己實驗情況,寫出的做中遇到具體問題對本提建根據(jù)自己實驗情況,寫出的做中遇到具體問題對本提建議。七、實驗注意事項1.編碼概論累加分布;2.編碼區(qū)間上限和下迭代算法;3.自適應模型0階的編碼原理。八、思考題算術編碼的優(yōu)缺點?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗五算術編碼一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄二:算術編碼程序disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%start%%%%%%%%%%%%%%%%%%%%%%%')disp('程序限定字符為:abcde');str=input('請輸入編碼的字符串:');[j,k]=size(str);l=0;r=1;d=1;p=[0.20.30.10.150.25];pa=0.2;pb=0.3;16pc=0.1;pd=0.15;pe=0.25;n=length(str);disp('abcde')disp(num2str(p))fori=1:kifi==1switchstr(i)case'a'm=1;a1=0;a2=pa;case'b'm=2;a1=pa;a2=pa+pb;case'c'm=3;a1=pa+pb;a2=pa+pb+pc;case'd'm=4;a1=pa+pb+pc;a2=pa+pb+pc+pd;case'e'm=5;a1=pa+pb+pc+pd;a2=pa+pb+pc+pd+pe;endl=a2-a1;endif(i>=2)&(i<=k)switchstr(i)case'a'aa=a1;ab=a1+l*pa;a1=aa;a2=ab;case'b'aa=a1+l*pa;ab=a1+l*(pa+pb);a1=aa;a2=ab;case'c'17aa=a1+l*(pa+pb);ab=a1+l*(pa+pb+pc);a1=aa;a2=ab;case'd'aa=a1+l*(pa+pb+pc);ab=a1+l*(pa+pb+pc+pd);a1=aa;a2=ab;case'e'aa=a1+l*(pa+pb+pc+pd);ab=a1+l*(pa+pb+pc+pc+pd+pe);a1=aa;a2=ab;endl=a2-a1;endstrl=strcat('input',int2str(i),'編碼區(qū)間起始值為:');disp(strl);disp(a1)strl=strcat('input',int2str(i),'編碼區(qū)間的終止值為:');disp(strl);disp(a2)strl=strcat('input',int2str(i),'本程序選擇區(qū)間中點作為編碼是:');disp(strl);disp((a1+a2)/2)enddisp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%code_finish%%%%%%%%%%%%%%%%%')disp('是否要譯碼,請選擇')disp('1、譯碼')disp('2、不譯碼?')disp('說明:輸入相應的數(shù)字進行選擇')disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%choice%%%%%%%%%%%%%%%%%%%%%%')YN=input('您選擇的是:');ifYN==1bm=(a1+a2)/2;SuansuJiema(bm,k)endifYN==2disp('你選擇了不譯碼。')disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')end解碼函數(shù):functionSuansuJiema(bm,num)18formatlongpa=0.2;pb=0.3;pc=0.1;pd=0.15;pe=0.25;i=1;ym={};ym{1}(1)=YM(bm);bm0=bm;whilei>=1&i<numswitch1caseym{1}(i)=='a'bm0=(bm0-0)/pa;caseym{1}(i)=='b'bm0=(bm0-pa)/pb;caseym{1}(i)=='c'bm0=(bm0-pa-pb)/pc;caseym{1}(i)=='d'bm0=(bm0-pa-pb-pc)/pd;caseym{1}(i)=='e'bm0=(bm0-pa-pb-pc-pd)/pe;endi=i+1;ym{1}(i)=YM(bm0);enddisp('%%%%%%%%%%%%%%%%%%%%%%%%%%%jiema_start%%%%%%%%%%%%%%%%%%%%%%%')disp(['譯碼結果是',ym{1}])disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%jiema_end%%%%%%%%%%%%%%%%%%%%%%%%%')函數(shù)二:functionym=YM(A)pa=0.2;pb=0.3;pc=0.1;pd=0.15;pe=0.25;switch1case0<=A&A<paym='a';casepa<=A&A<pa+pbym='b';casepa+pb<=A&A<pa+pb+pcym='c';casepa+pb+pc<=A&A<pa+pb+pc+pdym='d';casepa+pb+pc+pd<=A&A<pa+pb+pc+pd+peym='e';caseA>=1|A<0disp('該碼子為錯誤編碼')end19實驗六線性分組碼的信道編碼和譯碼(2學時)一、實驗目的1.熟悉MATLAB工作環(huán)境及工具箱;2.掌握線性分組碼的編碼、譯碼原理以及糾錯原理。二、實驗內(nèi)容用MATLAB軟件編程實現(xiàn)線性分組碼的信道編碼和譯碼。三、實驗儀器、設備1.計算機-系統(tǒng)最低配置256M內(nèi)存、P4CPU;2.MATLAB編程軟件。四、實驗原理1.線性分組碼基本原理首先,將信息序列分成K個符號一組,然后,在信息組中加入一些校驗碼元,組成N長碼字,由此得到(N,K)分組碼。(N,K)分組碼中任一碼字的碼長為N,所含的信息位數(shù)目為K,校驗位數(shù)目為r=N-K,且碼中任意兩個碼字的和仍為碼字。例如,對于(5,2)分組碼,N=5,K=2,其編碼函數(shù)f為:11CM22CM31212CMMCC411CMC51212CMMCC編碼函數(shù)可知:c(碼字)=m(信息矩陣)G(生成矩陣)其中,生成矩陣為:1011101101G當生成矩陣G確定后,編碼的問題就解決了。又由編碼函數(shù)的后3個方程可以確定校驗方程,對應的矩陣形式為0TCH或0TGH,式中,H稱為一致性校驗矩陣,一致性校驗矩陣如下:111001001011001HH和G的關系為:K*KK*rGIA,K*rr*rHAI。糾錯譯碼時,若發(fā)送碼字為C,則接收序列為y,校正子**TTsyHeH,因此,可以得到譯碼cye(模2和)。其中,e稱為差錯圖樣。S是傳輸是否出錯的標志,稱為伴隨式。(5,2)線性分組碼的最小漢明距離為dmin=3,20能夠檢出2位錯誤或糾正1位錯誤。2.線性分組編碼、譯碼算法:(1)線性分組碼信道編碼:(a)輸入生成矩陣G和原序列;(b)由矩陣G得到n,k和H;(c)根據(jù)公式生成編碼。(2)線性分組碼信道譯碼:(a)輸入生成矩陣G和接收序列;(b)由矩陣G得到n,k和H;(c)根據(jù)公式生得到校正S;(d)求錯誤圖樣e;(e)譯碼cye。五、實驗步驟1.根據(jù)實驗原理能設計出線性分組編碼、譯碼程序;2.輸入矩陣G和原序列驗證編碼程序是否正確;3.輸入矩陣G和接收序列驗證譯碼程序是否正確。六、實驗報告要求1.按照本節(jié)內(nèi)容后實驗報告形式書寫;2.實驗總結和心得要詳細,可以根據(jù)自己實驗情況,寫出建議。七、實驗注意事項1.線性分組碼中生成矩陣、校驗矩陣、伴隨式之間的關系。2.在計算矩陣時,注意位操作運算。八、思考題優(yōu)化程序,提高運算速度?附錄1:實驗報告樣式:實驗報告班級:姓名:學號:組別:同組人:課程名稱:實驗室:實驗時間:(使用實驗報告紙的,以上內(nèi)容可按照實驗報告紙格式填寫)實驗六線性分組碼的信道編碼和譯碼一、實驗目的:二、實驗內(nèi)容與原理:三、實驗器材(設備、元器件、軟件工具、平臺):四、實驗步驟:21五、程序流程圖:六、實驗數(shù)據(jù)及結果分析:七、實驗結論:八、思考題:九、編程、調(diào)試過程中遇到的問題及解決方法:十、其他:實驗總結、心得體會及對本實驗方法、手段及過程的改進建議等。附錄二:附錄二:線性分組碼的信道編碼和譯碼closeall;clc;G=input('請輸入生產(chǎn)矩陣G,例如:G=[10111;01101]\nG=');G;[k,n]=size(G);r=n-k;m=input('請輸入需傳送消息m,如m=[00011011]\nm=');l=length(m);if(mod(l,k))disp('輸入消息有誤');elsege=l/k;temp1=[];fori=1:getemp1(i,:)=m(k*(i-1)+1:i*k);endm=temp1;c=mod(m*G,2);A=G(:,k+1:n);H=[A',eye(r)];disp('校驗矩陣');Hdisp('編碼矩陣');cenddisp('敲回車鍵繼續(xù)');pausey=input('輸入接收序列y,如:y=[00000011011011110010]\ny=');temp2=[];fori=1:getemp2(i,:)=y(1,n*(i-1)+1:i*n);endy=temp2s=mod(y*H',2);e=s*pinv(H');22fori=1:geforj=1:nif(e(i,j)>0.5-eps)e(i,j)=1;elsee

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論