Matlab仿真OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪声信道中的误码率与归一化信噪比的关系

本文为学习所用,严禁转载。

本文参考链接
https://zhuanlan.zhihu.com/p/667382398 QPSK代码及高斯白噪声如何产生
https://ww2.mathworks.cn/help/signal/ref/butter.html 滤波器
https://www.python100.com/html/4LEF79KQK398.html 低通滤波器

本实验使用matlab仿真了五种数字调制方式(OOK、2FSK、2PSK、QPSK、4QAM)在加性高斯白噪声信道中的误码率,与归一化信噪比的关系。其中码元速率为100bps,码元个数为6666,OOK、BPSK载波频率为1KHz,2FSK两个载波频率分别为1KHz,500Hz。OOK、2FSK、2PSK均采用相干解调的方式。下面是各种调制解调方式下的误码率曲线。


clear all; 
close all; 
clc;
M = 6666; % 产生码元数
L = 100; % 每码元复制L次,方便观察
Ts = 0.01; % 每个码元的宽度,即码元的持续时间
Rb = 1/Ts; % 码元速率
dt = Ts/L; % 采样间隔
Fs = 1/dt; % 采样率
TotalT = M*Ts; % 总时间
t = 0:dt:TotalT-dt; % 时间
fc1 = 10*Rb; % 载波频率是码元速率的10倍,即载波的周期是码元周期的1/10
fc2 =  4*Rb; % 2fsk另一个载波的频率
SNR = -10:0.5:10; % 信噪比范围BER_ask2 = zeros(1,length(SNR)); % 2ASK误码率
BER_psk2 = zeros(1,length(SNR)); % BPSK误码率
BER_fsk2 = zeros(1,length(SNR)); % 2FSK误码率
BER_qpsk = zeros(1,length(SNR)); % QPSK误码率
BER_qam4 = zeros(1,length(SNR)); % 4QAM误码率% 产生二进制随机数据data_ask2 = randi([0,1],1,M);%产生0和1的二进制随机数data_fsk2 = randi([0,1],1,M);%产生0和1的二进制随机数data_psk2 = data_ask2*2 -1  ;%借助2ASK的随机数产生-1和1的二进制随机数data_qpsk = randi([0 3],M,1);%qpsk的码元范围是0~3data_qam4 = randi([0 3],M,1);%qam的码元范围是0~3% 产生单极性不归零矩形脉冲波形data_sample_ask2 = repmat(data_ask2,L,1); % 每个码元复制L次data_sample_ask2 = reshape(data_sample_ask2,1,M*L); % 产生单极性不归零矩形脉冲波形data_sample_psk2 = repmat(data_psk2,L,1); % 每个码元复制L次data_sample_psk2 = reshape(data_sample_psk2,1,M*L); % 产生双极性不归零矩形脉冲波形data_sample_fsk2 = repmat(data_fsk2,L,1); % 每个码元复制L次data_sample_fsk2 = reshape(data_sample_fsk2,1,M*L); % 产生单极性不归零矩形脉冲波形% 产生2ASK已调信号
carrier1 = cos(2*pi*fc1*t); % 载波1的正弦波
carrier2 = cos(2*pi*fc2*t); % 载波2的正弦波mod_ask2 = data_sample_ask2.*carrier1; % 2ASK的调制mod_psk2 = data_sample_psk2.*carrier1; % 2PSK的调制mod_fsk2 = data_sample_fsk2.*carrier1 + (1-data_sample_fsk2).*carrier2;% 2FSK的调制mod_qpsk = pskmod(data_qpsk,4,pi/4);% QPSK的调制mod_qam4 = qammod(data_qam4,4);% 4QAM的调制for i = 1:length(SNR)% 通过实时测量已调信号的功率,对已调信号加入高斯白噪声noise_ask2 = awgn (mod_ask2,SNR(i),'measured');noise_psk2 = awgn (mod_psk2,SNR(i),'measured');noise_fsk2 = awgn (mod_fsk2,SNR(i),'measured');noise_qpsk = awgn (mod_qpsk,SNR(i),'measured');noise_qam4 = awgn (mod_qam4,SNR(i),'measured');% 对接受信号进行带通滤波,滤除通频带外的噪声[b1,a1] = butter(4,[0.8*fc1 1.2*fc1]/(Fs/2),'bandpass'); % 设计带通滤波器[b2,a2] = butter(4,[0.8*fc2 1.2*fc2]/(Fs/2),'bandpass'); % 设计带通滤波器r_ask2 = filter(b1,a1,noise_ask2); % 对接收的已调信号进行带通滤波,,滤除带外噪声r_psk2 = filter(b1,a1,noise_psk2); % 对接收的已调信号进行带通滤波,,滤除带外噪声r_fsk2_fc1 =  filter(b1,a1,noise_fsk2); % 对接收的已调信号进行带通滤波,,滤除带外噪声r_fsk2_fc2 =  filter(b2,a2,noise_fsk2); % 对接收的已调信号进行带通滤波,,滤除带外噪声% 对接收信号进行相干解调dem_ask2 = r_ask2.*carrier1;dem_psk2 = r_psk2.*carrier1;dem_fsk2_fc1 = 2*r_fsk2_fc1.*carrier1;dem_fsk2_fc2 = 2*r_fsk2_fc2.*carrier2;% 对解调信号进行低通滤波,滤除载波倍频分量,以获得码元coe_lowpass = fir1(6,2*fc1/Fs); % 低通滤波,将两倍的载波频率分量滤除lowpass_ask2 = filter(coe_lowpass,1,dem_ask2); lowpass_psk2 = filter(coe_lowpass,1,dem_psk2);lowpass_fsk2_fc1 = filter(coe_lowpass,1,dem_fsk2_fc1);lowpass_fsk2_fc2 = filter(coe_lowpass,1,dem_fsk2_fc2); % 对解调信号进行抽样判决sample_ask2 = lowpass_ask2(L/2:L:end); % 码元中点时间抽样sample_psk2 = lowpass_psk2(L/2:L:end); % 码元中点时间抽样sample_fsk2_fc1 = lowpass_fsk2_fc1(L/2:L:end); % 码元中点时间抽样sample_fsk2_fc2 = lowpass_fsk2_fc2(L/2:L:end); % 码元中点时间抽样decision_ask2 = (sample_ask2>0.5);decision_psk2 = (sample_psk2>0);decision_fsk2 = (sample_fsk2_fc1>sample_fsk2_fc2); decision_qpsk = pskdemod(noise_qpsk,4,pi/4);decision_qam4 = qamdemod(noise_qam4,4);% 计算误码个数和误码率error_ask2 = sum(xor(data_ask2,decision_ask2));error_psk2 = sum(xor(data_ask2,decision_psk2)); %这里因为PSK是ASK的随机序列产生的,所以和ASK比较error_fsk2 = sum(xor(data_fsk2,decision_fsk2)); error_qpsk = sum(xor(data_qpsk,decision_qpsk)); error_qam4 = sum(xor(data_qam4,decision_qam4)); BER_ask2(i) = error_ask2/M; % 2ASK误码率BER_psk2(i) = error_psk2/M; % 2PSK误码率BER_fsk2(i) = error_fsk2/M; % 2FSK误码率BER_qpsk(i) = error_qpsk/M; % QPSK误码率BER_qam4(i) = error_qam4/M; % 4QAM误码率
end
% 计算理论误码率
% Pe = zeros(1,length(SNR));
% for i = 1:length(SNR)
% r = 10^(SNR(i)/10);
% Pe(i) = qfunc(sqrt(r)); % 2ASK理论误码率公式
% end
% 绘制误码率曲线% semilogy横轴是线性,纵轴10倍一格
semilogy(SNR,BER_ask2,'b-d','LineWidth',2); % 2ASK仿真曲线
hold on;
semilogy(SNR,BER_psk2,'y-h','LineWidth',2); % BPSK仿真曲线
hold on;
semilogy(SNR,BER_fsk2,'g-o','LineWidth',2); % 2FSK仿真曲线
hold on;
semilogy(SNR,BER_qpsk,'k-*','LineWidth',2); % QPSK仿真曲线
hold on;
semilogy(SNR,BER_qam4,'r-s','LineWidth',2); % 4QAM仿真曲线
hold on;
% semilogy(SNR,Pe,'m-+'); % 理论曲线
% grid on;xlabel('归一化信噪比Eb/N0 (dB)');
ylabel('误码率BER');
legend('OOK','BPSK','2FSK','QPSK','4QAM');
title('误码率曲线');

