汉明码是纠错能力为1的线性分组码。
通过仿真可以熟悉线性分组码标准阵列译码的原理
学习不能停留在理论上,实践是检验真理的唯一标准

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
plt.rcParams['font.sans-serif'] = ['fangsong']
plt.rcParams['axes.unicode_minus'] = False
N = 1000
snrdB_min = 0
snrdB_max = 8
snrdB = np.arange(snrdB_min, snrdB_max)
sym_initial = np.round(np.random.rand(N))
def hamming(M, G):k, n = G.shapeN = len(M)r = k - N%kM_add0 = np.append(M, np.zeros(r))groups = np.ceil(len(M_add0)/k).astype(np.int64)  M_dis = np.reshape(M_add0, (groups, k))C = np.mod(M_dis.dot(G), 2)return C
def decode(R, H):n = H.shape[1]k = n - H.shape[0]R = R.reshape(-1, n)groups = R.shape[0]# print(groups)S = np.mod(R.dot(H.T), 2)S_row, S_column = S.shapeSE = np.array([[[0, 0, 0], [0, 0, 0, 0, 0, 0, 0]],[[0, 0, 1], [0, 0, 0, 0, 0, 0, 1]],[[0, 1, 0], [0, 0, 0, 0, 0, 1, 0]],[[1, 0, 0], [0, 0, 0, 0, 1, 0, 0]],[[1, 1, 1], [0, 0, 0, 1, 0, 0, 0]],[[0, 1, 1], [0, 0, 1, 0, 0, 0, 0]],[[1, 0, 1], [0, 1, 0, 0, 0, 0, 0]],[[1, 1, 0], [1, 0, 0, 0, 0, 0, 0]]], dtype='object')C_result = np.zeros((S_row, n))SE_row, SE_column = SE.shapefor m in range(S_row):for n in range(SE_row):if all(S[m, :] == SE[n, 0]):C_result[m, :] = R[m,:] + SE[n, 1]C_result[m, :] = np.mod(C_result[m, :], 2)C_result = C_result[:, :k]return C_result

BPSK-AWGN信道的仿真

def BPSK(TX, SNR):
# 输入:
#     原始码元序列Tx
#     信噪比范围SNR(dB)
# 输出:
#     接收判别后序列RX
#     信噪比对应的误码率序列BERTX = TX.reshape(1, -1)N = TX.shape[1]          ## 获得原始序列长度snr = 10**(SNR/10)       ## 转化成公制len_snr = len(snr)       ## 获得SNR范围长度RX = np.zeros((len_snr, N))          ## 预分配接收判别序列内存errors = np.zeros(len_snr)           ## 预分配错误内存for j in range(len_snr):sigma = np.sqrt(1/(2*snr[j]))     ## 计算SNR下AWGN的标准差error_count = 0for i in range(N):                     ## 遍历每一个发送符号x_d = 2*TX[0, i] - 1                   ## 得到+1和-1的发送序列n_d = sigma*np.random.randn(1)      ## GWNy_d = x_d + n_d                          ## 加性噪声if y_d > 0:RX[j, i] = 1else:RX[j, i] = 0if (RX[j, i] != TX[0, i]):error_count = error_count + 1    ## 对错误样本进行计数errors[j] = error_count                ## 得到该信噪比下的错误个数BER = errors/N                           ## BER estimatereturn RX, BER
G = np.array([[1, 0, 0, 0, 1, 1, 0],[0, 1, 0, 0, 1, 0, 1],[0, 0, 1, 0, 0, 1, 1],[0, 0, 0, 1, 1, 1, 1]
])
k, n = G.shape
H = np.append(G[:, k:].T, np.eye(n-k), axis=1)
C_ham = hamming(sym_initial, G)
groups = C_ham.shape[0]
C_ham_stream = C_ham.reshape(1, -1)
C_ham_stream
array([[1., 1., 0., ..., 0., 0., 0.]])
#  两种序列都通过BPSK-AWGN信道
RX_noham, BER_err_noham = BPSK(sym_initial,snrdB) # 未编码码流
RX_ham,  BER_err_ham = BPSK(C_ham_stream,snrdB)   # 汉明编码码流
# 汉明码解码并计算SNR
errors_ham = np.zeros(len(snrdB))   # 预分配错误内存
for i in range(len(snrdB)):RX_ham1 = RX_ham[i, :]C_result1 = decode(RX_ham1, H) errors_ham[i] = np.sum(np.mod(C_result1+C_ham[:, :k], 2))
BER_ham = errors_ham/N                  # 得到BER
# 计算两种方案的BER-SNR曲线
plt.figure(figsize=(20, 8), dpi=100)plt.plot(snrdB, BER_err_noham, '*-', label='未编码系统', linewidth=3)
plt.plot(snrdB, BER_ham, 'o-', label='编码系统', linewidth=3) plt.xlabel('信噪比 SNR / dB', fontsize=16)
plt.ylabel('误码率 BER', fontsize=16) plt.tick_params(labelsize=14)plt.legend(fontsize=18)
plt.title('发送的信息序列长度为{}'.format(N), fontsize=24)
plt.show()

