这是一个CRC校验码的matlab实现的程序 我运行不出来 不知道哪里有错误 麻烦懂的人的能够帮我改正一下!

这是一个CRC校验码的matlab实现的程序 我运行不出来 不知道哪里有错误 麻烦懂的人的能够帮我改正一下!,第1张

1 新建m文件,把函数function [ output, indicate] = crc_check( input, crc_no )贴进去保存;

2 新建m文件,把函数function [ output ] = crc_add( input, crc_no )贴进去保存;

3 在command window里输入

clear all

input=[1 1 0 0]

CRC_Number=[3 8 12 16]

for crc_index = 1:size(CRC_Number,2)

crc_no = CRC_Number(crc_index)

output = crc_add(input, crc_no)

[output_after_check, indicate] =crc_check(output,crc_no)

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

rc_check和crc_add相当于函数,你要调用这2个函数,所以应先将函数保存,再进行调用。

function x=mycrc(data,divisor,type) 

if ((type==1)||(type==2))     n=length(divisor) 

    appender=[0 0 0 0] 

    dividend=[data] 

    if ((type==1)) 

        dividend=[data,appender] 

    end 

    dividendA=dividend(1:5) 

    dividendB=dividend(6:length(dividend)) 

    result=dividendA 

    while((n-1)~=length(result)) 

        result=bitxor(result,divisor) 

        while(result(1)==0 && ((n-1)~=length(result))) 

            result=result(2:length(result)) 

            if ((length(result)<length(divisor)) && (length(dividendB)~=0)) 

                result=[result,dividendB(1)] 

                dividendB=dividendB(2:length(dividendB)) 

            end 

        end 

    end 

 

    x=result 

 

    if (type==2 & result==zeros(size(result))) 

        x=[1] 

        disp('check successful,data uncorrupted') 

    elseif (type==2) 

        x=[0] 

        disp('check failed data is corrupted') 

    end 

 

else 

    disp('invalid type entered in 3rd parameter it should either be 1 or 2') 

end

x=mycrc(data,divisor,type)

x : 输出

data : 输入

divisor: 8 或者 16

type : 1 或者 2

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

表示结果第一次正确

第二次有误


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11829609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存