資源描述:
《華中科技大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告:抗干擾編碼》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、計(jì)算機(jī)網(wǎng)絡(luò)課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)2:抗干擾編碼姓名李藍(lán)鑫院系自動(dòng)化學(xué)院學(xué)號(hào)U201514280實(shí)驗(yàn)地點(diǎn)科技樓十二樓機(jī)房實(shí)驗(yàn)時(shí)間2018年5月3日實(shí)驗(yàn)?zāi)康模?.了解抗干擾編碼原理。2、掌握海明編碼和CRC編碼的原理,能熟練計(jì)算實(shí)驗(yàn)內(nèi)容:內(nèi)容1:海明編碼1.1海明編碼原理將有效信息按某種規(guī)律分成若干組,每組安排一個(gè)校驗(yàn)位通過異或運(yùn)算進(jìn)行校驗(yàn),得出具體的校驗(yàn)碼;在接收端同樣通過異或運(yùn)算看各組校驗(yàn)結(jié)果是否正確,并觀察出錯(cuò)的校校組,或者個(gè)出錯(cuò)的校驗(yàn)組的共同校驗(yàn)位,得出具體的出錯(cuò)比特位;對(duì)錯(cuò)誤位取反來將其糾正;假設(shè)用N表示添加了校驗(yàn)碼位后整個(gè)傳輸信息的二進(jìn)制位數(shù),用K代表其中
2、有效信息位數(shù),r表示添加的校驗(yàn)碼位數(shù),它們之間的關(guān)系應(yīng)滿足:N=K+r≤2^r-1(是為了確保r位校驗(yàn)碼能校驗(yàn)全部的數(shù)據(jù)位,因?yàn)閞位校驗(yàn)碼所能表示的最大十進(jìn)制數(shù)為2^r-1,同時(shí)也確保各位碼本身不被其他校驗(yàn)碼校驗(yàn))。海明碼的校驗(yàn)碼的位置必須是在2n次方位置(n從0開始,分別代表從左邊數(shù)起分別是第1、2、4、8、16……),信息碼也就是在非2n次方位置第i位校驗(yàn)碼從當(dāng)前校驗(yàn)碼位開始,每次連續(xù)校驗(yàn)i位后再跳過i位,然后再連續(xù)校驗(yàn)i位,再跳過i位,以此類推。確定每個(gè)校驗(yàn)碼所校驗(yàn)的比特位:1.2海明編碼程序流程圖1.1交互界面設(shè)計(jì)編碼:原碼序列從“輸入序列”編輯框輸
3、入,點(diǎn)擊“編碼”按鈕在“編碼序列”編輯框內(nèi)輸出編碼序列,對(duì)輸入編碼要求為二進(jìn)制輸入譯碼:編碼序列從“輸入序列”編輯框輸入,點(diǎn)擊“譯碼”按鈕在“譯碼序列”編輯框內(nèi)輸出譯碼序列,若譯碼錯(cuò)誤會(huì)有響應(yīng)的報(bào)錯(cuò)和糾錯(cuò),對(duì)輸入序列有不小于三位和二進(jìn)制序列的要求1.1核心代碼與注釋輸入序列框callback%做輸入檢測(cè),檢測(cè)是否是“0”“1”輸入,否則報(bào)錯(cuò)temp_str=get(handles.input,'String');num_char=unique(temp_str);%unique函數(shù)獲得輸入字符串中不同字符的字符串iflength(num_char)==2%如
4、果字符串長度為2ifnum_char(2)=='1'%第二個(gè)字符不是“1”說明字符串中有其他字符elseset(handles.input,'String','0000');errordlg('只能輸入1和0','輸入錯(cuò)誤');endelseiflength(num_char)==1%如果字符串長度為1,判斷“1”還是“0",否則報(bào)錯(cuò)ifnum_char(1)=='0'elseifnum_char(1)=='1'elseset(handles.input,'String','0000');errordlg('只能輸入1和0','輸入錯(cuò)誤');endelse%
5、如果字符串長度不為2,直接報(bào)錯(cuò)set(handles.input,'String','0000');errordlg('只能輸入1和0','輸入錯(cuò)誤');End編碼按鈕callback(編碼核心)%獲取輸入字符串temp_str=get(handles.input,'string');%獲取字符串長度len_str=length(temp_str);%轉(zhuǎn)存原碼字符串長度備用k=len_str;%初始化需要插入的校驗(yàn)碼的位數(shù)r=0;%根據(jù)海明編碼的2^(r)-1)<(k+r)要求,計(jì)算校驗(yàn)碼位數(shù)while((2^(r)-1)<(k+r))r=r+1;end%把
6、字符串?dāng)?shù)組轉(zhuǎn)成0和1的數(shù)組,便于處理fori=1:1:len_striftemp_str(i)=='1'yuan(i)=1;%原碼數(shù)組為yuanelseyuan(i)=0;endend%把求得相應(yīng)位數(shù)的校驗(yàn)碼,用0插入原碼中得到新碼j=0;m=1;fori=1:1:(k+r)ifi==2^(j)%如果該位置為2的次方,則插入校驗(yàn)碼xin(i)=0;j=j+1;elsexin(i)=yuan(m);m=m+1;endend%進(jìn)行海明編碼odd=0;%用于計(jì)算每位校驗(yàn)碼負(fù)責(zé)校驗(yàn)的位置的和forj=1:1:r%共有r位校驗(yàn)碼,需要計(jì)算r次n=1;%初始化循環(huán)變量i
7、=1;while((n2^(j-1)+i-1)<=(k+r))%當(dāng)沒有超過數(shù)組長度時(shí)繼續(xù)循環(huán)ifi>(2^(j-1))%如果本段的編碼已經(jīng)加完i=1;%則調(diào)轉(zhuǎn)到下一段,也就是隔一個(gè)2^(j-1)的段再進(jìn)行累加n=n+2;else%累加odd=odd+xin(n2^(j-1)+i-1);i=i+1;endendifmod(odd,2)==0%判斷是否為偶數(shù)xin(2^(j-1))=0;%若為偶數(shù),則在對(duì)應(yīng)的校驗(yàn)位插入0elsexin(2^(j-1))=1;%若為奇數(shù),則在對(duì)應(yīng)的校驗(yàn)為插入1endodd=0;end%編碼完畢,把數(shù)組轉(zhuǎn)換成字符串用于輸出fori=
8、1:1:(k+r)ifxin(i)==1output