data=randi(2,1,16)-1; %隨機16位0,1資料
g=[1 0 0 1 1];%生成多項式g(x)=x4+x+1,crc-4這個最簡單會產生4位冗餘碼
R=length(g)-1; %冗餘碼長為生成多項式長度減1
[q,r] = deconv([data zeros(1,R)],g);
%為資料右邊補K個0,然後用deconv計算資料多項式除以生成多項式
%商是q(長度16),餘數是r(長度16+R)
r=mod(r(end-R+1:end),2); %取餘數的最後R位mod2運算
code=[data r]; %編碼是原來的16位資料後加上R位校驗冗餘碼
%傳送的訊號就是這16+R位二進位制編碼
%驗證:將接收到的16+R位編碼和生成多項式相除
[q,r] = deconv(code,g);
r=mod(r(end-R+1:end),2);
disp(r) %如果正確,R位餘數全是0
errorcode=code;
errorcode(2)=1-errorcode(2); %假設第二位錯了
[q,r] = deconv(errorcode,g);
disp(r) %R位餘數全為0
檢驗結果
0 0 0 0
1 0 0 0
表示結果第一次正確
第二次有誤
data=randi(2,1,16)-1; %隨機16位0,1資料
g=[1 0 0 1 1];%生成多項式g(x)=x4+x+1,crc-4這個最簡單會產生4位冗餘碼
R=length(g)-1; %冗餘碼長為生成多項式長度減1
[q,r] = deconv([data zeros(1,R)],g);
%為資料右邊補K個0,然後用deconv計算資料多項式除以生成多項式
%商是q(長度16),餘數是r(長度16+R)
r=mod(r(end-R+1:end),2); %取餘數的最後R位mod2運算
code=[data r]; %編碼是原來的16位資料後加上R位校驗冗餘碼
%傳送的訊號就是這16+R位二進位制編碼
%驗證:將接收到的16+R位編碼和生成多項式相除
[q,r] = deconv(code,g);
r=mod(r(end-R+1:end),2);
disp(r) %如果正確,R位餘數全是0
errorcode=code;
errorcode(2)=1-errorcode(2); %假設第二位錯了
[q,r] = deconv(errorcode,g);
r=mod(r(end-R+1:end),2);
disp(r) %R位餘數全為0
檢驗結果
0 0 0 0
1 0 0 0
表示結果第一次正確
第二次有誤