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

下載本文檔

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

文檔簡介

1、<p>  漢明編譯碼系統(tǒng)自行設(shè)計(jì)實(shí)驗(yàn)</p><p><b>  實(shí)驗(yàn)原理</b></p><p>  差錯(cuò)控制編碼的基本作法是:在發(fā)送端被傳輸?shù)男畔⑿蛄猩细郊右恍┍O(jiān)督碼元,這些多余的碼元與信息之間以某種確定的規(guī)則建立校驗(yàn)關(guān)系。漢明碼(7,4)是一種糾錯(cuò)碼,是能糾正單個(gè)錯(cuò)誤的線性分組碼。它有以下特點(diǎn):</p><p>  碼長

2、n=2m-1最小碼距d=3</p><p>  信息碼位k=2n-m-1糾錯(cuò)能力t=1</p><p>  監(jiān)督碼位r=n-k</p><p>  這里m位≥2的正整數(shù),給定m后,既可構(gòu)造出具體的漢明碼(n,k)。</p><p>  漢明碼的監(jiān)督矩陣有n列m行,它的n列分別由除了全0之外的m位碼組構(gòu)成,每個(gè)碼組只在某

3、列中出現(xiàn)一次。系統(tǒng)中的監(jiān)督矩陣如下圖所示:</p><p>  其相應(yīng)的生成矩陣為:</p><p>  漢明譯碼的方法,可以采用計(jì)算校正子,然后確定錯(cuò)誤圖樣并加以糾正的方法。</p><p>  圖9.1和圖9.2給出漢明編碼器和譯碼器電原理圖。</p><p>  表1.1 (7,4)漢明編碼輸入數(shù)據(jù)與監(jiān)督碼元生成表</p>

4、<p>  表1.1為(7,4)漢明編碼輸入數(shù)據(jù)與監(jiān)督碼元生成表。編碼輸出數(shù)據(jù)最先輸出是a6bit,其次是a5、a4……,最后輸出a0位。</p><p><b>  實(shí)驗(yàn)內(nèi)容</b></p><p>  編寫分頻和m序列verilog程序</p><p><b>  思路:</b></p>&l

5、t;p>  分頻:晶振為14.336MHz,要分頻得到32kHz,采用計(jì)數(shù)的方法。14336/(32*2)=224。其中32*2是因?yàn)槊堪雮€(gè)周期電平翻轉(zhuǎn)一次。所以如下圖程序中第16行,count1以224為周期計(jì)數(shù)(即從0數(shù)到223),每到數(shù)223則clk_32k翻轉(zhuǎn)實(shí)現(xiàn)分頻。其他頻率的分頻改變計(jì)數(shù)值大小即可得到。</p><p>  M序列:M序列又叫做偽隨機(jī)序列,是不能預(yù)先確定但可以重復(fù)產(chǎn)生的序列。程序

6、上通過移位寄存器實(shí)現(xiàn)。邏輯圖如下:</p><p><b>  程序:</b></p><p>  程序中要注意的是,如第10行處給m_out賦初值,否則0000狀態(tài)下移位寄存器是無法得到其他值的,會(huì)一直處于全0狀態(tài)。</p><p>  遇到的問題及解決方法:</p><p>  1.編譯時(shí)出現(xiàn)如下錯(cuò)誤:</p&

7、gt;<p>  后來發(fā)現(xiàn)是由于模塊名稱的命名問題,注意項(xiàng)目下主模塊使用與項(xiàng)目名稱相同的命名即可解決。</p><p>  仿真時(shí)各個(gè)寄存器都沒有值。后來發(fā)現(xiàn)是仿真文件(.vwf)文件沒有保存,必須保存之后才能夠得到正確的仿真。</p><p>  M序列仿真現(xiàn)象如下圖:</p><p>  從仿真截圖的m_outer一行(最下方一行)可以看出,輸出的

8、M序列為:000111101011001…,之后又是重復(fù)的。對(duì)應(yīng)的寄存器中m_out1中為(倒數(shù)第二行從第2個(gè)開始):0010、0100、1000、0001、0011、0111、1111、1110、1101、1010、0101、1011、0110、1100、1001…??梢娚傻腗序列各4位碼依次符合左移關(guān)系,且每15個(gè)為一周期,符合M序列為2n-1的規(guī)律,n為4時(shí)2n-1=15。每個(gè)4位碼的第4位按順序即是m_outer中輸出的M序列

9、??梢娚傻腗序列符合相關(guān)要求,是成功的。</p><p>  以M序列作為輸入信號(hào)編寫(7,4)漢明編碼程序,將M序列和漢明碼序列輸出到測(cè)試孔觀察和記錄。</p><p><b>  思路:</b></p><p><b>  編碼:</b></p><p>  由編碼原理圖可以的到編碼方程,高4

