CDMA通信系统信号处理全流程仿真 (MATLAB)
项目简介
本项目基于MATLAB平台构建了一个完整的码分多址(CDMA)通信系统仿真模型。该模型实现了从数字信源产生、扩频调制、信道传输到接收解扩判决的端到端信号处理全流程。通过蒙特卡洛仿真方法,项目深入评估了系统在加性高斯白噪声(AWGN)环境下的误码率(BER)性能,并提供了丰富的可视化图表以展示扩频通信的时域、频域特性及抗噪能力。
主要功能特性
- 多用户系统模拟:支持多用户同时传输,利用扩频码的正交性区分不同用户数据。
- 全链路信号处理:涵盖信源生成、BPSK调制、Walsh码扩频、PN码加扰、信道噪声添加、解扰、解扩及判决恢复。
- 参数化设计:用户数量、比特长度、扩频因子(SF)、信噪比(SNR)扫描范围均主要参数可配置。
- 性能评估:自动计算并在对数坐标下绘制蒙特卡洛仿真误码率曲线,同时与理论误码率曲线进行对比验证。
- 多维可视化:输出时域波形对比图、功率谱密度(PSD)图、星座图以及BER性能曲线。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(用于频谱分析函数)
- Communications Toolbox(可选,本项目主要使用基础数学函数实现)
实现逻辑与细节分析
本项目通过一个主脚本文件驱动整个仿真流程,具体实现逻辑如下:
1. 系统初始化与参数设置
- 参数定义:设置用户数(默认为4)、传输比特数(2000 bit)、扩频因子(64)以及信噪比扫描范围(-15dB至10dB)。
- 扩频码生成:调用递归函数生成Hadamard矩阵,以此作为正交Walsh码库,并为每个用户分配唯一的扩频码行。
- PN码生成:生成一个长度等于总Chip数(比特数 × 扩频因子)的随机二进制序列(+1/-1),作为全网通用的伪随机加扰序列。
2. 发射端处理 (Tx)
- 信源产生:为指定数量的用户生成随机的二进制比特流(0/1)。
- 调制映射:采用BPSK调制方案,将逻辑0映射为-1,逻辑1映射为+1。
- 扩频 (Spreading):利用克罗内克积(Kronecker Product)运算,将每个用户的符号扩展为长度为64的Chip序列,实现频谱扩展。
- 多址合成:将所有用户的扩频信号在时域上直接叠加,形成CDMA复合信号。
- 加扰 (Scrambling):将复合信号与PN伪随机序列按位点乘,进一步随机化信号并模拟实际环境中的扰码过程。
3. 信道模型
- AWGN信道:根据当前的信噪比(SNR)计算所需的噪声功率。由于仿真是在Chip级别进行的,噪声功率的计算基于宽带信号功率。
- 噪声叠加:生成对应功率的高斯白噪声并叠加到发射信号上,模拟传输过程中的信号劣化。
4. 接收端处理 (Rx)
- 解扰 (Descrambling):接收信号首先与本地同步的PN序列再次相乘,去除加扰影响。
- 相关解扩:
* 将解扰后的长序列重塑为矩阵,每一列对应一个可能的符号周期(包含64个Chip)。
* 通过矩阵乘法,将信号与所有用户的Walsh码进行相关运算(内积)。由于Walsh码的正交性,非目标用户的信号能量在此步骤被抑制,而目标用户信号获得处理增益。
- 判决恢复:根据相关输出的符号进行判决(大于0判为1,小于等于0判为0),恢复出原始比特流。
- 误码统计:比对发送比特与接收判决比特,累计错误数量并计算BER。
5. 辅助与工具函数
- Hadamard矩阵生成:采用递归算法构建大小为 $2^n$ 的Hadamard矩阵。
- Q函数:实现了标准Q函数,基于互补误差函数(erfc)计算理论误码率,用于性能基准对比。
结果可视化说明
仿真结束后,系统将自动生成以下四组图表用于分析:
- 时域波形对比
* 展示特定用户的原始基带符号。
* 展示扩频后的Chip级信号,直观体现信号频率的提高。
* 展示多用户叠加并加扰后的最终发射波形,体现CDMA信号的类噪声特性。
- 功率谱密度 (PSD)
* 对比原始基带信号与扩频发射信号的频谱。
* 展示扩频技术如何将能量分散到更宽的频带上,从而降低功率谱密度。
- 接收端星座图
*
解扩前:展示接收到的含噪Chip信号,通常表现为杂乱无章的散点。
*
解扩后:展示经过相关器处理后的判决变量。可以清晰观察到,得益于扩频增益(Processing Gain),原本淹没在噪声中的信号分离为两个清晰的BPSK星座点。
- BER性能评估曲线
* 绘制
仿真BER曲线(蓝色):基于蒙特卡洛实验得出的实际误码率。
* 绘制
理论BER曲线(红色虚线):基于公式 $Q(sqrt{2 cdot E_b/N_0})$ 计算。此处代码正确考虑了扩频增益,将Chip级信噪比换算为了比特级能量噪声比 ($E_b/N_0 = SNR_{chip} times SF$)。
* 能够验证仿真结果与理论值的一致性。
使用方法
- 在MATLAB中打开包含代码的文件夹。
- 直接运行主函数。
- 观察命令窗口输出的实时SNR与BER数据。
- 运行结束后,查阅弹出的四个分析图表。