首页 > 数据库 > Oracle > 【MATLAB源码】F-OFDM:链路级仿真平台
5G NR 新型候选波形技术完整实现
子带滤波 (Subband Filtering) + 超低带外泄漏 + 灵活参数集支持
在 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 全面支持 |
🔬 学术研究价值
|
💼 工程应用价值
|
| 特性 | 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 降低 | 复杂度 |
| :--- | :--- | :--- |
| 硬限幅 | 10.5 dB | 低 |
| 限幅滤波 | 10.1 dB | 中 |
| SLM (8候选) | 6.7 dB | 高 |
| μ律压扩 | 3.7 dB | 低 |
| 组件 | 最低版本 | 推荐版本 |
| :--- | :--- | :--- |
| 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-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} $$

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
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仿真实验室】获取完整工程包
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049237/viewspace-3109639/ ,如需转载,请注明出处,否则将追究法律责任。