2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告書(shū)</b></p><p>  設(shè)計(jì)題目 : 基帶碼型編碼軟件 </p><p>  學(xué)院(系): 物理與電子工程學(xué)院 </p><p>  專(zhuān) 業(yè): 通信工程

2、 </p><p>  年級(jí)班級(jí) : 2006級(jí)通信工程(1)班 </p><p>  學(xué) 號(hào):    </p><p>  學(xué)生姓名 : XXX </p><p>  起止日期 :

3、2011年8月29日至2011年9月16日 </p><p>  指導(dǎo)教師: XXX </p><p><b>  內(nèi)容摘要:</b></p><p>  數(shù)字基帶傳輸是數(shù)字傳輸技術(shù)的一種基本形式,是研究數(shù)字頻帶傳輸系統(tǒng)的基礎(chǔ)。數(shù)字基帶碼型的選擇對(duì)于數(shù)字基帶傳輸系統(tǒng)的性能具有重要意義

4、。基于AMI碼、HDB3碼、CMI碼、曼切斯特碼、差分曼切斯特碼的編碼原理,用Visual C++6.0設(shè)計(jì)AMI碼、HDB3碼、CMI碼、曼切斯特碼、差分曼切斯特碼的編碼軟件,能夠根據(jù)用戶(hù)輸入的二進(jìn)制信息序列及設(shè)定的編碼類(lèi)型給出對(duì)應(yīng)的編碼結(jié)果,并以圖形化的方式顯示出波形來(lái)。本軟件編碼器詳細(xì)敘述了其相關(guān)編碼算法和關(guān)鍵技術(shù),系統(tǒng)以MFC的單文檔為模板,界面設(shè)計(jì)人性化,操作簡(jiǎn)易明了。編碼算法有多種參數(shù)設(shè)置。對(duì)學(xué)習(xí)AMI、HDB3碼、CMI碼

5、、曼切斯特碼、差分曼切斯特碼有很大的幫助,使學(xué)習(xí)者可以更加直觀了認(rèn)識(shí)這幾個(gè)碼型的編碼規(guī)則,同時(shí)也可以應(yīng)用于實(shí)際中某些適合這類(lèi)碼型傳輸?shù)南到y(tǒng),為這些系統(tǒng)提供編碼使其更利于傳輸。</p><p><b>  關(guān)鍵詞:</b></p><p>  Visual C++6.0,HDB3,AMI,CMI,曼切斯特碼,編碼器,隨機(jī)碼,極性,線條寬度,顏色,波形</p>

6、<p><b>  目 錄</b></p><p><b>  一、設(shè)計(jì)要求:4</b></p><p><b>  二、設(shè)計(jì)意義:4</b></p><p><b>  三、設(shè)計(jì)原理4</b></p><p>  3.1、 AMI碼

7、4</p><p>  3.2、HDB3碼4</p><p>  3.3、CMI碼5</p><p>  3.4、 曼徹斯特碼5</p><p>  3.5、系統(tǒng)設(shè)計(jì)方法分析5</p><p>  3.6、系統(tǒng)的設(shè)計(jì)思路5</p><p>  四、系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn)6<

8、;/p><p>  4.1編碼算法設(shè)計(jì)6</p><p>  4.1.1 AMI編碼算法6</p><p>  4.1.2 HDB3 編碼算法8</p><p>  4.1.3 CMI 編碼算法10</p><p>  4.1.4 曼徹斯特碼編碼算法12</p><p>  4.1.5 隨

9、機(jī)信號(hào)生成算法14</p><p>  4.2、 畫(huà)圖設(shè)計(jì)14</p><p>  五、調(diào)試結(jié)果與現(xiàn)象分析15</p><p>  六、系統(tǒng)不足之處18</p><p><b>  七、心得體會(huì)18</b></p><p><b>  八、參考文獻(xiàn)19</b>&l

10、t;/p><p><b>  一、設(shè)計(jì)要求:</b></p><p>  基本要求:用C++等高級(jí)語(yǔ)言設(shè)計(jì)AMI碼、HDB3碼的編碼軟件,要求能根據(jù)用戶(hù)輸入的二進(jìn)制信息序列及設(shè)定的編碼類(lèi)型給出對(duì)應(yīng)的編碼結(jié)果,并以圖形化的方式顯示出波形來(lái)。能夠設(shè)置一些參數(shù):如線的顏色、寬度;能夠控制是否顯示網(wǎng)格線、是否在編碼波形旁邊顯示其編碼結(jié)果等。能產(chǎn)生由用戶(hù)設(shè)定信息序列長(zhǎng)度的隨機(jī)序列,

11、并給出此序列的編碼結(jié)果,并以圖形化的方式顯示出波形來(lái)。</p><p>  擴(kuò)展要求:能夠?qū)ζ渌R?jiàn)基帶碼型,如Manchester碼、差分Manchester碼、多電平碼等進(jìn)行編碼和顯示。 </p><p><b>  二、設(shè)計(jì)意義:</b></p><p>  通過(guò)本次課程設(shè)計(jì),系統(tǒng)了解和掌握通信系統(tǒng)的基帶碼型編碼軟件設(shè)計(jì)過(guò)程、方法及實(shí)現(xiàn);

