用C語言實現(xiàn)線性分組碼的編譯碼(共38頁)_第1頁
用C語言實現(xiàn)線性分組碼的編譯碼(共38頁)_第2頁
用C語言實現(xiàn)線性分組碼的編譯碼(共38頁)_第3頁
用C語言實現(xiàn)線性分組碼的編譯碼(共38頁)_第4頁
用C語言實現(xiàn)線性分組碼的編譯碼(共38頁)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上*實踐教學* 2011年春季學期 計算機通信 課程設計 題 目: 線性分組碼的編譯碼軟件設計 專業(yè)班級: 姓 名: 學 號: 指導教師: 成 績: 專心-專注-專業(yè)摘 要本次課程設計是線性分組碼的編譯碼軟件設計,該軟件可以對輸入的多個四位信息碼進行Hamming編碼,對于接收的多個七位信息碼可以進行譯碼,從而譯出四位信息位。當接收的信息碼中有一位錯誤時,可以糾正這一位錯碼,進而譯出正確的信息碼組,整個程序是用C語言編寫的。關鍵詞:線性分組碼;編碼;譯碼;糾錯;檢錯目 錄前言數(shù)字通信系統(tǒng)是以數(shù)字信號的形式來傳遞信息的一種通信系統(tǒng)。它所包括的范圍很廣,從現(xiàn)在的市話通信系統(tǒng)

2、、數(shù)字蜂窩系統(tǒng)、計算機通信系統(tǒng)到雷達系統(tǒng)、遙控測控系統(tǒng)、計算機運算和存儲系統(tǒng)等都是數(shù)字通信系統(tǒng)。所有數(shù)字通信系統(tǒng)都可歸結為如圖1所示的模型。信道編碼器信源編碼器信源調(diào)制器(讀出單元)調(diào)制器(存儲媒質)調(diào)制器(寫入單元)噪聲源信道譯碼器信源譯碼器信宿圖1 數(shù)字通信系統(tǒng)模型圖1中,信源編碼器把信源發(fā)出的消息如語言、圖像、文字等轉換成為二進制(也可以轉換成為多進制)形式的信息序列,并且為了傳輸有效,還去掉一些與傳輸信息無關的冗余。有時為了保密,信源編碼器后還可以接上加密器。為了抗擊傳輸過程中的各種干擾,往往要認為地增加一些冗余,使系統(tǒng)具有自動檢錯和糾錯能力,這種功能由圖中的信道編碼器即糾錯編碼器完成

