信息理論與編碼實驗指導書_第1頁
信息理論與編碼實驗指導書_第2頁
信息理論與編碼實驗指導書_第3頁
信息理論與編碼實驗指導書_第4頁
信息理論與編碼實驗指導書_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、信息理論與編碼實驗指導書武漢理工大學教材中心2009年7月實驗一 繪制二進熵函數(shù)曲線一、實驗目的 1.熟悉 Matlab 工作環(huán)境及工具箱; 2.掌握 Matlab 繪圖函數(shù); 3.理解熵函數(shù)表達式及其性質。 二、實驗內(nèi)容 實驗內(nèi)容與要求內(nèi)容:用 Matlab 軟件繪制二進熵函數(shù)曲線。 要求: 1. 提前預習實驗,認真閱讀教材及相應的參考書,熟悉實驗原理; 2. 遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3. 獨立完成實驗,認真做好實驗記錄; 4. 實驗結束后,認真填寫實驗報告。 知識要點 1. 信源熵的概念及其性質。參照教材及參考書。 2. 二進熵公式: 注意:雖然

2、理論上定義 0 log0 = 0 ,但是,在實際運算時,對數(shù)函數(shù) logx 的變量 x 不能取 0 值,而應設置一個系統(tǒng)默認的最小值 eps 。 三、實驗總結 1、繪制二進熵函數(shù)曲線,觀察曲線形狀。 2、結合熵函數(shù)的性質,分析二進熵函數(shù)曲線的特點。 四、思考與提高 1、繪制三元熵函數(shù)曲線,觀察曲線形狀。 2、結合熵函數(shù)的性質,分析三元熵函數(shù)曲線的特點。 p=0.00001:0.00001:0.99999;h=-p.*log2(p)-(1-p).*log(1-p);plot(p,h);title(二進熵函數(shù)曲線);ylabel(H(p,1-p);p=linspace(eps,1-eps,100)

3、;q=linspace(eps,1-eps,100);P,Q=meshgrid(p,q);P_Q=P+Q;for n=1:100 for m=1:100 if P_Q(n,m)=1 Q(n,m)=nan; end endendH=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q);mesh(P,Q,H);title(三維熵函數(shù)圖像);實驗二 一般信道容量迭代算法一、實驗目的 1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握一般信道容量迭代算法的原理。 二、實驗內(nèi)容 實驗內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實現(xiàn)一般信道容量迭代算法。 要求: 1、提

4、前預習實驗,認真閱讀相應的參考書,熟悉實驗原理; 2、遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3、獨立完成實驗,認真做好實驗記錄; 4、實驗結束后,認真填寫實驗報告。 知識要點::1、一般信道容量迭代算法的原理。參照教材及參考書。 2、程序流程圖如下: 其中:(1)(2)實驗提示:1、設定不同的信道(對稱信道、非對稱信道),計算最佳輸入分布,分析計算結果的異同。 2、設定不同的迭代精度,分析其對計算結果的影響。 三、實驗總結 1、信道的性質與最佳輸入分布的關系。 2、迭代精度對計算結果的影響。 四、思考與提高 1、編制一般信道容量迭代算法的通用程序,適應不同的信道特

5、性。 2、優(yōu)化程序,提高運算速度。 實驗三 二進制霍夫曼編碼一、實驗目的 1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握霍夫曼編碼的基本步驟;3、利用MATLAB實現(xiàn)霍夫曼編碼。 二、實驗內(nèi)容 實驗內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實現(xiàn)二進制霍夫曼編碼。 要求: 1、提前預習實驗,認真閱讀相應的參考書,熟悉實驗原理; 2、遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3、獨立完成實驗,認真做好實驗記錄; 4、實驗結束后,認真填寫實驗報告。 知識要點: 1、霍夫曼編碼的基本原理。參照教材及參考書。 2、二進制霍夫曼編碼方法。 基本原理:變長編碼不要求所有碼字

