距离上次发文已经差不多3个月了,一是最近做实验写论文一直被拒搞得自己心情十分低落,二是最近自己又想学习CV相关的知识,所以通信方面的学习就停滞下来了,但是为了复习或者是巩固自己仅有的通信知识,还是要隔一段时间拿出来回忆一下。

在通信实验的仿真过程中,信道编码的增加不可或缺,因为信道编码的增加可以提高系统的可靠性,通信系统无非就是在可靠性和有效性两个大的方面进行优化,同时也引出了信源编码和信道编码这两个概念,信道编码主要通过增加冗余信息来提高系统的可靠性,而信源编码则是压缩信息来增加系统的传输速率,也就是提升有效性,这两个方面又是相互矛盾的,因此我们总是在寻找一个折中的方案来设计通信系统。所以,我们在不考虑传输速率的前提下,单方面考虑信道编码对系统的影响来进行仿真实验。

下面直接通过代码讲解,因为是在之前BPSK仿真的基础上添加的编码仿真,因此只解释关于增加编码的部分。此处也只是使用了比较简单的汉明码和循环码,还有许多更加优秀的编码方案例如卷积码和在5G中使用的LDPC码,这些等我后续学会了,在记录分享。

% 产生原始信息序列
signal_bit = randi([0 1],1,2000);
% 增加编码
signal_coding = encode(signal_bit,7,4,'hamming/binary'); % (7,4)汉明编码

编码的实现主要借助encode()函数,这个函数可以实现几个简单的线性分组具体的介绍以及例子可以help一下