3、。調(diào)制器的功能是把糾錯編碼器送出的信息序列通過調(diào)制器變換成適合于信道傳輸?shù)男盘?。?shù)字信號在信道傳輸過程中,總會遇到各種干擾而使信號失真,這種失真信號傳輸?shù)浇邮斩说慕庹{(diào)器進行解調(diào),變成二進制信息(多進制)序列。由于信道干擾的影響,該信息序列中可能有錯誤,經(jīng)過信道譯碼器即糾錯碼譯碼器,對其中的錯誤進行糾正,再通過信源譯碼器(及解密器)恢復成原來的消息送給用戶。從上可知,信道編碼是用來控制有擾信道對信息序列所產(chǎn)生的差錯,故也稱為差錯控制編碼。這種方法是提高數(shù)字通信可靠性的有效方法,也是目前較為流行的差錯控制編碼技術。分組碼是一組固定長度的碼組,可表示為(n , k),通常它用于前向糾錯。在分組碼中,

4、監(jiān)督位被加到信息位之后,形成新的碼。在編碼時,k個信息位被編為n位碼組長度,而n-k個監(jiān)督位的作用就是實現(xiàn)檢錯與糾錯。這種碼的編碼效率比較高,因此得到了廣泛的應用。一、C語言簡介1.1 什么是C語言C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie于1972年推出。1978后,C語言已先后被移植到大、中、小及微型機上。它可以作為工作系統(tǒng)設計語言,編寫系統(tǒng)應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用范圍廣泛,具備很強的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系

5、統(tǒng)軟件,三維,二維圖形和動畫。具體應用比如單片機以及嵌入式系統(tǒng)開發(fā)。1.2 C語言的特點一種語言之所以能存在和發(fā)展,并具有較強的生命力,總是有不同于其他語言的特點。主要的優(yōu)缺點介紹如下。優(yōu)點l 簡潔緊湊、靈活方便。C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區(qū)分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C語言可以像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。 l 運算符豐富。C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值。強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使

6、用各種運算符可以實現(xiàn)在其它高級語言中難以實現(xiàn)的運算。 l 數(shù)據(jù)類型豐富。C語言的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結構體類型、共用體類型等。能用來實現(xiàn)各種復雜的數(shù)據(jù)結構運算。并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。l C是結構式語言。結構式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便于使用、維護以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結構化。 l 語法限

7、制不太嚴格,程序設計自由度大。雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。 l 允許直接訪問物理地址,對硬件進行操作。由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統(tǒng)軟件。l 生成目標代碼質量高,程序執(zhí)行效率高。一般只比匯編程序生成的目標代碼效率低1020%。l 適用范圍大,可移植性好。C語言有一個突出的優(yōu)點就是適合于多種操作系統(tǒng),如DOS、UNIX、windows 98windows NT;也適用于多種機型。C

8、語言具有強大的繪圖能力,可移植性好,并具備很強的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,它也是數(shù)值計算的高級語言。 缺點l C語言的缺點主要表現(xiàn)在數(shù)據(jù)的封裝性上,這一點使得C在數(shù)據(jù)的安全性上有很大缺陷,這也是C和C+的一大區(qū)別。 l C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數(shù)組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。1.3 運行C程序的步驟與方法為了使計算機能按照人的意志進行工作,必須根據(jù)問題的要求,編寫出相應的程序。為了使計算機能執(zhí)行高級語言源程序,必須先用一種稱為“編譯程序”的軟件,把源程序翻譯成二進制形式的“目標程序

9、”,然后再將該目標程序與系統(tǒng)的函數(shù)庫以及其他目標程序連接起來,形成可執(zhí)行的目標程序。在編好一個C源程序后如何上機運行呢?在紙上寫好一個程序后,要經(jīng)過這樣幾個步驟:上機輸入與編輯源程序對源程序進行編譯與庫函數(shù)連接運行目標程序。以上過程如圖2所示。圖中實線表示操作流程,虛線表示文件的輸入輸出。例如,編輯后得到源程序文件f.c,然后在進行編譯時再將源程序文件f.c輸入,經(jīng)過編譯得到目標程序文件f.obj,再將目標程序f.obj輸入內(nèi)存,與系統(tǒng)提供的庫函數(shù)等連接,得到可執(zhí)行的目標程序f.exe,最后把f.exe調(diào)入內(nèi)存再使之運行。不正確有無正確編輯編譯有錯?連接執(zhí)行結果正確?結束開始源程序f.c目標程

10、序f.obj庫函數(shù)和其他目標程序可執(zhí)行目標程序f.exe圖2 運行C程序的流程圖二、設計目標本次課程設計主要是用語言編寫一個(7,4)線性分組碼的編譯程序,最基本的是要具備對輸入的信息碼進行編碼,讓它具有抗干擾的能力。同時,還要讓它具有對接收到的整個碼組中提取信息碼組的功能。但是,在實際的通信系統(tǒng)中,由于信道傳輸特性不理想以及加性噪聲的影響,接收到的信息中不可避免地會發(fā)生錯誤,影響通信系統(tǒng)的傳輸可靠性,因而,本設計要讓該程序具有糾正錯誤的能力,當接收到的碼組中有一位碼,發(fā)生錯誤時可以檢測到這一位錯碼,并且可以糾正這一位錯碼,最終系統(tǒng)可以從糾正后的碼組中提取正確的信息碼組;對于接收碼組中出現(xiàn)的兩

11、位錯誤,能檢測到錯誤,但是不能正確的糾正錯誤。該編譯器針對具體的生成矩陣完成如下工作:1. 完成對任意信息序列的編碼。2. 根據(jù)生成矩陣,形成監(jiān)督矩陣;3. 根據(jù)得到的監(jiān)督矩陣,得到伴隨式,并根據(jù)它進行譯碼;4. 驗證工作的正確性。三、線性分組碼的基本原理3.1 線性分組碼的編碼3.1.1 監(jiān)督矩陣線性分組碼中許用碼組為個。定義線性分組碼的加法為模二加法,乘法為二進制乘法。即、;、。且碼組與碼組的運算在各個相應比特位上符合上述二進制加法運算規(guī)則。線性分組碼具有如下性質的性質:1. 封閉性。任意兩個碼組的和還是許用的碼組。2. 碼的最小距離等于非零碼的最小碼重。對于碼組長度為、信息碼元為位、監(jiān)督

12、碼元為位的分組碼,常記作碼,如果滿足,則有可能構造出糾正一位或一位以上錯誤的線性碼。下面我們通過(7,4)分組碼的例子來說明如何具體構造這種線性碼。設分組碼中,為能糾正一位誤碼,要求。取,則。該例子中,信息組為,碼字為。用,的值與錯碼位置的對應關系可以規(guī)定為如表1所列。由表中規(guī)定可知,當已知信息組時,按以下規(guī)則得到三個校驗元,即:(式3.1)表1 錯碼位置示意表。錯碼位置錯碼位置001101010110100111011000無錯在發(fā)送端編碼時,信息位,和的值決定于輸入信號,因此它們是隨機的。監(jiān)督位,和應根據(jù)信息位的取值按監(jiān)督關系來確定,即監(jiān)督位應使上三式中,和的值為零(表示編成的碼組中應無錯

13、碼)。由上式經(jīng)移項運算,解出監(jiān)督位:(式3.2)給出信息位后,可直接按上式算出監(jiān)督位,其結果見表2。接收端收到每個碼組后先按式(3.1)計算出,和,再按表1判斷錯碼情況。表2 (7,4)線性分組碼(海明碼)信息組碼組信息組碼組0000100000011001001010100011101101001100010111010110111001111111給出(7,4)線性分組碼有即16個許用碼字或合法碼字,另有個禁用碼字。發(fā)送方發(fā)送的是許用碼字,若接收方收到的是禁用碼字,則說明傳輸中發(fā)生了錯誤。按上述方法構造的碼稱為海明碼。表2所列的(7,4)海明碼的最小碼距,因此,這種碼能糾正一個錯碼或檢測兩

14、個錯碼。海明碼的編碼效率等于(式3.3)當n很大時,則編碼效率接近1??梢?,海明碼是一種高效碼。現(xiàn)在再來討論線性分組碼的一般原理。上面已經(jīng)提到,線性碼是指信息位和監(jiān)督位滿足一組線性方程的碼,式(3.1)就是這樣一組線性方程的例子。現(xiàn)在將它改寫成:(式3.4)式(3.4)可以表示成如下矩陣形式: (模2)(式3.5)上式還可以簡記為:或 (式3.6)其中右上標“T”表示將矩陣轉置。將稱為監(jiān)督矩陣,編碼時只要監(jiān)督矩陣給定,編碼時監(jiān)督位和信息位的關系就完全確定。由式(3.4)、式(3.5)都可看出,的行數(shù)就是監(jiān)督關系式的數(shù)目,它等于監(jiān)督位的數(shù)目。的每行中的“1”的位置表示相應碼元之間存在的監(jiān)督關系。

15、式(3.5)中的矩陣可以分為兩部分: (式3.7)式中,為階矩陣,為階單位方陣,將具有形式的矩陣稱為典型監(jiān)督矩陣。由代數(shù)理論可知,矩陣的各行應該是線性無關的,否則將得不到個線性無關的監(jiān)督關系式,從而也得不到個獨立的監(jiān)督位。若一行矩陣能寫成典型的矩陣形式,則其各行一定是線性無關的。因為容易驗證的各行是線性無關的,故也是線性無關的。3.1.2 生成矩陣類似于式(3.4)改變成式(3.5)中矩陣形式那樣,式(3.5)也可以改寫成: (式3.8)或者(式3.9)式中,為一個階矩陣,即它為的轉置,即 (式3.10)式(3.9)表明,信息位給定后,用信息位的行距乘矩陣就產(chǎn)生出監(jiān)督位。將的左邊加上一階單位方

16、陣就構成一矩陣,即(式3.11)稱為生成矩陣,因為由它可以產(chǎn)生整個碼組,即有(式3.12)或者(式3.13)因此,如果找到了碼的生成矩陣,則編碼的方法就完全確定。具有形式的生成矩陣稱為典型生成矩陣。由典型生成矩陣得出的碼組中,信息位不變,監(jiān)督位附加于其后,這種碼稱為系統(tǒng)碼。與矩陣相似,也要求矩陣的各行是線性無關的。因為由式(3.13)可以看出,任一碼組都是的各行的線性組合。共有行,若它們線性無關,則可組合出種不同的碼組,它恰是有為信息位的全部碼組;若的各行有線性相關的,則不可能由生成種不同碼組了。實際上,的各行本身就是一個碼組。因此,如果已有個線性無關的碼組,則可以用其作為生成矩陣,并由它生成

17、其余的碼組。3.2 線性分組碼的譯碼3.2.1 碼的距離及糾檢錯能力1碼的距離兩個碼字之間,對應位取之不同的個數(shù),稱為漢明距離,用表示。一個碼的最小距離定義為,兩個碼字之間的距離表示了它們之間差別的大小。距離越大,兩個碼字的差別越大,則傳送時從一個碼字錯成另一碼字的可能性越小。碼的最小距離愈大,其抗干擾能力愈強。2線性分組碼的糾檢錯能力對于任一個線性分組碼,(1)若要在一個碼字內(nèi)檢測出e個錯誤,則要求碼的最小距離;(2)糾正個錯誤,則要求碼的最小距離;(3)糾正個錯誤同時檢測個錯誤,則要求。3.2.2 伴隨式與譯碼一般說來,式(3.13)中為一列的行矩陣。此矩陣的個元素就是碼組中的個碼元,所以

18、發(fā)送的碼組就是。此碼組在傳輸中可能由于干擾引入差錯,故接收碼組一般說來與不一定相同。若設接收碼組為一列的行矩陣,即(式3.14)則發(fā)送碼組和接收碼組之差為:(模2)(式3.15)它就是傳輸中產(chǎn)生的錯碼行矩陣,其中(式3.16)其中因此,若,表示該位接收碼元無錯;若,則表示該位接收碼元有錯。式(3.15)也可以改寫成:(式3.17)接收端譯碼時,可將接收碼組代入式(3.6)中計算。若接收碼組中無錯碼,即,則,把它代入式(3.6)后,該式仍成立,則有(式3.18)當接收碼組有錯時,將代入式(3.15)后,該式不一定成立。在錯碼較多,已超過這種編碼的檢錯能力時,變?yōu)榱硪辉S用碼組則式(3.18)仍能成