经过上述仿真得到误码率曲线如下。

在这里插入图片描述

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

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

相关文章

【linux提权】利用setuid进行简单提权

首先先来了解一下setuid漏洞: SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只…

「微服务模式」七种微服务反模式

什么是微服务 流行语经常为进化的概念提供背景,并且需要一个良好的“标签”来促进对话。微服务是一个新的“标签”,它定义了我个人一直在发现和使用的领域。文章和会议描述了一些事情,我慢慢意识到,过去几年我一直在发展自己的个人…

2023航天推进理论基础考试划重点(W老师)-液体火箭发动机1

适用于期末周求生欲满满的西北工业大学学生。 1、液体火箭发动机的基本组成及功能是什么? 推力室组件、推进剂供应系统、阀门与调节器、发动机总装元件等组成。 2、液体火箭发动机的分类和应用是什么?3、液体火箭发动机系统、分系统的概念是什么&…

交友系统设计:哪种地理空间邻近算法更快?

小熊学Java:https://javaxiaobear.cn 交友与婚恋是人们最基本的需求之一。随着互联网时代的不断发展,移动社交软件已经成为了人们生活中必不可少的一部分。然而,熟人社交并不能完全满足年轻人的社交与情感需求,于是陌生人交友平台…

vue3(六)-基础入门之自定义组件与插槽、ref通信