6、長度相同,對不同概率的信源符號或序列,可賦予不同長度的碼字。 變長編碼力求平均碼長最小,此時編碼效率最高,信源的冗余得到最大程度的壓縮。1)幾種常用變長編碼方法:霍夫曼編碼費若編碼香農(nóng)編碼。2)霍夫曼編碼:二進制霍夫曼編碼r進制霍夫曼編碼符號序列的霍夫曼編碼。3)二進制霍夫曼編碼的編碼過程:將信源中n個符號按概率分布的大小,以遞減次序排列起來; 用0和1碼分別分配給概率最小的兩個信源符號,并將這兩個概率最小的信源符號合并成一個新符號,并用這兩個最小概率之和作為新符號的概率,從而得到只包含n-1個符號的新信源,稱為其縮減信源; 把縮減信源的符號仍按概率大小以遞減次序排列,再將最后兩個概率最小的符

7、號合并成一個新符號,并分別用0和1碼表示,這樣又形成一個新縮減信源;依次繼續(xù)下去,直到縮減信源最后只剩兩個符號為止。再將最后兩個新符號分別用0和1 碼符號表示。最后這兩個符號的概率之和為1,然后從最后一級縮減信源開始,依編碼路徑右后向前返回,就得到各信源符號所對應得碼符號序列,即對應得碼字。r進制霍夫曼編碼由二進制霍夫曼編碼可推廣到r進制霍夫曼編碼,只是每次求縮減信源時,改求r個最小概率之和,即將r個概率最小符號縮減為一個新符號,直到概率之和為1。但要注意,即縮減過程中可能到最后沒有r個符號。為達次目的,可給信源添加幾個概率為零的符號。符號序列的霍夫曼編碼對信源編碼除了對信源符號編碼以外,也可

8、對信源符號序列編碼,一般來說,對序列編碼比對單個符號更為有效。實驗提示:1、取得信源概率分布,并進行合法性判斷;2、對信源概率分布進行降序排列; x=fliplr(sort(x) 3、建立空的編碼表構造一個零矩陣;B=zeros(n,n-1) 4、將信源概率分布及以后產(chǎn)生的縮減序列放入矩陣的某一列;5、利用得到的編碼矩陣獲得各元素的編碼結果并輸出。三、實驗總結 1、變長編碼和定長編碼的優(yōu)缺點。 2、二進制霍夫曼編碼的特點。 四、思考與提高 比較各種無失真信源編碼算法的優(yōu)缺點。實驗四 線性分組碼的信道編碼和譯碼一、實驗目的 1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握線性分組碼的編碼、譯

9、碼原理以及糾錯原理。 二、實驗內(nèi)容 實驗內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實現(xiàn)線性分組碼的信道編碼和譯碼。 要求: 1、提前預習實驗,認真閱讀相應的參考書,熟悉實驗原理; 2、遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3、獨立完成實驗,認真做好實驗記錄; 4、實驗結束后,認真填寫實驗報告。 知識要點: 1、線性分組碼的編碼、譯碼原理。參照教材及參考書。 2、線性分組碼的設計。 基本原理:首先,將信息序列分成K個符號一組,然后,在信息組中加入一些校驗碼元,組成N長碼字,由此得到(N,K)分組碼。(N,K)分組碼中任一碼字的碼長為N,所含的信息位數(shù)目為K,校驗位

10、數(shù)目為r=NK,且碼中任意兩個碼字的和仍為碼字。 例如,對于(5,2)分組碼,N=5,K=2,其編碼函數(shù)f 為 由編碼函數(shù)可知: c ( 碼字 )= m( 信息矩陣 ) G (生成矩陣) 其中,生成矩陣當生成矩陣 G 確定后,編碼的問題就解決了。又由編碼函數(shù)的后 3 個方程可以確定校驗方程,對應的矩陣形式為 或 ,式中, H 稱為一致性校驗矩陣。 一致性校驗矩陣如下: H 與 G 的關系: , 。 糾錯譯碼時,若發(fā)送碼字為 c ,則接收序列為 y ,校正子 S=y* =e* 。 因此,可以得到譯碼 c=ye( 模 2 和 ) 。 其中,e稱為差錯圖樣。S是傳輸是否出錯的標志,稱為伴隨式。(5,

11、2) 線性分組碼的最小漢明距離為dmin=3,能夠檢出 2 位錯誤或糾正 1 位錯誤。 線性分組碼的信道編碼和譯碼流程圖: 圖 1 線性分組碼信道編碼流程圖圖 2 線性分組碼信道譯碼流程圖實驗提示:1、線性分組碼中生成矩陣、校驗矩陣、伴隨式之間的關系。 2、在計算矩陣時,注意位操作運算。 三、實驗總結 1、根據(jù)不同的線性分組碼,觀察生成矩陣和校驗矩陣的特性。 2、根據(jù)不同的線性分組碼,分析檢錯和糾錯能力。 四、思考與提高 1、編制線性分組碼的信道編碼和譯碼的通用程序,適應不同的生成矩陣和校驗矩陣。 2、優(yōu)化程序,提高運算速度。實驗五 分組乘積Turbo碼動態(tài)迭代譯碼算法一、實驗目的 1.熟悉

12、Matlab 工作環(huán)境及工具箱; 2.掌握分組乘積Turbo碼的編碼、譯碼原理。 二、實驗內(nèi)容 實驗內(nèi)容與要求內(nèi)容:用 Matlab編程實現(xiàn)分組乘積Turbo碼動態(tài)迭代譯碼仿真、并試著對其算法提出優(yōu)化方法。 要求: 1. 提前預習實驗,認真閱讀教材及相應的參考書,熟悉實驗原理; 2. 遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3. 獨立完成實驗,認真做好實驗記錄; 4. 實驗結束后,認真填寫實驗報告。 知識要點 1. 分組乘積Turbo碼(簡稱TPC碼)是一類將分組碼進行串行級聯(lián),并采用分組交織器構成的級聯(lián)碼,是一種構造十分簡單的糾錯碼,它是香農(nóng)信息理論提出后第一個在

13、非零碼率時可以實現(xiàn)無誤碼傳輸?shù)募m錯編碼。 采用迭代譯碼方法,可發(fā)揮該碼的良好性能,并特別適合于高速硬件譯碼。2. TPC碼的編碼結構在乘積碼中,分量碼一般采用線性分組碼,其結構簡單,易于實現(xiàn)。乘積碼的編碼過程可以分為三個步驟:(1)將信息元填入一個m2行m1列的矩陣;(2)對矩陣的每一行用一個(n1,m1)系統(tǒng)分組碼k1進行編碼,得到一個m2行n1列的矩陣;(3)對這個矩陣的每一列用一個(n2,m2)系統(tǒng)分組碼k2進行編碼,最終得到一個n2行n1列的矩陣。這樣得到的糾錯碼是一個(n1*n2,m1*m2)分組碼,所以稱為乘積碼。3. TPC碼的譯碼算法Chase算法是一種找碼字D 的低復雜度的次

