highSpeed-Logic -1- QQ:122 4848 052
http://www.hslogic.com/
本课题,我们主要实现的是基于 MATLAB 的 CRC 纠错码的设计。
下面,我们首先对 CRC 的纠错码的基本理论进行介绍:
CRC 校验利用线性编码理论,在发送端根据要传送的 k 位二进制码序列,以一定的规则
产生一个校验用的监督码(即 CRC 码)r 位,并附在信息后面,构成一个新的二进制码序列
数共(k+r)位,最后发送出去。
在接收端,则根据信息码和 CRC 码之间所遵循的规则进行检验,以确定传送中是否出
错。这个规则,在差错控制理论中称为“生成多项式”。
设编码前的原始信息多项式为 P(x),P(x)的最高次幂加 1 等于 k;生成多项式为 G(x),G(x)
的最高次幂等于 r;CRC 多项式为 R(x);编码后带循环校验码 CRC 的信息多项式为 T(x)。
发送方编码方法:将原始信息多项式 P(x)乘以
r
x
(即对应的二进制码序列左移 r 位),
再 与 生 成 多 项 式 G(x) 做 模 2 除 , 所 得 余 式 即 为 循 环 校 验 码 CRC 。 用 公 式 表 示 为
)()()( xRxPxxT
r
��
。
对于编码,部分,我们的 MATLAB 程序如下:
function crc_code=func_crc_encode(signal,k,n,r,G);
%信号长度
Flen = length(signal);
%将信号按每帧的编码程度分组
signal_team= reshape(signal,Flen/k,k);
%编码矩阵
code_matrix= zeros(Flen/k,n);
for i = 1:Flen/k
a = zeros(1,k);
for j1=1:k
a(j1) = signal_team(i,j1);
end
b=zeros(1,n);
for j2=1:n
b(j2) = code_matrix(i,j2);
end
b = [a,zeros(1,r)];
%基于 G 进行编码
[~, rr] = deconv(b,G);
rr = abs(rr);
n = length(rr);
for i=1:n
rr(i) = mod(rr(i),2);
end
b = bitor(b,rr);
for L=1:n
code_matrix(i,L) = b(1,L);