12、掌握運(yùn)用C++高級(jí)語(yǔ)言設(shè)計(jì)通信軟件的方法,為以后設(shè)計(jì)和實(shí)現(xiàn)通信系統(tǒng)打下良好基礎(chǔ)。</p><p><b>  三、設(shè)計(jì)原理</b></p><p>  3.1、 AMI碼</p><p>  AMI碼全稱(chēng)是傳號(hào)交替反轉(zhuǎn)碼。其編碼規(guī)則是將二進(jìn)制消息代碼“1”(傳號(hào))交替地變換為傳輸碼的“+1”和“-1”,而“0”(空號(hào))保持不變。例如</

13、p><p>  AMI碼對(duì)應(yīng)的基帶信號(hào)是正負(fù)極性交替的脈沖序列,而0電位持不變的規(guī)律。AMI碼的優(yōu)點(diǎn)是,由于+1與-1 交替, AMI碼的功率譜中不含直流成分,高、低頻分量少,能量集中在頻率為1/2碼速處。位定時(shí)頻率分量雖然為0,但只要將基帶信號(hào)經(jīng)全波整流變?yōu)閱螛O性歸零波形,便可提取位定時(shí)信號(hào)。此外,AMI碼的編譯碼電路簡(jiǎn)單,便于利用傳號(hào)極性交替規(guī)律觀察誤碼情況。鑒于這些優(yōu)點(diǎn),AMI碼是CCITT建議采用的傳輸碼性之

14、一。 </p><p>  AMI碼的不足是,當(dāng)原信碼出現(xiàn)連“0”串時(shí),信號(hào)的電平長(zhǎng)時(shí)間不跳變,造成提取定時(shí)信號(hào)的困難。解決連“0”碼問(wèn)題的有效方法之一是采用HDB3碼。 </p><p>  3.2、HDB3碼</p><p>  HDB3碼的全稱(chēng)是三階高密度雙極性碼,它是AMI碼的一種改進(jìn)型, 其目的是為了保持AMI碼的優(yōu)點(diǎn)而克服其缺點(diǎn), 使連“0”個(gè)數(shù)不超

15、過(guò)3個(gè)。其編碼規(guī)則如下: </p><p> ?。?) 當(dāng)信碼的連“0”個(gè)數(shù)不超過(guò)3時(shí),仍按AMI碼的規(guī)則編,即傳號(hào)極性交替;  (2)當(dāng)連“0”個(gè)數(shù)超過(guò)3時(shí),則將第4個(gè)“0”改為非“0”脈沖,記為+V或-V,稱(chēng)</p><p>  之為破壞脈沖。相鄰V碼的極性必須交替出現(xiàn),以確保編好的碼中無(wú)直流;</p><p> ?。?)為了便于識(shí)別, V碼的極性

16、應(yīng)與其前一個(gè)非“0”脈沖的極性相同,否則,將四連“0”的第一個(gè)“0”更改為與該破壞脈沖相同極性的脈沖,并記為+B或-B;</p><p> ?。?) 破壞脈沖之后的傳號(hào)碼極性也要交替。 例如: </p><p>  其中的±V脈沖和±B脈沖與±1脈沖波形相同,用V或B符號(hào)的目的是為了示意是將原信碼的“0”變換成“1”碼。 </p><p&

17、gt;  雖然HDB3碼的編碼規(guī)則比較復(fù)雜,但譯碼卻比較簡(jiǎn)單。 從上述原理看出,每一個(gè)破壞符號(hào)V總是與前一非0符號(hào)同極性(包括B在內(nèi))。這就是說(shuō),從收到的符號(hào)序列中可以容易地找到破壞點(diǎn)V,于是也斷定V符號(hào)及其前面的3個(gè)符號(hào)必是連0符號(hào),從而恢復(fù)4個(gè)連0碼,再將所有-1變成+1后便得到原消息代碼。 </p><p>  HDB3碼保持了AMI碼的優(yōu)點(diǎn)外,同時(shí)還將連“0”碼限制在3個(gè)以?xún)?nèi),故有利于位定時(shí)信號(hào)的提取。H

18、DB3碼是應(yīng)用最為廣泛的碼型,A律PCM四次群以下的接口碼型均為HDB3碼。</p><p><b>  3.3 CMI碼</b></p><p>  CMI碼是傳號(hào)反轉(zhuǎn)碼的簡(jiǎn)稱(chēng),與雙相碼類(lèi)似,它也是一種雙極性二電平碼。其編碼規(guī)則是:“1”碼交替用“11”和“00”兩位碼表示;“0”碼固定地用“01”表示。例如:</p><p>  CMI碼易

19、于實(shí)現(xiàn),含有豐富的定時(shí)信息。此外,由于10喂禁用碼組,不會(huì)出現(xiàn)三個(gè)以上的連碼,這個(gè)規(guī)律可用于宏觀檢錯(cuò)。</p><p><b>  3.4曼徹斯特碼</b></p><p>  曼徹斯特碼即雙性碼,它用一個(gè)周期的正負(fù)對(duì)稱(chēng)方波表示“0”,而用其反相波形表示“1”。編碼規(guī)則之一是:“1”碼用“10”兩位碼表示;“0”碼用“01”表示。例如:</p><

20、p>  其波形是一種雙極性NRZ波形,只有極性相反的兩個(gè)電平。它在每個(gè)碼元間隔的中心點(diǎn)都存在電平跳變,所以含有豐富的位定時(shí)信息,且沒(méi)有直流分量,編碼過(guò)程也簡(jiǎn)單。缺點(diǎn)是占用帶寬加倍,使頻帶利用率降低。</p><p>  3.5、系統(tǒng)設(shè)計(jì)方法及系統(tǒng)主要功能概述</p><p>  在該編碼系統(tǒng)設(shè)計(jì)中,我們采用了面向?qū)ο蟮募夹g(shù)?;贏MI碼、HDB3碼、CMI碼和曼徹斯特碼的編碼原理,