14、優(yōu)算法。4.TPC碼的迭代譯碼在迭代過程中行譯碼和列譯碼交替進行,相互之間提供外信息,每進行一次行譯碼或列譯碼可以看作半次迭代。注意: 增加迭代次數(shù)可以提高TPC碼的糾錯性能,但是當?shù)_到一定限度以后,譯碼性能就呈現(xiàn)出飽和的趨勢。三、實驗總結 1、分組乘積Turbo碼動態(tài)迭代譯碼分析、仿真。 2、針對相應算法提出改進意見。 四、思考與提高 1、當使用不同收斂率的兩組參數(shù),比較其迭代的次數(shù),并分析那種參數(shù)可以起到改善譯碼性能的目的。實驗六 MIMO系統(tǒng)信道容量分析一、實驗目的 1.熟悉 Matlab 工作環(huán)境及工具箱; 2.掌握 Matlab 繪圖函數(shù); 3.理解MIMO系統(tǒng)信道容量的分析方法

15、。 二、實驗內(nèi)容 實驗內(nèi)容與要求內(nèi)容:用 Matlab 軟件實現(xiàn)對一些典型MIMO系統(tǒng)信道容量進行仿真。 要求: 1. 提前預習實驗,認真閱讀教材及相應的參考書,熟悉實驗原理; 2. 遵守實驗室規(guī)定,實驗過程中服從實驗室管理人員和實驗指導老師的管理; 3. 獨立完成實驗,認真做好實驗記錄; 4. 實驗結束后,認真填寫實驗報告。 知識要點 1. MIMO:多輸入多輸出無線通信系統(tǒng)。提高通信系統(tǒng)的容量和頻譜利用率,是新一代移動通信系統(tǒng)采用的關鍵技術。2. MIMO系統(tǒng)模型MIMO系統(tǒng)的輸入輸出關系可表示為式中,xn表示從第n根發(fā)射天線發(fā)射的信號。 3. MIMO信道容量這里主要考慮當接收機已知信道

