4qam、16qam、64qam、256qam理论仿真曲线

本博文给出了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立时间、保持时间与亚稳态

文章目录一、建立时间与保持时间二、亚稳态现象总结一、建立时间与保持时间 建立时间&#xff08;set up time&#xff09;是指在触发器的时钟信号上升沿到来以前&#xff0c;数据从不稳定到稳定所需要的时间&#xff0c;一般用TsuT_{su}Tsu​表示。 保持时间是指在触发器的时…

java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。

java ee空指针我们花了不到三年的时间才推出了下一个Java EE版本 。 今年4月16日&#xff0c; JCP EC对JSR 342进行了投票并获得批准。 这是一个成功的故事&#xff0c;因为在去年八月下旬的最后时刻撤消了拥有云就绪平台的最初想法。 作为EG的成员&#xff0c;撰写即将发布的功…

Java可能使用UTF-8作为其默认字符集

由于基于Java的应用程序通常用于各种各样的操作系统和环境中&#xff0c;因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖&#xff1a;默认语言环境&#xff0c;默认字符集和默认时区》 &#xff1b; 注释JDK默认数据 …

2020-08-07 光纤通信第二章知识点整理

目录 2.1 半导体激光器 2 2.1.1 激光原理的基础知识 2 2.1.2 激光激射条件 3 2.1.3 结构理论 4 2.1.4 典型分类 6 2.1.5 模式概念 7 2&#xff0e;1.6 基本性质 8 2.2 半导体发光二极管 10 2.2.1 工作原理 10 2.2.2 结构和分类 10 2.2.3 主要性质 10 2.3 光源的直接调制 11 2.3…

静态分析的教育方面

加入我们项目的新程序员经常会问我们是否具有自动格式化工具&#xff0c;以使Java代码看起来完全符合Qulice的期望。 &#xff08;Quili是我们使用的静态分析器。&#xff09;我总是回答说&#xff0c;拥有这样一个自动代码抛光器只会有害&#xff0c;不会帮助项目及其成员改进…

2020-08-14 光纤通信第三章知识点整理

目录 3.1 光接收机 2 3.1.1 光接收机的分类与性能指标 2 3.1.2 直接检测光接收机的构成及功能 2 3.2 光电检测器 3 3.2.1 PN结的光电效应 4 3.2.2 PIN光电二极管 4 3.2.3 雪崩光电二极管&#xff08;APD&#xff09; 6 3.3 放大电路及其噪声 7 3.3.1 噪声的数学处理 8 3.3.2 放…

2020-08-21 光纤通信第四章知识点整理

第四章 光纤通信系统 目录 4.1 模拟光纤通信 2 4.2 数字光纤通信系统和总体设计 3 4.2.1 数字光纤通信系统基本组成 3 4.2.2 数字光纤通信系统总体设计 4 4.3 数字光纤传输系统的性能指标 7 4.3.1 误码性能 7 4.3.2 抖动、漂移性能 8 4.3.3 可用性 8 4.4 光纤放大器及其在光纤通…

2020-08-24 光纤通信第五章知识点整理

第五章 无源光器件和WDM技术 目录 5.1 无源器件的几个常用性能参数 1 5.2 光纤和波导型无源光器件 2 5.2.1 光连接器和光耦合器 2 5.2.2 偏振控制器 3 5.2.3 光纤布拉格光栅 4 5.2.4 Mach-Zahnder滤波器 5 5.2.5 非线性环路镜 5 5.3 光学无源器件 6 5.3.1 偏振分束器 6 5.3.2 光…

使用Java 9向Javadoc搜索添加术语

有一个相对较旧的网页&#xff0c;称为“ Proposed Javadoc Tags ”&#xff0c;最初似乎是与Javadoc 1.2一起编写的&#xff0c;其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category &#xff0c; example &#xff0c; tutorial &#xff0…

Java语言学习概述

