差分曼徹斯特編碼課程設(shè)計_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p><b>  計算機網(wǎng)絡(luò)</b></p><p>  題 目: 差分曼徹斯特模擬編碼</p><p><b>  姓 名: </b></p><p><b>  專 業(yè): </b

2、></p><p><b>  班 級: </b></p><p><b>  學(xué) 號: </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2013.12.21</p><p><b>  目

3、 錄</b></p><p>  課程設(shè)計目的………………………………………………………01</p><p>  課程設(shè)計要求………………………………………………………01</p><p>  實驗要求……………………………………………………………01</p><p>  差分曼徹斯特編碼簡介……………………………………………0

4、1</p><p>  設(shè)計思路……………………………………………………………02</p><p>  圖像示意……………………………………………………………02</p><p>  算法流程圖…………………………………………………………02</p><p>  實驗?zāi)K分析………………………………………………………03</p>

5、<p>  運行結(jié)果……………………………………………………………10</p><p>  實驗總結(jié) …………………………………………………………11</p><p>  (1)結(jié)果分析 …………………………………………………………11</p><p>  (2)實驗感想 …………………………………………………………12</p><

6、;p>  11.附錄代碼 …………………………………………………………13</p><p><b>  課程設(shè)計目的:</b></p><p>  通過課程設(shè)計,鞏固《計算機網(wǎng)絡(luò)》課程學(xué)習(xí)的內(nèi)容,強化上機動手能力,為后續(xù)各門計算機相關(guān)課程的學(xué)習(xí)打下堅實基礎(chǔ)。課程設(shè)計為學(xué)生提供了一個獨立實踐的機會,將課本上的理論知識和實際應(yīng)用問題進(jìn)行有機結(jié)合,鍛煉綜合分析、解決實

7、際問題的能力。</p><p><b>  課程設(shè)計要求:</b></p><p>  對系統(tǒng)進(jìn)行功能模塊分析、控制模塊分析正確;</p><p><b>  系統(tǒng)設(shè)計要實用;</b></p><p>  編程簡練,可用,功能全面,具有較好的健壯性;</p><p>  說明

8、書、流程圖要清楚。</p><p><b>  實驗要求:</b></p><p>  通過編譯語言實現(xiàn)一個輸入十六進(jìn)制數(shù)輸出差分曼徹斯特編碼模擬圖像實驗。</p><p>  差分曼徹斯特編碼簡介:</p><p>  差分曼徹斯特編碼是對曼徹斯特編碼的一種改進(jìn),保留了曼徹斯特編碼作為“自含時鐘編碼”的優(yōu)點,仍將每比特

9、中間的跳變作為同步之用,但是每比特的取值則根據(jù)其開始處是否出現(xiàn)電平的跳變來決定。其原理是:每一位中間都有一個跳變,每位開始時有跳變表示“0”,無跳變表示“1”。位中間跳變表示時鐘,位前跳變表示數(shù)據(jù)。其優(yōu)點是:時鐘、數(shù)據(jù)分離,便于提取。</p><p><b>  五、設(shè)計思路:</b></p><p>  輸入16進(jìn)制數(shù)據(jù),能夠輸出差分曼卻斯特波形圖,通過數(shù)組轉(zhuǎn)變,將

10、十六進(jìn)制數(shù)據(jù)轉(zhuǎn)化成二進(jìn)制數(shù)據(jù),轉(zhuǎn)化過程中,必須將一位十六進(jìn)制數(shù)據(jù)轉(zhuǎn)化成四位二進(jìn)制數(shù)據(jù),并判斷差分曼徹斯特編碼,輸出模擬圖像。</p><p><b>  圖像示意:</b></p><p><b>  七、算法流程圖:</b></p><p><b>  實驗?zāi)K分析:</b></p>

