基于SLM算法的STBC-MIMO-OFDM系统PAPR抑制仿真项目
项目介绍
本项目在MATLAB环境中实现了一个完整的STBC-MIMO-OFDM通信系统仿真平台,专注于研究和评估选择性映射(SLM)算法在降低发射信号峰均功率比(PAPR)方面的性能。
系统融合了空时分组码(Alamouti STBC)、多输入多输出(MIMO)技术与正交频分复用(OFDM)调制。仿真脚本精确模拟了从比特流生成、QPSK调制、相位旋转、空时编码到IFFT变换的全过程,并通过蒙特卡洛方法统计不同SLM候选序列数量下的PAPR分布情况,最终生成互补累积分布函数(CCDF)曲线图以验证算法增益。
功能特性
- MIMO-OFDM 架构:构建了2发(2Tx)天线配置的OFDM系统,支持子载波配置和过采样处理。
- STBC 空时编码:在频域实现了经典的Alamouti空时分组码,通过双时隙发射分集提高系统可靠性。
- SLM 抑制算法:实现了基于独立相位序列的选择性映射算法,通过生成多组候选信号并择优传输来降低PAPR。
- 高精度PAPR评估:采用4倍过采样(L=4)技术进行IFFT变换,从而更准确地捕捉模拟连续时间信号中的PAPR峰值。
- 统计分析与可视化:自动进行数千次蒙特卡洛迭代,统计PAPR分布,并绘制不同候选数量(U=1, 4, 8, 16)下的CCDF对比曲线。
系统要求
- MATLAB R2016a 或更高版本
- 通信工具箱(Communications Toolbox)- 用于
qammod 等函数 - 信号处理工具箱(Signal Processing Toolbox)- 用于基础信号处理
使用方法
- 确保MATLAB环境已安装所需工具箱。
- 打开MATLAB并将工作目录切换到项目所在文件夹。
- 直接运行主仿真脚本。
- 程序将在命令窗口输出当前仿真参数(子载波数量、迭代次数等)以及当前的进度状态。
- 仿真结束后,会自动弹出一个图形窗口,显示PAPR的CCDF性能曲线。
仿真实现逻辑详解
主程序通过嵌套循环结构进行仿真,外层循环遍历不同的SLM候选序列数量配置,内层循环执行蒙特卡洛迭代。具体实现流程如下:
1. 参数初始化
程序首先定义了OFDM子载波数量(128)、过采样因子(4)、调制阶数(QPSK)、天线数量(2)以及SLM的候选序列集合(如1, 4, 8, 16)。
2. 信源产生与调制
在每次迭代中,生成随机比特流,并利用 qammod 函数进行QPSK调制。为了配合Alamouti编码,调制后的符号被重组为两列数据,分别代表两个原始数据流 S1 和 S2。
3. SLM 相位序列生成
系统构建一个相位矩阵,其中包含 U 组相位序列。
- 第一组序列固定为全1(代表原始信号,无旋转)。
- 其余 U-1 组序列由集合 {1, j, -1, -j} 中的元素随机组成。
- 该相位矩阵用于后续生成彼此统计独立的候选传输信号。
4. 候选信号生成与优选(核心算法)
对于每一个候选相位序列,程序执行以下步骤:
- 相位旋转:将当前相位序列同时作用于 S1 和 S2 数据流,以保持MIMO通道间的正交性。
- 频域 STBC 编码:根据Alamouti算法逻辑,构建两个发射天线在两个不同时隙(Time Slot)的频域数据:
* 天线1:时隙1发送 S1,时隙2发送 -conj(S2)。
* 天线2:时隙1发送 S2,时隙2发送 conj(S1)。
- IFFT 与过采样:调用内部函数对上述4组频域数据(2天线 x 2时隙)分别进行IFFT变换。变换过程中采用了中间补零的方法实现4倍过采样,以获得更加精确的时域波形。
- PAPR 计算:分别计算所有天线和时隙的时域信号PAPR值。
- 最差情况评估:取当前候选方案中所有分支PAPR的最大值作为该方案的系统PAPR。
- 择优:对比所有 U 组候选方案的PAPR,记录其中的最小值作为本次传输的最终PAPR。
5. 统计与绘图
完成指定次数的迭代后,程序利用
ecdf 函数计算经验累积分布函数,转换为CCDF(1 - CDF),并使用半对数坐标系(
semilogy)绘制曲线,直观展示SLM算法在随着候选序列数量增加时带来的PAPR性能改善。
关键算法与函数说明
perform_ifft_oversampled(freq_data, N, L)
这是一个自定义的内部辅助函数,用于执行带过采样的IFFT。
- 它接收频域数据、子载波数 N 和过采样因子 L。
- 实现细节:它并不是简单地在末尾补零,而是将频域数据分为正频率和负频率两部分,将零填充在两者中间(即高频部分)。这是标准的频域插值方法,能生成更平滑的时域插值信号。
- 最后执行 IFFT 并进行能量归一化修正。
calculate_papr(time_signal)
用于计算给定离散时域信号的峰均功率比。
- 计算公式:PAPR (dB) = 10 * log10(峰值功率 / 平均功率)。
- 鲁棒性处理:包含对平均功率为0的极端情况的判断,防止除以零错误。
Alamouti STBC (频域实现)
代码直接在频域对经过相位旋转后的符号进行操作。这种处理方式避免了在时域进行复杂的共轭和翻转操作,利用了OFDM多载波的特性,使得空时编码更加高效和直观。