21、本編碼器采用Visual C++6.0設(shè)計(jì)。所采用編譯器的是Visual C++6.0,它是微軟開(kāi)發(fā)的基于Windows下的面向?qū)ο竦木幊誊浖?,它有著?qiáng)大的MFC支持,在可視化設(shè)計(jì)方面有著強(qiáng)大的優(yōu)勢(shì),并且高度支持C++標(biāo)準(zhǔn),是一個(gè)進(jìn)行C++編程的超強(qiáng)集成環(huán)境。</p><p>  本設(shè)計(jì)為實(shí)現(xiàn)用戶(hù)友好交互信息,采用拆分單文檔實(shí)現(xiàn),一部分實(shí)現(xiàn)用戶(hù)輸入信息序列及相關(guān)信息的顯示,另一部分實(shí)現(xiàn)編碼結(jié)果圖形顯示。本設(shè)計(jì)中用

22、戶(hù)可有AMI碼、HDB3碼、CMI碼和曼徹斯特碼四種編碼類(lèi)型可選擇。并能對(duì)前一個(gè)1碼或前一個(gè)v碼的正負(fù)極性,坐標(biāo)軸與分割線的顯示與否,圖形線條寬度、顏色等相關(guān)參數(shù)進(jìn)行設(shè)置。輸入原始信號(hào),系統(tǒng)經(jīng)過(guò)特定算法編碼給出編碼結(jié)果并畫(huà)出編碼波形給與用戶(hù)形象化的結(jié)果。系統(tǒng)會(huì)實(shí)時(shí)對(duì)用戶(hù)所做的操作進(jìn)行結(jié)果反饋,有很好的用戶(hù)交互性。</p><p>  3.6、系統(tǒng)的設(shè)計(jì)思路</p><p>  軟件編碼器的

23、基本操作流程是:用戶(hù)選擇編碼類(lèi)型并設(shè)置相關(guān)參數(shù)設(shè)置,然后輸入原始信號(hào)(或通過(guò)隨機(jī)碼按鈕產(chǎn)生相應(yīng)長(zhǎng)度的隨機(jī)碼信號(hào)),系統(tǒng)經(jīng)過(guò)特定算法編碼給出編碼結(jié)果并畫(huà)出編碼波形給與用戶(hù)形象化的結(jié)果。系統(tǒng)會(huì)實(shí)時(shí)對(duì)用戶(hù)所做的操作進(jìn)行結(jié)果反饋,有很好的用戶(hù)交互性。根據(jù)上述分析,系統(tǒng)結(jié)構(gòu)如圖3.4.1所示</p><p><b>  圖3.4.1</b></p><p>  用戶(hù)層提供用戶(hù)與

24、仿真系統(tǒng)交互的接口。</p><p>  系統(tǒng)層根據(jù)接口層的輸入,建立仿真模塊的動(dòng)態(tài)模型,并調(diào)用相應(yīng)的算法返回仿真結(jié)果。</p><p>  數(shù)據(jù)層存儲(chǔ)仿真層運(yùn)行算法處理的各種中間數(shù)據(jù)。</p><p>  四、系統(tǒng)的軟件設(shè)計(jì)流程及描述</p><p><b>  4.1編碼算法設(shè)計(jì)</b></p><

25、;p>  4.1.1 AMI編碼算法</p><p><b>  (1)流程圖:</b></p><p><b> ?。?)具體描述:</b></p><p>  1)在AMI碼編碼函數(shù)中將編碼碼型標(biāo)識(shí)符號(hào)變量CodeChoose賦值為“AMI”。定義字符串變量strAMI來(lái)存儲(chǔ)用GetDlgItemText獲取的輸

26、入信號(hào)和編碼結(jié)果,并定義整形變量SignalLength存儲(chǔ)用GetLength來(lái)獲取的輸入信號(hào)長(zhǎng)度,定義變量flag1來(lái)保存前一個(gè)1碼的極性。</p><p>  2)然后用for語(yǔ)句對(duì)輸入信號(hào)進(jìn)行檢測(cè),用GetAt(i)來(lái)獲取第i位信號(hào),并用if語(yǔ)句進(jìn)行判斷,若輸入信號(hào)為1再判斷前一個(gè)1碼的極性,若前一個(gè)1碼為正,則此輸入信號(hào)1碼應(yīng)編為負(fù)極性碼,用SetAt將其替換為‘e’(代表-1),并將flag1賦值為“

27、-1”保存當(dāng)前1碼的極性。若前一個(gè)1碼為負(fù),則此輸入信號(hào)1碼應(yīng)編為正極性碼,用SetAt將其替換為‘E’(代表+1),并將flag1賦值為“+1”保存當(dāng)前1碼的極性。</p><p>  3)設(shè)置好每位輸入信號(hào)后退出for語(yǔ)句,定義變量strAMITemp來(lái)保存編碼的中間結(jié)果,以供繪圖使用。用Replace將“e”取代“-1”, 將“E”取代“+1”,用 SetDlgItemText將編碼結(jié)果顯示在編碼結(jié)果編輯框