相应的在发射端有编码在接收端就应该有解码

        % 判决de_signal_bit = demod(rcos_signal_MF_option.');rx_signal = de_signal_bit(20+(1:length(signal_coding)),:);% 解码recover = decode(rx_signal,7,4,'hamming');

在解调之后增加一个解码的步骤然后再进行误码率的计算

不过值得注意的一点是,信噪比的设置,这很关键,要不然仿真出来结果是不正确的

% 设置信噪比
ebn0 = -5:10;
snr = ebn0 + 10*log10(4/7) - 10*log10(16);  % 采用bpsk调制且码率为4/7

看到了吧,一定要考虑到码率变化带来的增益,如果采用qpsk调制或者更高阶的调制方式,也要考虑阶数变化带来的增益。

以上是汉明编码的改动,下边再看一下循环码的改动。

% 增加编码
gpol = cyclpoly(a,b);          % 产生循环码多项式  (a,b)为编码位数,这里采取a=7  b=4
parmat = cyclgen(a,gpol);
trt = syndtable(parmat);
signal_coding = encode(signal_bit,a,b,'cyclic/binary',gpol);

循环码相比于汉明码稍微复杂,涉及到码表的知识,具体的编码算法,我找了一篇文章,大家可以参考学习一下循环码编码方法。

相应的解码方式为

        % 解码recover = decode(rx_signal,a,b,'cyclic/binary',gpol,trt);

最后附上,两种编码方式的仿真结果。

分析以上误比特曲线图可以发现,大约在Eb/No为6dB时曲线发生相交,低于6dB时,增加编码反而会导致错误概率的增加,这主要是因为,每个编码方案都具有一定纠错能力范围,当信号畸变超出编码的纠错能力时,反而会雪上加霜,但是在纠错能力范围之内又会是锦上添花,这就是信道编码带来的效果。

最后附上一个完整的代码过程,供大家交流学习吧。

% ===============BPSK系统级仿真实验============
% 时间:2022.7.12
% 作者:华清小学生
% 环境:MATLAB 2019b
% =============================================
clear
close all
clc% =====================参数设定================
sps = 16;           % 上采样倍数
fc = 2000;          % 载波频率
fs = 16000;         % 采样频率% =======================发射机================
% 产生原始信息序列
signal_bit = randi([0 1],1,2000);
% 增加编码
signal_coding = encode(signal_bit,7,4,'hamming/binary');
tx_signal = [zeros(1,20) signal_coding ones(1,20)];
% BPSK调制
% mod = comm.BPSKModulator();         % bpsk调制器
% demod = comm.BPSKDemodulator();     % bpsk解调器
mod = comm.PSKModulator('ModulationOrder',2,'PhaseOffset',pi/4);
demod = comm.PSKDemodulator('ModulationOrder',2,'PhaseOffset',pi/4);
signal_mod = mod(tx_signal.');  % 对信号转置,保证输入为列向量
% 脉冲成型
% 插值(上采样)
up16_signal_mod = upsample(signal_mod.',16);
% 滚降滤波器
r_factor = 0.5;                   % 滚降系数
rcos_fir = rcosdesign(r_factor,6,sps);
% 滚降滤波
rcos_signal = filter(rcos_fir,1,up16_signal_mod);
h = rcosdesign(0.5,6,8);
% stem(h)% 载波发送
time = 1:length(up16_signal_mod);
rcos_signal_carrier = rcos_signal.*cos(2*pi*fc.*time/fs);% ========================信道=====================
% 加噪声
% 设置信噪比
ebn0 = -5:10;
snr = ebn0 + 10*log10(4/7) - 10*log10(16);
n = 300;
err_number = zeros(n,length(snr));
bit_err_ratio = zeros(n,length(snr));
for j = 1:nfor i = 1:length(snr)% 高斯白噪声信道rcos_signal_carrier_noise = awgn(rcos_signal_carrier,snr(i),'measured');%==================接收机=====================% 载波恢复% 相干解调rcos_signal_noise = rcos_signal_carrier_noise.*cos(2*pi*fc.*time/fs);% 滤波% 低通滤波器fir_lp = fir1(128,0.2);     % 截止频率为0.2*(fs/2)rcos_signal_lp = filter(fir_lp,1,rcos_signal_noise);% 匹配滤波(根余弦滚降)rcos_fir = rcosdesign(0.5,6,sps);rcos_signal_MF = filter(rcos_fir,1,rcos_signal_lp);% 选取最佳采样点decision_pos = 161;  % (96+128+96)/2 = 160  三个滤波器的延迟% 每个符号选取一个点作为判决rcos_signal_MF_option = rcos_signal_MF(decision_pos:sps:end);% 判决de_signal_bit = demod(rcos_signal_MF_option.');rx_signal = de_signal_bit(20+(1:length(signal_coding)),:);% 解码recover = decode(rx_signal,7,4,'hamming');% 误码性能对比[err_number(j,i),bit_err_ratio(j,i)] = biterr(signal_bit(1:length(recover)),recover.');end
enderr_number_mean = mean(err_number);
bit_err_mean = mean(bit_err_ratio);% 仿真结果
ber = berawgn(ebn0,'psk',2,'nondiff');
semilogy(ebn0,bit_err_mean,'-*',ebn0,ber,'-+');
xlabel('Eb/No(dB)');
ylabel('BER');
title('不同信噪比下的误码率曲线(BPSK)');
legend('BPSK+汉明编码实验曲线','BPSK理论曲线');
grid on

增加汉明码、循环码的BPSK通信系统仿真以及误码分析相关推荐

  1. 基于matlab的mimo仿真,基于MATLAB的MIMO通信系统仿真报告.doc

    基于MATLAB的MIMO通信系统仿真报告 北京邮电大学 基于Matlab的MIMO通信系统仿真 班级: 姓名: 学号: 日 期: 目录 一. 概述3 (1)课设目的3 (2)数字通信系统概述3 二. ...

  2. 【通信系统仿真系列】基于延迟相乘鉴相的2QPSK调相通信系统仿真

    基于延迟相乘鉴相的2QPSK调相通信系统仿真 1 前言 2 原理 2.1 码元生成 2.2 差分处理 2.2.1 不使用差分码 2.2.2 使用差分码 2.3 载波 2.4 调制 2.5 经过高斯信道 ...

  3. 通信MATLAB仿真毕业设计,毕业设计—基于matlab的通信系统仿真报告.doc

    毕业设计-基于matlab的通信系统仿真报告.doc 创新实践报告报 告 题 目:基于matlab的通信系统仿真学 院 名 称:信息工程学院姓 名:余盛泽班 级 学 号:指 导 老 师:温 靖二O一四 ...

  4. matlab正交gold码的相关性,基于Matlab的CDMA通信系统仿真

    基于Matlab的CDMA通信系统仿真 1 绪 论 1.1课题背景及目的 20世纪60年代以来,随着民用通信事业的发展,频带拥挤问题日益突出.CDMA(Code Diveision Multiple ...

  5. MATLAB在通信系统仿真中的注意

    原文链接:(更多文章移步链接) MATLAB在通信系统仿真中的注意 - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/46668425 1.调用函数fourier和i ...

  6. MATLAB 基础与通信系统仿真

    文章目录 第 1 章 MATLAB 基础与通信系统仿真 1.1 MATLAB 简介 1.1.1 MATLAB 的起源 1.1.2MATLAB 的特点 1.2 MATLAB 程序设计 1.2.1 MAT ...

  7. 【毕业设计/Matlab系列】基于PCM编译码和2ASK调制解调的通信系统仿真

    Date:2022.5.22 文章目录 前言 1.算法过程 2.仿真效果图 3.核心matlab代码 前言 在大学毕业设计的时候,课题要求实现<基于PCM编译码和2ASK调制解调的通信系统仿真& ...

  8. 基于 Matlab 的通信系统仿真――数字通信大作业

    基于 Matlab 的通信系统仿真――数字通信大作业 附:MATLAB的通信系统仿真.rar 资源包括:main.m,modulation.m,demodulation.m,MATLAB的通信系统仿真 ...

  9. 【通信系统仿真设计】基于Matlab的2Q-FSK移频键控通信系统仿真

    基于Matlab的2Q-FSK移频键控通信系统仿真 前言 仿真原理 实验原理 载波 调制 接收端接收 加噪实现 解调 滤波器 滤波实现 滤波结果图 码元判决 实验结果 实验结果拟合 仿真代码 完整代码 ...

最新文章

  1. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖
  2. Quartz.net官方开发指南 第九课: JobStore
  3. SAP CRM Product workflow debug
  4. python 包和模块的区别_3分钟带你搞懂Python模块、包的区别和使用
  5. Java SecurityManager getThreadGroup()方法与示例
  6. mysql 游标 navigate_MySQL游标的概念介绍和游标的使用讲解
  7. CI框架 -- URL
  8. 【原】hive 操作笔记
  9. 开机后系统时间被恶意修改
  10. 干货!全网最全一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)...
  11. 【编译原理笔记09】语法制导翻译:语法制导翻译方案,在非递归的预测分析过程中进行翻译
  12. 计算机网络第七版答案
  13. HICE-SSH使用RSA认证方式进行登陆
  14. 虚拟机安装教程win10_Parallels Desktop如何安装windowns系统?PD虚拟机安装win10系统详细教程
  15. POI多个Sheet生成Excel
  16. 助推“内循环”,华侨城激活国内旅游市场
  17. 【TiDB 4.0 新特性前瞻】DBA 减负捷径:拍个 CT 诊断集群热点问题
  18. Android播放音效
  19. 电力负荷预测三篇综述总结
  20. 贴图教程_次世代游戏基础教程-maya烘焙AO贴图

热门文章

  1. 标准地图哪里找?这里的地图为底图,审图无需提供资质
  2. 0003__NB-IoT和eMTC和Lora的优缺点
  3. 夜,也可以很多彩——夜景拍摄技巧
  4. JS Worker多线程
  5. html弹出框播放视频
  6. 在线教育:直播课堂会有哪些问题?
  7. python自动投注软件_能帮我开发一个自动投注的脚本吗?
  8. 网站建设-简单动态网站搭建
  9. OpenStack(Queens版)高集群-3.高可用配置(pacemakerhaproxy)
  10. LIO-SAM论文与代码阅读笔记(一)论文阅读