11、<p>  將一個十六進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)</p><p>  void test() </p><p><b>  { </b></p><p>  char c[MAX];</p><p>  int a[16]={0};</p><p>  int i=0,j;</p>

12、;<p>  cout<<"請輸入一個十六進(jìn)制數(shù):"<<endl;</p><p><b>  cin>>c; </b></p><p>  while(c[i])</p><p><b>  {</b></p><p>  if

13、(c[i]>'0'&&c[i]<'9') </p><p>  c[i]=c[i++]-48; </p><p><b>  else </b></p><p>  if(c[i]>='A'&&c[i]<='Z') </

14、p><p>  c[i]=c[i++]-55; </p><p>  else if(c[i]>='a'&&c[i]<='z')</p><p>  c[i]=c[i++]-87; </p><p><b>  else</b></p><p&g

15、t;<b>  { </b></p><p>  cout<<"輸入錯誤,請從新輸入"<<endl;</p><p><b>  return;</b></p><p><b>  } </b></p><p><b>  

16、} </b></p><p><b>  i=0;</b></p><p>  while(c[i]) </p><p><b>  { </b></p><p>  for(j=3;j>=0;j--) </p><p><b>  { </

17、b></p><p>  a[j]=c[i]%2;</p><p><b>  c[i]/=2; </b></p><p><b>  } </b></p><p>  for(j=0;j<4;j++) </p><p>  cout<<a[j]<

18、;<endl; </p><p><b>  i++; </b></p><p><b>  } </b></p><p>  cout<<endl;</p><p><b>  } </b></p><p>  判斷輸入的數(shù)據(jù)是不是

19、由01組成的序列。若不是,則做出錯處理。</p><p>  bool check(char *ch)</p><p><b>  {</b></p><p><b>  //局部變量</b></p><p>  bool flag=true;</p><p>  int i

20、ndex=1;</p><p>  char temp='n';</p><p>  if(ch[0]=='\0')</p><p><b>  {</b></p><p>  cout<<"(----請輸入上述轉(zhuǎn)換的數(shù)據(jù)!----)"<<end

21、l;</p><p>  flag=false;</p><p><b>  }</b></p><p>  //只有ch[0]!='\0'時才會進(jìn)入這個循環(huán)</p><p>  while(ch[index]!='\0' && ch[0]!='\0') &

22、lt;/p><p><b>  {</b></p><p>  if(ch[index]==' ') //如果輸入的數(shù)據(jù)中有空格則忽略</p><p><b>  {</b></p><p><b>  index++;</b></p><

23、;p><b>  continue;</b></p><p><b>  }</b></p><p>  if(ch[index]!='0' && ch[index]!='1')</p><p><b>  {</b></p><

24、;p>  cout<<"源數(shù)據(jù)有誤!"<<endl<<endl;</p><p>  //根據(jù)用戶需要決定是否繼續(xù)編碼過程</p><p>  cout<<"是否繼續(xù)?[y/n]:";</p><p>  cin>>temp;</p><p&

25、gt;  if(temp!='y') exit(1);</p><p>  flag=false;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  index++;</b></p>

26、<p><b>  }</b></p><p>  return flag;</p><p><b>  }</b></p><p>  差分曼徹斯特編碼。第一個數(shù)據(jù)若是1,則用10代替;若是0,則用01代替。其他數(shù)據(jù),后一個數(shù)據(jù)若是1,則數(shù)據(jù)起始位置不跳變;若是0,則數(shù)據(jù)起始位置產(chǎn)生跳變。并且,每個數(shù)據(jù)中間