28、中。使主框架類(lèi)指針變量pCDrMFrame指向當(dāng)前視圖類(lèi)的父框架類(lèi)指針。主框架類(lèi)的公有成員變量Code存放編碼結(jié)果的中間結(jié)果strAMITemp,并用Invalidate();語(yǔ)句強(qiáng)迫調(diào)用畫(huà)圖函數(shù)OnDraw();這就完成了AMI碼的編碼。</p><p> ?。?)實(shí)現(xiàn)代碼如下:</p><p><b>  // AMI碼編碼</b></p><

29、p>  void CBIANMAView::OnRadioAmi() </p><p>  { CodeChoose = "AMI";</p><p>  // TODO: Add your control notification handler code here</p><p>  this->GetDlgItem(IDC

30、_STATIC_SETPOLAR)->ShowWindow( SW_SHOW );</p><p>  this->GetDlgItem(IDC_STATIC_SETPOLAR)->SetWindowText("AMI碼設(shè)置");</p><p>  this->GetDlgItem(IDC_STATIC_POLARV)->ShowWin

31、dow(SW_HIDE);//隱藏前一個(gè)V碼極性的選項(xiàng)</p><p>  this->GetDlgItem(IDC_RADIO_POSV)->ShowWindow(SW_HIDE);</p><p>  this->GetDlgItem(IDC_RADIO_NEGV)->ShowWindow(SW_HIDE);</p><p>  CStr

32、ing strAMI;</p><p>  this->GetDlgItemText(IDC_EDIT_INPUT,strAMI);//取輸入信號(hào)</p><p>  CString flag1=polar1;//保存1碼的極性</p><p>  int SignalLength=strAMI.GetLength();//獲得輸入信號(hào)的長(zhǎng)度</p>

33、;<p>  for(int i=0;i<SignalLength;i++) //編碼</p><p><b>  {</b></p><p>  if(strAMI.GetAt(i)=='1')</p><p>  { if(flag1=="+1")</p><p

34、>  {strAMI.SetAt(i,'e');//e代表-1</p><p>  flag1="-1";</p><p><b>  }</b></p><p><b>  else </b></p><p>  { strAMI.SetAt

35、(i,'E');//E代表+1</p><p>  flag1="+1";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  C

36、String strAMITemp=strAMI;//strAMITemp存放AMI編碼的中間結(jié)果,可以供繪圖時(shí)使用strAMI.Replace("e","-1");//e取代-1</p><p>  strAMI.Replace("E","+1");//E取代+1</p><p>  this->Set

37、DlgItemText(IDC_EDIT_OUPUT,strAMI);//在編碼結(jié)果編輯框中顯示編碼結(jié)果pCDrMFrame= (CMainFrame*)this->GetParentFrame();</p><p>  pCDrMFrame->CodeChoose = "AMI";</p><p>  pCDrMFrame->Code=strAMIT

38、emp;</p><p>  pCDrMFrame->Invalidate();</p><p>  4.1.2 HDB3 編碼算法</p><p><b> ?。?)流程圖: </b></p><p><b> ?。?)具體描述:</b></p><p>  1)在

39、HDB3碼編碼函數(shù)中將編碼碼型標(biāo)識(shí)符號(hào)變量CodeChoose賦值為“HDB3”。定義字符串變量stHDB3來(lái)存儲(chǔ)用GetDlgItemText獲取的輸入信號(hào)和編碼結(jié)果,并定義整形變量SignalLength存儲(chǔ)用GetLength來(lái)獲取的輸入信號(hào)長(zhǎng)度,定義變量flag1來(lái)保存前一個(gè)1碼的極性, flagv來(lái)保存前一個(gè)v碼的極性,Zerocount來(lái)計(jì)算連0個(gè)數(shù)。</p><p>  2)然后用for語(yǔ)句對(duì)輸入信

40、號(hào)進(jìn)行檢測(cè),用GetAt(i)來(lái)獲取第i位信號(hào),并用if語(yǔ)句進(jìn)行判。</p><p>  3)若輸入信號(hào)為1,Zerocount清0,再判斷前一個(gè)1碼的極性,若前一個(gè)1碼為正,則此輸入信號(hào)1碼應(yīng)編為負(fù)極性碼,用SetAt將其替換為‘e’(代表-1),并將flag1賦值為“-1”保存當(dāng)前1碼的極性。若前一個(gè)1碼為負(fù),則此輸入信號(hào)1碼應(yīng)編為正極性碼,用SetAt將其替換為‘E’(代表+1),并將flag1賦值為“+1

41、”保存當(dāng)前1碼的極性。</p><p>  4)若輸入信號(hào)為0,Zerocount+1,判斷Zerocount是否等于4,若等于4,判斷前一個(gè)V碼極性.。若為+V將第四個(gè)0替換為x(代表-V),并將flagv賦值為-V,再判斷此時(shí)的前一個(gè)1碼極性,若為正極性,則將第一個(gè)0碼替換為y(代表-B),并將flag1賦值為-1。若為-V將第四個(gè)0替換為X(代表+V),并將flagv賦值為+V,再判斷此時(shí)的前一個(gè)1碼極性,

42、若為正負(fù)極性,則將第一個(gè)0碼替換為Y(代表+B),并將flag1賦值為+1。</p><p>  5)設(shè)置好每位輸入信號(hào)后退出for語(yǔ)句,定義變量strHDB3Temp來(lái)保存編碼的中間結(jié)果,以供繪圖使用。用Replace將“e”取代“-1”, 將“E”取代“+1”, “x”取代“-V”, “X”取代“+V”, “y”取代“-B”, “Y”取代“+B”,用 SetDlgItemText將編碼結(jié)果顯示在編碼結(jié)果編輯框

