乐于分享
好东西不私藏

【MATLAB源码】F-OFDM:链路级仿真平台

【MATLAB源码】F-OFDM:链路级仿真平台

🌐 F-OFDM 滤波正交频分复用仿真平台

 新型候选波形技术完整实现子带滤波 (Subband Filtering) + 超低带外泄漏 + 灵活参数集支持


📌 为什么选择 F-OFDM?

在 多业务共存异构网络和 动态频谱接入 场景下,传统 CP-OFDM 波形面临严重的带外辐射问题,导致保护带开销大、频谱效率低。本平台基于 F-OFDM (Filtered-OFDM) —— 3GPP TR 38.802 研究的新型候选波形技术,通过子带滤波实现超低带外泄漏。

痛点 (CP-OFDM)
本平台解决方案 (F-OFDM)
📡 带外泄漏高 (-13dB)
✅ 超低 OOB:带外抑制可达 -80dB 以上
🔧 固定参数集
✅ 灵活 Numerology:不同子带可使用不同 SCS 和 CP
⏱️ 严格时间同步
✅ 异步容忍:放宽上行多用户同步需求
📊 大保护带开销
✅ 频谱效率高:保护带开销减少 90%+
🧮 无 PAPR 降低
✅ 内置 PAPR 技术:限幅、压扩、SLM 全面支持

🎯 核心价值

🔬 学术研究价值

  • 标准协议:完整实现 3GPP TR 38.802 F-OFDM 规范
  • 滤波器设计:窗函数法、LS、Parks-McClellan 三种方法
  • 信道建模:3GPP TDL-A/B/C/D/E 全系列支持
  • 数学严谨:代码与《算法文档》LaTeX 公式一一对应
  • MIMO 扩展:完整的 MIMO 预编码与检测

💼 工程应用价值

  • 模块化架构:Modulator/Channel/Detector 完全解耦
  • 即插即用:标准化 API 接口,快速集成仿真链路
  • 性能验证:15 项单元测试 + 11 个演示脚本
  • 全中文注释:适合团队协作与二次开发
  • 丰富可视化:18 张仿真结果图片自动生成

⚡ 技术亮点

🌊 F-OFDM vs CP-OFDM 对比

特性
CP-OFDM
F-OFDM (本平台)
带外泄漏
-13 dB (第一旁瓣)
-45 ~ -80 dB
保护带
大 (10%+ 频谱)
极小 (1-2 子载波)
参数集灵活性
固定
多子带独立配置
异步传输
不支持
完全支持
实现复杂度
中 (增加滤波)

📊 性能指标 (实测数据)

基于 demo_psd_comparison.m 和 demo_ofdm_vs_fofdm.m 实测结果

指标
CP-OFDM
F-OFDM
改善
带外泄漏比
-39 dB
-84 dB
📉 45 dB
无噪声 BER
0
0
✅ 完美恢复
SNR=20dB BER
~1e-4
~1e-4
✅ 性能等效
频谱效率
基准
+10-15%
🚀 保护带节省

🎛️ PAPR 降低效果

方法
PAPR 降低
复杂度
硬限幅
10.5 dB
限幅滤波
10.1 dB
SLM (8候选)
6.7 dB
μ律压扩
3.7 dB

🖥️ 运行环境

MATLAB 版本要求

组件
最低版本
推荐版本
MATLAB
R2020b
R2023b / R2024b

依赖工具箱

工具箱
必要性
用途
Signal Processing Toolbox
✅ 必须
滤波器设计 (firpm, freqz)
Communications Toolbox
⚠️ 推荐
QAM 调制 (有备用实现)

📁 项目结构