10、位直接由M序列的4位平移得到,而低3位可由高4位計(jì)算得到,如a0=a6+a5+a3。同理可寫出整套編碼方程如下:</p><p>  h_out[6:3]<=m_out1[3:0];</p><p>  h_out[0]<=m_out1[3]+m_out1[2]+m_out1[0];</p><p>  h_out[1]<=m_out1[2]+m_

11、out1[1]+m_out1[0];</p><p>  h_out[2]<=m_out1[3]+m_out1[2]+m_out1[1];</p><p>  輸出:因?yàn)镸序列的時(shí)鐘是32k的,而4位的M序列對(duì)應(yīng)編碼得到的漢明碼是7位的,所以由4:7比例關(guān)系得到相應(yīng)的漢明編碼輸出的時(shí)鐘應(yīng)該是56k。仿照上面32k的分頻可以的到56k分頻程序如下:</p><p&g

12、t;  always@(posedge clk)</p><p><b>  begin</b></p><p>  if(count2==8'd127)//14336/(56*2)=128</p><p>  count2<=8'b0;</p><p><b>  else</b&

13、gt;</p><p>  count2<=count2+8'b1;</p><p><b>  end</b></p><p>  always@(negedge count2[6])</p><p><b>  begin</b></p><p>  clk

14、_56k<=clk_56k+1'd1;</p><p><b>  end</b></p><p>  編碼時(shí)根據(jù)32k時(shí)鐘每數(shù)4個(gè)編碼一次,同理輸出時(shí)根據(jù)56k時(shí)鐘每數(shù)7個(gè)輸出一次。</p><p><b>  程序:</b></p><p>  程序中56行以前為定義分頻和產(chǎn)生M序

15、列部分,不再重復(fù)貼出,57到71行為漢明碼編碼部分,73到84行為漢明碼輸出部分。需要注意的是編碼的時(shí)候數(shù)4個(gè)編碼一次( ),而輸出的時(shí)候數(shù)7個(gè)編碼一次( )。這樣才能保證M序列的4位碼與輸出7位漢明碼之間是匹配的。 </p><p>  遇到的問題及解決方法:</p><p>  一開始我寫這段程序的時(shí)候沒有h_out1,從h_out的4個(gè)編碼方程把漢明碼算出來之后就直接h_out[6

16、:1]<=h_out[5:0];移位,然后就輸出h_outer<=h_out[6];一仿真發(fā)現(xiàn)輸出的漢明碼根本找不到規(guī)律。</p><p>  后來我發(fā)現(xiàn),在編碼和輸出之間需要一個(gè)緩沖,如果沒有緩沖的話,有可能的上面的編碼方程里h_out這在按對(duì)應(yīng)位編碼,下面輸出部分的程序就把h_out給移位輸出了,于是此時(shí)h_out里各位的值可能在編碼還沒完成的時(shí)候就發(fā)生了改變。所以我后來就加入了h_out1作為緩

17、沖,h_out編碼完之后先送給h_out1,再由h_out1進(jìn)行移位之后輸出。這樣仿真的時(shí)候就得到了正確的漢明碼輸出。</p><p>  漢明碼輸出仿真現(xiàn)象如下圖:</p><p>  仿真中第4行h_out為編碼得到為漢明編碼,下方倒數(shù)第2行m_out1為M序列。由下圖可以明顯看出它們的對(duì)應(yīng)關(guān)系:</p><p>  (1)漢明碼的前4位與M序列完全相同,并且是

18、連續(xù)的4個(gè)M序列中有1個(gè)是與漢明碼對(duì)應(yīng)的,而不是每一個(gè)都對(duì)應(yīng)。因?yàn)镸序列移位4次之后才是一個(gè)全新的碼,才進(jìn)行一次新的漢明碼編碼。</p><p>  (2)從上方時(shí)鐘信號(hào)可以看出,每個(gè)M序列對(duì)應(yīng)1個(gè)32k時(shí)鐘周期。每個(gè)漢明碼對(duì)應(yīng)7個(gè)56k時(shí)鐘周期和4個(gè)32k時(shí)鐘周期。</p><p> ?。?)漢明碼與其相對(duì)應(yīng)的M序列之間有1個(gè)32k時(shí)鐘周期的延時(shí),因?yàn)榻?jīng)過了編碼過程。所以第一個(gè)輸出的漢明

19、碼0111010之前的輸出為0000000.</p><p>  (4)仿真輸出的漢明碼都符合上文實(shí)驗(yàn)原理部分表1.1中信息位與監(jiān)督碼元的關(guān)系,輸出的都是正確的漢明碼。</p><p>  從仿真來看,M序列和漢明碼的輸出都是正確的成功的。</p><p>  下載到實(shí)驗(yàn)箱觀察并記錄實(shí)驗(yàn)現(xiàn)象:</p><p>  上圖為把分頻信號(hào)送到測(cè)試孔從