43、中。使主框架類(lèi)指針變量pCDrMFrame指向當(dāng)前視圖類(lèi)的父框架類(lèi)指針。主框架類(lèi)的公有成員變量Code存放編碼結(jié)果的中間結(jié)果strHDB3Temp,并用Invalidate();語(yǔ)句強(qiáng)迫調(diào)用畫(huà)圖函數(shù)OnDraw();這就完成了HDB3碼的編碼。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  // HDB3碼編碼</p><

44、p>  void CBIANMAView::OnRadioHdb3() </p><p>  { // TODO: Add your control notification handler code here</p><p>  CodeChoose="HDB3";</p><p>  if(GetCheckedRadioButton(I

45、DC_RADIO_POSV,IDC_RADIO_NEGV)==0)</p><p>  { polarv="+V";</p><p>  CheckRadioButton(IDC_RADIO_POSV,IDC_RADIO_NEGV,IDC_RADIO_POSV);</p><p><b>  }</b></p>

46、;<p>  this->GetDlgItem(IDC_STATIC_SETPOLAR)->ShowWindow( SW_SHOW );</p><p>  this->GetDlgItem(IDC_STATIC_SETPOLAR)->SetWindowText("HDB碼設(shè)置");</p><p>  this->GetDl

47、gItem(IDC_STATIC_POLARV)->ShowWindow(SW_SHOW);</p><p>  this->GetDlgItem(IDC_RADIO_POSV)->ShowWindow(SW_SHOW);</p><p>  this->GetDlgItem(IDC_RADIO_NEGV)->ShowWindow(SW_SHOW);</

48、p><p>  CString strHDB3;</p><p>  this->GetDlgItemText(IDC_EDIT_INPUT,strHDB3);//取輸入信號(hào)</p><p>  CString flag1=polar1;//保存1碼的極性</p><p>  CString flagv=polarv;//保存v碼的極性&l

49、t;/p><p>  int Zerocount=0;//計(jì)算連零個(gè)數(shù)</p><p>  int SignalLength=strHDB3.GetLength();//獲得輸入信號(hào)的長(zhǎng)度</p><p>  for(int i=0;i<SignalLength;i++) //編碼</p><p><b>  {</b>

50、;</p><p>  if(strHDB3.GetAt(i)=='1')</p><p>  { Zerocount=0;</p><p>  if(flag1=="+1")</p><p>  {strHDB3.SetAt(i,'e');//e代表-1</p><

51、;p>  flag1="-1";</p><p><b>  }</b></p><p><b>  else </b></p><p>  { strHDB3.SetAt(i,'E');//E代表+1</p><p>  flag1="

52、+1";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  { Zerocount++;</p><p>  if(Zerocount==4)&l

53、t;/p><p>  { Zerocount=0;</p><p>  if(flagv=="+V")</p><p>  { strHDB3.SetAt(i,'x');//x代表-V</p><p>  flagv="-V";</p><p>  if(fl

54、ag1=="+1")</p><p>  { strHDB3.SetAt(i-3,'y');//y代表-B</p><p>  flag1="-1";</p><p><b>  }</b></p><p><b>  }</b></p

55、><p><b>  else</b></p><p>  { strHDB3.SetAt(i,'X');//X代表+V</p><p>  flagv="+V";</p><p>  if(flag1=="-1")</p><p>  {

56、strHDB3.SetAt(i-3,'Y');//Y代表+B</p><p>  flag1="+1";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

57、;<p><b>  }</b></p><p><b>  }</b></p><p>  CString strHDB3Temp=strHDB3;//strAMITemp存放AMI編碼的中間結(jié)果,可以供繪圖時(shí)使用</p><p>  strHDB3.Replace("e","

58、-1");//e取代-1</p><p>  strHDB3.Replace("E","+1");//E取代+1</p><p>  strHDB3.Replace("x","-V");//x取代-v</p><p>  strHDB3.Replace("X"

59、;,"+V");//X取代+v</p><p>  strHDB3.Replace("y","-B");//y取代-B</p><p>  strHDB3.Replace("Y","+B");//Y取代+B</p><p>  this->SetDlgItemT

60、ext(IDC_EDIT_OUPUT,strHDB3);//在編碼結(jié)果編輯框中顯示編碼結(jié)果</p><p>  pCDrMFrame= (CMainFrame*)this->GetParentFrame();</p><p>  pCDrMFrame->CodeChoose="HDB3";</p><p>  pCDrMFrame-&

61、gt;Code=strHDB3Temp;</p><p>  pCDrMFrame->Invalidate();</p><p>  4.1.3 CMI編碼算法</p><p><b> ?。?)流程圖: </b></p><p><b> ?。?)具體描述:</b></p>&

62、lt;p>  1)在CMI碼編碼函數(shù)中將編碼碼型標(biāo)識(shí)符號(hào)變量CodeChoose賦值為“CMI”。定義字符串變量strCMI來(lái)存儲(chǔ)用GetDlgItemText獲取的輸入信號(hào)和編碼結(jié)果,并定義整形變量SignalLength存儲(chǔ)用GetLength來(lái)獲取的輸入信號(hào)長(zhǎng)度,定義變量flag1來(lái)保存前一個(gè)1碼的極性。</p><p>  2)然后用for語(yǔ)句對(duì)輸入信號(hào)進(jìn)行檢測(cè),用GetAt(i)來(lái)獲取第i位信號(hào),

