汉明码编码前后在BPSK和高斯噪声下的
性能比较
Lucy 2013.10.8
一.准备工作
1.弄清BPSK调制的误码率性能,调制的每个步骤都要理解,并能够用matlab程序实现。
2.了解汉明码的编解码原理 二.汉明码编解码的原理
为了纠正一位错码,在分组码中最少要加入的监督位数是我们一直考虑的问题。从提高编码效率的思想出发进行研究,产生了汉明码。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。本程序的主要思想就是对未编码和汉明编码后的信号在BPSK下且有高斯噪声影响下的误码率性能进行比较。
以(7,4)汉明码为例,其主要参数如下:
m码长:n?2?1,这里m=3
m信息位:k?2?1?m
校验位:m?n?k,且m?3 最小距离:dmin?d0?3
其生成矩阵G(前四位为信息位,后三位为冗余位)如下:
?1000110??0100011?
?G?? ?0010111???0001101 ??系统码可分为消息部分和冗余部分两部分,根据生成矩阵,输出码字可按下式计算: 所以有
?1000110??0100011??b?(a3,a2,a1,a0)?G?(a3,a2,a1,a0)???0010111???0001101??b6?a3b2?a3?a1?a0b?a2信息位 5冗余位 b1?a3?a2?a1b4?a1b0?a2?a1?a0b3?a0由以上关系可以得到(7,4)汉明码的全部码字如下所示。 序号 0 1 2 3 4 5 6 7 表2 (7,4)汉明码的全部码字 信息码元 冗余元 序号 信息码元 0000 000 8 1000 0001 011 9 1001 0010 101 10 1010 0011 110 11 1011 0100 110 12 1100 0101 101 13 1101 0110 0111 011 000 14 15 1110 1111 冗余元 111 100 010 001 001 010 100 111 (编解码原理也可详见樊昌信版通信原理课本P335)
三.汉明码编码前后在BPSK和高斯噪声下的性能比较的matlab实现详细步骤 1 .为了确保画出的图与理论接近,取信息码元数N=100000,汉明码组中监督码元数r=3,信息码元数数n=7;
2 .利用randint随机产生N行,(n-r)列的只有0和1元素的随机矩阵m,调用格式为randint(N,n-r,2),2表示产生的整数小于2;
3 .通过encode函数来对码元矩阵m进行汉明码编码产生了新的矩阵m2,调用格式为encode(m,n,n-r);
4 .通过调用pskmod函数来随机矩阵m进行bpsk调制产生新的矩阵m1,调用格式为pskmod(m,2),2表示是二进制的psk调制;
5 .同样通过调用pskmod函数实现对m2矩阵的bpsk调制,调用格式为pskmod(m2,2);
6 .假设接收端的输入信噪比SNRindB是从0到10db; 7 .将假设的输入信噪比从db换算为倍数;
8 .由于SNR=S/N,S是信号功率,N为噪声功率,信号的幅度假设为1,那么S=1/2,那么根据固定的SNR和S便可求出接收端叠加的噪声的功率N,对N进行sqrt运算就可求出叠加上的噪声信号的幅度no1。
9 .利用no1*randn(N,n-r)和no1*randn(N,n)分别来产生N行n-r列和N行n列的高斯噪声;
10.将未汉明码编码的bpsk信号m1叠加上噪声信号得出trx1,将汉明码编码的bpsk信号(注意此时它是N行n列而非(n-r)列)叠加上噪声得出trx2;
11 .通过调用pskdemod函数对trx1和trx2分别进行解调得出解调后的信号y1和y2,调用格式为pskdemod(trx1,2);
12 .对解调出来的y2信号还要进行汉明码解码得到解码信号y3,调用decode函数,格式为decode(y2,n,n-r);
13 .利用biterr函数来计算出解码后的信号y1(未经汉明码编码)和y3(汉明码编解码)相对于初始码元序列m的错误码元数和误码率,调用格式为[num,rat]=biterr(y1,m)
14:利用for语句重复上述步骤分别得出不同SNR下的误码率;
15:利用semilogy函数分别画出未经汉明码编码和汉明码编码两种情况的SNRindB与误码率rat的函数关系图。 四.举例说明性能分析过程
以(7,4)汉明码为例,程序中为了得到接近理论的曲线,取发送的码元个数N=100000,在这里为了方便举例,先取N=10。
第一步,产生10x4的信号码元序列m
m =
1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 0 0 1 0 1
第二步,汉明码编码得到码元序列m2
m2 =
0 0 1 1 0 1 0