clear;

clc;

s = rng(211);            % 设置RNG状态的可重复性

numFFT = 1024;           % FFT点的数量

numRBs = 50;             % 资源块的数量

rbSize = 12;             % 每个资源块的副载波数量

cpLen = 72;              % 样本中的循环前缀长度

bitsPerSubCarrier = 6;   % 2: QPSK, 4: 16QAM, 6: 64QAM, 8: 256QAM

snrdB =30;              % 以dB为单位的SNR

toneOffset = 2.5;        % 音调偏移或超额带宽(在副载波中)

L = 513;                 % 滤波器长度(=滤波器次序+ 1),奇数

numDataCarriers = numRBs*rbSize;    % 子带中数据子载波的数量

halfFilt = floor(L/2);

n = -halfFilt:halfFilt;

% Sinc函数原型滤波器

pb = sinc((numDataCarriers+2*toneOffset).*n./numFFT);

% Sinc截断窗口

w = (0.5*(1+cos(2*pi.*n/(L-1)))).^0.6;

% 归一化的低通滤波器系数

fnum = (pb.*w)/sum(pb.*w);

% 过滤脉冲响应

h = fvtool(fnum, 'Analysis', 'impulse', ...

'NormalizedFrequency', 'off', 'Fs', 15.36e6);

h.CurrentAxes.XLabel.String = 'Time (\mus)';

h.FigureToolbar = 'off';

% 使用dsp过滤器对象进行过滤

filtTx = dsp.FIRFilter('Structure', 'Direct form symmetric', ...

'Numerator', fnum);

filtRx = clone(filtTx); % Rx的匹配过滤器

% QAM符号映射器

qamMapper = comm.RectangularQAMModulator( ...

'ModulationOrder', 2^bitsPerSubCarrier, 'BitInput', true, ...

'NormalizationMethod', 'Average power');

% 为谱图设置一个数字

hFig = figure('Position', figposition([46 50 30 30]), 'MenuBar', 'none');

axis([-0.5 0.5 -200 -20]);

hold on;

grid on

xlabel('Normalized frequency');

ylabel('PSD (dBW/Hz)')

title(['F-OFDM, ' num2str(numRBs) ' Resource blocks, '  ...

num2str(rbSize) ' Subcarriers each'])

% 生成数据符号

bitsIn = randi([0 1], bitsPerSubCarrier*numDataCarriers, 1);

symbolsIn = qamMapper(bitsIn);

% 将数据打包成OFDM符号

offset = (numFFT-numDataCarriers)/2; % 为通带中心

symbolsInOFDM = [zeros(offset,1); symbolsIn; ...

zeros(numFFT-offset-numDataCarriers,1)];

ifftOut = ifft(ifftshift(symbolsInOFDM));

%预先加上循环前缀

txSigOFDM = [ifftOut(end-cpLen+1:end); ifftOut];

% 使用零填充过滤器来刷新尾部。 获取发射信号

txSigFOFDM = filtTx([txSigOFDM; zeros(L-1,1)]);

%绘制功率谱密度(PSD)

[psd,f] = periodogram(txSigFOFDM, rectwin(length(txSigFOFDM)), ...

numFFT*2, 1, 'centered');

plot(f,10*log10(psd));

% 计算峰均功率比(PAPR)

PAPR = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');

[~,~,paprFOFDM] = PAPR(txSigFOFDM);

disp(['Peak-to-Average-Power-Ratio for F-OFDM = ' num2str(paprFOFDM) ' dB']);

% 绘制OFDM信号的功率谱密度(PSD)

[psd,f] = periodogram(txSigOFDM, rectwin(length(txSigOFDM)), numFFT*2, ...

1, 'centered');

hFig1 = figure('Position', figposition([46 15 30 30]));

plot(f,10*log10(psd));

grid on

axis([-0.5 0.5 -200 -20]);

xlabel('Normalized frequency');

ylabel('PSD (dBW/Hz)')

title(['OFDM, ' num2str(numRBs*rbSize) ' Subcarriers'])

%计算峰均功率比(PAPR)

PAPR2 = comm.CCDF('PAPROutputPort', true, 'PowerUnits', 'dBW');

[~,~,paprOFDM] = PAPR2(txSigOFDM);

disp(['Peak-to-Average-Power-Ratio for OFDM = ' num2str(paprOFDM) ' dB']);

%添加AWGN和Rayleigh

chan = rayleighchan(0.00001,100);

rxSig = filter(chan,txSigFOFDM);

rxtSig = awgn(rxSig, snrdB, 'measured');

% 接收匹配的过滤器,

rxSigFilt = filtRx(rxtSig);

% 考虑过滤器延迟

rxSigFiltSync = rxSigFilt(L:end);

% 删除循环前缀

rxSymbol = rxSigFiltSync(cpLen+1:end);

%执行FFT

RxSymbols = fftshift(fft(rxSymbol));

%选择数据副载波

dataRxSymbols = RxSymbols(offset+(1:numDataCarriers));

% 绘制接收符号星座图

switch bitsPerSubCarrier

case 2  % QPSK

