(25)QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真

news2024/11/27 17:54:42

文章目录

  • 前言
  • 一、MATLAB仿真代码
  • 二、仿真结果


前言

QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真MATLAB代码。


一、MATLAB仿真代码

代码如下:

nSamp = 8;                            % 矩形脉冲的采样点数
nSymbol = 1000000;                    % 传输的符号数
ts = 1/(nSymbol*nSamp);               % samples的时间序列
% t = (0:nSymbol*nSamp-1)*ts;

M = 4;                                % QPSK的调制阶数
k = log2(M);                          % 每个QPSK符号包含的比特数
SNR = -3:5;                           % 传输矩形脉冲成形信号,使用SNR (dB)
graycode = [0 1 3 2];                 % Gray编码映射表

BER_g = zeros(size(SNR));             % 初始化AWGN信道BER向量
SER_g = zeros(size(SNR));             % 初始化AWGN信道SER向量
BER_r = zeros(size(SNR));             % 初始化Rayleigh衰落信道BER向量
SER_r = zeros(size(SNR));             % 初始化Rayleigh衰落信道SER向量

% 生成Rayleigh衰落信道
fd = 10;                              % 最大多普勒频率,单位Hz
sinNum = 10;                          % 正弦波的数量
h = Jakes_Rayleigh(fd, sinNum, ts, nSymbol*nSamp);  % 生成Rayleigh衰落
    
%% QPSK信道仿真
for p=1:length(SNR)
    msg = randi([0 M-1], 1, nSymbol);               % 生成随机符号
    msg_gr = graycode(msg+1);                       % Gray编码映射
    msg_tx = pskmod(msg_gr, M);                     % QPSK调制
    msg_tx = rectpulse(msg_tx, nSamp);              % 矩形脉冲成形(插相同的值)

    % 使用AWGN信道
    msg_rx = awgn(msg_tx, SNR(p), 'measured');      % 未衰落信号通过AWGN信道
    msg_rx_down = intdump(msg_rx, nSamp);           % 未衰落信号匹配滤波相干解调,intdump函数在一个符号周期内对信号msg_rx取平均值
    msg_gr_demod = pskdemod(msg_rx_down, M);        % QPSK解调
    msg_demod = graycode(msg_gr_demod+1);           % Gray编码逆映射
    [~, BER_g(p)] = biterr(msg, msg_demod, k);      % 计算BER
    [~, SER_g(p)] = symerr(msg, msg_demod);         % 计算SER
    
    msg_tx1 = h .* msg_tx;                          % 信号通过Rayleigh衰落信道
    msg_rx1 = awgn(msg_tx1, SNR(p), 'measured');    % 衰落信号通过AWGN信道
    msg_rx_down1 = intdump(msg_rx1,nSamp);          % 衰落信号匹配滤波相干解调
    msg_gr_demod1 = pskdemod(msg_rx_down1,M);       % QPSK解调
    msg_demod1 = graycode(msg_gr_demod1+1);         % Gray编码逆映射
    [~, BER_r(p)] = biterr(msg,msg_demod1,k);       % 计算BER
    [~, SER_r(p)] = symerr(msg, msg_demod1);        % 计算SER
end

%% 画图
figure()
semilogy(SNR,BER_g,'b-o',SNR,SER_g,'b-*',SNR,BER_r,'r-d',SNR,SER_r,'r-x')
grid on
legend('AWGN信道BER','AWGN信道SER', ...
       'Rayleigh+AWGN信道BER','Rayleigh+AWGN信道SER', ...
       'Location','southwest')
title('QPSK在AWGN和Rayleigh衰落信道下的性能')
xlabel('信噪比(dB)')
ylabel('误比特率和误符号率')

二、仿真结果

在这里插入图片描述


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

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

相关文章

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS: 仅使用 1 分钟的训练数据对模型进行微调,以提高语音相似度和真实感。跨语…

QD1-P11 HTML常用标签:图片标签

本节学习 HTML 常用标签&#xff1a;图片标签 img ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p11 ‍ 知识点 1&#xff1a;img 是行内标签 img 是一个行内标签&#xff0c;不会自动换行。 知识点 2&#xff1a;img 标签使用格式 <img src"图片URL" a…

Leetcode 删除链表倒数第 N 个节点

算法思想&#xff1a; 使用了双指针法。下面是详细的算法思想&#xff1a; 1. 引入虚拟头节点&#xff08;dummy node&#xff09; 为了处理链表的一些边界情况&#xff08;比如删除头节点&#xff09;&#xff0c;我们在链表的头部引入了一个虚拟节点 dummy&#xff0c;并让…

点评项目-5-商户查询缓存,从 2s 优化到 12ms

业务需求&#xff1a;当前端发送 shop/id 的请求时&#xff0c;我们需要向前端响应对应 id 的详细数据给前端 直接查询 mysql 效率比较低&#xff0c;我们可以使用 redis 作为中间件进行数据的缓存&#xff0c;先查询 redis &#xff0c;若redis 中未查询到&#xff0c;则在 m…

24.3 基于文件的服务发现模式

本节重点介绍 : 基于文件的服务发现提供了一种配置静态目标的更通用的方法可以摆脱对特定服务发现源的依赖通常的做法是调用内部CMDB的接口获取target数据&#xff0c;打上标签&#xff0c;生成json文件发给prometheus采集 基于文件的服务发现模式 解决的问题 之前手动配置…

视频声音怎么去除?高效的视频声音去除方法