19、立。這樣的錯碼錯碼是不可檢測的。在未超過檢錯能力時,上式不成立,即其右端不等于零。假設這時式(3.18)的右端為,即(式3.19)將代入式(3.19)中可得由式(3.6)知,所以(式3.20)式中,稱為伴隨式或校正子。它與式(3.1)中的相似,有可能利用它來指示錯碼位置,這一點可以直接從式(3.20)中看出,式中只與有關,而與無關,這就意味著與錯碼之間有確定的線性變換關系。若和之間一一對應,則將能代表錯碼的位置。四、推導過程4.1 編碼過程由與的分塊表示的矩陣形式 (式4.1) (式4.2) (式4.3) (式4.4)則有 或 (式4.5)已知生成矩陣根據(jù)以上幾式可求出監(jiān)督矩陣最后可以根據(jù)輸入

20、的四位信息位和生成矩陣相乘得到編碼矩陣。即 (式4.6)所有的編碼情況如表1所示。4.2 譯碼過程對于譯碼過程來說,同樣由上知道監(jiān)督矩陣:根據(jù)監(jiān)督矩陣,將矩陣的行和列調(diào)換,可求出監(jiān)督矩陣的轉置矩陣再根據(jù)式(3.20)即求出伴隨式,由伴隨式式可以知道錯碼的位置及及糾正錯碼,具體的錯碼位置如表1所示。糾正了接收碼后可以提取出其中的四位信息位。 五、程序設計及仿真分析5.1 程序流程圖5.1.1 主程序流程圖主程序一開始就有歡迎界面,并對該編譯器做了簡單的介紹,同時為方便用戶使用,對用戶的操作也進行了補充說明,接著給用戶顯示出了選擇提示語句,可以選擇編碼器、譯碼器、退出。當用戶做出選擇后便會進入各自