汉明码性能分析(结合AWGN信道BPSK调制)相关推荐

  1. MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析

    MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析 形式:程序 程序实现功能: 仿真正交相移键控QPSK信号调制的基带数字通信系统通过AWGN信道的误符号率(SER)和误比特率( ...

  2. 采用simulink构建AWGN信道中分组码的BPSK数字通信系统

    综合实验设计题5: 采用simulink构建AWGN信道中分组码的BPSK数字通信系统 1.实验要求: (1)构建在AWGN信道中,采用BPSK调制的分组差错控制编码方法的模型,并给出误码率性能. ( ...

  3. C语言实现LDPC的校验矩阵,非正则LDPC码在AWGN信道中的性能研究

    0引言低密度奇偶校验码(LowDensityParityCheck,LDPC)是Gallager提出的基于稀疏校验矩阵的线性分组码[1].其构造特殊之处在于它的奇偶检验矩阵H是稀疏矩阵,即H矩阵中非零 ...

  4. 基于matlab的64QAM,通信调制体制设计之64QAM性能分析MATLAB仿真及代码

    通信调制体制设计之64QAM性能分析MATLAB仿真及代码 通信调制体制设计之64QAM性能分析MATLAB仿真及代码 任务背景 弗雷泽岛旅游经理在审查您之前建立无线链路任务的解决方案时,正在研究使用 ...

  5. AWGN信道下卷积编码、viterbe译码、分别采用软硬判决,进行误码率分析

    一.卷积编码 仿真 (硬判决译码 误码率和理论值比较) 已知卷积码生成函数: 可知码率为1/3,相应的抽头系数为(557 663 711)的卷积码.编写程序,采用卷积编码.维特比译码(硬判决),BPS ...

  6. Hadamard正交编码+BPSK误码性能分析

    %%%%%   Hadamard正交编码+BPSK误码性能分析  %%%%%%%%%%%%%%%% NVec = [8 16 32 64 128  ]; % Values of N to consid ...

  7. simulink 汉明码 用法_汉明码的性能分析

    武汉理工大学<MATLAB应用>课程设计报告 disp(['译码器输出信号误码率: ' num2str(symerr(msg,rcv)/length(msg))]) %计算误码率 3.2. ...

  8. mASK调制在AWGN信道下的可达信息速率的Monte Carlo仿真计算法

    本文探究mASK调制在AWGN信道下的可达信息速率用Monte Carlo仿真计算的方法.参考我的上一篇博文<mASK 调制在AWGN信道下的可达信息速率的积分计算>,解决的方法相同,只是 ...

  9. matlab多径信道模型,多径时变信道模型的仿真与性能分析课程设计(样例3)

    <多径时变信道模型的仿真与性能分析课程设计.doc>由会员分享,可免费在线阅读全文,更多与<多径时变信道模型的仿真与性能分析课程设计>相关文档资源请在帮帮文库(www.woc8 ...

最新文章

  1. python利用自动识别写模块_Python 利用pytesser模块识别图像文字
  2. 第104天:web字体图标使用方法
  3. Swift3.0语言教程字符串与URL的数据转换与自由转换
  4. 018_rate评分
  5. 青岛农业大学第九届ACM程序设计竞赛
  6. C#并行编程(3):并行循环
  7. 分析rss/xml结构附带源码【原创】
  8. cell数组变为字符串_cell转字符串
  9. 传感器是新兴的机器人技术革命的关键要素
  10. MS CRM 2011的自定义与开发(2)——预备知识
  11. Flutter之CupertinoSwitch和Switch开关组件的简单使用
  12. ❤️Python Django网站开发 2021年最新版教程 合集❤️
  13. 金算盘加密狗维护信息
  14. 怎么用wps做区域分布图_《wps频数分布表怎么做》 在EXCEL中如何做频率分布图
  15. 帝国cms html5 编辑器,帝国cms后台编辑器自动排版插件
  16. mysql的right函数_MySQL数据库中系统函数right功能简介
  17. Leetcode_NO199_二叉树的左视图,右视图
  18. 阿里云专网服务器连接互联网的设置
  19. Android安装包APK如何解压
  20. 调试qbo_video_record问题

热门文章

  1. 你终于下定决心,辞职开始创业,然后…
  2. 多态java喂食宠物_JAVA代码主人喂宠物吃东西狗只吃骨头猫只吃鱼求代码用多态...
  3. RDM连接阿里云服务器的Redis
  4. 有趣的photoshop特效(1):凸透镜python实现
  5. 关于FFmpeg里的GPL和LGPL协议
  6. HTML5 解决audio标签不能在iPhone上自动播放的问题
  7. Verilog基础学习二
  8. GitChat · 架构 | 为什么微服务实施那么难?如何高效推进微服务架构演进
  9. 妈!他还没回来,一定有别的女人了!
  10. 携程酒店数据爬取2020.5