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

来源:这里教程网 时间:2026-03-03 23:18:27 作者:

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

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


???? 为什么选择 F-OFDM?

在 5G NR 多业务共存异构网络动态频谱接入 场景下,传统 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 + 窗函数):$$ h[n] = 2f c \cdot \text{sinc}(2fc n) \cdot w[n] $$其中:

$f c = \frac{N{SC}}{N_{FFT}} \times 1.1$ 为归一化截止频率 $w[n]$ 为窗函数 (Hanning/Blackman/Kaiser)

F-OFDM 调制:$$ s(t) = \left[ \sum {k=0}^{N{SC}-1} X[k] \cdot e^{j2\pi k \Delta f t} \right] * h(t) $$ 信道估计 (LMMSE):$$ \hat{\mathbf{H}} {LMMSE} = \mathbf{R}{HH} \left( \mathbf{R} {HH} + \frac{\sigman^2}{SNR} \mathbf{I} \right)^{-1} \hat{\mathbf{H}}_{LS} $$


???? 仿真结果演示

demo<em>ber.png demo</em>channel<em>eq.png demo</em>complexity.png demo<em>doppler.png demo</em>filter.png demo<em>mimo.png demo</em>multiband.png demo<em>ofdm</em>vs<em>fofdm.png demo</em>papr.png demo<em>psd</em>comparison.png filter<em>comprehensive.png main</em>simulation.png psd<em>comparison.png system</em>overview.png tdl_analysis.png


???? 核心代码展示

???? 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 method
        case '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;
                end
            end
    end
end

???? 一键运行

>> 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([0 1], 128*14*4, 1), 16);
[wf, ~] = fofdm_modulator(reshape(txGrid, 128, 14), config);
[rxGrid, ~] = fofdm_demodulator(wf, config);
fprintf('回环误差: %.4f\n', mean(abs(txGrid - rxGrid(:))));  % 应 < 0.05

???? 文档体系

本平台提供 "算法+代码+产品" 三维文档:| 文档 | 内容 | 适用对象 || :--- | :--- | :--- || ???? 算法文档 | 数学推导、公式证明、理论分析 | 研究人员 || ???? 代码文档 | API 参考、接口说明、使用示例 | 开发工程师 || ???? 项目文档 | 产品介绍、技术亮点、快速入门 | 决策者/购买者 |


???? 获取方式

本文代码仅为核心片段展示,完整工程包含:✅ 39 个 MATLAB 模块(全部源代码) ✅ 18 张仿真结果图片3 份完整文档(算法/代码/产品) ✅ 15 项单元测试全中文详细注释 关注公众号【3GPP仿真实验室】获取完整工程包

相关推荐