本博文给出了4qam、16qam、64qam、256qam理论仿真曲线,画出了EbN0 vs BER的曲线图,可以作为大家学习的一个参考。

仿真结果:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Theoretical ber curves of different orders of QAM modulation
% Author: 苏大axing
% Version: 1.2
% Date: 2022/4/3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear all;
clc%% Parameters
EbN0_dB                         = -5:20;
bits_per_symbol_for_4qam        = 2;
bits_per_symbol_for_16qam       = 4;
bits_per_symbol_for_64qam       = 6;
bits_per_symbol_for_256qam      = 8;
Nsym                            = 2^18;
SNR_for_4qam                    = EbN0_dB+10*log10(bits_per_symbol_for_4qam);
SNR_for_16qam                   = EbN0_dB+10*log10(bits_per_symbol_for_16qam);
SNR_for_64qam                   = EbN0_dB+10*log10(bits_per_symbol_for_64qam);
SNR_for_256qam                  = EbN0_dB+10*log10(bits_per_symbol_for_256qam);disp('           ');disp('           ');
disp('***********************************');
disp('generating binary bits');
disp('***********************************');
% Generating seeds
randn('state',12013)
rand('state',3693)
binary_bits_forqpsk             = randsrc(1,Nsym*bits_per_symbol_for_4qam,[0 1]);
binary_bits_for16qam            = randsrc(1,Nsym*bits_per_symbol_for_16qam,[0 1]);
binary_bits_for64qam            = randsrc(1,Nsym*bits_per_symbol_for_64qam,[0 1]);
binary_bits_for256qam           = randsrc(1,Nsym*bits_per_symbol_for_256qam,[0 1]);% generating MQAM signals
disp('           ');disp('           ');
disp('***********************************');
disp('generating MQAM signal');
disp('***********************************');%%%%%%%%%% 4QAM
paraller_for_4qam               = reshape(binary_bits_forqpsk,bits_per_symbol_for_4qam,Nsym);
k_4qam                          = 2^bits_per_symbol_for_4qam;
[Output]                        = BitsToInteger(paraller_for_4qam);
qam4_signal                     = qammod(Output,k_4qam,'gray','UnitAveragePower', true);% figure(1)
% subplot(2,2,1);
% plot(qam4_signal,'.');
% title('4QAM signal');%%%%%%%%%% 16QAM
paraller_for_16qam              = reshape(binary_bits_for16qam,bits_per_symbol_for_16qam,Nsym);
k_16qam                         = 2^bits_per_symbol_for_16qam;
[Output]                        = BitsToInteger(paraller_for_16qam);
qam16_signal                    = qammod(Output,k_16qam,'gray','UnitAveragePower', true);% figure(1)
% subplot(2,2,2);
% plot(qam16_signal,'.');
% title('16QAM signal');%%%%%%%%%% 64QAM
paraller_for_64qam              = reshape(binary_bits_for64qam,bits_per_symbol_for_64qam,Nsym);
k_64qam                         = 2^bits_per_symbol_for_64qam;
[Output]                        = BitsToInteger(paraller_for_64qam);
qam64_signal                    = qammod(Output,k_64qam,'gray','UnitAveragePower', true);% figure(1)
% subplot(2,2,3);
% plot(qam64_signal,'.');
% title('64QAM signal');%%%%%%%%%% 256QAM
paraller_for_256qam             = reshape(binary_bits_for256qam,bits_per_symbol_for_256qam,Nsym);
k_256qam                        = 2^bits_per_symbol_for_256qam;
[Output]                        = BitsToInteger(paraller_for_256qam);
qam256_signal                   = qammod(Output,k_256qam,'gray','UnitAveragePower', true);% figure(1)
% subplot(2,2,4);
% plot(qam256_signal,'.');
% title('256QAM signal');for i=1:length(EbN0_dB)
received_qam4                   = awgn(qam4_signal,SNR_for_4qam(i),'measured');
received_qam16                  = awgn(qam16_signal,SNR_for_16qam(i),'measured');
received_qam64                  = awgn(qam64_signal,SNR_for_64qam(i),'measured');
received_qam256                 = awgn(qam256_signal,SNR_for_256qam(i),'measured');%% demodulation
%%%%%%%%%% 4QAM
demod_signal_for_4qam           = qamdemod(received_qam4,k_4qam,'gray','UnitAveragePower', true);
[Output]                        = IntegerToBits(demod_signal_for_4qam,bits_per_symbol_for_4qam);
received_Bits_for_4qam          = reshape(Output,1,Nsym*bits_per_symbol_for_4qam);
ErrorNumber_for_4qam            = size(find(received_Bits_for_4qam-binary_bits_forqpsk),2);
BER_for_4qam(i)                 = ErrorNumber_for_4qam/(Nsym*bits_per_symbol_for_4qam)%%%%%%%%%% 16QAM
demod_signal_for_16qam          = qamdemod(received_qam16,k_16qam,'gray','UnitAveragePower', true);
[Output]                        = IntegerToBits(demod_signal_for_16qam,bits_per_symbol_for_16qam);
received_Bits_for_16qam         = reshape(Output,1,Nsym*bits_per_symbol_for_16qam);
ErrorNumber_for_16qam           = size(find(received_Bits_for_16qam-binary_bits_for16qam),2);
BER_for_16qam(i)                = ErrorNumber_for_16qam/(Nsym*bits_per_symbol_for_16qam)%%%%%%%%%% 64QAM
demod_signal_for_64qam          = qamdemod(received_qam64,k_64qam,'gray','UnitAveragePower', true);
[Output]                        = IntegerToBits(demod_signal_for_64qam,bits_per_symbol_for_64qam);
received_Bits_for_64qam         = reshape(Output,1,Nsym*bits_per_symbol_for_64qam);
ErrorNumber_for_64qam           = size(find(received_Bits_for_64qam-binary_bits_for64qam),2);
BER_for_64qam(i)                = ErrorNumber_for_64qam/(Nsym*bits_per_symbol_for_64qam)%%%%%%%%%% 256QAM
demod_signal_for_256qam         = qamdemod(received_qam256,k_256qam,'gray','UnitAveragePower', true);
[Output]                        = IntegerToBits(demod_signal_for_256qam,bits_per_symbol_for_256qam);
received_Bits_for_256qam        = reshape(Output,1,Nsym*bits_per_symbol_for_256qam);
ErrorNumber_for_256qam          = size(find(received_Bits_for_256qam-binary_bits_for256qam),2);
BER_for_256qam(i)               = ErrorNumber_for_256qam/(Nsym*bits_per_symbol_for_256qam)
endfigure(2)
semilogy(EbN0_dB,BER_for_4qam,'g-<','MarkerFaceColor','g','LineWidth',1);hold on;
semilogy(EbN0_dB,BER_for_16qam,'m->','MarkerFaceColor','m','LineWidth',1);hold on;
semilogy(EbN0_dB,BER_for_64qam,'b-^','MarkerFaceColor','b','LineWidth',1);hold on;
semilogy(EbN0_dB,BER_for_256qam,'r-<','MarkerFaceColor','r','LineWidth',1);hold on;
axis([-5 20 1e-5 1]);
plot([-5 20],[3.8e-3,3.8e-3],'r','LineWidth',1);hold on;
grid on;
xlabel('E_{b}N_{0}(dB)');ylabel('BER');
legend('4qam','16qam','64qam ','256qam',...'FEC(3.8x10^-^3)','Location','SouthWest');function [Output] = BitsToInteger(input)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Convert Bits to Integer
% Author: Zhongxing Tian
% Version: 1.1
% Date: 2022/2/18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[M,N] = size(input);Value = zeros(1,N);for i = 2:MValue = Value+input(i,:).*2^(i-1); % 阶数从上到下(第一行最小
endValue = Value+input(1,:);Output = Value;
endfunction [Output] = IntegerToBits(input,bits_per_symbol)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Convert Integer to Bits
% Author: Zhongxing Tian
% Version: 1.1
% Date: 2022/2/18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[~,N] = size(input);Value = zeros(bits_per_symbol,N);for i = 1:Nk = 2^bits_per_symbol;for j = 1:bits_per_symbolif input(1,i)<k/2Value(bits_per_symbol-j+1,i) = 0;% 阶数从上到下(第一行最小)k = k-2^(bits_per_symbol-j);                elseValue(bits_per_symbol-j+1,i) = 1;k = k+2^(bits_per_symbol-j);endend
endOutput = Value;
end

4qam、16qam、64qam、256qam理论仿真曲线相关推荐

  1. 自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在无线通信系统中,由于多径效应及码间干扰的存在,信号误码率会升高.均衡技术是一种对抗码间干扰的重要技 ...

  2. 基于MATLAB的自适应调制解调通信系统的误码率仿真,对比BPSK,QPSK,16QAM,64QAM

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 .......... ...

  3. BPSK,QPSK,2FSK,16QAM,64QAM信号在高斯信道与瑞利信道下的误码率性能仿真

    BPSK,QPSK,2FSK,16QAM,64QAM信号在高斯信道与瑞利信道下的误码率性能仿真_南大小王-CSDN博客 16QAM调制解调仿真(matlab,详细介绍仿真方案的设计.结果及结论.完整代 ...

  4. 基于ADS的c语言程序设计实验,实验一:基于ADS软件传输线理论仿真设计与分析.docx...

    龙 lerrnl'' 龙 lerrnl'' $ Num=l 1Z=50 Ohm h|」M -- TL1 Z=50 0.0hm E=50 F=5GHz ggj I SrPARAM ETERS . | Z ...

  5. matlab两个曲线的名称怎么显示出来的,求MATLAB的高手,怎么把两张仿真曲线合并显示在一张图上?...

    求MATLAB的高手,怎么把两张仿真曲线合并显示在一张图上? 关注:194  答案:5  手机版 解决时间 2021-02-10 14:48 提问者终究是陌生了 2021-02-09 16:38 程序 ...

  6. 凸轮设计c语言程序,凸轮理论轮廓曲线设计c语言程序.doc

    /************习题4-1凸轮轮廓曲线绘制程序**********/ #include #include #define PI 3.1415926 void main() { double ...

  7. R语言使用econocharts包创建微观经济或宏观经济图:需求曲线、供给曲线、供需曲线、无差异曲线、Laffer曲线、前景理论价值函数曲线、税收图、生产可能性边界线、劳动力供给曲线、计算曲线交叉点等

    R语言使用econocharts包创建微观经济或宏观经济图:需求曲线.供给曲线.供需曲线.无差异曲线.Laffer曲线.前景理论价值函数曲线.税收图.生产可能性边界线.劳动力供给曲线.计算曲线交叉点等 ...

  8. c语言凸轮轮廓曲线设计程序,凸轮理论轮廓曲线设计c语言程序.doc

    凸轮理论轮廓曲线设计c语言程序.doc /习题 4-1 凸轮轮廓曲线绘制程序/includeincludedefine PI 3.1415926void maindouble e10.0,ro40.0 ...

  9. 4QAM、16QAM 调制与解调仿真电路,观察并分析QAM星座图和误码率曲线【matlab代码】

    源码: https://download.csdn.net/download/qq_44394952/86236776 要求 完成两种调制方式的调制解调:4QAM.16QAM (1)画出系统框图,搞清 ...

最新文章

  1. 超图 iServer服务体系学习
  2. Windows内存管理机密+揭穿内存优化工具的骗局
  3. Java提高学习之Object(3)
  4. linux创建自定义组件qt,关于QT自定义控件
  5. 从源码说说dispatchTouchEvent与onTouchEvent的关系以及OnTouchListener的用法
  6. mysql 查看运行级别_运行级别及进程
  7. Python学习入门7:python学习从基础到高手,再到就业
  8. 微服务升级_SpringCloud Alibaba工作笔记0002---理解反应式编程中的背压(Backpressure)机_流的逆向压力
  9. 立于山巅!他,凭什么抗住万亿级流量冲击!
  10. java访问 mysql返回空格_JAVA连接数据库返回输出信息
  11. movielens数据集简述
  12. android 键盘快捷键大全,[键盘快捷键使用大全]AndroidStudio 快捷键使用总结大全.doc...
  13. 阿拉伯数字翻译成中文的大写数字
  14. 远程连接的电脑突然白屏了怎么办?
  15. 群晖服务器无限重启,监控群晖服务状态并自动重启 | 群晖服务控制
  16. iVMS-4200 Vs区别_【5G科普】5G知识知多少?#之5G与4G的区别
  17. temp = (temp 0x55555555) + ((temp 0xaaaaaaaa) 1)
  18. python输入长和宽输出面积_请用C++编写 从键盘上输入长方形的长和宽,输出周长和面积...
  19. 光耦w314的各引脚图_光电耦合器的管脚图及工作原理
  20. 独角兽项目 6 - 合并冲突

热门文章

  1. JavaFX移动应用程序最佳实践,第2部分
  2. 如何理解文件存取单位 -- 块(block)
  3. JSP的隐含对象/隐藏对象/内置对象介绍
  4. linux安装meld rpm,Linux meld安装
  5. keras添加正则化全连接_TensorFlow keras卷积神经网络 添加L2正则化
  6. LeetCode 344 反转字符串
  7. 怎么取消苹果手机自动续费_手机腾讯视频的vip怎么取消自动续费?
  8. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
  9. azure mysql sql,UiPath连接Azure Sql Server数据库
  10. e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践