一、全局组件 html: <div id"app"><mytemplace></mytemplace> </div>javascript: <script>const { createApp } Vueconst app createApp({})app.component(mytemplace, {template: <div><button>返回</button>…

RPC 实战与原理

文章目录 什么是 RPC&#xff1f;RPC 有什么作用&#xff1f;RPC 步骤为什么需要序列化&#xff1f;零拷贝什么是零拷贝&#xff1f;为什么需要零拷贝&#xff1f;如何实现零拷贝&#xff1f;Netty 的零拷贝有何不同&#xff1f; 动态代理实现HTTP/2 特性为什么需要服务发现&am…

7. 结构型模式 - 代理模式

亦称&#xff1a; Proxy 意图 代理模式是一种结构型设计模式&#xff0c; 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问&#xff0c; 并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f; 举个例子&#xff…

Python - 深夜数据结构与算法之 Graph

目录 一.引言 二.图的简介 1.Graph 图 2.Undirected graph 无向图 3.Directed Graph 有向图 4.DFS / BFS 遍历 三.经典算法实战 1.Num-Islands [200] 2.Land-Perimeter [463] 3.Largest-Island [827] 四.总结 一.引言 Graph 无论是应用还是算法题目在日常生活中比较…

方舟开发框架(ArkUI)概述

目录 1、基本概念 2、两种开发范式 3、开发框架的特性 4、UI开发&#xff08;ArkTS声明式开发范式&#xff09;概述 4.1、特点 4.2、整体架构 4.3、开发流程 方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包…

代驾系统开发:驶向未来的智能交通服务

随着科技的迅速发展&#xff0c;代驾系统的开发成为改善出行体验和提升交通服务智能化的重要一环。本文将聚焦于代驾系统开发的技术创新&#xff0c;为读者呈现其中涉及的一些令人振奋的技术代码。 1. 区块链技术的运用&#xff1a; 区块链技术被引入代驾系统&#xff0c;可…

智能优化算法应用:基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定…

轻量Http客户端工具VSCode和IDEA

文章目录 前言Visual Studio Code 的插件 REST Client编写第一个案例进阶&#xff0c;设置变量进阶&#xff0c;设置Token IntelliJ IDEA 的 HTTP请求构建http脚本HTTP的环境配置结果值暂存 前言 作为一个WEB工程师&#xff0c;在日常的使用过程中&#xff0c;HTTP请求是必不可…

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(4)构建g2o的边

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

在MacOS上Qt配置OpenCV并进行测试

目录 一.Qt环境准备 二.在Qt项目中加载Opencv库并编写代码测试 1.使用Opencv加载图片 &#xff08;1&#xff09;在Qt中创建一个新项目 &#xff08;2&#xff09;在.pro文件中链接OpenCV库 &#xff08;3&#xff09;添加新资源文件 &#xff08;4&#xff09;在mainw…

Vue 3 Composition API:让组件开发更高效、灵活(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

图解二叉树的Morris(莫里斯)遍历

二叉树的Morris(莫里斯)遍历 本文参考链接&#xff1a;https://leetcode.cn/problems/binary-tree-preorder-traversal/submissions/490846864/ 文章目录 二叉树的Morris(莫里斯)遍历模板代码前序遍历中序遍历后序遍历 Morris 遍历使用二叉树节点中大量指向 null 的指针&…

编程规范:长函数的思考

在工作&#xff0c;我们应该都不想看到非常的长函数。对于一个运行5年左右的项目&#xff0c;极有可能出现这种情况。由于长函数的长、if/else嵌套&#xff0c;导致代码的可读性非常差&#xff0c;这对于项目的维护和开发带来了极大的困难。所以我们应该避免写长函数&#xff0…

人工智能_机器学习070_SVM支持向量机_软间隔及优化_硬间隔_衡量间隔软度_引入松弛变量_理解隔离参数---人工智能工作笔记0110

我们继续说,之前说的C是什么意思? 我们在这个软间隔优化中就可以引出C 可以看到之前我们讨论的问题,都是基于样本点的,完全的线性可分的问题,我们称为硬间隔 可以看到这种,一分就可以,分开,简单分割就可以分开的数据,我们称之为硬间隔 但是可以看到上面这种情况,无论怎么分,都…

第1课 配置FFmpeg+OpenCV开发环境

本教程所对应的SDK下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88657539 本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88657528 一、配置开发环境 1.下载FFmpegOpenCV开发所用的SDK压缩包&#xff0…

分享70个Java源码总有一个是你想要的

分享70个Java源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1s8ZVYHb5B1GgXMlpG-6-Iw?pwd6666 提取码&#xff1a;6666 项目名称 admin、cms、console 等多…