20、示波器上觀察到的波形。上方CH1黃色波形為56k時(shí)鐘信號(hào),圖片右邊測(cè)量值為55.99kHz。下方CH2藍(lán)色波形為32kHz時(shí)鐘信號(hào),右邊測(cè)量值為32.00kHz。可見32k和56k分頻得到的實(shí)際結(jié)果都是很準(zhǔn)的。</p><p>  上圖中上方黃色波形為32k時(shí)鐘信號(hào),下方藍(lán)色波形為輸出的M序列波形。圖中藍(lán)色波形讀數(shù)為100100011110… </p><p><b>  仿真波

21、形</b></p><p><b>  實(shí)測(cè)波形</b></p><p>  從上方仿真的M序列仿真波形中可以找到完全相同的一段,讀數(shù)也為10010001110…把兩者的時(shí)鐘軸調(diào)整為相同寬度時(shí)可以看到,仿真與實(shí)測(cè)波形完全相同。</p><p>  上圖中上方黃色波形為56k時(shí)鐘信號(hào)波形,下方藍(lán)色波形為漢明碼輸出。由兩個(gè)光標(biāo)間卡住的7

22、個(gè)時(shí)鐘周期可以讀出下方對(duì)應(yīng)的漢明碼輸出為0001011,如果繼續(xù)往下讀可以讀得連續(xù)輸出為000101111101…把時(shí)間軸右移一點(diǎn)到如下圖:</p><p>  繼續(xù)把下面的讀下去是0010110…,連起來即是0001011111010010110…其中可以看出0001011后面跟著的下一個(gè)七位漢明碼是1110100,由上圖中兩個(gè)光標(biāo)之間卡住的7個(gè)時(shí)鐘信號(hào)可以讀出下方對(duì)應(yīng)的漢明碼輸出為1110100,然后在仿真中

23、找到了相應(yīng)的漢明碼輸出部分如下圖:</p><p>  由上圖仿真中第4行h_out可以找到連續(xù)的一段漢明碼輸出為0001011111010010110……與之前上面示波器中實(shí)測(cè)讀得的序列0001011111010010110…完全相同??梢妼?shí)驗(yàn)箱實(shí)際觀察測(cè)得的漢明編碼輸出與仿真完全一致,符合漢明編碼的相關(guān)性質(zhì)。</p><p>  3.將漢明編碼序列加錯(cuò),模擬信道誤碼。注意加錯(cuò)頻率。&l

24、t;/p><p><b>  思路:</b></p><p>  因?yàn)椋?,4)漢明碼最多只能糾錯(cuò)1位,所以能夠正確譯碼的情況下每7位最多只能錯(cuò)1位。對(duì)輸出的漢明碼序列采取每14位就有1位取反的方法,也就是輸出一個(gè)7位無錯(cuò)碼的漢明碼,然后輸出一個(gè)7位有1位錯(cuò)碼的漢明碼,并且交替重復(fù)。來模擬信道誤碼。</p><p><b>  程序:&l

25、t;/b></p><p>  程序中通過第113行的eh_out[0]<=h_outer;將正常編碼得到的漢明碼輸出h_outer復(fù)制到eh_out中。通過第105行的if(ecnt_h==4’d13)來判斷計(jì)數(shù),每14位輸出就把最后1位取反,即eh_out[0]<=~h_outer;以此實(shí)現(xiàn)模擬信道誤碼。</p><p><b>  遇到的問題及仿真:<

26、;/b></p><p>  遇到的問題及仿真部分將在下面譯碼部分中一并敘述。</p><p>  漢明譯碼程序編寫。將m序列和漢明譯碼數(shù)據(jù)輸出到測(cè)試孔觀察和記錄。加大誤碼率,觀察譯碼性能。</p><p><b>  思路:</b></p><p>  譯碼:譯碼首先要計(jì)算校正子。根據(jù)校正子計(jì)算公式可寫出3位校正

27、子計(jì)算方程如下:</p><p>  s_fir[2]<=eh_out[6]+eh_out[5]+eh_out[4]+eh_out[2];</p><p>  s_fir[1]<=eh_out[5]+eh_out[4]+eh_out[3]+eh_out[1];</p><p>  s_fir[0]<=eh_out[6]+eh_out[5]+eh_o

28、ut[3]+eh_out[0];</p><p>  若校正子為000,則沒有錯(cuò)碼,無需糾錯(cuò),可根據(jù)譯碼方程直接譯碼。若校正子不為000,在1個(gè)7位漢明碼只有1位錯(cuò)碼的情況下,由校正子可以計(jì)算出錯(cuò)碼位置,將該位譯碼結(jié)果取反,則得到正確的譯碼。結(jié)合譯碼公式寫出譯碼方程如下:</p><p>  decode_out[3]=eh_out[6]+(s_fir[2]&(~s_fir[1])

29、&s_fir[0]);//101</p><p>  decode_out[2]=eh_out[5]+(s_fir[2]&s_fir[1]&s_fir[0]);//111</p><p>  decode_out[1]=eh_out[4]+(s_fir[2]&s_fir[1]&(~s_fir[0]));//110</p><p&g

