【MATLAB源码】OSDM:教科书级链路仿真平台
📡 OSDM 教科书级链路仿真平台
Walsh 序域调制全流程复现 · QPSK/64QAM 双链路 · 频谱合规 + BER 闭环验证支持系数聚类与低相关贪心选取 · Walsh 域 Hilbert 正交恢复 · 完整可视化结果导出
📌 为什么选择本仿真平台?
做 Walsh/OSDM 类系统时,常见问题是“理论看懂了,但代码链路不闭环”:调制、载波、合规掩模、接收判决、BER 统计通常散落在不同脚本中,难以形成可复现工程。
本平台提供一套 可直接运行、结构清晰、便于扩展 的 OSDM 仿真代码,覆盖从参数生成到性能评估的完整路径。
|
|
|
|---|---|
|
|
osdm_transmit + osdm_receive + AWGN + BER 统计全流程 |
|
|
gen_walsh_carrier + 低相关贪心选取 select_mod_coeffs |
|
|
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文档。
💼 工程应用价值
-
分层架构清晰: 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 # 综合总览与对比
📊 典型仿真配置(来自代码默认设置)
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|
demo_qpsk |
|
|
|
|
|
|
demo_64qam |
|
|
|
|
|
|
demo_osdm_overview |
|
|
|
|
|
|
说明:
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)
夜雨聆风
