zl程序教程

您现在的位置是:首页 >  后端

当前栏目

CRC校验matlab源码

MATLAB源码 校验 CRC
2023-09-11 14:15:33 时间

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