refConst = qammod((0:3).', 4, 'UnitAveragePower', true);

case 4  % 16QAM

refConst = qammod((0:15).', 16,'UnitAveragePower', true);

case 6  % 64QAM

refConst = qammod((0:63).', 64,'UnitAveragePower', true);

case 8  % 256QAM

refConst = qammod((0:255).', 256,'UnitAveragePower', true);

end

constDiagRx = comm.ConstellationDiagram( ...

'ShowReferenceConstellation', true, ...

'ReferenceConstellation', refConst, ...

'Position', figposition([20 15 30 40]), ...

'MeasurementInterval', length(dataRxSymbols), ...

'Title', 'F-OFDM Demodulated Symbols', ...

'Name', 'F-OFDM Reception', ...

'XLimits', [-1.5 1.5], 'YLimits', [-1.5 1.5]);

constDiagRx(dataRxSymbols);

% 由于没有通道建模,因此通道均衡不是必要的

%解映射和BER计算

qamDemod = comm.RectangularQAMDemodulator('ModulationOrder', ...

2^bitsPerSubCarrier, 'BitOutput', true, ...

'NormalizationMethod', 'Average power');

BER = comm.ErrorRate;

% 执行艰难的决策并测量错误

rxBits = qamDemod(dataRxSymbols);

ber = BER(bitsIn, rxBits);

disp(['F-OFDM Reception, BER = ' num2str(ber(1)) ' at SNR = ' ...

num2str(snrdB) ' dB']);

%恢复RNG状态

rng(s);

ofdm 误码率 matlab,OFDM不同信噪比下的误码率matlab源码相关推荐

  1. Matlab GUI/APP 浅谈(附计算器源码)

    Matlab GUI/APP 浅谈(附计算器源码) 今天没有什么段子,也没有心灵鸡汤.毒鸡汤啥的,纯粹聊一聊这些年从有关MATLAB GUI/APP开发中悟出的一点道理,顺便把计算器的源代码给大家. ...

  2. 【老生谈算法】matlab实现画交通流密速关系源码——交通流密速

    用matlab画交通流密速关系 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab画交通流密速关系程序源码.doc ...

  3. Linux下USB suspend/resume源码分析【转】

    转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron ...

  4. Win10 下Visual Studio 2017源码编译Paddle

    Win10 下Visual Studio 2017源码编译Paddle 1.准备工作 Visual Studio 2017 Python 3.8.10 CMake 3.22.0-rc2 熟悉官方文档: ...

  5. 【Matlab数字识别】数字仪表图像识别【含源码 693期】

    一.代码运行视频(哔哩哔哩) [Matlab数字识别]数字仪表图像识别[含源码 693期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLAB ...

  6. Linux环境下安装MySQL(源码安装)

    Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...

  7. 基于Java毕业设计疫情下的居民管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计疫情下的居民管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计疫情下的居民管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...

  8. 帝国CMS仿猫啃字体下载网整站源码自适应个人博客类模板

    帝国CMS仿猫啃字体下载网整站源码自适应个人博客类模板 自适应]帝国CMS仿猫啃字体下载网整站源码 系统版本:帝国CMS7.5 UTF-8 服务器:win/linux 语言:PHP 数据库:MYSQL ...

  9. vite下,修改node_modules源码后,在浏览器源码中看不到改动的内容

    一.背景 vite下,修改node_modules源码后,在浏览器的源代码中看不到改动的内容,查看vite文档后发现了这么一段话: 对此我专门做了几次实验,来验证我的一些想法 二.实验的前置操作 执行 ...

  10. Ubuntu12.04下Android4.0.4源码的下载及其编译过程

    Ubuntu12.04下Android4.0.4源码的下载及其编译过程 http://www.jizhuomi.com/android/environment/427.html

最新文章

  1. jquery下载教程
  2. UGUI全面实践教程
  3. 理解Android Binder机制(1/3):驱动篇
  4. 犀牛建模软件的英文语言包_使用tidytext和textmineR软件包在R中进行主题建模(
  5. .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度
  6. atitit.提升开发效率---mda 软件开发方式的革命
  7. stm32F051系列教程 1.点灯
  8. 计算机网络系统集成实验指导,系统集成实验指导.docx
  9. matlab 积分进阶教程,matlab进阶微积分篇6
  10. 七周成为数据分析师 第四周:数据可视化
  11. 零代码上线小布对话技能:技能平台的实践与思考
  12. java蓝牙程序怎么调试_蓝牙BLE调试助手软件源码
  13. 计算机素质教育论文800,关于素质教育的作文800字
  14. 100个软硬件都要懂的示波器基础知识
  15. [原创]获取还原某音弹幕(web版)
  16. 汉字转拼音的C++实现及原理_gb2312区位码篇
  17. ansys 服务器无响应,ANSYS出现的各种错误及解决方法
  18. zzuli 2126 tmk买礼物 思维题
  19. 你可以忍受大城市 365 天的孤独,却不能忍受小城市 7 天的热闹
  20. CPU方案简介SSD201 - 智能网关中控

热门文章

  1. P4956 [COCI2017-2018#6] Davor
  2. html链接是什么意思,HTML中link是什么意思?
  3. android书架效果
  4. std::map与std::unordered_map
  5. 谷歌SEO优化入门:Google SEO优化方法(2021最新)
  6. 软件工程期末复习【速成】
  7. 【数据结构与算法】八大排序(中)快速排序 快排居然还能这么优化?快排的非递归该如何写?
  8. 西门子840d备份到u盘_西门子840D数控系统硬盘数据恢复法
  9. JAVA面试题(第一部分)
  10. 计算机职业生涯教育主题班会,职业生涯规划主题班会活动策划