回覆列表
  • 1 # 使用者6602652349876

    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

    表示結果第一次正確

    第二次有誤

  • 中秋節和大豐收的關聯?
  • 2021賽季的湖人為什麼感覺打誰都是五五開呢?