目录

产生随机二进制比特流

将比特映射为符号(将二进制数据映射为整数)

16QAM调制

加入高斯白噪声

解调16QAM信号

将整数值转化为二进制数

计算系统误码率

完整代码

参考文献


产生随机二进制比特流

M = 16;%调制顺序(信号星座点数)
k = log2(M);%每符号的比特位数
n = 30000;%处理的比特总数
sps = 1;%每个符号的样本数(过采样因子)

使用rng设置为默认状态,以便生成重复的随机数

rng default;%每次都产生相同的随机数
dataIn = randi([0 1],n,1); % 产生0和1之间的整数,输出一个n*1的向量

使用stem画出产生的前40个随机数,使用冒号调用随机数的前40个值

stem(dataIn(1:40),'filled');%filled参数将图形填充为实心
title('Random Bits');
xlabel('Bit Index');
ylabel('Binary Value');

将比特映射为符号(将二进制数据映射为整数)

即,每4个比特一组,映射为[0,15]中的一个数

由于qammod函数的输入要求是整数,故需要该步操作

dataInMatrix = reshape(dataIn,length(dataIn)/k,k);
% 重组dataIn,使其每行只有4列
dataSymbolsIn = bi2de(dataInMatrix);%将每行转化为十进制数,[0,15]
%该函数在MATAB R2021b及以后不推荐使用

画出前10个符号

figure; % 创建图窗
stem(dataSymbolsIn(1:10));
title('Random Symbols');
xlabel('Symbol Index');
ylabel('Integer Value');

16QAM调制

dataMod = qammod(dataSymbolsIn,M,'bin');
% 使用自然二进制编码排序
dataModG = qammod(dataSymbolsIn,M);
% 默认使用格雷码编码

计算Eb/N0=10dB时的SNR

EbNo = 10;
snr = EbNo+10*log10(k)-10*log10(sps);
%转换方法见参考文献

加入高斯白噪声

receivedSignal = awgn(dataMod,snr,'measured');
receivedSignalG = awgn(dataModG,snr,'measured');
%awgn函数中输入的信噪比要求是SNR(dB)值

看看此时加噪后的星座图

sPlotFig = scatterplot(receivedSignal,1,0,'g.');
% scatterplot用来观察接收信号的星座图
hold on
scatterplot(dataMod,1,0,'k*',sPlotFig)

解调16QAM信号

dataSymbolsOut = qamdemod(receivedSignal,M,'bin');
dataSymbolsOutG = qamdemod(receivedSignalG,M);

将整数值转化为二进制数

dataOutMatrix = de2bi(dataSymbolsOut,k);
%恢复成矩阵,每一行是一个符号,包含k列
dataOut = dataOutMatrix(:);
% 将矩阵中所有元素按列重构成一个列向量
dataOutMatrixG = de2bi(dataSymbolsOutG,k);
dataOutG = dataOutMatrixG(:); % Return data in column vector

计算系统误码率

[numErrors,ber] = biterr(dataIn,dataOut);
%该函数比较两种数据,并返回不同的个数以及占比
fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ...ber,numErrors)
[numErrorsG,berG] = biterr(dataIn,dataOutG);
fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ...berG,numErrorsG)
%格雷码编码显著改善了信噪比

看看自然与格雷编码的映射关系

M = 16; % 调制阶数
x = (0:15); % 符号(整数)输出
symbin = qammod(x,M,'bin'); % 16-QAM output (natural-coded binary)
symgray = qammod(x,M,'gray'); % 16-QAM output (Gray-coded)
scatterplot(symgray,1,0,'b*');
for k = 1:Mtext(real(symgray(k)) - 0.0,imag(symgray(k)) + 0.3,...dec2base(x(k),2,4));text(real(symgray(k)) - 0.5,imag(symgray(k)) + 0.3,...num2str(x(k)));text(real(symbin(k)) - 0.0,imag(symbin(k)) - 0.3,...dec2base(x(k),2,4),'Color',[1 0 0]);text(real(symbin(k)) - 0.5,imag(symbin(k)) - 0.3,...num2str(x(k)),'Color',[1 0 0]);
end
title('16-QAM Symbol Mapping')
axis([-4 4 -4 4])

完整代码

clc;clear;close all;
M = 16;%调制顺序(信号星座点数)
k = log2(M);%每符号的比特位数
n = 30000;%处理的比特总数
sps = 1;%每个符号的样本数(过采样因子)
rng default;%每次都产生相同的随机数
dataIn = randi([0 1],n,1); % 产生0和1之间的整数,输出一个n*1的向量
stem(dataIn(1:40),'filled');
title('Random Bits');
xlabel('Bit Index');
ylabel('Binary Value');
dataInMatrix = reshape(dataIn,length(dataIn)/k,k);
% 重组dataIn,使其每行只有4列
dataSymbolsIn = bi2de(dataInMatrix);%将每行转化为十进制数,[0,15]
%该函数在MATAB R2021b及以后不推荐使用
figure; % 创建图窗
stem(dataSymbolsIn(1:10),'filled');
title('Random Symbols');
xlabel('Symbol Index');
ylabel('Integer Value');
dataMod = qammod(dataSymbolsIn,M,'bin');
% 使用自然二进制编码排序
dataModG = qammod(dataSymbolsIn,M);
% 默认使用格雷码编码
EbNo = 10;
snr = EbNo+10*log10(k)-10*log10(sps);
receivedSignal = awgn(dataMod,snr,'measured');
receivedSignalG = awgn(dataModG,snr,'measured');
sPlotFig = scatterplot(receivedSignal,1,0,'g.');
% scatterplot用来观察接收信号的星座图
hold on
scatterplot(dataMod,1,0,'k*',sPlotFig)
dataSymbolsOut = qamdemod(receivedSignal,M,'bin');
dataSymbolsOutG = qamdemod(receivedSignalG,M);
dataOutMatrix = de2bi(dataSymbolsOut,k);
dataOut = dataOutMatrix(:); % Return data in column vector
dataOutMatrixG = de2bi(dataSymbolsOutG,k);
dataOutG = dataOutMatrixG(:); % Return data in column vector
[numErrors,ber] = biterr(dataIn,dataOut);
%该函数比较两种数据,并返回不同的个数以及占比
fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ...ber,numErrors)
[numErrorsG,berG] = biterr(dataIn,dataOutG);
fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ...berG,numErrorsG)

