???? 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} $$
???? 仿真结果演示

???? 核心代码展示
???? 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仿真实验室】获取完整工程包
