一、实验目的
信道编码也叫差错控制编码,指在将要传输的信息序列中人为的添加一些保护成分(监督码元),从而在接收端译码时可以进行自动纠错,从而增强了信号的抗干扰能力。
掌握线性分组码编码原理;
二、实验仪器及材料
计算机
三、实验原理
汉明码是1950年由汉明提出的一种能纠正单个错误的线性分组码
它不仅性能好而且编译码电路非常简单,易于工程实现,因此是工程中常用的一种纠错码
二元汉明码的参数n,k和d分别为
码长:n=2r-1
信息位数:k=2r-r-1
监督位数:r=n-k
最小码距:dmin=3
由于dmin=3,因此能纠正1个随机错误或检测2个错误
汉明码的监督矩阵H的列为所有非零的r维向量组成,所以一旦r给定,就可构造出具体的(n,k)汉明码
四、实验内容
写出实验内容中的程序并附上实现结果。
1、构造一个二元(7,4,3)汉明码并编程给出该码的标准阵列译码表。
import numpy as np
import random
#这个函数,输出标准型监督矩阵H,标准生成矩阵G:(返回数组是为了下面调用)
def hannim(n,k,d):
r=n-k
p = np.zeros((1,r ),dtype = int)
a = []
b = []
for i in range(1,2**r):
p = np.zeros((1,r ),dtype = int)
m = i
q = 0
for j in range(r):
p[0,r-1-j] = m%2
if m%2 == 1:
q += 1
m = m // 2
if q == 0:
continue
elif q == 1:
a.append(p)
elif q != 1:
b.append(p)
a.reverse()
random.shuffle(b)
a = b+a
c = a[0]
tp = 0
for i in a:
tp += 1
if tp != 1:
c = np.concatenate([c, i], axis=0)
print("标准型监督矩阵H:\n",c.T)
c = b[0]
tp = 0
for i in b:
tp += 1
if tp != 1:
c = np.concatenate([c, i], axis=0)
m = np.zeros((len(c),len(c)),dtype = int)
for i in range(len(c)):
m[i][i]=1
g = np.hstack((m,c))
print("标准生成矩阵G:\n",g)
return g
hannim(7,4,3)
#这个函数输出标准阵列译码表(也方便上面第二题调用)
相关代码
a =np.array([[1,0,1,1,1],[0,1,1,0,1]])
def decodertable(a):
shape = a.shape
l = shape[1]
w = shape[0]
z = []
for i in range(2**w):
m =i
p = np.zeros((1,w ),dtype = int)
for j in range(w):
p[0,w-1-j] = m%2
m = m // 2
z.append(p)
for i in z:
re =i.dot(a)
for j in range(len(re[0])):
while (re[0,j]>1):
re[0,j] = re[0,j]%2
print("消息:",re,"译码",i)
decodertable(a)
a =np.array([[1,1,1,0,0],
[1,0,0,1,0],
[1,1,0,0,1]])
b = np.array([1,0,1,0,1])
z = a.dot(b.T)
for i in range(len(z)):
z[i] = z[i]%2
z