我是靠谱客的博主 清新悟空,这篇文章主要介绍MATLAB实现(7,4)汉明码的编码解码纠错及BER的分析背景代码计算BER计算不使用汉明编码情况时的BER(模拟环境与理论情况)总结,现在分享给大家,希望可以做个参考。

MATLAB实现7,4汉明码的编码解码纠错及BER的分析

  • 背景
  • 代码
  • 计算BER
  • 计算不使用汉明编码情况时的BER(模拟环境与理论情况)
  • 总结

背景

本科时信息论与编码的作业

课程为

复制代码
1
2
3
4
5
Information Theory & Coding Vaibhav Kumar, PhD School of Electrical & Electronic Engineering University College Dublin – The Republic of Ireland

下述作业也是老师布置的,如果涉及到版权问题我会删掉该博客。

流程逻辑如下:

数据->汉明编码->BPSK调制->加入AWGN(模拟传输时的噪声)->BPSK解调->汉明解码->输出数据

给定生成矩阵为

复制代码
1
2
3
4
5
G=[1 1 0 1 0 0 0; 0 1 1 0 1 0 0; 1 1 1 0 0 1 0; 1 0 1 0 0 0 1]; %generator matrix

给定的syndrome和coset leader的对应关系为

syndromecoset leader
0000000000
0010010000
0100100000
0110000100
1001000000
1010000001
1100001000
1110000010

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
clc,clear Eb_N0_log=0:0.5:10; %dB Eb_N0=10.^(Eb_N0_log/10); R_coded=4/7; %R BER_coded=zeros(1,21); %store BER in different Eb/N0 G=[1 1 0 1 0 0 0; 0 1 1 0 1 0 0; 1 1 1 0 0 1 0; 1 0 1 0 0 0 1]; %generator matrix H=[1 0 0 1 0 1 1; 0 1 0 1 1 1 0; 0 0 1 0 1 1 1]; %parity-check matrix for i=1:21 %calculate BER in different Eb/N0 SNR_coded=2*R_coded*Eb_N0(i); %calculate SNR message=round(rand(1,1000000)); %generate original data px_w=1; %signal's power pn_w=px_w/SNR_coded; %noise's power error_number=0; %error bit number for index=1:250000 %250000 blocks m=[message(4*index-3),message(4*index-2),message(4*index-1),message(4*index)]; %one block data v=mod(m*G,2); %generate v message_modul=1-v*2; %0->1,1->-1 modulation r=message_modul+sqrt(pn_w)*randn(1,7); %add white Gaussian noise r=r<0; %demodulation s=mod(r*H',2); %generate syndrome syndrome=char(s+'0'); %find correspond error pattern e=zeros(1,7); switch syndrome case '000' e=[0 0 0 0 0 0 0]; case '001' e=[0 0 1 0 0 0 0]; case '010' e=[0 1 0 0 0 0 0]; case '011' e=[0 0 0 0 1 0 0]; case '100' e=[1 0 0 0 0 0 0]; case '101' e=[0 0 0 0 0 0 1]; case '110' e=[0 0 0 1 0 0 0]; case '111' e=[0 0 0 0 0 1 0]; otherwise disp('wrong syndrome') end signal=mod(r+e,2); %correct recieved data error_number=error_number+sum(sum(signal(1,4:7)~=m)); %find the number of error bits end BER_coded(i)=error_number/1000000; end semilogy(Eb_N0_log,BER_coded); xlabel('Eb/N0 [dB]'); ylabel('BER'); title('BER versus Eb/N0'); BER =0.5*erfc(sqrt(2*Eb_N0)/sqrt(2)); %Q function hold on; semilogy(Eb_N0_log,BER); xlabel('Eb/N0 [dB]'); ylabel('BER'); title('BER versus Eb/N0'); R_uncoded=1; %R BER_uncoded=zeros(1,18); for i=1:21 %calculate BER in different Eb/N0 SNR_uncoded=2*R_uncoded*Eb_N0(i); %SNR message=round(rand(1,1000000)); %generate original data message_modul=1-message.*2; %0->1,1->-1 modulation px_w=1; %signal's power pn_w=px_w/SNR_uncoded; %noise's power r=message_modul+sqrt(pn_w)*randn(1,1000000); %add white Gaussian noise error_number=0; r=r<0; %demodulation error_number=error_number+sum(sum(r~=message)); %find the number of error bits BER_uncoded(i)=error_number/1000000; end hold on; semilogy(Eb_N0_log,BER_uncoded); xlabel('Eb/N0 [dB]'); ylabel('BER '); title('BER versus Eb/N0'); legend('Coded(simulation)','Uncoded(theory)','Uncoded(simulation)');

计算BER

1、随机生成1000000比特,分为250000 block,每个block称为m。
2、进行汉明编码。
3、进行BPSK调制。
4、添加高斯白噪声
高斯白噪声
5、BPSK解码。
6、选择coset leader e并计算得出接收到的数据为r+e。计算错误比特的个数。
7、计算BER。
结果:
结果1

计算不使用汉明编码情况时的BER(模拟环境与理论情况)

1、随机生成1000000比特。
2、进行BPSK调制。
3、添加高斯白噪声
4、BPSK解码。
5、计算错误比特的个数。
6、利用第五部分结果计算模拟环境下的BER。
6、使用erfc函数计算理论情况下的BER。
结果:
在这里插入图片描述

总结

可以看到当Eb/N0大于5.8dB的时候汉明编码系统比未编码系统的BER低

最后

以上就是清新悟空最近收集整理的关于MATLAB实现(7,4)汉明码的编码解码纠错及BER的分析背景代码计算BER计算不使用汉明编码情况时的BER(模拟环境与理论情况)总结的全部内容,更多相关MATLAB实现(7,4)汉明码内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(120)

评论列表共有 0 条评论

立即
投稿
返回
顶部