30、t;  decode_out[0]=eh_out[3]+((~s_fir[2])&s_fir[1]&s_fir[0]);//011</p><p>  若在1個(gè)7位漢明碼中錯(cuò)碼位數(shù)多于1位,則不能得到正確的譯碼。</p><p>  輸出:因?yàn)闈h明碼是56kHz時(shí)鐘下的7位碼,譯碼之后要轉(zhuǎn)變?yōu)?2kHz的4位碼輸出。所以要在56k時(shí)鐘下觸發(fā)譯碼,數(shù)7個(gè)譯碼一次。而輸出時(shí)在3

31、2k時(shí)鐘下4個(gè)輸出一次。</p><p><b>  程序:</b></p><p>  程序中127到126行為譯碼部分,147到156為轉(zhuǎn)換輸出部分。該段程序需要注意的問題是漢明碼碼流接收到了之后從什么時(shí)候開始譯碼。我是設(shè)置兩個(gè)校正子的寄存器s_fir和s_sec來解決這個(gè)問題。接收到的7位漢明碼計(jì)算的校正子存放在s_fir中,計(jì)算完成后,移動(dòng)到s_sec中保存,

32、將s_fir騰出用以存放下一個(gè)7位漢明碼的校正子。則s_fir和s_sec中保存著連續(xù)的兩個(gè)7位漢明碼的校正子。如果收到的連續(xù)2個(gè)校正子中至少有1個(gè)校正子是000的無錯(cuò)碼校正子,則認(rèn)為以收到了符合譯碼條件的漢明碼,可以開始譯碼,否則繼續(xù)等待下面的碼流。即程序中第135行if((s_fir&s_sec)!=3’d0)所進(jìn)行的判斷。</p><p>  遇到的問題及解決方法:</p><p

33、>  本來覺得遇到最大的問題會(huì)是什么時(shí)候開始譯碼的問題,但在這個(gè)問題上考慮的比較充分,所以并沒有真的碰到什么問題。反而是在輸出部分遇到了問題。我一開始寫的輸出部分的程序如下:</p><p>  always @(posedge clk_32k) </p><p><b>  begin</b></p><p>  decode_