参考文献

[1]张少侃,吕聪敏,甘浩.数字通信系统中Eb/N0与SNR转换方法的研究[J].现代计算机,2019(12):33-36.

[2]MATLAB. Communications Toolbox[M]. R2021b.

[3]周炯磐. 通信原理[M]. 北京邮电大学出版社, 2002.

MATLAB通信工具箱仿真16QAM系统相关推荐

  1. 电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障

    电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障,各类(单相断线,两相断线,三相断线)等断线故障,暂态稳定仿真 ...

  2. MATLAB 机器人工具箱与机器人系统工具箱使用

    安装机器人工具箱成功的基础上,打开matlab后在命令行输入 roblocks可以打开机器人工具箱的Simulink库 应用参考链接如下: MATLAB机器人工具箱在SIMULINK中对机器人进行操作 ...

  3. matlab通信物理层仿真,通信小精灵(物理层仿真工具) 可计算仿真误码率、理论误...

    该软件最大的特点是可扩展性.该软件在纵向上划分为四个层次.图形界面层管理图形 界面,调度层调用各个独立模块,接口层负责转换底层函数的接口,执行层执行具体功能. 接口层相当于该软件各个模块的插口,可以随 ...

  4. MATLAB通信工具箱之CCDF

    CCDF 互补累计分布函数   H=comm.CCDF:建立一个CCDF系统,赋值给H.H就是测量信号瞬时功率比其平均功率高X dB的概率.使用CCDF可以获得CCDF曲线,以及峰值功率,平均功率和P ...

  5. matlab通信工具comm,MATLAB通信工具箱之comm.ErrorRate

    ErrorRate:計算輸入數據的比特/符號錯誤率 H = comm.ErrorRate:創建一個計算錯誤率的目標,H.H通過將接收數據與發射數據比較的方式得到錯誤率. H = comm.ErrorR ...

  6. step函数在MATLAB通信工具箱comm.ErrorRate中的用法

    ErrorRate:计算输入数据的比特/符号错误率 H = comm.ErrorRate:创建一个计算错误率的目标,H.H通过将接收数据与发射数据比较的方式得到错误率. H = comm.ErrorR ...

  7. 基于matlab系统辨识工具箱,基于matlab的识别系统

    怎么使用matlab系统辨识工具箱 如果是系统自带的,你可以直接用,如果是外部的或者是自编的你需要先把文件夹拷贝到tools文件夹下,再设置路径. Matlab常用工具箱介绍(英汉对照)MatlabM ...

  8. matlab系统辨识工具箱原理,matlab常用工具箱介绍

    怎么使用matlab系统辨识工具箱 如果是系统自带的,你可以直接用,如果是外部的或者是自编的你需要先把文件夹拷贝到tools文件夹下,再设置路径. Matlab常用工具箱介绍(英汉对照)Matlab ...

  9. 模糊控制matlab算例,matlab模糊逻辑工具箱

    基本FIS编辑器(MATLAB模糊逻辑工具箱函数)_IT/计算机_专业资料.基本FIS编辑器 MATLAB模糊逻辑工具箱函数 基本FIS 编辑器函数 fuzzy 格式 fuzzy %弹出未定义的基本 ...

最新文章

  1. IBM Thinkpad T43-44U 升级到 2G 内存后少了 66M
  2. REST API 支持方式
  3. 也谈.net加密解密
  4. 弹出显示多条的message对话框
  5. linux安卓主线程同步,Android解决:使用多线程和Handler同步更新UI
  6. 十一届蓝桥杯国赛 本质上升序列-dp
  7. 1-4 TCP/IP协议族
  8. Oracle中dmp/dmpdp导出,imp/impdp导入
  9. python爬虫可以用acada_python爬虫从入门到放弃(四)之 Requests库的基本使用(转)...
  10. python操作mysql数据库(增、删、改、查)_python对 MySQL 数据库进行增删改查的脚本...
  11. react-native this使用笔记
  12. 阿里云天池 Docker练习场(入门赛) 操作步骤
  13. 编写Spark SQL查询程序
  14. C语言的面向对象设计之 X264,FFMPEG 架构探讨
  15. Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27
  16. java代码性能优化
  17. 一个vue项目同时兼容pc和移动端
  18. html三角形下拉列表,select自定义小三角样式代码(实用总结)
  19. 最短路径-弗洛伊德算法的java实现
  20. AS运行安装失败,真机提示“软件包似乎无效”问题

热门文章

  1. CNTK-神经网络(NN)概念
  2. 什么是端到端加密?企业E2EE的优势正在显现
  3. 计算机毕业设计Java进出货管理系统(源码+系统+mysql数据库+lw文档)
  4. uos桌面专业版下载多架构软件安装包
  5. lisp写标高线_属性块形式的标高标注程序! - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  6. 外卖返利系统|外卖返利系统小程序|外卖系统|返利系统
  7. 图像去雾算法的原理、实现、效果
  8. Intellij IDEA简介
  9. zoomeye爬取前二十页ip+port记录
  10. 判断推理——翻译推理