21、的子程序,執(zhí)行相應的功能,如果用戶輸入錯誤,還會給出錯誤提示。主程序的流程圖如圖3所示。輸入3輸入3輸入2輸入1輸入2輸入1開 始歡迎界面1.編碼器 2.譯碼器 3.退出譯碼程序退出提示持續(xù)操作1.編碼器 2.譯碼器 3.退出退 出編碼程序圖3 主程序流程圖5.1.2 編碼程序流程圖在程序進入編碼子程序時,它首先提示用戶輸入需要編碼的碼組個數(shù),根據(jù)用戶選擇的個數(shù)接著要求用戶輸入編碼的信息碼組,信息碼組與生成矩陣相乘便會得到相應的編碼,其流程圖如圖4所示。錯誤正確開 始提示輸入要編碼的信息碼組的個數(shù)提示輸入信息碼組M輸入正確?將碼組賦給二維數(shù)組,碼組的個數(shù)作為行數(shù),碼組的位數(shù)作為數(shù)組的列數(shù)返回提

22、示輸入錯誤并重新輸入信息組的數(shù)組與生成矩陣數(shù)組相乘編碼輸出c把生成矩陣賦給一個二維數(shù)組G圖4 編碼程序流程圖5.1.3 譯碼程序流程圖對于譯碼程序,因為信息在傳輸過程中會遇到噪聲干擾,所以接收碼組會出現(xiàn)錯碼、丟碼或多碼現(xiàn)象。又因為很難判斷丟碼或多碼的具體位置,所以這兩種情況處理起來比較復雜,在這暫不進行譯碼,只做出判斷。對于錯碼,可以糾正一位錯誤,發(fā)現(xiàn)兩位錯誤。在譯碼的過程中,要用到監(jiān)督矩陣的轉置矩陣,所以先求生成矩陣對應的監(jiān)督矩陣,再進行轉置,然后提示輸入接收碼組,輸入的接收碼組中有可能丟失碼位,故而先判斷,再進行糾檢錯,輸出正確的碼組,最后提取出正確的信息組。其流程圖如圖5所示。無有開 始