34、outer<=decode_out1[3];</p><p>  decode_out1[3:1]<=decode_out1[2:0];</p><p>  if(decode_cnt==2'd3)</p><p><b>  begin</b></p><p>  decode_out1<=d

35、ecode_out;</p><p>  decode_cnt<=2'd0;</p><p><b>  end</b></p><p><b>  else</b></p><p>  decode_cnt<=decode_cnt+2'd1;</p>&l

36、t;p><b>  end</b></p><p>  邏輯上完全是仿照的M序列輸出的方式,把decode_out的碼流送進(jìn)decode_out1中進(jìn)行緩沖,decode_out1每數(shù)4位將最高位送到decode_outer進(jìn)行輸出。我覺得邏輯上是沒有問題的,但是仿真得到的譯碼輸出則不太好,有一小段和M序列相同,但也有很多和M序列不同。后來和老師一起反復(fù)檢查之后終于發(fā)現(xiàn),邏輯上的問題在

37、于開始譯碼的時(shí)候已經(jīng)數(shù)7位譯碼一次得到4位了,這里輸出時(shí)又進(jìn)行一次數(shù)4位輸出1位,則相當(dāng)于緩沖了兩次才輸出了一次,正常的輸出順序被打亂了,本來譯碼得到的4位變換為32k時(shí)鐘就可以直接輸出了。然后重新寫了轉(zhuǎn)換輸出部分的程序如下:</p><p>  always @(posedge clk_32k) </p><p><b>  begin</b></p&

38、gt;<p>  decode_outer<=decode_out[decode_cnt];</p><p>  if(decode_cnt==2'd0)</p><p><b>  begin</b></p><p>  decode_cnt<=2'd3;</p><p>&l

39、t;b>  end</b></p><p><b>  else</b></p><p>  decode_cnt<=decode_cnt-2'd1;</p><p><b>  end</b></p><p>  新程序中每位的decode_out都不用再經(jīng)過dec

40、ode_out1緩沖,而是直接從decode_outer中輸出了。</p><p>  編碼加錯(cuò)及譯碼輸出仿真現(xiàn)象如下圖:</p><p>  由上圖中可以看出,第4行(3)譯碼輸出decode_outer的波形與第5行(4)M序列輸出m_outer的波形是一樣的,只不過譯碼輸出有一定的延時(shí)。見下圖:</p><p>  標(biāo)著相同紅色數(shù)字的高電平是相互對(duì)應(yīng)的,下面是

41、M序列,上面是譯碼輸出,明顯可以看出兩者波形完全相同,只是譯碼輸出比輸入的M序列延時(shí)了11個(gè)32k時(shí)鐘周期。另外,第8行(14)7位漢明碼輸出h_out的前4位與倒數(shù)第5行(31)4位譯碼輸出decode_out完全相同,只是后者比前者延遲了9個(gè)56k時(shí)鐘周期(具體延時(shí)周期個(gè)數(shù)的得到在后面會(huì)展示)。見下圖:</p><p>  由上圖紅框中可以明顯看出漢明碼前4位(即信息位)與譯碼輸出的4位是完全相同的。而由下方

42、的校正子可以看出,綠線上的000表示接受到的沒有誤碼,010(非000)表示有誤碼,可以看到s_fir中000與010是交替出現(xiàn)的,這與程序中模擬信道誤碼時(shí)每14個(gè)輸出的漢明碼元取反一個(gè)是一致的,即7位無錯(cuò)漢明碼與7位中有1位錯(cuò)的漢明碼交替出現(xiàn)。另外上圖中由綠線和藍(lán)色箭頭組成的關(guān)系可以看出校正子從s_fir移動(dòng)到s_sec的過程。</p><p>  另外,具體的延時(shí)周期的得到可以由下圖看出:</p>

43、<p>  可見除了正常的時(shí)延外,譯碼輸出即使在接收到校正子不為000(有1位誤碼)時(shí),也能夠自行糾錯(cuò),輸出正確的譯碼,與輸入M序列完全相同,該程序編寫和仿真都是成功的。 </p><p>  改變誤碼律的譯碼輸出仿真:</p><p><b>  每15個(gè)錯(cuò)1位仿真</b></p><p><b>  程序改為:<

44、;/b></p><p>  其實(shí)就是對(duì)第112行中原來是if(ecnt_h==4’d13)中的4’d13改為了4’d14。</p><p><b>  仿真結(jié)果見下圖:</b></p><p>  M序列m_outer與譯碼輸出decode_outer的對(duì)應(yīng)關(guān)系如下圖:</p><p>  相同的由下圖紅框的對(duì)應(yīng)

45、關(guān)系能夠看出漢明碼前4位信息位與譯碼完全相同:</p><p>  上圖中能夠發(fā)現(xiàn)在第一個(gè)紅框之前的漢明碼是1011000,而譯碼是1010,是不正確的,是因?yàn)椴皇且婚_始就能接收到能夠正確譯碼的碼流,而且接受到正確碼流后譯碼還有一定的延時(shí),所以在此之前的輸出是不正確的。另外,從校正子s_fir一行中可以看到,改為15位1個(gè)錯(cuò)碼之后,不在是7的整數(shù)倍,所以不像之前錯(cuò)碼只固定出現(xiàn)在a1位上,對(duì)照下表能夠讀出接收到的錯(cuò)

46、碼出現(xiàn)的位置,以用紅字標(biāo)明在上圖中s_fir一行中。</p><p>  可見,在誤碼率為1/15時(shí),在找到起始點(diǎn)開始正確譯碼之后,對(duì)于誤碼出現(xiàn)在不同位置上的漢明編碼,該程序都能正確譯碼。</p><p><b>  每13個(gè)錯(cuò)1位仿真</b></p><p><b>  程序改為:</b></p><

47、p>  即漢明碼輸出每13位取反1位</p><p><b>  仿真結(jié)果見下圖:</b></p><p>  可以發(fā)現(xiàn)當(dāng)誤碼率為1/13的時(shí)候,找到同步開始譯碼,正確譯碼了2個(gè)之后,下面的譯碼就出現(xiàn)了錯(cuò)碼得不到糾正的情況。可是仔細(xì)看校正子s_fir和s_sec,并沒有同時(shí)出現(xiàn)均不為000的情況,所以理論上應(yīng)該是能夠正常譯碼。一定是程序不夠完善,導(dǎo)致誤碼率在1/

48、13就不能正確輸出了。我仔細(xì)觀察仿真中每一位的邏輯關(guān)系,發(fā)現(xiàn)在誤碼律達(dá)到1/13的時(shí)候由于各寄存器之間有延時(shí),導(dǎo)致糾錯(cuò)的時(shí)候有時(shí)對(duì)應(yīng)輸出位會(huì)發(fā)生變化。于是我在譯碼糾錯(cuò)之前增加了一個(gè)對(duì)接收漢明碼進(jìn)行緩沖的寄存器eh_out1,并以此作為基準(zhǔn)譯碼,仿真得到了正確的輸出!</p><p>  譯碼部分修改程序如下:</p><p>  always @(posedge clk_56k)</

49、p><p><b>  begin</b></p><p>  if(decodecnt_h==3'd6)</p><p><b>  begin</b></p><p>  eh_out1<=eh_out;//緩沖</p><p>  s_fir[2]<=e

50、h_out[6]+eh_out[5]+eh_out[4]+eh_out[2];//計(jì)算監(jiān)督位</p><p>  s_fir[1]<=eh_out[5]+eh_out[4]+eh_out[3]+eh_out[1];</p><p>  s_fir[0]<=eh_out[6]+eh_out[5]+eh_out[3]+eh_out[0];</p><p> 

51、 s_sec<=s_fir; </p><p>  if((s_fir&s_sec)!=3'd0)//連續(xù)兩組監(jiān)督位出錯(cuò)時(shí)保持此狀態(tài)等待新信息計(jì)算</p><p>  decodecnt_h<=3'd6;</p><p><b>  else</b></p><p>  d

52、ecodecnt_h<=3'd0;</p><p>  decode_out[3]=eh_out1[6]+(s_fir[2]&(~s_fir[1])&s_fir[0]);//101</p><p>  decode_out[2]=eh_out1[5]+(s_fir[2]&s_fir[1]&s_fir[0]);//111</p>&

53、lt;p>  decode_out[1]=eh_out1[4]+(s_fir[2]&s_fir[1]&(~s_fir[0]));//110</p><p>  decode_out[0]=eh_out1[3]+((~s_fir[2])&s_fir[1]&s_fir[0]);//011</p><p><b>  end</b>&l

54、t;/p><p><b>  else</b></p><p>  decodecnt_h<=decodecnt_h+3'd1;</p><p><b>  end</b></p><p><b>  仿真結(jié)果見下圖:</b></p><p>

55、  修改了程序之后,在誤碼率為1/13的情況下,仿真如上圖,在實(shí)現(xiàn)同步之后能夠連續(xù)無誤地糾錯(cuò)譯碼輸出。對(duì)應(yīng)的倒數(shù)第二行紅字標(biāo)出的為相應(yīng)的錯(cuò)碼出現(xiàn)的位置。注意到錯(cuò)碼位置為a3、a4、a5情況下能夠正確譯碼,這才是糾錯(cuò)能力的直接體現(xiàn)。因?yàn)閍2、a1、a0位置上的錯(cuò)碼,即使糾錯(cuò)失敗,但是由于不是信息位,不會(huì)輸出到譯碼輸出,所以看不出來能否正確糾錯(cuò)。因?yàn)樵黾恿艘粋€(gè)緩沖寄存器,現(xiàn)在譯碼輸出decode_out與收到的漢明碼eh_out之間的延時(shí)變

56、為大約9.5個(gè)32k時(shí)鐘周期。</p><p>  下載到實(shí)驗(yàn)箱觀察并記錄實(shí)驗(yàn)現(xiàn)象:</p><p><b> ?。?)加錯(cuò)</b></p><p>  上圖中,CH1黃色波形為56k時(shí)鐘波形,CH2藍(lán)色波形為eh_out即漢明碼以1/13的錯(cuò)碼率加錯(cuò)之后的輸出波形。①中讀數(shù)為1010001,是加錯(cuò)在a1上的,即所對(duì)應(yīng)正確的漢明碼應(yīng)為10100

