OFDM信号PARP的CCDF图

文章目录

    • 引言
    • 代码
    • 代码疑难解答
    • 参考文献

引言

本书主要参考了文献1,但实际上该书中符号和表述的错误非常多(只能说棒子是这样的);同时因为发表时间的关系,很多MATLAB代码进行了更新,原书提供的代码已经无法正常运行。我将修补后的代码给出,并且给出了疑难问题的理解。

代码

% plot_CCDF.m
% Plot the CCDF curves of Fig. 7.3.clear all; clc; clf
N_OFDM = 2.^[6:10];  %N_OFDM代表OFDM中做IFFT点的数量
b=2; M=2^b; 
Nblk = 1e4; % Nblk Number of Blocks 
PARP_dB = [4:0.1:10]; 
N_PARP_dB = length(PARP_dB);CCDF_formula=inline('1-((1-exp(-z.^2/(2*s2))).^N)','N','s2','z'); % Eq.(7.9) 构造一个内联函数对象for n = 1:length(N_OFDM)    N=N_OFDM(n); x = zeros(Nblk,N); sqN=sqrt(N);for k = 1:NblkX = mapper(b,N); % 生成 N 个 2^b QAM modulated symbols x(k,:) = ifft(X,N)*sqN; % 确保IFFT变换后能量一致CFx(k) = PAPR(x(k,:)); % 计算信号的PAPRend% 通过锐利信道特性计算平均的σ^2的值sigma2 = mean(mean(abs(x)))^2/(pi/2);% 计算CCDF的理论值  the maximum of Zn is equivalent to the crest factor, sqrt(PAPR)CCDF_theoretical=CCDF_formula(N,sigma2,10.^(PARP_dB/20)); for i = 1:N_PARP_dBCCDF_simulated(i) = sum(CFx>PARP_dB(i))/Nblk;end% 绘制对数图semilogy(PARP_dB,CCDF_theoretical,'k-');  hold on; grid on;semilogy(PARP_dB(1:3:end),CCDF_simulated(1:3:end),'k:*');
endaxis([PARP_dB([1 end]) 1e-2 1]);  % 确认坐标轴范围
title('OFDM system with N-point FFT');
xlabel('PAPR0[dB]'); ylabel('CCDF=Probability(PAPR>PAPR0)'); 
legend('Theoretical','Simulated');
function [modulated_symbols,Mod] = mapper(b,N)
% If N is given, it generates a block of N random 2^b-PSK/QAM modulated symbols.
% Otherwise, it generates a block of 2^b-PSK/QAM modulated symbols for [0:2^b-1].M=2^b; % Modulation order or Alphabet (Symbol) size% 生成一个相移键控 PSK 调制器对象
if b==1, Mod='BPSK'; A=1; mod_object=comm.PSKModulator('ModulationOrder', M);
elseif b==2, Mod='QPSK';  A=1;%QPSK 调制的信号星座图是一个单位圆的 4 个点,表示 0 度、90 度、180 度和 270 度的相位mod_object=comm.PSKModulator('ModulationOrder', M,'PhaseOffset',pi/4);
else% 生成一个 QAM 调制器对象Mod=[num2str(2^b) 'QAM']; Es=1; A=sqrt(3/2/(M-1)*Es);mod_object=comm.RectangularQAMModulator('ModulationOrder', M, 'SymbolMapping', 'Gray');
end% 虽然这里是用了A来做功率归一化,实际上调制器函数本身就自带有归一化功能
if nargin==2 % generates a block of N random 2^b-PSK/QAM modulated symbolsmodulated_symbols = A*mod_object(randi([0 M-1], N, 1));
elsemodulated_symbols = A*mod_object([0:M-1]');
end
function [PAPR_dB, AvgP_dB, PeakP_dB] = PAPR(x)
% PAPR_dB  : PAPR[dB]
% AvgP_dB  : Average power[dB]
% PeakP_dB : Maximum power[dB]%MIMO-OFDM Wireless Communications with MATLAB㈢   Yong Soo Cho, Jaekwon Kim, Won Young Yang and Chung G. Kang
%2010 John Wiley & Sons (Asia) Pte LtdNx=length(x); xI=real(x); xQ=imag(x);
Power = xI.*xI + xQ.*xQ;
PeakP = max(Power); PeakP_dB = 10*log10(PeakP);
AvgP = sum(Power)/Nx; AvgP_dB = 10*log10(AvgP);
PAPR_dB = 10*log10(PeakP/AvgP);

代码疑难解答

  1. 为什么要使用 x(k,:) = ifft(X,N)*sqN; 这个IFFT公式

这是为了是变换前后时域和频率域的能量保持一致。

  1. σ 2 \sigma^2 σ2 这个式子是如何计算,这个计算是必须的吗?

根据锐利分布的公式,平均值 E ( X ) = σ π / 2 E(X)=\sigma\sqrt{\pi/2} E(X)=σπ/2 。详细推导可以参考概率分布的教科书。但实际上, σ 2 \sigma^2 σ2 根据默认的设置应该是 σ 2 = 0.5 \sigma^2=0.5 σ2=0.5。因为我们对输入功率在mapper 函数中就进行了归一化处理。sigma2 = mean(mean(abs(x)))^2/(pi/2); 这一行代码实际上是没有必要的。下图是设置 σ 2 = 0.5 \sigma^2=0.5 σ2=0.5 后仿真结果图。
在这里插入图片描述

  1. 为什么横坐标要改成PARP0[dB],而不是原本的z[dB]

实际上,这主要取决于代码。原书本中的图是明显错误的。

参考文献

  1. MIMO-OFDM无线通信技术及MATLAB实现
  2. 初识OFDM(八):OFDM中的PAPR计算和通频带仿真

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

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

相关文章

Flutter中自定义气泡框效果的实现

在用户界面的设计中,气泡框(Bubble)是一种非常有效的视觉工具,它可以用来突出显示信息或提示用户。气泡框广泛应用于聊天应用、通知提示等场景。在 Flutter 中,虽然有很多现成的气泡框组件,但如果你想要更多…

使用豆包MarsCode 编写 Node.js 全栈应用开发实践

以下是「豆包MarsCode 体验官」优秀文章,作者狼叔。 欢迎更多用户使用豆包MarsCode 并分享您的产品使用心得及反馈、创意项目开发等,【有奖征集|人人都是豆包MarsCode 测评官!】活动正在火热进行中,欢迎大家投稿参加&a…

跨部门SOP与统一知识库:打破信息孤岛,促进团队协作

引言: 在当今这个快速变化且高度竞争的商业环境中,企业面临着前所未有的挑战,其中之一便是如何高效地跨越部门界限,实现无缝协作。传统的组织结构往往导致信息孤岛的出现,不同部门间流程不一致、信息不共享&#xff0…

【车载开发系列】ParaSoft单元测试环境配置(一)

【车载开发系列】ParaSoft单元测试环境配置(一) ParaSoft单元测试环境配置 【车载开发系列】ParaSoft单元测试环境配置(一)一. 什么是bdf文件二. bdf文件构成三. 新规做成bdf文件四. 导入bdf文件创建测试工程五. 获取编译器信息六. 新增自定义编译器Step1:打开向导Step2:…

JAVA一键下单新鲜到家同城生鲜物流系统小程序源码

一键下单,新鲜到家 —— 探索同城生鲜物流系统的魅力 🚚 一键下单,轻松享受便捷生活 在这个快节奏的时代,谁不想在忙碌之余还能轻松享受美食呢?😋 "一键下单新鲜到家"的同城生鲜物流系统&#…

HTML5中IndexedDB前端本地数据库

一、indexedDB为何替代了Web SQL Database? 跟小朋友的教育从来没有什么“赢在起跑线”这种说法一样,在前端领域,也不是哪来先出来哪个就在日后引领风骚的。 HTML5 indexedDB和Web SQL Database都是本地数据库数据存储,Web SQL Da…

关于axios同步获取数据的问题

axios同步获取数据 Axios介绍问题代码修改 总结 Axios介绍 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 X…

Spring Boot 集成 Redisson 实现消息队列

包含组件内容 RedisQueue:消息队列监听标识RedisQueueInit:Redis队列监听器RedisQueueListener:Redis消息队列监听实现RedisQueueService:Redis消息队列服务工具 代码实现 RedisQueue import java.lang.annotation.ElementTyp…

第2章 方法

本书作者起初以为仅靠研究命令行工具和指标就能提高性能。他认为这样不对。他从头到尾读了一遍手册,看懂了缺页故障、上下文切换和其他各种系统指标的定义,但不知道如何处理它们:如何从发现信号到找到解决方案。 他注意到,每当出…

18、公司信贷管理|贷款额度的测算|贷款期限及其定价的设定逻辑!

银行在综合权衡贷款的第一还款来源和第二还款来源、风险和收益的基础上,应明确提出贷与不贷的意见。经调查审查同意的贷款,应提出最终的融资方案。 合理的融资方案既要有利于提升本行的竞争力,又要有利于控制贷款风险。完整的融资方案一般包…

计算机网络 --- 【2】计算机网络的组成、功能

目录 一、计算机网络的组成 1.1 从组成部分看 1.2 从工作方式看 1.3 从逻辑功能看 1.4 总结 二、计算机网络的功能 2.1 数据通信 2.2 资源共享​编辑 2.3 分布式处理 2.4 提高可靠性 2.5 负载均衡 一、计算机网络的组成 1.1 从组成部分看 我们举例分析计算机网络从…

【人工智能学习笔记】4_4 深度学习基础之生成对抗网络

生成对抗网络(Generative Adversarial Network, GAN) 一种深度学习模型,通过判别模型(Discriminative Model)和生成模型(Generative Model)的相互博弈学习,生成接近真实数据的数据分…

​ArcGIS Pro和ArcGIS的10大区别

本文来源:水经注GIS公众号 如果你经常使用ArcGIS 进行制图和分析,那么你一定听说过ArcGIS Pro,这款软件是Esri未来主打的一款桌面GIS软件,那么这款软件和ArcGIS相比有什么不同呢,这里为你列举了两款软件的10大区别&am…

文本分类场景下微调BERT

How to Fine-Tune BERT for Text Classification 论文《How to Fine-Tune BERT for Text Classification?》是2019年发表的一篇论文。这篇文章做了一些实验来分析了如何在文本分类场景下微调BERT,是后面网上讨论如何微调BERT时经常提到的论文。 结论与思路 先来看…

Sqoop 数据迁移

Sqoop 数据迁移 一、Sqoop 概述二、Sqoop 优势三、Sqoop 的架构与工作机制四、Sqoop Import 流程五、Sqoop Export 流程六、Sqoop 安装部署6.1 下载解压6.2 修改 Sqoop 配置文件6.3 配置 Sqoop 环境变量6.4 添加 MySQL 驱动包6.5 测试运行 Sqoop6.5.1 查看Sqoop命令语法6.5.2 测…

【数学建模】2024数学建模国赛经验分享

文章目录 一、关于我二、我的数模历程三、经验总结: 一、关于我 我的CSDN主页:https://gxdxyl.blog.csdn.net/ 2020年7月(大二结束的暑假)开始在CSDN写作: 阿里云博客专家: 接触的领域挺多的&#xff…

【Linux】常用指令(中)(附带基础指令的详细讲解、Linux的一些附加知识)

文章目录 前言1. Linux基础常用指令1.1 通配符 "*"1.2 man指令(重要)1.2.1 man指令的语法 1.3 何为"指令"?(附带知识)1.4 echo指令1.5 cat指令1.6 Linux下一切皆文件!1.6.1 ">" 输出重定向1.6.2…

Qt篇——Qt使用C++获取Windows电脑上所有外接设备的名称、物理端口位置等信息

我之前有发过一篇文章《Qt篇——获取Windows系统上插入的串口设备的物理序号》,文章中主要获取的是插入的USB串口设备的物理序号;而本篇文章则进行拓展,可以获取所有外接设备的相关信息(比如USB摄像头、USB蓝牙、USB网卡、其它一些…

分布式技术概览

文章目录 分布式技术1. 分布式数据库(Distributed Databases)2. 分布式文件系统(Distributed File Systems)3. 分布式哈希表(Distributed Hash Tables, DHTs)4. 分布式缓存(Distributed Caching…

面试必问:Java 类加载过程

java 类加载过程主要分为加载、链接和初始化三个阶段,六个关键步骤:加载、验证、准备、解析、初始化。 加载阶段(Loading) 加载时类加载的第一个过程,在这个阶段,将完成以下三件事情: 1&#…