23、根據(jù)生成矩陣求監(jiān)督矩陣H輸出監(jiān)督矩陣H求監(jiān)督矩陣對應的轉置矩陣HT提示輸入接收碼組B輸入的接收碼組是否有丟碼?把接收碼組每七位分成一個碼組,并輸出丟碼提示接上頁求接收碼組與轉置矩陣的乘積輸出伴隨式根據(jù)伴隨式譯碼輸出糾正后的碼組,并提取信息碼輸出。返 回圖5 譯碼程序流程圖5.2 程序運行分析5.2.1 主程序運行分析圖6 主界面運行圖從程序一開始就運行主界面,主界面有對該軟件的簡單介紹,接著就給出了選擇功能。用戶輸入不同的序號可以執(zhí)行不同的功能,主界面仿真結果如圖6所示。輸入“1”后按回車鍵執(zhí)行編碼功能,如圖7所示;輸入“2”后按回車鍵執(zhí)行譯碼功能,如圖8所示;輸入“3”后按回車鍵執(zhí)行退出如圖

24、9所示;輸入其它系統(tǒng)會顯示錯誤提示信息,如圖10所示。圖7 選擇編碼功能圖8 選擇譯碼功能圖9 執(zhí)行退出功能圖10 輸入錯誤時錯誤提示5.2.2 編碼運行分析執(zhí)行編碼程序時,為了滿足用戶的不同需求,可以先輸入用戶需要的編碼的信息組數(shù),再根據(jù)用戶輸入的信息組數(shù)決定輸入信息碼的多少,輸入完按回車鍵就完成了一次編碼。例如用戶一次需要對連續(xù)的四個四位信息組進行編碼,信息組為(11001),根據(jù)表2可知,編碼后的結果為(),仿真過程如圖11和圖12所示。圖11 輸入信息組數(shù)后系統(tǒng)界面圖12 編碼后的系統(tǒng)界面由運行的界面可知,軟件還可以持續(xù)操作,當用戶再做出選擇,可以執(zhí)行相應的功能,整個體系就是按照這個思