63、并用if語(yǔ)句進(jìn)行判斷,若輸入信號(hào)為1再判斷前一個(gè)1碼的極性,若前一個(gè)1碼為正,則此輸入信號(hào)1碼應(yīng)編為11,用SetAt將其替換為‘c’(代表11),并將flag1賦值為“-1”保存當(dāng)前1碼的極性。若前一個(gè)1碼為負(fù),則此輸入信號(hào)1碼應(yīng)編為00,用SetAt將其替換為‘C’(代表00),并將flag1賦值為“+1”保存當(dāng)前1碼的極性。若輸入信號(hào)為0則將此碼編為01,用SetAt將其替換為‘o’(代表01).</p><p

64、>  3)設(shè)置好每位輸入信號(hào)后退出for語(yǔ)句,定義變量strCMITemp來(lái)保存編碼的中間結(jié)果,以供繪圖使用。用Replace將“c”取代“11”, 將“C”取代“00”, 將“o”取代“01”,用 SetDlgItemText將編碼結(jié)果顯示在編碼結(jié)果編輯框中。使主框架類(lèi)指針變量pCDrMFrame指向當(dāng)前視圖類(lèi)的父框架類(lèi)指針。主框架類(lèi)的公有成員變量Code存放編碼結(jié)果的中間結(jié)果strCMITemp,并用Invalidate();

65、語(yǔ)句強(qiáng)迫調(diào)用畫(huà)圖函數(shù)OnDraw();這就完成了CMI碼的編碼。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p><b>  // CMI碼編碼</b></p><p>  void CBIANMAView::OnRadioCmi() </p><p>  { CodeCho

66、ose="CMI";</p><p>  // TODO: Add your control notification handler code here</p><p>  this->GetDlgItem(IDC_STATIC_SETPOLAR)->ShowWindow( SW_SHOW );</p><p>  this->

67、;GetDlgItem(IDC_STATIC_SETPOLAR)->SetWindowText("CMI碼設(shè)置");</p><p>  this->GetDlgItem(IDC_STATIC_POLARV)->ShowWindow( SW_HIDE );</p><p>  this->GetDlgItem(IDC_RADIO_POSV)-&g

68、t;ShowWindow( SW_HIDE );</p><p>  this->GetDlgItem(IDC_RADIO_NEGV)->ShowWindow( SW_HIDE );</p><p>  CString strCMI;</p><p>  this->GetDlgItemText(IDC_EDIT_INPUT,strCMI);//取

69、輸入信號(hào)</p><p>  CString flag1=polar1;//保存1碼的極性</p><p>  int SignalLength=strCMI.GetLength();//獲得輸入信號(hào)的長(zhǎng)度</p><p>  for(int i=0;i<SignalLength;i++) //編碼</p><p>  { if(st

70、rCMI.GetAt(i)=='1')</p><p>  { if(flag1=="+1")</p><p>  {strCMI.SetAt(i,'c');//c代表11</p><p>  flag1="-1";</p><p><b>  }<

71、/b></p><p><b>  else </b></p><p>  { strCMI.SetAt(i,'C');//E代表00</p><p>  flag1="+1";</p><p><b>  }</b></p>&l

72、t;p><b>  }</b></p><p><b>  else</b></p><p>  { strCMI.SetAt(i,'o');//E代表01</p><p><b>  }</b></p><p><b>  }</b&g

73、t;</p><p>  CString strCMITemp=strCMI;//strAMITemp存放AMI編碼的中間結(jié)果,可以供繪圖時(shí)使用</p><p>  strCMI.Replace("c","11");//c取代11</p><p>  strCMI.Replace("C","00&

74、quot;);//C取代00</p><p>  strCMI.Replace("o","01");//C取代01</p><p>  this->SetDlgItemText(IDC_EDIT_OUPUT,strCMI);//在編碼結(jié)果編輯框中顯示編碼結(jié)果</p><p>  pCDrMFrame= (CMainFra

75、me*)this->GetParentFrame();</p><p>  pCDrMFrame->CodeChoose="CMI";</p><p>  pCDrMFrame->Code=strCMITemp;</p><p>  pCDrMFrame->Invalidate();</p><p>

76、;<b>  }</b></p><p><b>  }</b></p><p>  4.1.4 MANCHESTER編碼算法</p><p><b> ?。?)流程圖: </b></p><p><b> ?。?)具體描述:</b></p>

77、<p>  1)在MANCHESTER碼編碼函數(shù)中將編碼碼型標(biāo)識(shí)符號(hào)變量CodeChoose賦值為“MANCHESTER”。定義字符串變量strMANCHESTER來(lái)存儲(chǔ)用GetDlgItemText獲取的輸入信號(hào)和編碼結(jié)果,并定義整形變量SignalLength存儲(chǔ)用GetLength來(lái)獲取的輸入信號(hào)長(zhǎng)度。</p><p>  2)然后用for語(yǔ)句對(duì)輸入信號(hào)進(jìn)行檢測(cè),用GetAt(i)來(lái)獲取第i位信

78、號(hào),并用if語(yǔ)句進(jìn)行判斷,若輸入信號(hào)為1則此輸入信號(hào)編為10,用SetAt將其替換為‘m’(代表10),若輸入信號(hào)為0則將此碼編為01,用SetAt將其替換為‘M’(代表01).</p><p>  3)設(shè)置好每位輸入信號(hào)后退出for語(yǔ)句,定義變量strMANCHESTERTemp來(lái)保存編碼的中間結(jié)果,以供繪圖使用。用Replace將“m”取代“10”, 將“M”取代“01”,用 SetDlgItemText將編

