标签:
线性码中按照线性方程构成的。在线性码中信息位和监督位是由一些线性代数方程联系着。
一般来说,若码长为n,信息位为k,则监督位数r=n-k。如果希望用r个监督位构造出r个监督关系式来指示一个错码的n种可能位置,则要求 2^r - 1 > n 或 2^r > k + r + 1。
举例说明:
(n,k)=(7,4)
监督关系:
S1 = a6 ^ a5 ^ a4 ^ a2
S2 = a6 ^ a5 ^ a3 ^ a1
S3 = a6 ^ a4 ^ a3 ^ a0
S1 S2 S3 表示3个监督关系式中的校正子,它们为0,则表示无错误码,否则有一个错误码。
可得到校正子与错误位置关系
S1 S2 S3 错误位置
0 0 1 a0
0 1 0 a1
1 0 0 a2
0 1 1 a3
1 0 1 a4
1 1 0 a5
1 1 1 a6
0 0 0 无
S1 = a6 ^ a5 ^ a4 ^ a2 = 0
S2 = a6 ^ a5 ^ a3 ^ a1 = 0
S3 = a6 ^ a4 ^ a3 ^ a0 = 0
表示编成的码组中应无错码
将上3式经过移位运算,解出监督位
a6 ^ a5 ^ a4 = a2
a6 ^ a5 ^ a3 = a1
a6 ^ a4 ^ a3 = a0
则结果如下:
a6 a5 a4 a3 a2 a1 a0
0 0 0 0 0 0 0
0 0 0 1 0 1 1
0 0 1 0 1 0 1
0 0 1 1 1 1 0
0 1 0 0 1 1 0
0 1 0 1 1 0 1
0 1 1 0 0 1 1
0 1 1 1 0 0 0
1 0 0 0 1 1 1
1 0 0 1 1 0 0
1 0 1 0 0 1 0
1 0 1 1 0 0 1
1 1 0 0 0 0 1
1 1 0 1 0 1 0
1 1 1 0 1 0 0
1 1 1 1 1 1 1
改写为:
1*a6 ^ 1*a5 ^ 1*a4 ^ 0*a3 ^ 1*a2 ^ 0*a1 ^0*a0 = 0
1*a6 ^ 1*a5 ^ 0*a4 ^ 1*a3 ^ 0*a2 ^ 1*a1 ^0*a0 = 0
1*a6 ^ 0*a5 ^ 1*a4 ^ 1*a3 ^ 0*a2 ^ 0*a1 ^1*a0 = 0
则
1 1 1 0 1 0 0
H = 1 1 0 1 0 1 0
1 0 1 1 0 0 1
例题:发送发A=(0 0 1 1 1 1 0)经过信道发到B方,接收到B=(0 0 1 0 1 1 0)
S=BHT=(0 1 1)
则 a3发生误码,纠错后B‘=(0 0 1 1 1 1 0)
Verilog代码:
module ex( clk,u,c,y );
input clk;
input[3:0] u; //信息
output[6:0] c; //信息+校验位
reg[6:0] c;
output[6:0] y;
reg[6:0] y;
always@(posedge clk)
begin
c[6] <= u[3];
c[5] <= u[2];
c[4] <= u[1];
c[3] <= u[0];
c[2] <= u[1]^u[2]^u[3];// check bit
c[1] <= u[0]^u[2]^u[3];
c[0] <= u[0]^u[1]^u[3];
end
reg[2:0] s;
reg[6:0] e;
always@(posedge clk)
begin
s[2] <= c[2]^c[4]^c[5]^c[6];//syndrome is based on check bit or Even supervision
s[1] <= c[1]^c[3]^c[5]^c[6];
s[0] <= c[0]^c[3]^c[4]^c[6];
e[0] <= s[0] & (~s[1]) & (~s[2]);//error pattern is based on syndrome c[0]
e[1] <= (~s[0]) & s[1] & (~s[2]);// c[1]
e[2] <= (~s[0]) & (~s[1]) & s[2]; // c[2]
e[3] <= s[0] & s[1] & (~s[2]);// c[3]
e[4] <= s[0] &(~s[1]) & s[2]; // c[4]
e[5] <= (~s[0]) & s[1] & s[2]; // c[5]
e[6] <= s[0] & s[1] & s[2]; // c[6]
y <= e^c;
end
endmodule
标签:
原文地址:http://www.cnblogs.com/jianglg3/p/4482246.html