25、想聯(lián)系在一起的。5.2.3 譯碼運行分析對于信道編碼程序而言,由于信道干擾,接收碼組的長度不一,當接收碼組中出現(xiàn)丟碼時,系統(tǒng)會給出提示,對這種情況系統(tǒng)無法譯碼只給出提示要求重新輸入,例如輸入(112),2作為輸入的結束標志,因為信息碼組只有十三位,傳輸過程丟了一位,系統(tǒng)會給出提示,如圖13所示;如果接收碼組沒有丟碼,系統(tǒng)可以糾正一位錯碼,發(fā)現(xiàn)兩位錯碼,例如輸入上面編碼后的4個接收碼組,并故意輸錯第二個碼組的位和第四個碼組的位和位,即輸入()(2為結束標志),以驗證系統(tǒng)運行的正確性。運行界面如圖14所示。為了體現(xiàn)軟件的持續(xù)操作,我們從編碼結束后再選擇譯碼。圖13 輸入有丟碼的接收碼組時系統(tǒng)運行界

26、面圖14 譯碼運行界面5.3 軟件分析根據(jù)軟件運行情況分析來看,該軟件最終實現(xiàn)的功能有:ü 對數(shù)量不等的信息組編碼;ü 對數(shù)量不等的接收碼組糾正一位錯誤,發(fā)現(xiàn)兩位錯誤;ü 對輸入的接收碼組判斷是否有丟碼;ü 循環(huán)使用編碼器和譯碼器;ü 對操作失誤做出提示。與最初的設計目標相比,該軟件的不足方面有:Ø 使用編碼器的時候,如果輸入有誤,系統(tǒng)沒有給出明確提示;Ø 當接收碼組中有丟失位時,不能譯碼;Ø 顯示界面不夠人性化。總之,軟件在可靠性方面已做出驗證,達到了要求。C語言比起其它語言要難學,更穩(wěn)定,C程序的穩(wěn)定性就證明了

27、該軟件具有很好的穩(wěn)定性。實用性方面,由于該軟件只對四位信息組編碼,編碼后有七位;對七位接收碼組譯碼,提取信息位后是四位。其它碼并不適應該軟件,所以它的適用范圍受到了限制。設計總結三周的課程設計已經(jīng)結束,這些天對于一天都在學習理論知識的我來說十分珍貴。因為這是一個理論聯(lián)系實際,實踐檢驗理論的相互過程。在這一過程中,真切感覺到自己知識能力的匱乏,雖然我考過了C語言二級,但是好多東西都只是知道一些皮毛,真正學透的東西很少,更不用說把學到的知識運用到實際生活中了。而且很多東西在實際中與理想相去甚遠,而應用就是要減小這種差距。每一點差距的縮小都得付出艱辛的努力,但這種付出是非常值得的。這次課設剛開始時,