79、碼結(jié)果顯示在編碼結(jié)果編輯框中。使主框架類(lèi)指針變量pCDrMFrame指向當(dāng)前視圖類(lèi)的父框架類(lèi)指針。主框架類(lèi)的公有成員變量Code存放編碼結(jié)果的中間結(jié)果strMANCHESTERTemp,并用Invalidate();語(yǔ)句強(qiáng)迫調(diào)用畫(huà)圖函數(shù)OnDraw();這就完成了MANCHESTER碼的編碼。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  /

80、/ MANCHESTER碼編碼</p><p>  void CBIANMAView::OnRadioManchester() </p><p>  { CodeChoose="MANCHESTER";</p><p>  CString strMANCHESTER;</p><p>  this->GetDlg

81、ItemText(IDC_EDIT_INPUT,strMANCHESTER);//取輸入信號(hào)</p><p>  int SignalLength=strMANCHESTER.GetLength();//獲得輸入信號(hào)的長(zhǎng)度</p><p>  for(int i=0;i<SignalLength;i++) //編碼</p><p>  { if(strMAN

82、CHESTER.GetAt(i)=='1')</p><p>  {strMANCHESTER.SetAt(i,'m');//c代表10</p><p><b>  }</b></p><p><b>  else</b></p><p>  { strMANCH

83、ESTER.SetAt(i,'M');//E代表01 </p><p><b>  }</b></p><p><b>  }</b></p><p>  CString strMANCHESTERTemp=strMANCHESTER;//strMANCHESTERTemp存放MANCHESTER編碼的中

84、間結(jié)果,可以供繪圖時(shí)使用</p><p>  strMANCHESTER.Replace("m","10");//C取代10</p><p>  strMANCHESTER.Replace("M","01");//C取代01</p><p>  this->SetDlgItemTe

85、xt(IDC_EDIT_OUPUT,strMANCHESTER);//在編碼結(jié)果編輯框中顯示編碼結(jié)果</p><p>  pCDrMFrame= (CMainFrame*)this->GetParentFrame();</p><p>  pCDrMFrame->CodeChoose="MANCHESTER";</p><p>  p

86、CDrMFrame->Code=strMANCHESTERTemp;</p><p>  pCDrMFrame->Invalidate();</p><p><b>  }</b></p><p>  4.1.5 隨機(jī)信號(hào)生成算法</p><p>  為了方便信號(hào)生成,本系統(tǒng)還設(shè)計(jì)了可隨用戶(hù)自定義長(zhǎng)度的隨機(jī)原

87、始信號(hào)生成算法。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  void CBIANMAView::OnButton1() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handl

88、er code here</p><p>  UpdateData(1);</p><p>  CString str,strtemp;</p><p><b>  str="";</b></p><p><b>  int j;</b></p><p>

89、  srand( (unsigned)time( NULL ) ); //設(shè)置一個(gè)隨機(jī)起點(diǎn)</p><p>  for(int i=0;i<m_edit_long;i++)</p><p><b>  {</b></p><p>  j=rand()%2;</p><p>  strtemp.Format(&q

90、uot;%d",j);</p><p>  str=str+strtemp;</p><p><b>  }</b></p><p>  m_input=str;</p><p>  UpdateData(0);</p><p>  strtemp.Format("%d&quo

91、t;,m_edit_long);</p><p>  str="信號(hào)長(zhǎng)度:"+strtemp;</p><p>  (GetDlgItem(IDC_SINGAL_LEN))->SetWindowText(str);</p><p>  OnChangeEditInput();</p><p><b>  }

92、</b></p><p><b>  4.2、 畫(huà)圖設(shè)計(jì)</b></p><p>  為了使用戶(hù)能對(duì)編碼結(jié)果能有更形象化的了解,該系統(tǒng)還設(shè)計(jì)了編碼結(jié)果圖形顯示。各種碼型編碼后畫(huà)波形由以下程序?qū)崿F(xiàn)。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  void CDra

