CRC校验matlab源码

function C = CRC_code_new_n1_mod(M,n,G)
%CRC code (n,k) function,每k个bit编成nbit。
%Input:
%   M:(1,x*k) input data
%   n:
%   G:generating polynomial.(1,n-k+1)
%Output:
%   C:(1,n) coded data;
len1=length(G);%len1=n-k+1 已经比n-k大1了。
k=n-len1+1
len2=length(M)
M1=reshape(M,k,len2/k);
C1=zeros(n,len2/k);
C1(1:k,:)=M1;
%t=zeros(n-k+1,1);
%CRC 部分
t=C1(1:n-k+1,:);%8=n-k;eg.n-k+1=9; t为矩阵
GG=[];
for ii=1:len2/k
    GG=[GG,t(1,ii).*G];
end
    t=mod((t+GG),2);
for jj=n-k+2:n
    GG=[];
    t=[t(2:n-k+1,:);C1(jj,:)];
    for ii=1:len2/k
        GG=[GG,t(1,ii).*G];
    end
    t=mod((t+GG),2);
end
C1(k+1:n,:)=t(2:n-k+1,:);%2-9,共8位
C=reshape(C1,1,n*len2/k);

 

function [DC,indicate]= CRC_decode_new_n1_mod(C,n,G)
%CRC code (n,k) function,每k个bit编成nbit。%还没有实现纠错。
%Input:
%   M:(1,x*n) input data
%   n:
%   G:generating polynomial.(1,n-k+1)
%Output:
%   C:(1,x*k) coded data;
%   indicate: CRC indicator,0-correct,>=1-err;
len1=length(G);%len1=n-k+1 **已经比n-k大1了。
k=n-len1+1;
len2=length(C);
M=reshape(C,n,len2/n);
DC=reshape(M(1:k,:),1,k*len2/n);
indicate=zeros(1,len2/n);

%CRC_deco 部分
t=M(1:n-k+1,:);%8=n-k;eg.n-k+1=9; t为矩阵
GG=[];
for ii=1:len2/n
    GG=[GG,t(1,ii).*G];
end
    t=mod((t+GG),2);
for jj=n-k+2:n
    GG=[];
    t=[t(2:n-k+1,:);M(jj,:)];
    for ii=1:len2/n
        GG=[GG,t(1,ii).*G];
    end
    t=mod((t+GG),2);
end
indicate=sum(t);
D-31

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值