27、都會產(chǎn)生跳變。</p><p>  void Differential_Manchester_Encody(char *ch)</p><p><b>  {</b></p><p>  int index=1;</p><p>  char temp; //用temp來記錄前一個數(shù)據(jù)后半部分是0還是1</p

28、><p>  cout<<"差分曼徹斯特編碼圖像為: "<<endl;</p><p>  if(ch[0]=='0')</p><p><b>  {</b></p><p>  cout<<"-_ ";</p>&l

29、t;p><b>  temp='1';</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"_-

30、 ";</p><p><b>  temp='0';</b></p><p><b>  }</b></p><p>  while(ch[index]!='\0') //編碼未完成才繼續(xù)</p><p><b>  

31、{</b></p><p>  if(ch[index]==' ')</p><p><b>  {</b></p><p><b>  index++;</b></p><p><b>  continue;</b></p><

32、p><b>  }</b></p><p>  if(ch[index]=='1')</p><p><b>  {</b></p><p>  if(temp=='1')</p><p><b>  {</b></p>&l

33、t;p>  cout<<"_- ";</p><p><b>  temp='0';</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&l

34、t;/b></p><p>  cout<<"-_ ";</p><p><b>  temp='1';</b></p><p><b>  }</b></p><p><b>  }</b></p><

35、p><b>  else</b></p><p><b>  {</b></p><p>  if(temp=='1')</p><p><b>  {</b></p><p>  cout<<"-_ ";</p>

36、;<p><b>  temp='1';</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<&qu

37、ot;_- ";</p><p><b>  temp='0';</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  index++;</b></p>

38、<p><b>  }</b></p><p>  cout<<endl<<endl;</p><p><b>  }</b></p><p><b>  主函數(shù)部分:</b></p><p>  int main()</p>&

39、lt;p>  { test();</p><p>  //char buffer[MAX];//存放輸入數(shù)據(jù)的緩沖區(qū)</p><p>  char c[MAX];</p><p>  //buffer[MAX]=c[MAX];</p><p>  char temp='y';</p><p>

40、;  while(temp=='y')</p><p><b>  {</b></p><p>  cout<<"非歸零碼為: "<<endl;</p><p>  gets(c); //利用gets而不用cin是為了當(dāng)輸入的數(shù)據(jù)中含有空格時能讀取完整的碼</p>

41、<p>  if(check(c)) //首先檢查輸入的數(shù)據(jù)是否符合要求,01串符合要求</p><p><b>  {</b></p><p>  Differential_Manchester_Encody(c);</p><p>  //根據(jù)用戶需要決定是否繼續(xù)編碼過程</p><p>  cout

42、<<"continue or not[y/n]:";</p><p>  cin>>temp;</p><p>  getchar(); //這個getchar()是必須存在的,否則gets函數(shù)會讀取cin>>temp中的回車</p><p><b>  }</b></p>

43、<p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  運行結(jié)果:</b></p><p><b>  實驗總結(jié):</b>

44、</p><p><b>  1、結(jié)果分析:</b></p><p> ?。?)差分曼徹斯特碼編碼規(guī)則:</p><p>  從上圖可看出差分曼徹斯特碼的編碼規(guī)則,即:</p><p>  i.每個單位周期內(nèi),以1/2周期的時刻處,分為高低兩個等時長電平。有兩種:上升(先高后低)或下降(先低后高)。</p>

45、<p>  ii.數(shù)據(jù)流的二進(jìn)制編碼中,第一個數(shù)據(jù)位是1,則編碼為下降。0則相反。 </p><p>  iii.數(shù)據(jù)流的二進(jìn)制編碼中,其它數(shù)據(jù)位,則根據(jù)此位跟前一位的電平比較。相同則編碼為不跳變(跟上一位后半部分一樣)。不同則相反。</p><p>  (2)差分曼徹斯特碼特點:在信號為開始時不改變信號極性,表示邏輯“1”;在信號為開始時改變信號極性,表示邏輯“0”

46、。當(dāng)比特為1時,前T/2比特位的電平與上一個比特位的后T/2的比特位的電平相同;當(dāng)比特為0時,前T/2比特位的電平與上一個比特位的后T/2比特位的電平相反。</p><p><b>  實驗感想:</b></p><p>  首先,讓我對差分曼徹斯特編碼原理有了進(jìn)一步的了解。差分曼徹斯特碼又叫數(shù)字雙相碼,每個時鐘中間都有一次跳變這個跳變作同步之用。其次,通過這次課程設(shè)

47、計,我認(rèn)識到了完成一項課程設(shè)計工作不但需要對知識的掌握和理解,還需要不懂就問,同學(xué)間共同努力來解決課程設(shè)計當(dāng)中的種種困難,開拓創(chuàng)新能力的目的。最后,通過這次課程設(shè)計,讓我對說明書的模板有了更清晰的了解,加深了我思想中對文章模范化的概念,對我一年后的畢業(yè)論文也起了輪廓性作用。這將會變成我們在大學(xué)生活中獲得的又一筆巨大的財富。</p><p><b>  附錄代碼:</b></p>

48、<p>  #include<iostream></p><p>  using namespace std;</p><p>  #define MAX 1024</p><p>  bool check(char *ch)</p><p><b>  {</b></p><

49、p>  bool flag=true;</p><p>  int index=1;</p><p>  char temp='n';</p><p>  if(ch[0]=='\0')</p><p><b>  {</b></p><p>  cout&l

50、t;<"(----請輸入上述轉(zhuǎn)換的數(shù)據(jù)!----)"<<endl;</p><p>  flag=false;</p><p><b>  }</b></p><p>  while(ch[index]!='\0' && ch[0]!='\0') </p

51、><p><b>  {</b></p><p>  if(ch[index]==' ') //如果輸入的數(shù)據(jù)中有空格則忽略</p><p><b>  {</b></p><p><b>  index++;</b></p><p><

52、;b>  continue;</b></p><p><b>  }</b></p><p>  if(ch[index]!='0' && ch[index]!='1')</p><p><b>  {</b></p><p>  c

53、out<<"源數(shù)據(jù)有誤!"<<endl<<endl;</p><p>  cout<<"是否繼續(xù)?[y/n]:";</p><p>  cin>>temp;</p><p>  if(temp!='y') exit(1);</p><

54、;p>  flag=false;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  index++;</b></p><p><b>  }</b></p><p

55、>  return flag;</p><p><b>  }</b></p><p>  void test() </p><p><b>  { </b></p><p>  char c[MAX];</p><p>  int a[16]={0};</p&

56、gt;<p>  int i=0,j;</p><p>  cout<<"請輸入一個十六進(jìn)制數(shù):"<<endl;</p><p><b>  cin>>c; </b></p><p>  while(c[i])</p><p><b>  {

57、</b></p><p>  if(c[i]>'0'&&c[i]<'9') </p><p>  c[i]=c[i++]-48; </p><p><b>  else </b></p><p>  if(c[i]>='A'&a

58、mp;&c[i]<='Z') </p><p>  c[i]=c[i++]-55; </p><p>  else if(c[i]>='a'&&c[i]<='z')</p><p>  c[i]=c[i++]-87; </p><p><b>

59、  else</b></p><p><b>  { </b></p><p>  cout<<"輸入錯誤,請從新輸入"<<endl;</p><p><b>  return;</b></p><p><b>  } </b&

60、gt;</p><p><b>  } </b></p><p><b>  i=0;</b></p><p>  while(c[i]) </p><p><b>  { </b></p><p>  for(j=3;j>=0;j--) <

61、/p><p><b>  { </b></p><p>  a[j]=c[i]%2;</p><p><b>  c[i]/=2; </b></p><p><b>  } </b></p><p>  for(j=0;j<4;j++) </p&

62、gt;<p>  cout<<a[j]<<endl; </p><p><b>  i++; </b></p><p><b>  } </b></p><p>  cout<<endl;</p><p><b>  } </b&g

63、t;</p><p>  void Differential_Manchester_Encody(char *ch)</p><p><b>  {</b></p><p>  int index=1;</p><p>  char temp; </p><p>  cout<<&qu

64、ot;差分曼徹斯特編碼圖像為: "<<endl;</p><p>  if(ch[0]=='0')</p><p><b>  {</b></p><p>  cout<<"-_ ";</p><p><b>  temp='1

65、9;;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"_- ";</p><p><

66、;b>  temp='0';</b></p><p><b>  }</b></p><p>  while(ch[index]!='\0') </p><p><b>  {</b></p><p>  if(ch[index]==' &#

67、39;)</p><p><b>  {</b></p><p><b>  index++;</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if(ch[

68、index]=='1')</p><p><b>  {</b></p><p>  if(temp=='1')</p><p><b>  {</b></p><p>  cout<<"_- ";</p><p&g

69、t;<b>  temp='0';</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"-_ &quo

70、t;;</p><p><b>  temp='1';</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b

71、>  {</b></p><p>  if(temp=='1')</p><p><b>  {</b></p><p>  cout<<"-_ ";</p><p><b>  temp='1';</b></p

72、><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"_- ";</p><p><b>  temp='0

73、';</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  index++;</b></p><p><b>  }</b></p><p>  co

74、ut<<endl<<endl;</p><p><b>  }</b></p><p>  int main()</p><p><b>  { </b></p><p><b>  test();</b></p><p>  

75、char c[MAX];</p><p>  char temp='y';</p><p>  while(temp=='y')</p><p><b>  {</b></p><p>  cout<<"非歸零碼為: "<<endl;</p

76、><p>  gets(c); </p><p>  if(check(c)) {</p><p>  Differential_Manchester_Encody(c);</p><p>  cout<<"continue or not[y/n]:";</p><p>  cin&g

77、t;>temp;</p><p>  getchar(); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }<

溫馨提示

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

評論

0/150

提交評論