57、11。②中讀數(shù)為1100010因?yàn)檎`碼率為1/13,所以緊接著 ①的②中,是沒有錯(cuò)碼的,即1100010就是正確的漢明碼輸出。③中讀數(shù)1000001,加錯(cuò)在a2上,即所對(duì)應(yīng)正確的漢明碼為1000101。并且錯(cuò)碼位置從a1移動(dòng)到a2上,呈遞增移動(dòng)的關(guān)系,符合誤碼率1/13的情況。因?yàn)檎`碼率為1/14時(shí),每隔一個(gè)輸出有誤碼,且誤碼位置不變,所以誤碼率為1/13時(shí),每隔一個(gè)輸出有誤碼,且誤碼位置呈增移動(dòng)關(guān)系。</p><p

58、>  上圖為仿真中漢明碼輸出的順序,①中為1010011,②中為1000101,③中為1000101,與示波器上看到的加錯(cuò)漢明碼輸出所對(duì)應(yīng)的正確碼組順序完全一致。并且由仿真中①前面紅線上的讀數(shù)為1010,而由上面加錯(cuò)的示波器波形上可讀出①前面讀數(shù)也為1010,仿真中③后面紅線上讀數(shù)為1111,由示波器波形上也可讀出③后面都是高電平,可見實(shí)驗(yàn)箱上的結(jié)果與仿真完全對(duì)應(yīng)!</p><p><b>  (

59、2)譯碼</b></p><p>  上圖中CH1黃色波形為decode_outer譯碼輸出,CH2藍(lán)色波形為m_outer即M序列輸出。CH1與CH2波形中標(biāo)為相同數(shù)碼的高電平相互對(duì)應(yīng)(紅線相連的也是相互對(duì)應(yīng)),可見上方譯碼輸出與下方M序列輸出間除了有一定的延時(shí)外,波形完全對(duì)應(yīng),即成功譯碼。對(duì)應(yīng)的可以從仿真中找到譯碼輸出decode_outer波形完全相同的一段,見下圖:</p>&l