93、wView::OnDraw(CDC* pDC)</p><p>  { CDocument* pDoc = GetDocument();</p><p>  CRect Rect;</p><p>  CWnd* pWnd = pDC->GetWindow();</p><p>  pWnd->GetWindowRect(Rec

94、t);</p><p>  CMainFrame*pCDrMFrame = (CMainFrame*)this->GetParentFrame();</p><p>  if(pCDrMFrame->Code.GetLength() == 0)</p><p><b>  return;</b></p><p&

95、gt;  if(pCDrMFrame->ShowCoodinate) </p><p><b>  {</b></p><p>  DrawCoordinate(pDC,pCDrMFrame->m_linewith);//畫(huà)坐標(biāo)軸</p><p><b>  }</b></p><p>

96、  if(pCDrMFrame->ShowDottedLine)</p><p><b>  {</b></p><p>  DrawDottedLine(pDC,pCDrMFrame->Code.GetLength());//畫(huà)虛線</p><p><b>  }</b></p><p&g

97、t;  if(pCDrMFrame->CodeChoose=="AMI")</p><p><b>  {</b></p><p>  DrawAMI(pDC, pCDrMFrame->Code, pCDrMFrame->color1, pCDrMFrame->color2, pCDrMFrame->m_linewit

98、h); //畫(huà)AMI編碼</p><p>  DrawTheCode(pDC,pCDrMFrame->firstCode); //畫(huà)輸入信號(hào)原碼</p><p><b>  }</b></p><p>  if(pCDrMFrame->CodeChoose=="HDB3")</p><p>

99、;<b>  {</b></p><p>  DrawHDB3(pDC, pCDrMFrame->Code, pCDrMFrame->color1, pCDrMFrame->color2, pCDrMFrame->m_linewith); //畫(huà)HDB3編碼</p><p>  DrawTheCode(pDC,pCDrMFrame->fi

100、rstCode); //畫(huà)輸入信號(hào)原碼</p><p><b>  }</b></p><p>  if(pCDrMFrame->CodeChoose=="CMI")</p><p><b>  {</b></p><p>  DrawCMI(pDC, pCDrMFrame

101、->Code, pCDrMFrame->color1, pCDrMFrame->color2, pCDrMFrame->m_linewith); //畫(huà)CMI編碼</p><p>  DrawTheCode(pDC,pCDrMFrame->firstCode);</p><p><b>  }</b></p><p&g

102、t;  if(pCDrMFrame->CodeChoose=="MANCHESTER")</p><p><b>  {</b></p><p>  DrawMANCHESTER(pDC, pCDrMFrame->Code, pCDrMFrame->color1, pCDrMFrame->color2, pCDrMFrame

103、->m_linewith); //畫(huà)MANCHESTER編碼</p><p>  DrawTheCode(pDC,pCDrMFrame->firstCode);</p><p><b>  }</b></p><p><b>  }</b></p><p>  五、調(diào)試結(jié)果與現(xiàn)象分析 &

104、lt;/p><p>  程序運(yùn)行效果如圖5.1所示:</p><p>  圖 5.1 系統(tǒng)運(yùn)行效果圖 </p><p>  AMI碼編碼運(yùn)行效果如圖5.2所示:</p><p>  圖 5.2 AMI碼編碼運(yùn)行效果圖</p><p>  HDB3碼編碼運(yùn)行效果如圖5.3所示:</p><p>

105、;  圖 5.3 HDB3碼編碼運(yùn)行效果圖</p><p>  CMI碼編碼運(yùn)行效果如下所示:</p><p>  MANCHESTER碼編碼運(yùn)行效果如下圖所示:</p><p>  系統(tǒng)實(shí)現(xiàn)功能:當(dāng)選擇了編碼類(lèi)型后,在隨機(jī)碼生成個(gè)數(shù)里輸入信號(hào)長(zhǎng)度,點(diǎn)擊生成隨機(jī)碼則生成相應(yīng)的隨機(jī)碼并編碼畫(huà)圖;或當(dāng)選擇了編碼類(lèi)型后,在原碼框內(nèi)輸入信息碼后點(diǎn)擊編碼則會(huì)生成相應(yīng)的編碼

106、并畫(huà)圖。由結(jié)果顯示表明系統(tǒng)實(shí)現(xiàn)了設(shè)計(jì)的基本要求,也實(shí)現(xiàn)了系統(tǒng)的擴(kuò)展要求。</p><p><b>  六、系統(tǒng)不足之處</b></p><p>  本系統(tǒng)還存在一些不足之處:</p><p>  1、差分曼徹斯特碼沒(méi)有編碼成功。</p><p>  2、編碼波形胖是否顯示編碼結(jié)果的功能沒(méi)有做出來(lái)。</p>

107、<p><b>  七、心得體會(huì)</b></p><p>  本次設(shè)計(jì)使我對(duì)AMI碼、HDB3碼、CMI碼、曼徹斯特碼和差分曼徹斯特碼等通信基帶碼型的編碼原理有了更深刻的認(rèn)識(shí),對(duì)C++面向?qū)ο蟪绦蛟O(shè)計(jì)也有了更深刻的了解,對(duì)從未接觸過(guò)的MFC程序設(shè)計(jì)也有了大概了解。在課程設(shè)計(jì)中通過(guò)認(rèn)真聽(tīng)老師講解,看課件,還有通過(guò)MSDN索引,學(xué)會(huì)了如何去應(yīng)用一些函數(shù),如何實(shí)現(xiàn)自己想要的功能。在編程過(guò)

108、程中通過(guò)不斷出現(xiàn)問(wèn)題,分析問(wèn)題和解決問(wèn)題,自己的糾錯(cuò)能力和編程能力得到了很大的提高。本次設(shè)計(jì)編程代碼比以前所做過(guò)的多好多,但是只要明確自己所要實(shí)現(xiàn)的功能,一個(gè)功能一個(gè)功能的去做好,然后再做好各個(gè)功能之間的聯(lián)系,最后綜合好,還是可以把這個(gè)設(shè)計(jì)做得很好的。本次設(shè)計(jì)讓我認(rèn)識(shí)到了編程思路的重要性,編程之前需要整理好一個(gè)編程思路,需要建立一個(gè)編程框架,那樣開(kāi)始編的時(shí)候才能得心應(yīng)手。還有就是意識(shí)到及時(shí)做好備份保存對(duì)編程者來(lái)說(shuō)還是很重要的。</

109、p><p><b>  八、參考文獻(xiàn)</b></p><p>  [1] 樊昌信.通信原理(第5版).北京:國(guó)防工業(yè)大學(xué)出版社,2001</p><p>  [2] 陳維興.C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第2版).北京:清華大學(xué)出版社,2004.8</p><p>  [3] 鄭阿奇.Visual C++實(shí)用教程(第3版).北

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論