视频声音怎么去除&#xff1f;在多媒体创作与编辑的过程中&#xff0c;我们时常会遇到这样一个需求&#xff1a;为了使用视频素材&#xff0c;需要去除视频里的声音。这一步骤看似简单&#xff0c;实则对于提升作品的整体质量和专业度至关重要。很多时候&#xff0c;我们收集到…

人工智能风险预警以及区块链解决方案探索

​​发表时间&#xff1a;2024年9月26日 一个专家小组在为世界经济论坛撰写的报告中警示道&#xff0c;人工智能&#xff08;以下均简称为AI&#xff09;技术增加了各类组织遭受攻击的风险&#xff0c;并带来了训练数据污染和提示词注入攻击等新威胁。由于训练和测试数据库的庞…

VmWare中安装CenterOs(内网服务器)

VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装&#xff08;1&#xff09;前期准备&#xff08;2&#xff09;正式安装 开始等待&#xff01;&#xff01;&#xff01; 二、软件仓库更换1、root用…

openmmlab实现图像超分辨率重构

文章目录 前言一、图像超分辨率重构简介二、mmmagic实现图像超分 前言 超分辨率重构技术&#xff0c;作为计算机视觉领域的一项重要研究课题&#xff0c;近年来受到了广泛关注。随着科技的飞速发展&#xff0c;人们对图像质量的要求越来越高&#xff0c;尤其是在智能手机、监控…

使用idea和vecode创建vue项目并启动(超详细)

一、idea创建vue项目 创建项目之前先下载好插件 新建项目找到vue生成器 写好名称&#xff0c;找到自己需要存放的地址&#xff0c;node解释器安装方式可以看我上一个博客&#xff0c;vueCLI是选择vue的版本&#xff0c;我们可以使用idea自带的vue版本默认是vue3&#xff0c;创…

【LeetCode】修炼之路-0004-Median of Two Sorted Arrays【python】

题目 Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). Example 1: Input: nums1 [1,3], nums2 [2] Output: 2.00000 Explanation: merged…

java.lang.NoClassDefFoundError: kotlin/Result解决方案

问题 在控制窗口上虽然报错是找不到对应的class&#xff0c;但是呢在我们导入kotlin的后&#xff0c;还是报相同的异常&#xff0c;在网上查找了各种资料&#xff0c;都没有解决方案。 问题分析 在idea2021之后&#xff0c;kotlin都使用远程仓库&#xff08;kotlinx-coeouti…

选择 PDF 编辑器时要考虑什么?如何选择适用于 Windows 10 的 PDF 编辑器

选择 PDF 编辑器时要考虑什么&#xff1f; 随着技术的出现&#xff0c;您在网上浏览时肯定会遇到一些 PDF 软件。但是&#xff0c;选择PDF 编辑器时需要考虑什么&#xff1f;如果您是重度用户并将在您的工作场所使用它&#xff0c;建议您找到专业、使用方便且能够帮助您完成任…

记一次pyc逆向

.py文件   源代码文件。   这是开发者编写的 Python 源代码文件&#xff0c;包含了可执行的 Python 代码。 .pyc文件   字节码文件。   Python 源文件&#xff08;.py&#xff09;在执行时会被编译为字节码&#xff0c;并存储在 __pycache__ 目录下&#xff0c;文件名通…

Linux下编译Eclipse Paho库采用MQTT协议连接MQTT服务器

一、Eclipse Paho介绍 Eclipse Paho 是一个开源项目&#xff0c;由 Eclipse Foundation 主持&#xff0c;提供可靠的开源实现来处理 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议以及其他与物联网 (IoT) 相关的协议。MQTT 是一种轻量级的发布/订阅消…

SQL进阶技巧:Order by 中 NULLS LAST特性使用?

目录 1 需求描述 2 数据准备 3 问题分析 4 小结 如果觉得本文对你有帮助&#xff0c;想进一步学习SQL语言这门艺术的&#xff0c;那么不妨也可以选择去看看我的博客专栏 &#xff0c;部分内容如下&#xff1a; 数字化建设通关指南 专栏 原价99&#xff0c;现在活动价59…

k8s的安装和部署

配置三台主机&#xff0c;分别禁用各个主机上的swap&#xff0c;并配置解析 systemctl mask swap.target swapoff -a vim /etc/fstab配置这三个主机上的主机以及harbor仓库的主机 所有主机设置docker的资源管理模式为system [rootk8s-master ~]# vim /etc/docker/daemon.json…

k8s、prometheus、grafana数据采集和展示的链路流程

k8s集群中&#xff0c;容器级别的数据采集是由cAdvisor程序实现 cAdvisor # Container Advisor 容器顾问 cAdvisor程序是kubelet组件的一部分。 每个节点&#xff0c;包括master节点&#xff0c;都有一个kubelet系统服务&#xff0c; kukelet负责管理pod和容…

PCB在导出gerber文件时过孔盖油设置方法

目前主要使用两个电路设计软件&#xff0c;一个是Altium Designer 15.0版本&#xff0c;一个是cadence17.2版本。在设计完PCB以后需要导出加工文件发给PCB加工厂进行制板打样&#xff0c;其中需要注意的一点是过孔盖油设置。有的制板厂在提交工艺要求时写上过孔盖油即可&#x…

学习Ultralytics(data)(1)

今天我们来学习一下data文件夹下面的代码 首先有个_init_文件&#xff0c;典型的 Python 包中的 __init__.py 文件&#xff0c;用于导出 Ultralytics YOLO 项目中的一些重要类和函数。它将 base.py, build.py, 和 dataset.py 文件中的内容导入并暴露给外部使用。 看看里面有什…