F-OFDM/├── core/                           # 🔧 核心算法模块 (11)│   ├── fofdm_modulator.m               # F-OFDM 调制器│   ├── fofdm_demodulator.m             # F-OFDM 解调器│   ├── fofdm_modulator_mimo.m          # MIMO 调制器│   ├── fofdm_demodulator_mimo.m        # MIMO 解调器│   ├── ofdm_modulator.m                # CP-OFDM 调制器 (对比)│   ├── ofdm_demodulator.m              # CP-OFDM 解调器 (对比)│   ├── design_subband_filter.m         # 窗函数滤波器设计│   ├── design_filter_ls.m              # LS 滤波器设计│   ├── design_filter_pm.m              # PM 滤波器设计│   ├── channel_estimation.m            # 信道估计 (LS/LMMSE)│   └── channel_equalization.m          # 信道均衡 (ZF/MMSE)├── channel/                        # 📡 信道模型 (5)│   ├── awgn_channel.m                  # AWGN 信道│   ├── tdl_channel.m                   # 3GPP TDL 信道│   ├── multipath_channel.m             # EPA/EVA/ETU 多径信道│   ├── mimo_channel.m                  # MIMO 空间信道│   └── doppler_spectrum.m              # 多普勒频谱生成├── utils/                          # 🛠️ 工具函数 (10)│   ├── qam_modulate.m                  # QAM 调制│   ├── qam_demodulate.m                # QAM 解调│   ├── calculate_ber.m                 # BER 计算│   ├── calculate_papr.m                # PAPR 计算│   ├── papr_ccdf.m                     # PAPR CCDF 统计│   ├── papr_reduction.m                # PAPR 降低技术│   ├── generate_pilot_pattern.m        # 导频图案生成│   ├── precoding.m                     # MIMO 预编码│   ├── fast_conv_ola.m                 # 快速卷积 (OLA)│   └── fast_conv_ols.m                 # 快速卷积 (OLS)├── demo/                           # 🎬 演示脚本 (11)│   ├── main_fofdm_simulation.m         # 完整链路仿真│   ├── demo_psd_comparison.m           # 频谱对比│   ├── demo_ber_comparison.m           # BER 对比│   ├── demo_multiband.m                # 多子带传输│   ├── demo_channel_equalization.m     # 信道估计与均衡│   ├── demo_doppler_effect.m           # 多普勒效应│   ├── demo_mimo.m                     # MIMO 系统│   ├── demo_filter_comparison.m        # 滤波器对比│   ├── demo_ofdm_vs_fofdm.m            # 完整系统对比│   ├── demo_complexity.m               # 复杂度分析│   └── demo_papr.m                     # PAPR 分析├── tests/                          # ✅ 测试脚本│   └── test_all.m                      # 单元测试├── docs/                           # 📚 文档│   ├── 算法文档.md                     # 理论推导│   ├── 代码文档.md                     # API 参考│   ├── 项目文档.md                     # 产品介绍 (本文档)│   └── figures/                        # 仿真结果图片 (18张)├── run_all_tests.m                 # 🧪 完整测试套件└── run_all_demos.m                 # 🎥 批量演示脚本

🔬 算法原理

系统架构图

┌─────────────────────────────────────────────────────────────────────┐│                          F-OFDM 发射端                              │├─────────────────────────────────────────────────────────────────────┤│  ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌───────┐ ││  │ 数据源  │──▶│  QAM   │──▶│  IFFT  │──▶│ 加CP   │──▶│子带滤波│─┐││  └─────────┘   │  调制   │   │        │   │        │   └───────┘ │││                └─────────┘   └─────────┘   └─────────┘       │     ││                                                              ▼     ││                                                         ┌───────┐  ││                                                         │ 发射  │  ││                                                         └───────┘  │└─────────────────────────────────────────────────────────────────────┘                              │                              ▼ 无线信道 (TDL/AWGN)                              │┌─────────────────────────────────────────────────────────────────────┐│                          F-OFDM 接收端                              │├─────────────────────────────────────────────────────────────────────┤│  ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌───────┐ ││  │ 接收   │──▶│匹配滤波 │──▶│  去CP  │──▶│  FFT   │──▶│ 均衡  │──┘││  └─────────┘   └─────────┘   └─────────┘   └─────────┘   └───────┘  ││                                                              │      ││                                                              ▼      ││                                              ┌─────────┐  ┌─────┐   ││                                              │ QAM解调 │◀─│数据 │   ││                                              └─────────┘  └─────┘   │└─────────────────────────────────────────────────────────────────────┘

核心数学公式

子带滤波器设计(Sinc + 窗函数):

其中:

  •  为归一化截止频率
  •  为窗函数 (Hanning/Blackman/Kaiser)

F-OFDM 调制

信道估计 (LMMSE)


📸 仿真结果演示


💻 核心代码展示

🔥 F-OFDM 调制器 (core/fofdm_modulator.m)