28、由于好長時間沒有接觸C語言,編寫程序遇到的問題非常多,比如寫輸入語句和輸出語句的格式,還有每個語句后面的分號必須是英文的,在這個上最容易犯錯,幸好最后經(jīng)過我的仔細檢查最終完成了整個程序。在程序的功能上,剛開始我想的比較簡單,只對簡單的一個碼組編譯碼,后來經(jīng)過老師的提醒,我又做了很多改動,最終完成整個程序。但是在使用編碼器的時候,對輸入時的操作失誤沒有給出提示,由于時間的關系,也沒有修改,其他方面自己還比較滿意,也許是因為自己收到了自己付出的東西,所以我還是非常高興的。通過這次課程設計,我明白了:許多細小的環(huán)節(jié)是注意不到的,而這諸多環(huán)節(jié)往往影響你整個系統(tǒng)的正常運轉;這可真應驗了“細節(jié)決定一切”這

29、句話。這一切告訴我做任何事情必須從全局出發(fā),并且要注意其中的任何一個細節(jié)。致謝課設期間,得到了老師和各位同學的幫助,尤其是王維芳老師的諸多指導和幫助,在此表示真摯的感謝!同時組里的同學也提出了很多寶貴意見,感謝各位!參考文獻1. 海濤,龍軍.計算機通信技術M.重慶:重慶大學出版社,20052. 岳殿武.分組編碼學M.西安:西安電子科技大學出版社,20073. 譚浩強.C程序設計(第三版)M.北京:清華大學出版社,20054. 馮桂,林其偉,陳東華.信息論與編碼技術M.北京:清華大學出版社,20075. 張宗橙.糾錯編碼原理和應用M.北京:電子工業(yè)出版社,2005附錄(7,4)碼編譯器整體程序:

30、#include<stdio.h>#include<math.h>void main()/*G:生成矩陣 H:監(jiān)督矩陣 HT:監(jiān)督矩陣對應的轉置矩陣*/*M:輸入信息序列 C:編碼輸出序列 Input:輸入接收碼序列 B:譯碼輸出序列 S:伴隨式*/int Q,N;/*定義開始*/int i,j,s,r,k,t,p,u,m; int G47=1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1;int IR33=1,0,0,0,1,0,0,0,1;int H37, C107,M104,B207,Input100,