60、t;p>  因?yàn)閮烧邥r(shí)間軸比例不同,所以對(duì)上圖進(jìn)行橫向壓縮,得到下圖:</p><p>  可見實(shí)驗(yàn)箱上實(shí)測(cè)結(jié)果與仿真結(jié)果完全相同。上圖中實(shí)驗(yàn)箱與仿真對(duì)應(yīng)部分(即與下方仿真對(duì)比那段)的譯碼波形讀數(shù)為00111101011001…而從上文中M序列編程部分已知M序列輸出為000111101011001…的循環(huán),可見實(shí)驗(yàn)箱譯碼波形為M序列輸出的一部分。</p><p><b> 

61、 實(shí)驗(yàn)中遇到的問題</b></p><p>  編程中遇到問題及解決方法在上文每段程序下方已有說明,在此不再贅述。</p><p>  我使用的實(shí)驗(yàn)室的電腦的Quartus每次實(shí)驗(yàn)都彈出試用版的窗口,我每次實(shí)驗(yàn)都需要重復(fù)一遍破解工作。后來我發(fā)現(xiàn),如果只是進(jìn)行編程和仿真的話,用30天試用版好像也沒有什么問題。但是下載到實(shí)驗(yàn)箱的時(shí)候會(huì)失敗,必須使用破解版才能夠成功下載。</p

62、><p>  通過USB線把程序下載到實(shí)驗(yàn)箱上的方法我完全用不起來,前置USB接口驅(qū)動(dòng)電壓較低,但是即使我用主機(jī)后端的USB接口也仍然連接了之后識(shí)別不到硬件。只能用數(shù)據(jù)線實(shí)現(xiàn),而且數(shù)據(jù)線好像十分脆弱,不是每一根都能用,我是從老師那里拿了一大把,一根一根的試了好多條才試到一條能用的。</p><p>  下載時(shí)要記得打開實(shí)驗(yàn)箱的電源,否則會(huì)失敗。</p><p>  實(shí)驗(yàn)

63、箱上能夠用于外接示波器的測(cè)量端口有限,一定要注意設(shè)置準(zhǔn)確。</p><p>  6.附加實(shí)驗(yàn)同步位提取實(shí)驗(yàn)見下方。</p><p>  位同步提取實(shí)驗(yàn)(附加)</p><p><b>  一、實(shí)驗(yàn)要求及內(nèi)容</b></p><p>  將PCM編譯碼時(shí)鐘TP503(256KHz)做為碼元速率為512Kbps的1010…碼

64、流數(shù)據(jù)。</p><p>  用導(dǎo)線將TP503連接到TPM03作為FPGA的數(shù)據(jù)輸入。(此步驟必須在往FPGA下載了程序之后才能操作?。?lt;/p><p>  用FPGA的輸入時(shí)鐘14.336MHz直接分頻得到512KHz的時(shí)鐘輸出到TPM05。</p><p>  用示波器同時(shí)觀察TPM03和TPM05,可見兩者并不能同步。</p><p>

65、;  現(xiàn)要求從輸入數(shù)據(jù)中提取位同步信息得到可以與輸入數(shù)據(jù)同步的時(shí)鐘信號(hào)。</p><p>  二、實(shí)驗(yàn)程序及記錄與分析</p><p><b>  思路:</b></p><p>  由PCM編譯碼時(shí)鐘可以得到一個(gè)256kHz信號(hào)。對(duì)14.336MHz時(shí)鐘信號(hào)直接進(jìn)行分頻,14336/(256*2)=28,可以得到另一個(gè)256kHz信號(hào)。對(duì)時(shí)鐘

66、信號(hào)進(jìn)行分頻得到分頻結(jié)果進(jìn)行滯后或者超前的判斷,即進(jìn)行位同步提取,然后根據(jù)滯后或者超前的判斷信號(hào),對(duì)分頻模塊里的分頻系數(shù)進(jìn)行修正,再次將分頻結(jié)果送至位同步提取模塊里頭進(jìn)行判斷,如此反復(fù)可以得到相對(duì)穩(wěn)定的同步信號(hào)。</p><p><b>  程序:</b></p><p>  module tbw(in_pcm,clk_fpga,out_fpga,out_fpga_n

67、o);</p><p>  input in_pcm,clk_fpga;</p><p>  output reg out_fpga,out_fpga_no;</p><p>  reg [5:0]count,count_tb;</p><p>  reg [5:0]count_set;//計(jì)數(shù)初值</p><p> 

68、 reg [5:0]count_no;</p><p><b>  initial</b></p><p><b>  begin</b></p><p>  count_set<=6'd55;</p><p><b>  end</b></p>&

69、lt;p>  always@(posedge clk_fpga) //此處計(jì)數(shù)為遞減計(jì)數(shù)</p><p><b>  begin</b></p><p>  if(count==6'd0)</p><p>  count<=count_set; //計(jì)數(shù)到0時(shí)重新裝入計(jì)數(shù)初值</p><p>  el

70、se count<=count-1'b1;//遞減計(jì)數(shù)</p><p>  if(count<27) //分頻,計(jì)數(shù)到27翻轉(zhuǎn),即14336/(256*2)=28</p><p>  out_fpga<=1'b1;</p><p>  else out_fpga<=1'b0;</p><p> 

71、 count_tb<=count; //取出計(jì)數(shù)值,判斷超前或者滯后</p><p><b>  end</b></p><p>  always@(posedge in_pcm) //對(duì)計(jì)數(shù)初值進(jìn)行更改</p><p><b>  begin</b></p><p>  if(count_t

72、b<27) //超前</p><p>  count_set<=6'd56;</p><p>  else if(count_tb>27) //滯后</p><p>  count_set<=6'd54;</p><p><b>  else //同步</b></p>

