基于Turbo编码的CS-CDMA-OFDM系统信道模型仿真
项目介绍
本项目实现了一个结合码扩频码分多址(CS-CDMA)与正交频分复用(OFDM)技术的无线通信系统全链路仿真。程序旨在评估在多径衰落信道环境下,结合Turbo信道编码技术的系统性能。通过蒙特卡洛仿真方法,分析了在不同信噪比(SNR)条件下系统的误码率(BER)表现,并提供了星座图、信道冲激响应及频谱的可视化分析。
功能特性
- 信道编码:采用并行级联卷积码(Turbo码),码率为1/3,约束长度K=3,生成多项式为[7, 5](八进制),支持迭代译码。
- 多址接入技术:CS-CDMA(码扩频-CDMA),使用Hadamard矩阵生成的Walsh码作为扩频序列,扩频因子(SF)设为4。
- 调制技术:QPSK调制与OFDM多载波传输结合,包含64点FFT/IFFT及16点的循环前缀(CP)。
- 信道模型:模拟频率选择性多径衰落信道(瑞利衰落)及加性高斯白噪声(AWGN)。
- 接收算法:实现基于MMSE(最小均方误差)准则的频域信道均衡、解扩频及Turbo软判决译码。
- 可视化:提供BER曲线、收发星座图对比、信道冲激响应(CIR)及发射信号功率谱密度图。
系统要求
- MATLAB R2016a 或更高版本
- 通信工具箱 (Communications Toolbox)
- 信号处理工具箱 (Signal Processing Toolbox)
使用方法
直接运行主仿真脚本即可启动整个仿真流程。程序通过循环遍历设定的信噪比范围(0dB至12dB),逐帧进行数据传输仿真,计算误码率,并在仿真结束后自动生成四个多图合一的分析图表。
---
仿真流程与实现细节
主仿真逻辑严格按照无线通信系统的发射、信道传输、接收处理流程编写,具体实现步骤如下:
1. 系统参数初始化
程序首先定义了OFDM的关键参数(FFT点数64,CP长度16)、扩频参数(Walsh码,SF=4)、调制方式(QPSK)以及Turbo码的具体配置(迭代4次,R=1/3)。同时设定了多径信道的延迟抽头和功率谱([0, -3, -6] dB)。
2. 发射机处理 (Tx)
- 信源生成:产生长度为256的随机二进制比特流。
- Turbo编码:对比特流进行前向纠错编码,输出编码后的比特序列并记录交织器索引。
- QPSK调制:将编码比特映射为复数符号,功率归一化。
- 频域扩频:采用Walsh码对QPSK符号进行扩频,每个符号在频域上扩展占用SF=4个相邻子载波。
- OFDM调制:将扩频后的数据映射到子载波,进行IFFT变换将频域信号转换为时域信号,并添加循环前缀(CP)以消除符号间干扰(ISI)。
3. 信道模型 (Channel)
- 多径衰落:构建频率选择性衰落信道。根据设定的多径延迟和功率,生成复高斯随机变量作为各路径的衰落系数,并进行能量归一化。
- 信号卷积:将发射信号与信道冲激响应进行卷积运算,模拟多径传播效应。
- AWGN:计算接收信号功率,根据当前信噪比(SNR)生成并叠加高斯白噪声。
4. 接收机处理 (Rx)
- 去CP与FFT:移除接收信号的循环前缀,并进行FFT变换将信号变换回频域。
- 信道均衡:利用已知的信道状态信息(CSI),在频域执行MMSE(最小均方误差)均衡。算法公式考虑了信道频率响应和信噪比倒数,以最小化噪声和信道畸变的影响。
- 解扩频:将均衡后的频域数据按扩频因子分组,利用正交性通过相关运算恢复原始调制符号。
- 软解调:计算QPSK符号的对数似然比(LLR)。利用接收信号的实部和虚部特性,结合噪声方差估算软比特信息。
- Turbo译码:基于计算出的LLR序列和交织器信息,执行Log-MAP或类似算法的迭代译码,恢复原始比特流。
5. 性能统计与可视化
- 误码率计算:对比发送比特与译码输出比特,累计错误数并计算BER。
- 图表绘制:
*
BER曲线:展示系统在不同SNR下的误码率下降趋势。
*
星座图:对比发射端的标准QPSK星座点与接收端经过均衡、解扩后的信号星座点,直观展示噪声和干扰的影响。
*
信道冲激响应:绘制当前帧的多径信道时域抽头模型。
*
频谱图:使用Welch法估计并发射OFDM信号的功率谱密度。
关键算法分析
- 频域扩频 (Frequency Domain Spreading)
代码中通过
spread_signal 函数实现,不同于时域扩频,这里将扩频码片直接映射到相邻的OFDM子载波上。这种设计利用OFDM子载波的正交性传输扩频码片,能够利用频率分集增益对抗频率选择性衰落。
接收端未采用简单的迫零(Zero-Forcing)均衡,而是实施了MMSE均衡。
代码实现逻辑为:
Rx * conj(H) / (|H|^2 + 1/SNR)。
该算法在信道深衰落点(H接近0)能够有效抑制噪声放大,显著优于直接除以信道响应的方法,这对Turbo码的软输入解码至关重要。
虽然底层译码逻辑封装在函数中,但主流程主要通过设置迭代次数(
TurboIter=4)和传递LLR(软信息)来驱动译码器工作。这表明系统利用了Turbo码强大的纠错能力来弥补多径衰落导致的信息丢失。