16、狀態(tài)信息而發(fā)射機不知道信道狀態(tài)信息的信道條件在這種信道條件下,可利用三、實驗總結 1、信道矩陣為一個確定性的數(shù)值矩陣時的信道容量。 2、信道傳輸矩陣H為全1矩陣時的情況。 四、思考與提高 1、比較MIMO系統(tǒng)與傳統(tǒng)SISO系統(tǒng)之間的區(qū)別。附錄:(參考程序)1、計算任意多個符號信源的熵function H=entropy(p)% 該函數(shù)用來計算包含任意多個符號的信源熵(比特)% p為DMS的概率分布,行向量if sum(p)=1 % 判斷是否滿足概率完備性 error( !不滿足概率完備性,請重新輸入信源分布) return;else L=length(p) % 得到信源符號的個數(shù) H=0; %

17、 熵值初始化為零 for i=1:L H=H-p(i)*log2(p(i); % 累加熵函數(shù)各個子項 endendMatlab函數(shù)說明:(1) sum(A):求數(shù)組A的元素之和(2) length(X):求矢量X的長度(3) log2(X):計算以2為底X的對數(shù)(4) error:顯示錯誤信息2、繪制二元信源熵函數(shù)曲線clc% 讓概率從一個很小的數(shù)0.000001開始變化,步長為0.001:p=0.000001:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p); % log2也可以計算矢量,結果也為矢量plot(p,h);title(二符號信源熵函數(shù)曲線);ylab

