




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、信息理論與編碼實(shí)驗(yàn)指導(dǎo)書(shū)武漢理工大學(xué)教材中心2009年7月實(shí)驗(yàn)一 繪制二進(jìn)熵函數(shù)曲線一、實(shí)驗(yàn)?zāi)康?1.熟悉 Matlab 工作環(huán)境及工具箱; 2.掌握 Matlab 繪圖函數(shù); 3.理解熵函數(shù)表達(dá)式及其性質(zhì)。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求內(nèi)容:用 Matlab 軟件繪制二進(jìn)熵函數(shù)曲線。 要求: 1. 提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀教材及相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2. 遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3. 獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4. 實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn) 1. 信源熵的概念及其性質(zhì)。參照教材及參考書(shū)。 2. 二進(jìn)熵公式: 注意:雖然
2、理論上定義 0 log0 = 0 ,但是,在實(shí)際運(yùn)算時(shí),對(duì)數(shù)函數(shù) logx 的變量 x 不能取 0 值,而應(yīng)設(shè)置一個(gè)系統(tǒng)默認(rèn)的最小值 eps 。 三、實(shí)驗(yàn)總結(jié) 1、繪制二進(jìn)熵函數(shù)曲線,觀察曲線形狀。 2、結(jié)合熵函數(shù)的性質(zhì),分析二進(jìn)熵函數(shù)曲線的特點(diǎn)。 四、思考與提高 1、繪制三元熵函數(shù)曲線,觀察曲線形狀。 2、結(jié)合熵函數(shù)的性質(zhì),分析三元熵函數(shù)曲線的特點(diǎn)。 p=0.00001:0.00001:0.99999;h=-p.*log2(p)-(1-p).*log(1-p);plot(p,h);title(二進(jìn)熵函數(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ù)圖像);實(shí)驗(yàn)二 一般信道容量迭代算法一、實(shí)驗(yàn)?zāi)康?1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握一般信道容量迭代算法的原理。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實(shí)現(xiàn)一般信道容量迭代算法。 要求: 1、提
4、前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2、遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3、獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4、實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn)::1、一般信道容量迭代算法的原理。參照教材及參考書(shū)。 2、程序流程圖如下: 其中:(1)(2)實(shí)驗(yàn)提示:1、設(shè)定不同的信道(對(duì)稱(chēng)信道、非對(duì)稱(chēng)信道),計(jì)算最佳輸入分布,分析計(jì)算結(jié)果的異同。 2、設(shè)定不同的迭代精度,分析其對(duì)計(jì)算結(jié)果的影響。 三、實(shí)驗(yàn)總結(jié) 1、信道的性質(zhì)與最佳輸入分布的關(guān)系。 2、迭代精度對(duì)計(jì)算結(jié)果的影響。 四、思考與提高 1、編制一般信道容量迭代算法的通用程序,適應(yīng)不同的信道特
5、性。 2、優(yōu)化程序,提高運(yùn)算速度。 實(shí)驗(yàn)三 二進(jìn)制霍夫曼編碼一、實(shí)驗(yàn)?zāi)康?1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握霍夫曼編碼的基本步驟;3、利用MATLAB實(shí)現(xiàn)霍夫曼編碼。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實(shí)現(xiàn)二進(jìn)制霍夫曼編碼。 要求: 1、提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2、遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3、獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4、實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn): 1、霍夫曼編碼的基本原理。參照教材及參考書(shū)。 2、二進(jìn)制霍夫曼編碼方法。 基本原理:變長(zhǎng)編碼不要求所有碼字
6、長(zhǎng)度相同,對(duì)不同概率的信源符號(hào)或序列,可賦予不同長(zhǎng)度的碼字。 變長(zhǎng)編碼力求平均碼長(zhǎng)最小,此時(shí)編碼效率最高,信源的冗余得到最大程度的壓縮。1)幾種常用變長(zhǎng)編碼方法:霍夫曼編碼費(fèi)若編碼香農(nóng)編碼。2)霍夫曼編碼:二進(jìn)制霍夫曼編碼r進(jìn)制霍夫曼編碼符號(hào)序列的霍夫曼編碼。3)二進(jìn)制霍夫曼編碼的編碼過(guò)程:將信源中n個(gè)符號(hào)按概率分布的大小,以遞減次序排列起來(lái); 用0和1碼分別分配給概率最小的兩個(gè)信源符號(hào),并將這兩個(gè)概率最小的信源符號(hào)合并成一個(gè)新符號(hào),并用這兩個(gè)最小概率之和作為新符號(hào)的概率,從而得到只包含n-1個(gè)符號(hào)的新信源,稱(chēng)為其縮減信源; 把縮減信源的符號(hào)仍按概率大小以遞減次序排列,再將最后兩個(gè)概率最小的符
7、號(hào)合并成一個(gè)新符號(hào),并分別用0和1碼表示,這樣又形成一個(gè)新縮減信源;依次繼續(xù)下去,直到縮減信源最后只剩兩個(gè)符號(hào)為止。再將最后兩個(gè)新符號(hào)分別用0和1 碼符號(hào)表示。最后這兩個(gè)符號(hào)的概率之和為1,然后從最后一級(jí)縮減信源開(kāi)始,依編碼路徑右后向前返回,就得到各信源符號(hào)所對(duì)應(yīng)得碼符號(hào)序列,即對(duì)應(yīng)得碼字。r進(jìn)制霍夫曼編碼由二進(jìn)制霍夫曼編碼可推廣到r進(jìn)制霍夫曼編碼,只是每次求縮減信源時(shí),改求r個(gè)最小概率之和,即將r個(gè)概率最小符號(hào)縮減為一個(gè)新符號(hào),直到概率之和為1。但要注意,即縮減過(guò)程中可能到最后沒(méi)有r個(gè)符號(hào)。為達(dá)次目的,可給信源添加幾個(gè)概率為零的符號(hào)。符號(hào)序列的霍夫曼編碼對(duì)信源編碼除了對(duì)信源符號(hào)編碼以外,也可
8、對(duì)信源符號(hào)序列編碼,一般來(lái)說(shuō),對(duì)序列編碼比對(duì)單個(gè)符號(hào)更為有效。實(shí)驗(yàn)提示:1、取得信源概率分布,并進(jìn)行合法性判斷;2、對(duì)信源概率分布進(jìn)行降序排列; x=fliplr(sort(x) 3、建立空的編碼表構(gòu)造一個(gè)零矩陣;B=zeros(n,n-1) 4、將信源概率分布及以后產(chǎn)生的縮減序列放入矩陣的某一列;5、利用得到的編碼矩陣獲得各元素的編碼結(jié)果并輸出。三、實(shí)驗(yàn)總結(jié) 1、變長(zhǎng)編碼和定長(zhǎng)編碼的優(yōu)缺點(diǎn)。 2、二進(jìn)制霍夫曼編碼的特點(diǎn)。 四、思考與提高 比較各種無(wú)失真信源編碼算法的優(yōu)缺點(diǎn)。實(shí)驗(yàn)四 線性分組碼的信道編碼和譯碼一、實(shí)驗(yàn)?zāi)康?1、熟悉 Matlab 工作環(huán)境及工具箱; 2、掌握線性分組碼的編碼、譯
9、碼原理以及糾錯(cuò)原理。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求 內(nèi)容:用 Matlab 軟件編程實(shí)現(xiàn)線性分組碼的信道編碼和譯碼。 要求: 1、提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2、遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3、獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4、實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn): 1、線性分組碼的編碼、譯碼原理。參照教材及參考書(shū)。 2、線性分組碼的設(shè)計(jì)。 基本原理:首先,將信息序列分成K個(gè)符號(hào)一組,然后,在信息組中加入一些校驗(yàn)碼元,組成N長(zhǎng)碼字,由此得到(N,K)分組碼。(N,K)分組碼中任一碼字的碼長(zhǎng)為N,所含的信息位數(shù)目為K,校驗(yàn)位
10、數(shù)目為r=NK,且碼中任意兩個(gè)碼字的和仍為碼字。 例如,對(duì)于(5,2)分組碼,N=5,K=2,其編碼函數(shù)f 為 由編碼函數(shù)可知: c ( 碼字 )= m( 信息矩陣 ) G (生成矩陣) 其中,生成矩陣當(dāng)生成矩陣 G 確定后,編碼的問(wèn)題就解決了。又由編碼函數(shù)的后 3 個(gè)方程可以確定校驗(yàn)方程,對(duì)應(yīng)的矩陣形式為 或 ,式中, H 稱(chēng)為一致性校驗(yàn)矩陣。 一致性校驗(yàn)矩陣如下: H 與 G 的關(guān)系: , 。 糾錯(cuò)譯碼時(shí),若發(fā)送碼字為 c ,則接收序列為 y ,校正子 S=y* =e* 。 因此,可以得到譯碼 c=ye( 模 2 和 ) 。 其中,e稱(chēng)為差錯(cuò)圖樣。S是傳輸是否出錯(cuò)的標(biāo)志,稱(chēng)為伴隨式。(5,
11、2) 線性分組碼的最小漢明距離為dmin=3,能夠檢出 2 位錯(cuò)誤或糾正 1 位錯(cuò)誤。 線性分組碼的信道編碼和譯碼流程圖: 圖 1 線性分組碼信道編碼流程圖圖 2 線性分組碼信道譯碼流程圖實(shí)驗(yàn)提示:1、線性分組碼中生成矩陣、校驗(yàn)矩陣、伴隨式之間的關(guān)系。 2、在計(jì)算矩陣時(shí),注意位操作運(yùn)算。 三、實(shí)驗(yàn)總結(jié) 1、根據(jù)不同的線性分組碼,觀察生成矩陣和校驗(yàn)矩陣的特性。 2、根據(jù)不同的線性分組碼,分析檢錯(cuò)和糾錯(cuò)能力。 四、思考與提高 1、編制線性分組碼的信道編碼和譯碼的通用程序,適應(yīng)不同的生成矩陣和校驗(yàn)矩陣。 2、優(yōu)化程序,提高運(yùn)算速度。實(shí)驗(yàn)五 分組乘積Turbo碼動(dòng)態(tài)迭代譯碼算法一、實(shí)驗(yàn)?zāi)康?1.熟悉
12、Matlab 工作環(huán)境及工具箱; 2.掌握分組乘積Turbo碼的編碼、譯碼原理。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求內(nèi)容:用 Matlab編程實(shí)現(xiàn)分組乘積Turbo碼動(dòng)態(tài)迭代譯碼仿真、并試著對(duì)其算法提出優(yōu)化方法。 要求: 1. 提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀教材及相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2. 遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3. 獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4. 實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn) 1. 分組乘積Turbo碼(簡(jiǎn)稱(chēng)TPC碼)是一類(lèi)將分組碼進(jìn)行串行級(jí)聯(lián),并采用分組交織器構(gòu)成的級(jí)聯(lián)碼,是一種構(gòu)造十分簡(jiǎn)單的糾錯(cuò)碼,它是香農(nóng)信息理論提出后第一個(gè)在
13、非零碼率時(shí)可以實(shí)現(xiàn)無(wú)誤碼傳輸?shù)募m錯(cuò)編碼。 采用迭代譯碼方法,可發(fā)揮該碼的良好性能,并特別適合于高速硬件譯碼。2. TPC碼的編碼結(jié)構(gòu)在乘積碼中,分量碼一般采用線性分組碼,其結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn)。乘積碼的編碼過(guò)程可以分為三個(gè)步驟:(1)將信息元填入一個(gè)m2行m1列的矩陣;(2)對(duì)矩陣的每一行用一個(gè)(n1,m1)系統(tǒng)分組碼k1進(jìn)行編碼,得到一個(gè)m2行n1列的矩陣;(3)對(duì)這個(gè)矩陣的每一列用一個(gè)(n2,m2)系統(tǒng)分組碼k2進(jìn)行編碼,最終得到一個(gè)n2行n1列的矩陣。這樣得到的糾錯(cuò)碼是一個(gè)(n1*n2,m1*m2)分組碼,所以稱(chēng)為乘積碼。3. TPC碼的譯碼算法Chase算法是一種找碼字D 的低復(fù)雜度的次
14、優(yōu)算法。4.TPC碼的迭代譯碼在迭代過(guò)程中行譯碼和列譯碼交替進(jìn)行,相互之間提供外信息,每進(jìn)行一次行譯碼或列譯碼可以看作半次迭代。注意: 增加迭代次數(shù)可以提高TPC碼的糾錯(cuò)性能,但是當(dāng)?shù)_(dá)到一定限度以后,譯碼性能就呈現(xiàn)出飽和的趨勢(shì)。三、實(shí)驗(yàn)總結(jié) 1、分組乘積Turbo碼動(dòng)態(tài)迭代譯碼分析、仿真。 2、針對(duì)相應(yīng)算法提出改進(jìn)意見(jiàn)。 四、思考與提高 1、當(dāng)使用不同收斂率的兩組參數(shù),比較其迭代的次數(shù),并分析那種參數(shù)可以起到改善譯碼性能的目的。實(shí)驗(yàn)六 MIMO系統(tǒng)信道容量分析一、實(shí)驗(yàn)?zāi)康?1.熟悉 Matlab 工作環(huán)境及工具箱; 2.掌握 Matlab 繪圖函數(shù); 3.理解MIMO系統(tǒng)信道容量的分析方法
15、。 二、實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)內(nèi)容與要求內(nèi)容:用 Matlab 軟件實(shí)現(xiàn)對(duì)一些典型MIMO系統(tǒng)信道容量進(jìn)行仿真。 要求: 1. 提前預(yù)習(xí)實(shí)驗(yàn),認(rèn)真閱讀教材及相應(yīng)的參考書(shū),熟悉實(shí)驗(yàn)原理; 2. 遵守實(shí)驗(yàn)室規(guī)定,實(shí)驗(yàn)過(guò)程中服從實(shí)驗(yàn)室管理人員和實(shí)驗(yàn)指導(dǎo)老師的管理; 3. 獨(dú)立完成實(shí)驗(yàn),認(rèn)真做好實(shí)驗(yàn)記錄; 4. 實(shí)驗(yàn)結(jié)束后,認(rèn)真填寫(xiě)實(shí)驗(yàn)報(bào)告。 知識(shí)要點(diǎn) 1. MIMO:多輸入多輸出無(wú)線通信系統(tǒng)。提高通信系統(tǒng)的容量和頻譜利用率,是新一代移動(dòng)通信系統(tǒng)采用的關(guān)鍵技術(shù)。2. MIMO系統(tǒng)模型MIMO系統(tǒng)的輸入輸出關(guān)系可表示為式中,xn表示從第n根發(fā)射天線發(fā)射的信號(hào)。 3. MIMO信道容量這里主要考慮當(dāng)接收機(jī)已知信道
16、狀態(tài)信息而發(fā)射機(jī)不知道信道狀態(tài)信息的信道條件在這種信道條件下,可利用三、實(shí)驗(yàn)總結(jié) 1、信道矩陣為一個(gè)確定性的數(shù)值矩陣時(shí)的信道容量。 2、信道傳輸矩陣H為全1矩陣時(shí)的情況。 四、思考與提高 1、比較MIMO系統(tǒng)與傳統(tǒng)SISO系統(tǒng)之間的區(qū)別。附錄:(參考程序)1、計(jì)算任意多個(gè)符號(hào)信源的熵function H=entropy(p)% 該函數(shù)用來(lái)計(jì)算包含任意多個(gè)符號(hào)的信源熵(比特)% p為DMS的概率分布,行向量if sum(p)=1 % 判斷是否滿(mǎn)足概率完備性 error( !不滿(mǎn)足概率完備性,請(qǐng)重新輸入信源分布) return;else L=length(p) % 得到信源符號(hào)的個(gè)數(shù) H=0; %
17、 熵值初始化為零 for i=1:L H=H-p(i)*log2(p(i); % 累加熵函數(shù)各個(gè)子項(xiàng) endendMatlab函數(shù)說(shuō)明:sum(A):求數(shù)組A的元素之和length(X):求矢量X的長(zhǎng)度log2(X):計(jì)算以2為底X的對(duì)數(shù)error:顯示錯(cuò)誤信息2、繪制二元信源熵函數(shù)曲線clc% 讓概率從一個(gè)很小的數(shù)0.000001開(kāi)始變化,步長(zhǎng)為0.001:p=0.000001:0.001:1;h=-p.*log2(p)-(1-p).*log2(1-p); % log2也可以計(jì)算矢量,結(jié)果也為矢量plot(p,h);title(二符號(hào)信源熵函數(shù)曲線);ylabel(H(p,1-p)運(yùn)行結(jié)果:
18、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ù)的圖形)程序說(shuō)明:(1)eps:極小值,避免0概率事件(2)meshgrid:語(yǔ)法X,Y = meshgrid(x,y) 將矢量x和y規(guī)定的區(qū)域變換為數(shù)組X和Y,X和
19、Y可用于計(jì)算2自變量函數(shù)或繪制3維網(wǎng)格/表面。X的各行均為矢量x;Y的各列均為矢量y。(3) nan:無(wú)效值(4)mesh:繪制網(wǎng)格曲面運(yùn)行結(jié)果:4將迭代算法用matlab代碼實(shí)現(xiàn)如下function answer=chacap(Pt)% Pt:信道矩陣% 用matalb的eps代替信道矩陣內(nèi)的元素0以避免對(duì)0取對(duì)數(shù)% C:信道容量r,s=size(Pt); % 確定輸入和輸出符號(hào)個(gè)數(shù)Pi=ones(1,r)/r; % 行向量,輸入分布初始化為等概Cn=0; % C(n)初始化為0Cn1=inf; % C(n)初始化為無(wú)窮大beta=ones(1,r); % 偏互信息的指數(shù)I=1; % 互信息
20、初始化為1while abs(Cn-Cn1)=1.0e-004 % 迭代誤差限 for k=1:r Pi(k)=Pi(k)*beta(k)/I; % 更新輸入分布 end % 以下計(jì)算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; % 各的加權(quán)平均 Cn=log(I); % Cn1=log(max(beta); % 各的最大值endC=Cn*log2(exp(1); % 比特answer
21、=sprintf(該信道的信道容量 C = %f 比特/信道符號(hào),C);程序說(shuō)明:ones:創(chuàng)建一個(gè)全1的數(shù)組inf:無(wú)窮大abs:求絕對(duì)值該程序返回字符串a(chǎn)nswer5、繪制二進(jìn)制對(duì)稱(chēng)信道平均互信息量Matlab實(shí)現(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)運(yùn)行結(jié)果:分析說(shuō)明:從圖上可以看出:信道給定的條件下,平均互信息隨信
22、源分布呈現(xiàn)上凸性,具有最大值。而在信源給定的條件下,平均互信息隨信道轉(zhuǎn)移概率呈現(xiàn)下凸性,具有最小值。6、編制LZW算法function CodeStream,CS_hexa,CS_binary,CompressionRatio=lzw(SourceSeq)% 采用8比特LZW編碼,首先構(gòu)造一個(gè)包含256個(gè)“單詞”的字典,% 可以對(duì)ASCII碼表中字符構(gòu)成的序列進(jìn)行編碼% SourceSeq:信源符號(hào)序列% CodeStream:?jiǎn)卧~位置構(gòu)成的碼流序列% CS_hexa:3位16進(jìn)制數(shù)表示的位置碼% CS_binary:12比特表示的位置碼序列% CompressionRatio:壓縮比Sour
23、ceSeq=uint8(SourceSeq);dict = cell(1,256); % 字典初始化for i = 1:256,dicti = uint8(i-1); % 用2個(gè)字節(jié)表示前綴字符endCodeStream=SourceSeq; % 輸出碼流初始化i_CS=1; % 碼流索引len_seq=length(SourceSeq);W1=; % 前綴初始化為空f(shuō)or i=1:len_seq W2=SourceSeq(i); % 讀取第i個(gè)序列符號(hào)W,必定存在于字典中 neword=W1 W2; % 組成一個(gè)新單詞neword position=poscode(neword,dict);
24、 % 在字典中查找新單詞 if isempty(position) % 字典中沒(méi)有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(CodeStream,3); % 每個(gè)位置碼用12比特(3位16進(jìn)制數(shù))來(lái)表示CS
25、_binary=dec2bin(CodeStream,12); % 每個(gè)位置碼用12比特來(lái)表示NumCodeword=length(CodeStream); % 碼字個(gè)數(shù)CompressionRatio=len_seq*8/(12*NumCodeword); % 計(jì)算壓縮比f(wàn)unction position = poscode(word,dict)position=; % 位置碼初始化為空if length(word)=1 % word只包含一個(gè)字符 position=word; % 該字符的ASCII碼即為其位置碼else % word包含多個(gè)字符 for i_dict=257:length
26、(dict) % 在字典的初始位置碼之外查找 if isequal(dicti_dict,word) % 在字典中查找到新單詞W1W2 position=i_dict; % word在字典中的位置序號(hào)即為其位置碼 end endend程序說(shuō)明:uint8:轉(zhuǎn)換為無(wú)符號(hào)整數(shù)(0255)cell:創(chuàng)建胞元數(shù)組poscode:為自編的函數(shù),實(shí)現(xiàn)在字典中查找單詞位置的功能end:數(shù)組最后的下標(biāo)7、編制算術(shù)編碼算法function codestream=arithcoder(SourceSeq,P,SymbolSet)% SourceSeq:字符串,信源符號(hào)序列% P:行矢量,信源符號(hào)概率分布% Sym
27、bolSet:字符串,信源符號(hào)集合(順序與P對(duì)應(yīng))len_seq=length(SourceSeq); % 信源序列長(zhǎng)度num_sym=length(SymbolSet); % 信源符號(hào)個(gè)數(shù)F=zeros(1,num_sym); % 符號(hào)的累計(jì)分布初始化for i=2:num_sym F(i)=F(i-1)+P(i-1); % 計(jì)算信源符號(hào)的累積概率分布函數(shù)endFF=0; % 序列的累積分布初始化A=1; % 序列對(duì)應(yīng)的區(qū)間長(zhǎng)度f(wàn)or i=1:len_seq sym=SourceSeq(i); % 讀取信源序列的第i個(gè)符號(hào) i_set=find(SymbolSet=sym); % 確定當(dāng)前符
28、號(hào)sym種子符號(hào)集的位置 FF=FF+A*F(i_set); A=A*P(i_set);endCodeLength=ceil(-log2(A); % 確定碼長(zhǎng)codeword=;for i=1:CodeLength FF=2*FF; bit=floor(FF); codeword=codeword bit; FF=FF-bit;endcodeword程序說(shuō)明:ceil:ceil(A)返回不小于A的最小整數(shù)floor:floor(A)返回不超過(guò)A的最大整數(shù)8、線性分組碼的信道編碼和譯碼MATLAB實(shí)現(xiàn):clear; clc;%編碼G=input(請(qǐng)輸入生成矩陣G,例如:G=1 0 1 1 1;0
29、 1 1 0 1n G=);k,n=size(G);r=n-k;m=input(請(qǐng)輸入需傳送信息m,如m=0 0 0 1 1 0 1 1n m=);l=length(m);if(mod(l,k) disp(輸入的信息有誤);else ge=l/k;%將輸入序列轉(zhuǎn)化成矩陣mtemp1=;for i=1:ge temp1(i,:)=m(k*(i-1)+1:i*k);endm=temp1;%求校驗(yàn)矩陣Hc=mod(m*G,2); A=G(:,k+1:n);H=A,eye(r);disp(校驗(yàn)矩陣);Hdisp(編碼矩陣);cenddisp(敲回車(chē)鍵繼續(xù)); pause%解碼y=input(輸入接收序
30、列y,如:y=0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1 0n y=);temp2=;for i=1:ge temp2(i,:)=y(1,n*(i-1)+1:i*n);endy=temp2s=mod(y*H,2);e=s*pinv(H);for i=1:ge for j=1:n if(e(i,j)0.5-eps) e(i,j)=1; else e(i,j)=0; end endendcc=mod(y+e,2);sc=cc(:,1:2);disp(差錯(cuò)圖樣); edisp(估計(jì)值); ccdisp(譯碼序列); sc附錄資料:不需要的可以自行刪除c語(yǔ)言典型問(wèn)題處理
31、方法小結(jié)循環(huán)問(wèn)題(1)、數(shù)論問(wèn)題1、求素?cái)?shù) for(i=2;i1,如果它僅有平凡約數(shù)1和a,則我們稱(chēng)a為素?cái)?shù)(或質(zhì)數(shù))。整數(shù) 1 被稱(chēng)為基數(shù),它既不是質(zhì)數(shù)也不是合數(shù)。整數(shù) 0 和所有負(fù)整數(shù)既不是素?cái)?shù),也不是合數(shù)。 2、求最大公約數(shù)和最小公倍數(shù)a、 if(ab) t=a; a=b; b=t; for(i=a;i=1;i-) if(a%i=0&b%i=0) break; printf(largest common divisor:%dn,i); printf(least common multiple:%dn,(a*b)/is);b、輾轉(zhuǎn)相除法求解 a1=a; b1=b; while(a%b!=0
32、) t=a%b; a=b; b=t; printf(largest common divisor:%dnleast common multiple:%d,b,a1*b1/b);3、求完數(shù) 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱(chēng)為“完數(shù)”。 例如:6的因子為1、2、3,而6123,因此6是“完數(shù)”。for(a=1;a=1000;a+) s=0; for(i=1;i=a) break; if(s=a) printf(%dt,a);注意S=0所放的位置 4、分解質(zhì)因數(shù) 將一個(gè)整數(shù)寫(xiě)成幾個(gè)質(zhì)因數(shù)的連乘積,如: 輸入36,則程序輸出36=2*2*3*3 。解一、看似簡(jiǎn)單,但要自己完整地寫(xiě)出來(lái)還真不容
33、易!竟然還動(dòng)用了goto語(yǔ)句,正好可以熟悉一下goto語(yǔ)句的用法!main() int a,z,i; clrscr(); scanf(%d,&a);判斷下一個(gè)數(shù)開(kāi)始有要重新從2開(kāi)始了。所以用loop語(yǔ)句回到for語(yǔ)句,這是for語(yǔ)句仍從2初始化。從2開(kāi)始的原則不變,變的是a的值。 loop: for(z=2;z=a;z+)判斷是否為質(zhì)數(shù)for(i=2;i=z;i+) if(z%i=0) break;判斷是否為a的質(zhì)因數(shù) if(z=i) if(a%z=0) k+; if(k=1) printf(%d=%d,a1,z);用計(jì)數(shù)器來(lái)解決每行輸入不同的問(wèn)題。 else printf(*%d,z); a
34、/=z; goto loop; 解二:main() int n, k=2, isfirst=1; printf(Input n=); scanf(%d,&n); while(k=n) if(n%k=0) if(isfirst) printf(%d=%d, n, k); isfirst=0; else printf(*%d,k); n/=k; else k+; printf(n);5、從鍵盤(pán)輸入兩個(gè)整數(shù),輸出這兩個(gè)整數(shù)的商的小數(shù)點(diǎn)后所有1000位整數(shù) for(i=1;i=2;i-) if(fm%i=0&fz%i=0) fz/=i; fm/=i; z=fz/fm; fzx=fz%fm; if(fz
35、x=0) printf(%d%d/%d-%d%d/%d=%dn,z1,fz1,fm1,z2,fz2,fm2,z); else if(z=0) printf(%d%d/%d-%d%d/%d=%d/%dn,z1,fz1,fm1,z2,fz2,fm2,fzx,fm); else printf(%d%d/%d-%d%d/%d=%d%d/%dn,z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);(2)近似問(wèn)題1、書(shū)P122習(xí)題4-6注意千萬(wàn)不要忘記添加#include “math.h”#include math.hmain() float x,j=1,k,s,so; int n; scan
36、f(%f,&x); s=x; so=x+1; for(n=1;fabs(s-so)1e-6;n+) for(k=1;k1e-6) x=(x1+x2)/2; f=x*x*x+4*x*x-10;可以用/*if(f*f10) x2=x; else x1=x; printf(%fn,x);(3)枚舉法(4)數(shù)列問(wèn)題二、數(shù)組問(wèn)題(1)排序問(wèn)題1、從小到大排序main() int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i10;i+) for(j=0;jaj+1) t=aj+1;aj+1=aj;aj=t; for(i=0;i10;i+) prin
37、tf(%d ,ai); printf(n);注意排序問(wèn)題:1、須迅速,熟練,無(wú)差錯(cuò)經(jīng)常插入在程序中間2、現(xiàn)使用最大數(shù)下沉冒泡法還可以使用最小數(shù)上浮冒泡法3、j控制前面一個(gè)數(shù)和后面一個(gè)數(shù)一一比較。由于是最大數(shù)下沉,i+1后j仍要從0開(kāi)始。4、i控制這樣的操作一共要做多少次5、注意i j的控制次數(shù)2、從大到小排序main()現(xiàn)使用最大數(shù)上浮冒泡法還可使用最小數(shù)下沉冒泡法 int a10,i,j,t; for(i=0;i10;i+) scanf(%d,&ai); for(i=1;i=i;j-) if(ajaj-1) t=aj-1; aj-1=aj; aj=t; for(i=0;i10;i+) pri
38、ntf(%d ,ai);(2)二維數(shù)組三、字符或字符串輸入輸出問(wèn)題(1)字符打印1、打印*此類(lèi)題的溯源為書(shū)P122 4.11(1),其他題都是它的拓展 for (i=1;i=n;i+) 一共要輸出的行數(shù) for(j=1;j=i;j+) 每行要打印的*數(shù) printf(*); printf(n); a、*解題要點(diǎn):此類(lèi)題關(guān)鍵在于找到每行要打印的個(gè)數(shù)和行數(shù)的關(guān)系。此題j=i j=n-i+1b、* for(i=1;i=n;i+) 一共要輸出的行數(shù) for(j=1;j=n-i;j+) 控制空格數(shù) printf( ); for(k=1;k=i;k+) 每行要打印的*數(shù) printf(*); printf
39、(n); c、 * * *解題要點(diǎn):在出現(xiàn)空格的時(shí)候,在找到每行要打印的*個(gè)數(shù)和行數(shù)的關(guān)系后,還應(yīng)找到空格和行數(shù)的關(guān)系,分不同的參數(shù)進(jìn)行循環(huán)。此題k=i j=n-i j=i-1k=n-i+1d、* * for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * *e、 * * * for(i=1;i=n-1;i+) for(j=1;j=i;j+) printf( ); for(k=1;k=2*(n-1-i)+1;k+) printf(*); printf(n); for(i=1
40、;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n); * * * * * *2、打印9*9乘法表解題要點(diǎn):注意尋找行與列的規(guī)律。i*ji代表列j代表行for(i=1;i=9;i+) for(j=1;j=9;j+) printf(%-3d ,i*j); 注意輸出格式的控制 printf(n); 3、九九乘法表1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 21 24 27 9 18 27 36 45 54 63 72 814、楊暉三
41、角形11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1(2)字符串打印問(wèn)題for(i=1;i=7;i+) ai1=1; aii=1; for(i=3;i=7;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; gets(a); puts(a); for(i=1;i0;j-) aj=aj-1; a0=t; for(k=0;k=a&ai=z) ai-=32; puts (a);3、逆序輸出gets (a); c=strlen(a); for(i=0;i=0;i-) 藍(lán)色部分可以簡(jiǎn)寫(xiě)為綠色部分coutai-1;4
42、、如輸入:ab1 3,;z 輸出:ab1注意點(diǎn):1、= =2、while語(yǔ)句的使用處體會(huì)3、全面考慮問(wèn)題 3,;zgets(a); while(a0= ) for(i=0;ai!=0;i+) ai=ai+1; for(i=0;ai!=0;i+)if(ai= &ai+1!= ) printf(n); else if(ai= &ai+1= ) for(k=i;ak!=0;k+) ak+1=ak+2; i-; elseprintf(%c,ai);5、輸入3個(gè)字符串,按從小到大排序輸出這3個(gè)字符串。 使用一個(gè)兩維數(shù)組貯存多個(gè)字符串char a8181;注意:如何使用一個(gè)兩維數(shù)組貯存多個(gè)字符串 int
43、i,j; for(i=0;i3;i+) gets(ai); for(i=0;i3;i+) puts(ai);注意:1、scanf(%d%s,&n,str) 其中%s為字符串格式2、逐個(gè)給字符串賦值的方法見(jiàn)書(shū)140頁(yè)。 不可for(i=0;ai!=0;i+)3、stri=stri-A+10;4、pow函數(shù)5、任何進(jìn)制轉(zhuǎn)為十進(jìn)制的方法6、輸入一個(gè)整數(shù)n和一個(gè)字符串str,計(jì)算并輸出n進(jìn)制數(shù)str的值。 如輸入:7 16則輸出:13(16)7=(13)10如輸入:16 3A則輸出:58(3A)16=(58)10#include stdio.h#include math.hmain() char st
44、r81; int n,i,s=0,t; clrscr(); scanf(%d%s,&n,str); for(i=0;stri!=0;i+) if(stri=A) stri=stri-A+10; else stri=stri-0; t=strlen(str); for(i=0;stri!=0;i+) s+=strt-i-1*pow(n,i); printf(%d,s);編寫(xiě)程序,將一個(gè)十進(jìn)制正整數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)。 注意類(lèi)比#include main()char a20;int x,i=0,j;clrscr();scanf(%d,&x);while(x) if(x%16=10&x%16=0;j-
45、)printf(%c,aj);printf(n);7、輸入一個(gè)字符串,將其中的縮寫(xiě)形式展開(kāi),并輸出展開(kāi)后的該字符串。所謂展開(kāi)縮寫(xiě)形式就是將其中由大小寫(xiě)字母或數(shù)字構(gòu)成的形如a-f、U-Z、3-8 的形式展開(kāi)成為 abcdef 、UVWXYZ 、345678,若出現(xiàn)f-a、A-7、9-5等形式則不予理睬。例如: 輸入:qwe246e-hA-d$-%4-7A-Dz-xp-R4-0輸出:qwr246efghA-d$-%4567ABCDz-xp-R4-0main() char a81; int i,c,s,k,t; gets(a); for(i=0;ai!=0;i+) if(ai=-) if(ai-1=
46、A&ai+1=a&ai+1=0&ai+1i;k-)ak+c-2=ak;as-1+c-2+1=0; for(;i=t;i+) ai=ai-1+1; puts(a);補(bǔ)充:循環(huán):求:a+aa+aaa+.的值#includevoid main()int a,n,i=1,sn=0,tn=0;coutinput a and nan;while(i=n)tn=tn+a;sn+=tn;a*=10;i+;coutthe answer is snendl;兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3人。甲隊(duì)為A,B,C;已對(duì)是X,Y,Z;已經(jīng)抽簽決定比賽名單。有人向隊(duì)員大廳比賽的名單。A說(shuō)他不和X比,C說(shuō)他不和X,Z比。請(qǐng)編程
47、序找出3對(duì)賽手的名單。#includevoid main()char i,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)if(i!=j)for (k=X;k=Z;k+)if(i!=k&j!=k)if(i!=X&k!=X&k!=Z)coutA-i B-j C-kendl;枚舉口袋中有紅,黃,藍(lán),白,黑5種顏色的球若干。每次從口袋中任意取出3歌,問(wèn)得到3種不同顏色球的可能取法,輸出每種排列的情況。#include#include /在C語(yǔ)言中不用加這句void main()enum colorred ,yellow ,blue,white, black;color pri;int i,j,k,n=0,loop;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for (k=red;k=black;k+)if(k!=i)&(k!=j)n+;coutsetw(3)n; /setw是輸出格式的限定for(loop=1;loop=3;loop+)switch(loop)case 1:pri=color(i);break;case 2:pri=color(j);break;case 3:pri=color(k);break;default:break;switc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025高速公路工程施工合同
- 2025美團(tuán)酒店預(yù)訂合同協(xié)議
- 2025標(biāo)準(zhǔn)房屋租賃合同簡(jiǎn)化版范本
- 2025如何補(bǔ)辦丟失的勞動(dòng)合同證明
- 2025簡(jiǎn)易版權(quán)轉(zhuǎn)讓合同
- 2025專(zhuān)利權(quán)許可合同模板
- 2025電梯行業(yè)勞動(dòng)合同范本
- 2025設(shè)備租賃合同與協(xié)議書(shū)范本
- 2025存量房買(mǎi)賣(mài)合同書(shū)
- 2025融資租賃合同的相關(guān)法律特征
- 2025至2030中國(guó)射頻芯片市場(chǎng)趨勢(shì)展望及需求前景研究報(bào)告
- 應(yīng)急急救知識(shí)課件
- 文綜中考試卷及答案解析
- GB 2759-2015食品安全國(guó)家標(biāo)準(zhǔn)冷凍飲品和制作料
- 加速康復(fù)外科(ERAS)骨科患者疼痛知識(shí)、術(shù)后疼痛機(jī)體影響和陣痛原則方法
- 合同交底范本課件
- 阿瑪松氣吸式精量播種機(jī)課件
- 試卷講評(píng)課市公開(kāi)課一等獎(jiǎng)市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件
- 新人教版八年級(jí)下冊(cè)《生物》期中試卷及答案
- 路面級(jí)配砂礫石墊層施工總結(jié)報(bào)告
- 變壓器容量計(jì)算表
評(píng)論
0/150
提交評(píng)論