31、HT73,P10,S1003;/*定義結束*/printf("n您好!歡迎使用線性分組碼編譯器!n");printf("nn本編譯器針對(7,4)碼,所采用的生成矩陣G=n");for(i=0;i<4;i+)for(j=0;j<7;j+)printf(" %d",Gij);printf("n");printf("編譯碼過程都是針對二進制碼組,除了系統(tǒng)要求選擇功能,其他情況下禁止輸入除0,1以外的數(shù)。請在使用的過程中嚴格按照編譯器要求的格式輸入數(shù)據(jù)。nn");printf("

32、現(xiàn)在請輸入您所選擇的編譯器所對應的序號,按回車鍵繼續(xù):n");printf("n1.編碼器 2.譯碼器 3.退出n");printf("n我選擇:");scanf("%d",&Q);if(Q=0)Q+=4;while(Q)if(Q=1|Q=2|Q=3)break;elseprintf("對不起,您輸入有誤,請重新輸入");scanf("%d",&Q);while(Q=1|Q=2|Q=3)if(Q=1)/*編碼程序*/printf("n請輸入您需要編碼的信息組數(shù)

33、");scanf("%d",&N);printf("nn請輸入您需要編碼的%d組四位二進制信息組,碼組間用空格分開,按回車鍵確認。n",N);/*輸入信息碼*/printf("n信息組m=");for(i=0;i<N;i+)scanf("%1d%1d%1d%1d",&Mi3,&Mi2,&Mi1,&Mi0);/*求監(jiān)督碼*/for(i=0;i<N;i+)Ci2=Mi3Mi2Mi1;Ci1=Mi3Mi2Mi0;Ci0=Mi3Mi1Mi0;for(j=0;j&

34、lt;N;j+)for (i=6;i>2;i-)/*輸出編碼結果*/Cji=Mji-3;printf("n您所輸入的信息組編碼結果c=");for(j=0;j<N;j+)for(i=6;i>=0;i-)printf("%d",Cji);printf("nn");printf("n接下來您想:nn");/*選擇功能*/printf("1.用編碼器 2.用譯碼器 3.退出nn");printf("我想:");scanf("%d",&Q

35、);else if(Q=2)/*譯碼程序*/for(i=0;i<3;i+)/*求監(jiān)督矩陣*/for(j=0;j<4;j+)Hij=Gji+4;for(j=4;j<7;j+)Hij=IRij-4;printf("n監(jiān)督矩陣H=n");/*輸出監(jiān)督矩陣*/for(i=0;i<3;i+)for(j=0;j<7;j+)printf(" %d",Hij);printf("n");t=1;while(t!=2)/*輸入接收碼組*/p=1;printf("n請輸入總位數(shù)為7的倍數(shù)的接收碼組,每位用空格隔開,每

36、組位數(shù)為7的倍數(shù),以十進制2作為結束標志!按回車鍵確認n");while(p)for(i=0;i+)scanf("%d",&Inputi);if(Inputi=2)break;k=i%7;if(k=0)p=0;t=2;elsep=1;k=-k+7;printf("您接收到的碼組丟失了%d位,系統(tǒng)不能判斷丟失位的具體位置,請重新輸入n",k);u=i/7;i=0;for(r=0;r<u;r+)for(j=6;j>=0;j-,i+)Brj=Inputi;printf("n將接收碼組每七位分為一個碼組,如下:n"

37、;); for(i=0;i<u;i+)for(j=0;j<7;j+)printf(" %1d",Bi6-j);printf("n");for(i=0;i<3;i+)/*求監(jiān)督矩陣H的轉置矩陣*/for(j=0;j<7;j+)HTji=Hij;for(i=0;i<u;i+)for(m=0;m<3;m+)for(j=0;j<7;j+)s+=(Bi6-j*HTjm);if (s%2=1)s=1;else s=0;Si2-m=s;s=0;printf("nn伴隨式S=n");/*輸出伴隨式*/for(

38、j=0;j<u;j+)for(i=2;i>=0;i-)printf(" %1d",Sji);printf("n");printf("n");for(i=0;i<u;i+)Pi=4*Si2+2*Si1+Si0+1;switch(Pi)/*根據(jù)伴隨式判斷接收碼,并譯碼*/case 1:printf("nn您所接收的第%d個碼組正確,它是:",+i);i-;for(j=6;j>=0;j-)printf("%1d",Bij);printf("請您再次確認!")

39、;printf("譯出的信息序列為:");for(j=6;j>2;j-)printf("%d",Bij);break;case 2:Bi0=1Bi0;printf("nn您接收的第%d個碼組有錯誤,正確的碼組應為:",+i);i-;for(j=6;j>=0;j-)printf("%1d",Bij);printf("譯出的信息序列為:");for(j=6;j>2;j-)printf("%d",Bij);break;case 3:Bi1=1Bi1;printf("nn您接收的第%d個碼組有錯誤,正確的碼組應為:",+i);i-;for(j=6;j>=0;j-)printf("%1d",Bij);printf("譯出的信息序列為:");for(j=6;j>2;j-)printf("%d",Bij);break;case 4:Bi3=1Bi3;printf("nn您接收的第%d個碼組有錯誤,正確的碼組應為:

溫馨提示

  • 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

提交評論