???? OSDM 教科书级链路仿真平台
Walsh 序域调制全流程复现 · QPSK/64QAM 双链路 · 频谱合规 + BER 闭环验证 支持系数聚类与低相关贪心选取 · Walsh 域 Hilbert 正交恢复 · 完整可视化结果导出
???? 为什么选择本仿真平台?
做 Walsh/OSDM 类系统时,常见问题是“理论看懂了,但代码链路不闭环”: 调制、载波、合规掩模、接收判决、BER 统计通常散落在不同脚本中,难以形成可复现工程。本平台提供一套 可直接运行、结构清晰、便于扩展 的 OSDM 仿真代码,覆盖从参数生成到性能评估的完整路径。
| 痛点(常见问题) | 本平台解决方案 |
|---|---|
| ???? 只给局部算法,没有完整收发链路 | ✅ 提供
osdm_transmit+ osdm_receive+ AWGN + BER 统计全流程 |
| ???? Walsh 系数如何选不清楚 | ✅ 提供载波统计聚类
gen_walsh_carrier+ 低相关贪心选取 select_mod_coeffs |
| ???? 高阶调制映射规则不透明 | ✅ 64-QAM 映射/解映射独立模块化:
gen_qam64_maps/qam64_mod/qam64_demod |
| ???? 频谱合规无法量化判断 | ✅
BW_visible掩模 + is_conform逐点判定,支持衰减因子对比 |
| ???? 结果展示零散且不可复用 | ✅ 统一
utils/绘图与 save_figure持久化输出到 results/ |
???? 核心价值
???? 学术研究价值
算法闭环:覆盖 Walsh 正逆变换、Hilbert 正交恢复、QPSK/64QAM 判决、BER 评估。 对比实验友好:同一框架下可直接比较不同调制、衰减因子、SNR 区间。 可解释性强:收发端流程注释完整,关键步骤(系数注入、I/Q 提取)清晰可追踪。 文档齐全:已包含算法文档.md、
代码文档.md、
项目文档.md三层文档。
???? 工程应用价值
分层架构清晰:core/modem/osdm/utils/demos五层职责明确。 模块可替换:量化器、调制器、系数选择策略均可独立替换。 结果自动化产出:图像统一保存,便于报告写作与迭代对比。 扩展门槛低:新增调制方式、掩模策略、信道模型时改动面可控。
⚡ 技术亮点
????️ 完整模块架构
OSDM_Platform/ ├── 【核心算子 core/】 │ ├── gen_walsh.m # 生成按序排序的归一化 Walsh 矩阵 │ ├── walsh_inverse.m # 分窗 DWT:时域 -> Walsh 系数 │ ├── walsh_transform.m # Walsh 正变换 + 可选频谱分析 │ ├── walsh_signal_extract.m # WSE:降采样/量化/重构(DAC等效) │ ├── hilbert_walsh.m # Walsh 域 Hilbert 正交分量恢复 │ ├── quantize_coeffs.m # 系数量化接口(当前默认直通) │ ├── upsample_signal.m # 符号保持上采样 │ └── oversample_signal.m # 零阶保持过采样 │ ├── 【调制层 modem/】 │ ├── gray_code.m # Gray 码序列生成 │ ├── gen_qam64_maps.m # 64-QAM 双向映射表与参考缓存 │ ├── qam64_mod.m # 64-QAM 映射 │ ├── qam64_demod.m # 64-QAM 最近邻硬判决 │ └── is_conform.m # 频谱掩模合规判定 │ ├── 【系统层 osdm/】 │ ├── osdm_params.m # 全局参数构建(n53 + Walsh + 掩模) │ ├── gen_conform_signal.m # 随机合规信号生成(统计用途) │ ├── gen_walsh_carrier.m # 统计聚类 + 载波构建 │ ├── select_mod_coeffs.m # 低相关贪心选系数 │ ├── osdm_transmit.m # 发射端总入口 │ └── osdm_receive.m # 接收端总入口 │ ├── 【可视化 utils/】 │ ├── plot_walsh_basis.m # Walsh 基函数展示 │ ├── plot_time_domain.m # 时域图 │ ├── plot_spectrum.m # 频谱与掩模图 │ ├── plot_constellation.m # 星座图 │ ├── plot_ber_curve.m # BER 曲线 │ └── save_figure.m # 统一图片导出(300 DPI) │ └── 【实验入口 demos/】 ├── demo_qpsk.m # OSDM-QPSK 全链路 ├── demo_64qam.m # OSDM-64QAM 全链路 └── demo_osdm_overview.m # 综合总览与对比
???? 典型仿真配置(来自代码默认设置)
| 场景 | 调制 | 每帧 OSDM 符号数 | 每符号调制系数数 | 衰减因子 | SNR 区间 | 每点帧数 || -------------------------- | --------------- | ------------------ | ------------------ | ----------------- | ----------- | ---------- ||
demo_qpsk| QPSK | 100 | 3 | 2 | 0:2:20 dB | 50 ||
demo_64qam| 64-QAM | 100 | 3 | 5 | 0:2:24 dB | 30 ||
demo_osdm_overview| QPSK / 64-QAM | 50(聚类分析段) | 3 | QPSK=2, 64QAM=5 | 0:2:20 dB | 30 |
说明:
demo_osdm_overview还包含衰减因子2/4/6/8的频谱合规性对比。
???? 核心代码展示
???? 发射端系数注入与重构(
osdm_transmit.m
)
% 第3步:将调制符号注入Walsh系数矩阵 coeffs = real(carrier.walsh.Xw_b); coeffs(modulatedCoeffs, :) = real(upsampledSymbs .* coeffCarrier) / attenuationFactor; % 第4步:Walsh正变换生成时域信号 slStruct = walsh_transform(coeffs, params.W, params.Nfft, params.osr, false); s = real(slStruct.temporel); % 第6步:WSE提取与重构(模拟DAC行为) [sWalsh, Xw_b_raw] = walsh_signal_extract(s, params, length(s));
???? 接收端 Walsh 域 Hilbert + I/Q 恢复(
osdm_receive.m
)
% 第4步:Walsh域Hilbert变换恢复正交分量 Xw_TxImag = hilbert_walsh(coeffsRx, params.W); % 第5步:I/Q解调 Xw_TxCI = coeffsRx(modulatedCoeffs, :) .* Wcosine + ... Xw_TxImag(modulatedCoeffs, :) .* Wsine; Xw_TxCQ = Xw_TxImag(modulatedCoeffs, :) .* Wcosine - ... coeffsRx(modulatedCoeffs, :) .* Wsine; % 第7步:分窗平均与符号判决 separatedSymbols = reshape(extractedI.', nRefreshPerSymbol/2, []) + ... 1j * reshape(extractedQ.', nRefreshPerSymbol/2, []); meanSymbols = mean(separatedSymbols, 1); finalSymbols = reshape(meanSymbols, [], nModCoeffs).';
⚙️ 低相关系数贪心选取(
select_mod_coeffs.m
)
for iCoeff = 2:nCoeffsToSelect correlation = zeros(length(cluster), 1); for iSub = 1:iCoeff - 1 refSpectrum = fftWalsh(cluster == coefficients(iSub), :); correlation = correlation + sum(refSpectrum .* fftWalsh, 2); end [~, newCoeffIdx] = min(correlation); coefficients(iCoeff) = cluster(newCoeffIdx); end
???? 一键运行
>> cd D:\03_代码库\04.code4sale\OSDM\OSDM_Platform\demos % OSDM-QPSK 全链路 >> demo_qpsk % OSDM-64QAM 全链路 >> demo_64qam % 综合总览(Walsh特性 + 合规性 + BER对比) >> demo_osdm_overview
输出预览
=== OSDM-QPSK 链路仿真演示 === [1/6] 配置系统参数... [2/6] 生成Walsh载波与选择调制系数... [4/6] 执行单次OSDM-QPSK发射与接收... 频谱合规: true SNR = 15 dB: 比特错误 xx / xxxx(BER = x.xxxxxx) [5/6] 仿真BER曲线(多SNR点)... ... === OSDM-QPSK 演示完成 ===
============================================ OSDM 链路仿真平台 — 综合演示 ============================================ [1/8] Walsh矩阵特性... [4/8] OSDM系数聚类分布... [5/8] 不同衰减因子的频谱合规性... [6/8] QPSK vs 64-QAM BER对比仿真...

????️ 运行环境
MATLAB 版本:建议 R2020a 或更高版本 依赖工具箱: Communications Toolbox(pskmod/pskdemod/int2bit)
???? 获取方式
本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【 3GPP 仿真实验室】进行获取。