73、<p>  count_set<=6'd55;</p><p><b>  end</b></p><p>  always @(posedge clk_fpga) //未同步256kHz信號(hào)</p><p><b>  begin</b></p><p>  if(cou

74、nt_no==6'd27)</p><p><b>  begin</b></p><p>  count_no<=6'd0;</p><p>  out_fpga_no<=~out_fpga_no;</p><p><b>  end</b></p>&l

75、t;p><b>  else</b></p><p>  count_no<=count_no+6'd1;</p><p><b>  end</b></p><p><b>  endmodule</b></p><p>  程序中in_pcm為PCM編譯

76、碼時(shí)鐘輸出的256kHz信號(hào),clk_fpga為14.336MHz時(shí)鐘信號(hào)。out_fpga為同步輸出信號(hào),out_fpga_no為未同步輸出信號(hào)。count_set為計(jì)數(shù)初值,分頻計(jì)數(shù)翻轉(zhuǎn)時(shí)讀取count值作為count_tb來判斷是超前還是滯后,若超前則增大計(jì)數(shù)初值(遞減計(jì)數(shù)),使得每次翻轉(zhuǎn)所需的計(jì)數(shù)次數(shù)增加,反之減少計(jì)數(shù)初值。</p><p>  遇到的問題及解決方法:</p><p&g

77、t;  一開始在分頻部分本來寫的和M序列中的分頻相同,都是使用遞增計(jì)數(shù),計(jì)數(shù)到設(shè)定的計(jì)數(shù)上限值時(shí),再清零。但是發(fā)現(xiàn)了一個(gè)問題,就是如果在快要計(jì)數(shù)到一開始設(shè)定的的計(jì)數(shù)值count_set時(shí),如果由超前滯后判斷并已產(chǎn)生新的count_set,而此數(shù)值小于當(dāng)前計(jì)數(shù)值,則會(huì)將寄存器加滿才回零,會(huì)導(dǎo)致一部分高電平或者低電平時(shí)間比較長,可能還增大了不同步的程度。</p><p>  解決方法是改為由高到低遞減計(jì)數(shù),則無論計(jì)數(shù)

78、中途count_set是否改變,計(jì)數(shù)都是從當(dāng)前count值遞減計(jì)數(shù)到0再重新裝入新的count_set。</p><p>  同步位仿真現(xiàn)象如下圖:</p><p>  由第二行in_pcm與第三行out_fpga的對(duì)比可以看出,兩者都是256kHz的信號(hào),但是一開始兩者是不同步的,經(jīng)過2個(gè)256kHz的周期之后就基本同步了。具體見下圖:</p><p>  由標(biāo)號(hào)

79、為紅1的周期可以看出兩者不同步程度較大,out_fpga滯后于in_pcm較多,到周期2的時(shí)候之后就較小了,到周期3的時(shí)候就幾乎沒有滯后了。</p><p>  下載到實(shí)驗(yàn)箱觀察并記錄實(shí)驗(yàn)現(xiàn)象:</p><p> ?。?)用示波器同時(shí)觀察TPM03和TPM05,可見兩者并不能同步</p><p><b>  見下圖:</b></p>

80、<p>  上圖中CH1黃色為TPM03,即PCM編譯碼時(shí)鐘輸出的256kHz,即in_pcm。下方CH2藍(lán)色波形為TPM05,即由14.336MHz直接分頻得到的256kHz信號(hào),即out_fpga_no。在示波器上看到的是下方藍(lán)色波形不僅與上方黃色波形不同步,而且一直在向左滾動(dòng)。</p><p> ?。?)從輸入數(shù)據(jù)中提取位同步信息得到可以與輸入數(shù)據(jù)同步的時(shí)鐘信號(hào)</p><

溫馨提示

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

評(píng)論

0/150

提交評(píng)論