資源簡介
一種簡易的BCH編譯碼的matlab實現,輸入碼長任意,里面有文字說明很詳細。
代碼片段和文件信息
flag=1;
while(flag)???????????????????????????????%輸入n
????n=input(‘輸入碼長n=‘);
????m=0;
????while(2^m-1~=n&&m<20)???????????????%計算m
????????m=m+1;
????end
????if(m==20)??????????????????????????????%非本原就重新輸入
????????disp(‘錯誤:只支持本原BCH碼‘)
????else?flag=0;
????end
end
flag=1;
while(flag)???????????????????????????????%輸入t
????t=input(‘輸入糾錯能力t=‘);
????if((t>=floor((n-1)/2))||(t<=0))
????????disp(‘錯誤:糾錯能力不能為0或者不能太大‘)
????else?flag=0;
????end
end
%----------------------------------------------
a=gf(2m);????%構造擴域matlab自動只把a當做擴域中的本原元
for?i=1:2:(2*t-1)????%求最小多項式只找奇數項
????b=[1a^i];???%讓b分別為a^i...找每一個(這么定義是要卷積的)
????l=i;
????while?a^i~=a^(2*l)?%找共軛根系
????????l=2*l;
????????b=conv(b[1a^l]);%求最小多項式
????end
????if?i==1??g=b;
????else
????????g=conv(gb);????%求生成多項式?利用卷積進行連乘
????end
end
%--------------------------------------------------
gx=double(g.x);%從擴域到數域?相當于變成多項式
k=n-length(gx)+1;%k=n-(r+1)+1
disp([‘計算得碼長?k=‘num2str(k)])
flag=1;
while(flag)
????temp=input(‘自動生成隨機信息序列輸入1手動鍵入信息序列輸入0?:\n‘);
????if?temp
????????mx=round(rand(1k));%隨機生成信息組
????????disp([‘隨機生成的序列為?m=?‘num2str(mx)])
????????flag=0;
????else?inputm=str2mat(input(‘輸入信息序列‘‘s‘));
????????if?length(inputm)~=k
????????????disp([‘錯誤:輸入碼長應為‘num2str(k)])
????????else?flag=0;
????????end
????????mx=str2num(inputm(:))‘;
????end
end
%----------------------------------------------------
x1=zeros(1length(gx));??????????%循環碼編碼方程中的
x1(1)=1;
c1=conv(x1mx);??????????????????%碼字的前k位編碼方程第一項
[qr]=deconv(c1gx);
r=mod(r2);??????????????????????%編碼方程第二項
c=mod(c1+r2);???
- 上一篇:ECG信號的讀取與QRS波檢測
- 下一篇:運動目標檢測的matlab代碼
評論
共有 條評論