18、el(H(p,1-p)運行結果:3、繪制三元熵函數(shù)曲線p=linspace(eps,1-eps,100);q=linspace(eps,1-eps,100);P,Q=meshgrid(p,q);P_Q=P+Q;for n=1:100 for m=1:100 if P_Q(n,m)=1 Q(n,m)=nan; end endendH=-P.*log2(P)-Q.*log2(Q)-(1-P-Q).*log2(1-P-Q);mesh(P,Q,H)title(三維熵函數(shù)的圖形)程序說明:(1)eps:極小值,避免0概率事件(2)meshgrid:語法X,Y = meshgrid(x,y) 將矢量x和y

19、規(guī)定的區(qū)域變換為數(shù)組X和Y,X和Y可用于計算2自變量函數(shù)或繪制3維網(wǎng)格/表面。X的各行均為矢量x;Y的各列均為矢量y。(3) nan:無效值(4)mesh:繪制網(wǎng)格曲面運行結果:4將迭代算法用matlab代碼實現(xiàn)如下function answer=chacap(Pt)% Pt:信道矩陣% 用matalb的eps代替信道矩陣內(nèi)的元素0以避免對0取對數(shù)% C:信道容量r,s=size(Pt); % 確定輸入和輸出符號個數(shù)Pi=ones(1,r)/r; % 行向量,輸入分布初始化為等概Cn=0; % C(n)初始化為0Cn1=inf; % C(n)初始化為無窮大beta=ones(1,r); % 偏

20、互信息的指數(shù)I=1; % 互信息初始化為1while abs(Cn-Cn1)=1.0e-004 % 迭代誤差限 for k=1:r Pi(k)=Pi(k)*beta(k)/I; % 更新輸入分布 end % 以下計算beta(k): Po=Pi*Pt ; % 輸出概率 for k=1:r bt=0; % 中間變量 for j=1:s bt=bt+Pt(k,j)*log(Pt(k,j)/Po(j); end beta(k)=exp(bt); end I=Pi*beta; % 各的加權平均 Cn=log(I); % Cn1=log(max(beta); % 各的最大值endC=Cn*log2(ex

21、p(1); % 比特answer=sprintf(該信道的信道容量 C = %f 比特/信道符號,C);程序說明:(1) ones:創(chuàng)建一個全1的數(shù)組(2) inf:無窮大(3) abs:求絕對值(4) 該程序返回字符串a(chǎn)nswer5、繪制二進制對稱信道平均互信息量Matlab實現(xiàn)p,q=meshgrid(0.000001:0.01:1,0.000001:0.01:1);Hnoise=-p.*log2(p)-(1-p).*log2(1-p); % 噪聲熵x=(1-p).*q+p.*(1-q);I=-x.*log2(x)-(1-x).*log2(1-x)-Hnoise;mesh(p,q,I)運行

22、結果:分析說明:從圖上可以看出:信道給定的條件下,平均互信息隨信源分布呈現(xiàn)上凸性,具有最大值。而在信源給定的條件下,平均互信息隨信道轉移概率呈現(xiàn)下凸性,具有最小值。6、編制LZW算法function CodeStream,CS_hexa,CS_binary,CompressionRatio=lzw(SourceSeq)% 采用8比特LZW編碼,首先構造一個包含256個“單詞”的字典,% 可以對ASCII碼表中字符構成的序列進行編碼% SourceSeq:信源符號序列% CodeStream:單詞位置構成的碼流序列% CS_hexa:3位16進制數(shù)表示的位置碼% CS_binary:12比特表示

23、的位置碼序列% CompressionRatio:壓縮比SourceSeq=uint8(SourceSeq);dict = cell(1,256); % 字典初始化for i = 1:256,dicti = uint8(i-1); % 用2個字節(jié)表示前綴字符endCodeStream=SourceSeq; % 輸出碼流初始化i_CS=1; % 碼流索引len_seq=length(SourceSeq);W1=; % 前綴初始化為空for i=1:len_seq W2=SourceSeq(i); % 讀取第i個序列符號W,必定存在于字典中 neword=W1 W2; % 組成一個新單詞newor

24、d position=poscode(neword,dict); % 在字典中查找新單詞 if isempty(position) % 字典中沒有neword dictend+1=neword; % 將新單詞添加到字典中 ps=poscode(W1,dict); % 獲得W1的位置碼 CodeStream(i_CS)=ps; % 輸出W1的位置碼 W1=W2; % 前綴更新為W2 i_CS=i_CS+1; % else % 字典中已有新單詞 W1=neword; % 更新前綴為新單詞 endendCodeStream(i_CS+1:end)=;CS_hexa=dec2hex(CodeStrea

25、m,3); % 每個位置碼用12比特(3位16進制數(shù))來表示CS_binary=dec2bin(CodeStream,12); % 每個位置碼用12比特來表示NumCodeword=length(CodeStream); % 碼字個數(shù)CompressionRatio=len_seq*8/(12*NumCodeword); % 計算壓縮比function position = poscode(word,dict)position=; % 位置碼初始化為空if length(word)=1 % word只包含一個字符 position=word; % 該字符的ASCII碼即為其位置碼else %

26、word包含多個字符 for i_dict=257:length(dict) % 在字典的初始位置碼之外查找 if isequal(dicti_dict,word) % 在字典中查找到新單詞W1W2 position=i_dict; % word在字典中的位置序號即為其位置碼 end endend程序說明:a) uint8:轉換為無符號整數(shù)(0255)b) cell:創(chuàng)建胞元數(shù)組c) poscode:為自編的函數(shù),實現(xiàn)在字典中查找單詞位置的功能d) end:數(shù)組最后的下標7、編制算術編碼算法function codestream=arithcoder(SourceSeq,P,SymbolSet

27、)% SourceSeq:字符串,信源符號序列% P:行矢量,信源符號概率分布% SymbolSet:字符串,信源符號集合(順序與P對應)len_seq=length(SourceSeq); % 信源序列長度num_sym=length(SymbolSet); % 信源符號個數(shù)F=zeros(1,num_sym); % 符號的累計分布初始化for i=2:num_sym F(i)=F(i-1)+P(i-1); % 計算信源符號的累積概率分布函數(shù)endFF=0; % 序列的累積分布初始化A=1; % 序列對應的區(qū)間長度for i=1:len_seq sym=SourceSeq(i); % 讀取信源序列的第i個符號 i_set=find(Sym

溫馨提示

  • 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

提交評論