md:创建新的文件夹 上面这行作用&#xff1a;将name&#xff1a;Tom,age12写入到文件1.doc中&#xff0c;也就是说先建个文档&#xff0c;再把这句话写进去。 del *.txt 作用&#xff1a;删除以txt结尾的所有文件 rd team2 作用&#xff1a;删除team2文件夹&#xff08;且这…

小狐狸ChatGPT付费创作系统 前端对话提示undefined index:temperature解决方法

很多会员使用着ChatGPT付费创作系统&#xff0c;特别是新安装系统后前端输入对话时提示错误undefined index:temperature&#xff0c;检查了反代、检查了KEY均正常&#xff0c;这问题主要是因为后台设置里新用户免费送对话次数为空&#xff0c;没设置赠送次数原因&#xff0c;导…

第二章 Java基本语法(一)

本文主要内容&#xff1a; 关键字、标识符、变量、类型转换、进制转换、运算符 一、关键字 二、标识符 比如&#xff1a;类名&#xff0c;变量名&#xff0c;方法名&#xff0c;接口名&#xff0c;包名。。。 小技巧&#xff1a;直接在我的电脑输入cmd&#xff0c;就可以打开…

第二章 Java基本语法(二)

本文主要内容&#xff1a; 运算符、if-else、switch-case 一、位运算符 运算符之五&#xff1a;位运算符 每左移一位&#xff0c;相当于是在原来的基础上乘2. int i 21; System.out.println(“i<<2:”(i<<2)); 输出&#xff1a;i<<2:84 结论&#xff1a; …

第二章 Java基本语法(三)

本文主要内容&#xff1a; 循环结构、特殊关键字break和continue的使用&#xff0c;质数问题的优化 循环结构&#xff1a;Boolean类型 程序编写&#xff1a; 从键盘输入两个正整数m和n&#xff0c;找出他们的最大公约数和最小公倍数。 import java.util.Scanner; public clas…

Matlab入门(一)

MATLAB学习笔记 本系列主要内容来源&#xff1a;matlab官方付费课程的学习笔记 截图较多&#xff0c;之后更新会尽量增加文字说明 matlab简单常用的命令 数组 round:四舍五入函数。

MATLAB入门(二)

可以使用 plot 函数在一张图上绘制两个相同长度的向量。 plot(x,y)plot 函数接受一个附加参数。使用该参数&#xff0c;您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。 plot(x,y,"r--o")以上命令将会绘制一条红色 虚线 (–)&#x…

Spring @Lazy批注用例

Spring框架几乎可以毫不费力地为您解决许多常见的编程问题&#xff0c;但是它的某些功能比其他功能鲜为人知。 在本文中&#xff0c;我们将仔细研究属于该组的Lazy批注。 阅读了几个示例之后&#xff0c;您应该能够将注释应用于日常开发任务。 1. 懒豆初始化 Spring的默认行为…

MATLAB入门(三)

求平均值 两种方法生成列向量 读取文件 将数据保存到小数点后两位 result round(M,2);将矩阵中的每个元素都三次方 x3 x.^3将矩阵中的数据按照升序排序 sort(data)创建一个行变量计算每一个列变量的平均值 avg mean(data)diff函数 Y diff(X) 计算沿大小不等于 1…

Java学习 第三章 数组(一)一维数组

第三章 数组 3-1 数组的概述 数组&#xff1a;多个相同类型数据按一定的顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理。 数组相关概念&#xff1a; 数组名、下标&#xff08;索引、角标&#xff09;、元素、数组的长度 数…

几个有用的word小技巧,保准提升效率~

这几天改报告改到头秃。年底了&#xff0c;实验室各种项目在结项&#xff0c;作为一名研一新生&#xff0c;理所应当地承担起了体力活的工作。主要负责项目报告的研究背景调研、报告汇总、格式调整等。 格式调整&#xff0c;看起来非常简单的一项工作&#xff0c;却是最费时费…