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
表示结果第一次正确
第二次有误
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)