function[waveform, info] = fofdm_modulator(subbandGrid, config)% FOFDM_MODULATOR F-OFDM 子带调制器%% 核心步骤:%   1. 资源网格映射 (子载波居中)%   2. IFFT + 循环前缀添加%   3. 子带滤波 (Sinc + 窗函数)%   4. 频率偏移 (多子带场景)% 设计子带滤波器    [h, ~] = design_subband_filter(Nfft, numSC, filterLen, windowType);% OFDM 调制 (IFFT + CP)    ofdmWaveform = sqrt(Nfft) * ifft(ifftshift(fftGrid, 1));    ofdmWaveform = [ofdmWaveform(end-cpLength+1:end, :); ofdmWaveform];% 子带滤波 (核心!)    waveform = conv(ofdmWaveform(:), h, 'full');% 频率偏移 (支持多子带)    n = (0:length(waveform)-1)';    waveform = waveform .* exp(1j * 2 * pi * offset / Nfft * n);end

🌟 子带滤波器设计 (core/design_subband_filter.m)

function[h, info] = design_subband_filter(Nfft, numSC, filterLen, windowType)% DESIGN_SUBBAND_FILTER F-OFDM 子带滤波器设计%% 方法: Sinc 滤波器 + 窗函数截断% 目标: 通带平坦, 阻带衰减 > 40dB% 归一化截止频率 (带过渡带扩展)    f_cutoff = (numSC / Nfft) * 1.1;% Sinc 滤波器 (理想低通)    n = -(filterLen-1)/2 : (filterLen-1)/2;    h_sinc = f_cutoff * sinc(f_cutoff * n);% 加窗 (抑制旁瓣)    w = hanning(filterLen);    h = h_sinc(:) .* w(:);% 归一化 DC 增益为 1    h = h / sum(h);end

🚀 PAPR 降低 (utils/papr_reduction.m)

function[signal_out, info] = papr_reduction(signal, method, params)% PAPR_REDUCTION PAPR 降低技术%% 支持方法:%   'clipping'          - 硬限幅%   'clipping_filtering' - 限幅 + 带外滤波%   'companding'        - μ律压扩%   'slm'               - 选择性映射switch methodcase'clipping'% 幅度限幅: |x| > A_max 时截断            threshold = sqrt(params.clippingRatio * avgPower);            signal_out = min(abs(signal), threshold) .* exp(1j * angle(signal));case'slm'% 生成 U 个候选, 选 PAPR 最小者for u = 1:numCandidates                phaseSeq = exp(1j * 2 * pi * rand(N, 1));                candidate = ifft(fft(signal) .* phaseSeq);if calculate_papr(candidate) < minPapr                    signal_out = candidate;endendendend

🎬 一键运行

>> cd d:\03_代码库\04.code4sale\2.F-OFDM% 完整测试 (15 项单元测试 + 图片生成)>> run_all_tests% 所有演示 (11 个脚本 + 18 张图片)>> run_all_demos% 单独运行>> demo_papr            % PAPR 分析>> demo_psd_comparison  % 频谱对比>> demo_mimo            % MIMO 系统

快速验证

% 验证 F-OFDM 回环addpath('core''utils');config.Nfft = 1024; config.numSubcarriers = 128; config.numSymbols = 14;txGrid = qam_modulate(randi([01], 128*14*41), 16);[wf, ~] = fofdm_modulator(reshape(txGrid, 12814), config);[rxGrid, ~] = fofdm_demodulator(wf, config);fprintf('回环误差: %.4f\n'mean(abs(txGrid - rxGrid(:))));  % 应 < 0.05

📚 文档体系

本平台提供 “算法+代码+产品” 三维文档:

文档
内容
适用对象
📘 算法文档
数学推导、公式证明、理论分析
研究人员
📒 代码文档
API 参考、接口说明、使用示例
开发工程师
📕 项目文档
产品介绍、技术亮点、快速入门
决策者/购买者

🛒 获取方式


📚 参考文献

[1] 3GPP TR 38.802: “Study on New Radio Access Technology Physical Layer Aspects” (F-OFDM 标准研究)

[2] 3GPP TS 38.211: “NR; Physical channels and modulation” (5G NR 物理层规范)

[3] X. Zhang et al., “Filtered-OFDM – Enabler for Flexible Waveform in the 5th Generation Cellular Networks,” IEEE GLOBECOM 2015. (F-OFDM 核心论文)

[4] J. Abdoli et al., “Filtered OFDM: A new waveform for future wireless systems,” IEEE SPAWC 2015. (F-OFDM 开山论文)

[5] Y. S. Cho et al., “MIMO-OFDM Wireless Communications with MATLAB,” Wiley, 2010. (MIMO-OFDM 教材)

[6] A. V. Oppenheim, “Discrete-Time Signal Processing,” 3rd Edition. (数字信号处理经典)

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 【MATLAB源码】F-OFDM:链路级仿真平台

评论 抢沙发

4 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