


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機網絡課程實驗報告實驗2 :抗干擾編碼藍鑫院系自動化學院學號U201514280實驗地點科技樓十二樓機房實驗時間2018年5月3日實驗目的:1. 了解抗干擾編碼原理。2、掌握海明編碼和 CRC編碼的原理,能熟練計算實驗容:容1 :海明編碼1.1海明編碼原理將有效信息按某種規律分成若干組,每組安排一個校驗位通過異或運算進行校驗,得出具體的校驗碼;在接收端同樣通過異或運算看各組校驗結果是否正確,并觀察出錯的校校組,或者個出錯的校驗組的共同校驗位,得出具體的出錯比特位;對錯誤位取反來將其糾正;假設用N表示添加了校驗碼位后整個傳輸信息的二進制位數,用K代表其中有效信息位數,r表示添加的校驗碼位數,
2、它們之間的關系應滿足:N=K + r<2Ar 1 (是為了確保r位校驗碼能校驗全部的數據位,因為r位校驗碼所能表示的最大十進制數為2Ar-1 ,同時也確保各位碼本身不被其他校驗碼校驗)。海明碼的校驗碼的位置必須是在2n次方位置(n從0開始,分別代表從左邊數起分別是第1、2、4、8、16),信息碼也就是在非2n次方位置第i位校驗碼從當前校驗碼位開始,每次連續校驗i位后再跳過i位,然后再連續校驗i位,再跳過i位,以此類推。確定每個校驗碼所校驗的比特位:巨宇中龍145-141J12*1517哋如pip-blb2ft!Mb5blts沖l>10bllbL2pl技追般JJJJ丿JJJJLp:鮭
3、日竝JJJJJJJJJJJ丿y戸再論艸咗JJJJVJyp 僦JJ1.2海明編碼程序流程圖焉入編瑪庫乳L二遙制敎辭T:"1L" H0T,:rr開皓kJ在京瑪*列S應立賈咽人“<T枚駐碼託每位狡驗訶校塗的住相加V否昱對應校驗伍苣播入對應校驗隹直播入P'得到編瑪序列1.3交互界面設計F其譯媽序夕q中稅驗碼恆熨利15息姑任更導剎咬檢馮庫列庫0一全光口否疫強霑富幷報緡序和劉總薛期序列任輩麻血樓正是r1kJI r編碼:原碼序列從“輸入序列”編輯框輸入,點擊“編碼”按鈕在“編碼序列”編輯框輸出編碼序列,對輸入編碼要求為二進制輸入譯碼:編碼序列從“輸入序列”編輯框輸入,點擊“
4、譯碼”按鈕在“譯碼序列”編輯框輸出譯碼序列,若譯碼錯誤會有響應的報錯和糾錯,對輸入序列有不小于三位和二進制序列的要求1.4核心代碼與注釋輸入序列框callback%做輸入檢測,檢測是否是“0”“1 ”輸入,否則報錯temp_str=get(ha ndles.i nput,'Stri ng');nu m_char=u nique(temp_str);%u nique函數獲得輸入字符串中不同字符的字符串if len gth( num_char)=2%如果字符串長度為 2if num_char(2)='1' %第二個字符不是“ 1 ”說明字符串中有其他字符elsese
5、t(ha ndles. in put,'Stri ng','0000');errordlg('只能輸入1和0','輸入錯誤');endelseif length(num_char)=1 %如果字符串長度為1,判斷“ 1 ”還是"0",否則報錯if nu m_char(1)='0'elseif nu m_char(1)='1'elseset(ha ndles.i nput,'Stri ng','0000');errordlg('只能輸入1和0
6、','輸入錯誤');endelse%如果字符串長度不為2,直接報錯set(ha ndles.i nput,'Stri ng','0000');errordlg('只能輸入1和0','輸入錯誤');End編碼按鈕callback (編碼核心)%獲取輸入字符串temp_str=get(ha ndles.i nput,'stri ng');%獲取字符串長度len_ str=le ngth(temp_str);%轉存原碼字符串長度備用k=le n_str;%初始化需要插入的校驗碼的位數r=0;%根據
7、海明編碼的2A(r)-1)<(k+r) 要求,計算校驗碼位數while(2A(r)-1)<(k+r)r=r+l;end%把字符串數組轉成0和1的數組,便于處理for i=1:1:len_strif temp_str(i)='1'yuan(i)=1;%原碼數組為yuanelseyua n(i)=0;endend%把求得相應位數的校驗碼,用0插入原碼中得到新碼j=0;m=1;for i=1:1:(k+r)if i=2A(j) %如果該位置為2的次方,則插入校驗碼xin (i)=0;j=j+1;elsexin (i)=yua n( m);m=m+1;endend%進行海明
8、編碼odd=0;%用于計算每位校驗碼負責校驗的位置的和for j=1:1:r%共有r位校驗碼,需要計算n=1;%初始化循環變量i=1;while( n*2F-1)+i-1)<=(k+r)%當沒有超過數組長度時繼續循環if i>(2A(j-1)%如果本段的編碼已經加完i=1;%則調轉到下一段,也就是隔一個2A(j-1)的段再進行累n=n+2;else%累加odd=odd+xi n(n *2A(j-1)+i-1);i=i+1;endendif mod(odd,2)=0%判斷是否為偶數xi n( 2A(j-l)=0;%若為偶數,則在對應的校驗位插入elsexi n( 2A(j-l)=l;
9、%若為奇數,則在對應的校驗為插入endodd=0;end%編碼完畢,把數組轉換成字符串用于輸出for i=1:1:(k+r)if xin (i)=1output_str(i)='1:elseoutput_str(i)='0:endendset(ha ndles.out,'Stri ng',output_str);譯碼按鈕callback(原理與編碼基本相同)%獲得譯碼序列字符串temp_str=get(ha ndles.i nput,'stri ng');len_ str=le ngth(temp_str);%判斷輸入序列長度是否滿足要求,不滿足
10、報錯返回if len_str<3errordlg('譯碼最低輸入位數為3位','輸入出錯');elsek=len_str;% 編碼息碼的個數r=len_str;% 編碼中校驗碼的個數while(2A(r)-1)>=len_str)r=r-1;endr=r+1;%找到校驗碼的個數k=le n_str-r;for i=1:1:len_str%得到所有編碼數組if temp_str(i)='1'xi n( i)=1;elsexin (i)=0;endend%提取出信息編碼數組m=1;j=0;for i=1:1:(k+r)if i=2A(j)
11、j=j+1;elseyua n(m )=xi n(i);m=m+1;endend%重新偶校驗,原理同編碼odd=0;for j=1:1:rn=1;i=1;while( n*2T-1)+i-1)<=(k+r)if i>(2A(j-1)i=1;n=n+2;elseodd=odd+xi n(n *2A(j-l)+i-l);i=i+1;endendif mod(odd,2)=0check(j)=0;%校驗結果存在check數組中elsecheck(j)=1;endodd=0;end%把check數組也就是校驗結果轉成十進制數num_wron g=0;for j=1:1:rnum_wrong
12、=num_wron g*2;if check(r-j+1)=1num_wrong=num_wron g+1;endend%判斷校驗是否正確,為0則正確if num_wron g=0for m=1:1:kif yua n(m)=1output_str(m)='1:elseoutput_str(m)='0'endendset(ha ndles.ym_out,'Stri ng',output_str);else%否則校驗錯誤,對應位置取反后再輸出if xin(num_wron g)=0xin(num_wron g)=1;elsexin(num_wron g)=
13、0;endm=1;j=0;for i=1:1:(k+r)if i=2A(j)j=j+1;elseyua n(m )=xi n(i);m=m+1;endendfor m=1:1:kif yua n(m)=1output_str(m)='1'elseoutput_str(m)='0:endend位出錯,對應位置取反后得set(ha ndles.ym_out,'Stri ng',output_str);errordlg('校驗碼第,nu m2str( num_wron g),'到正確解碼為',output_str,'校驗出錯
14、39;);endend1.5程序執行測試編碼測試 正常編碼海明編碼海明一編碼饒:心?占1101Q1訐 叭:MONE譯碼測試輸入報錯 正常解碼 解碼錯誤與糾正HMHM海明一編碼海明一編碼海明一編碼010C10C0-11010 tool0100101譚碼序筍h0101An幄宵廳列0110101011110111容2 : CRC編碼2.1 CRC編碼原理在K位信息碼后再拼接 R位的校驗碼,整個編碼長度為 N位,因此,這種編碼也叫(N , K)碼。對于一個給定的(N , K)碼,可以證明存在一個最高次幕為 N-K=R 的多項 式 G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC
15、碼的生成多項式。 校驗 碼的具體生成過程為: 假設要發送的信息用多項式 C(X)表示,將C(x)左移R位(可表 示成C(x)*2R ),這樣C(x)的右邊就會空出 R位,這就是校驗碼的位置。用 C(x)*2R 除以生成多項式G(x)得到的余數就是校驗碼。若設碼字長度為 N,信息字段為K位,校驗字段為 R位(N=K+R),則對于CRC碼集 中的任一碼字,存在且僅存在一個R次多項式g(x),使得 V(x)=A(x)g(x)=xRm(x)+r(x);其中:m(x)為K次原始的信息多項式,r(x)為R-1次校驗多項式(即 CRC校驗和),g(x)稱為生成多項式:g(x)=g0+g1x1+ g2x2+.
16、+g(R-1)x(R-1)+gRxR發送方通過指定的g(x)產生CRC碼字,接收方則通過該g(x)來驗證收到的CRC碼字。2.2 CRC編碼程序流程圖譯碼V琥入土辰弍1T列是皆為二迸制字符序列壓是舌苴位#位車主1足杏為二遊制字符庫駅風是否昔粒辛位下為1期fi入序列狗生曲丸沖列寄讓成二遴:ti珈坦啦入洋列和生虛點睜和都轉辰二進制龕組體入序列加上生成式低住療T的匚轉薦別幅時數咀從生我式薈遵貯開培熾笠降法也就皂呉或運算賦圭咸式去度更井當做抵除總也就是匸或運算低九isdi,構剰醮糧席列右tz為:商為1則裔1*錯劉余SS序列2.3 交互界面設計編碼:原碼序列由“輸入序列”編輯框輸入,生成式由“生成式子”
17、編輯框輸入,點擊“編碼”按鈕,在“輸出序列”編輯框輸出編碼序列,對輸入序列有二進制輸入的要求,對生成式的輸入除二進制輸入以外,還有首位與末位不能為0的要求譯碼:編碼序列由“輸入序列”編輯框輸入,生成式由“生成式子”編輯框輸入,點 擊“譯碼”按鈕,在“輸出序列”編輯框輸出譯碼序列,對輸入序列有二進制輸入 的要求,還有不能小于生成式的長度,否則將報錯,對生成式的輸入除二進制輸入 以外,還有首位與末位不能為 0的要求2.4 核心代碼與注釋編碼按鈕callback(編碼核心)temp_str=get(ha ndles.i nput,'stri ng');len _str1=le ngt
18、h(temp_str);for i=1:1:len_str1%把原碼的字符串轉成數組,便于后續處理if temp_str(i)='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=O;sz(i)=O;endendtemp_crc=get(ha ndles.crc,'stri ng');len _scs=le ngth(temp_crc)-1;for i=1:1:(len_scs+1)%把生成式的字符串轉成數組if temp_crc(i)='1'scs(i)=1;elsescs(i)=0;endend%把原碼后面加上 CR
19、C冗余編碼,位數為 CRC生成式長度-1for i=le n_str1+1:1:(le n_str1+le n_scs)temp_sz(i)=0;sz(i)=0;end%從生成式長度位開始往后循環做類似于長除法的運算,實際為異或,注意首位為0時商0for j=(le n_scs+1):1:(le n_str1+le n_scs)if temp_sz(j-le n_scs)=0for i=1:1:(le n_ scs+1)if temp_sz(j-le n_scs-1+i)=0temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;ende
20、ndelsefor i=1:1:(le n_scs+1)if scs(i)=temp_sz(j-le n_scs-1+i)temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendendend%把得到的冗余碼余子式加上原碼后面形成編碼for i=(le n_str1+1):1:(le n_str1+len_scs) sz(i)=temp_sz(i);end%把數組轉成字符串數組并輸出for i=1:1:(le n_str1+le n_scs)if sz(i)=1output_str(i)='1:elseoutput_st
21、r(i)='0:endendset(ha ndles.output,'Stri ng',output_str);譯碼按鈕callback(原理與編碼基本相同)temp_str=get(ha ndles.i nput,'stri ng');len _str1=le ngth(temp_str);for i=1:1:len_str1if temp_str(i)='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=0;sz(i)=0;endend temp_crc=get(ha ndles.crc,'stri
22、ng');len _scs=le ngth(temp_crc)-1;if len_ str1<=le n_scs','輸入錯誤');errordlg('輸入譯碼序列長度不能小于生成式序列長度elsefor i=1:1:(le n_ scs+1)if temp_crc(i)='1'scs(i)=1;elsescs(i)=0;endendfor j=(le n_scs+1):1:le n_str1if temp_sz(j-le n_scs)=0for i=1:1:(le n_scs+1)if temp_sz(j-le n_scs-1+i
23、)=0temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendelsefor i=1:1:(le n_scs+1)if scs(i)=temp_sz(j-le n_scs-1+i) temp_sz(j-le n_scs-1+i)=0;elsetemp_sz(j-le n_scs-1+i)=1;endendendendfor i=(le n_str1-le n_scs+1):1:le n_str1 sz(i)=temp_sz(i);endfor i=1:1:(le n_str1-le n_scs)if sz(i)=1output
24、_str(i)='1:elseoutput_str(i)='0:endendset(ha ndles.output,'Stri ng',output_str);er=0;for i=(le n_ str1-le n_scs+1):1:le n_ strl sz(i)=temp_sz(i);if temp_sz(i)=0er=er+0;elseer=er+1;endendif er>0set(ha ndles.output,'Stri ng','NONE'); errordlg(' 校驗錯誤','校驗錯
25、誤');endEnd2.5程序執行測試編碼測試正常編碼譯碼測試輸入報錯 I 氐 a '? /i ! m r 卜就 *iojfi入蠟誤正常譯碼CRC -CRC-編碼譯碼報錯CRC-匸CRC編碼CRC 一 亡CRC編碣A砂:1101000CRC -CRC編碼*人"0M1M0他人芒兀:110111刊101主.張式子t1011jk 戈孑i1Q01容3 :思考問題3.1 CRC編碼和海明編碼的主要區別有哪些?3.1.1 CRC 和海明的校驗碼的位置不同,CRC冗余碼加在原碼序列后面,從而形成編碼序列,而海明是插在 2的次方位3.1.2 CRC的冗余碼位數和生成式有關,一旦生成式定下來,那么冗余碼位數就確定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 歙縣美容院活動方案
- 愛師愛校班會課件
- 2025合同審查實施細節
- 高等數學課程教學中遇到的問題及解決對策
- 新工科建設中產學研合作的教育機制探索
- 戊戌變法時期詩人創作群體特征及其詩體敘事風格
- 燥火中醫課件
- ESG指標對企業財務績效的影響及債務融資成本關系研究
- 燃氣工程技術課件
- 質量管理體系審核員崗位面試問題及答案
- 2024年全球及中國神經康復外骨骼機器人行業頭部企業市場占有率及排名調研報告
- 2025年銅仁沿河土家族自治縣“特崗計劃”招聘考試筆試試題(含答案)
- 江蘇省連云港市2024-2025學年高二年級上冊期末調研考試物理試題(選修)解析版
- 2025安全生產月主題宣講課件十:主要負責人安全公開課
- 如何提升安全管理水平
- 地板拆除合同協議書
- 退贓協議書范本
- 【MOOC答案】《大學物理I力學、相對論、電磁學》(北京交通大學)章節作業慕課答案
- 落地投資協議書范本
- 托管倉庫合同協議
- 企業負責人(A證)考試題(含答案)
評論
0/150
提交評論