基于随机集理论的动态多用户检测算法MATLAB仿真
项目简介
本项目利用MATLAB复现了基于随机有限集(Random Finite Set, RFS)理论在动态多用户检测(MUD)中的应用。项目核心在于解决非正交接入或CDMA系统中,当活跃用户数量未知且随时间动态变化(随机接入与退出)时的信号检测与信道状态估计问题。
通过应用高斯混合概率假设密度(GM-PHD)滤波器,本仿真不仅估计活跃用户的数量(基数),还实时跟踪每个用户的复数信道增益及其变化率。该方法避免了传统多用户检测中对联合概率密度函数计算的高维灾难,适用于非线性非高斯的通信信道环境。
功能特性
- 动态多用户建模:放弃了固定维数的传统向量建模,采用随机有限集(RFS)将多用户系统中的活跃用户集合及其信道状态进行数学描述,严谨地模拟了用户的随机“出生”(接入)和“死亡”(退出)过程。
- 非高斯环境仿真:内置了包含加性高斯白噪声(AWGN)和泊松分布杂波(Clutter)的混合观测环境,模拟真实的通信接收场景。
- 贝叶斯滤波算法:完整实现了GM-PHD滤波器的递归流程,通过强度函数(Intensity Function)的传播来近似多目标后验密度。
- 联合检测与估计:在接收端处理含噪信号,能够从杂波中区分出真实用户,并输出当前时刻活跃用户的数量估计以及每个用户的信道状态。
系统要求
- MATLAB R2016b 或更高版本
- 统计与机器学习工具箱(Statistics and Machine Learning Toolbox)- 用于生成概率分布数据
代码实现逻辑详解
主仿真脚本完全基于MATLAB编写,其内部逻辑流程严格遵循GM-PHD算法的标准框架,具体包含以下三个核心部分:
1. 系统参数设置与初始化
代码首先定义了通信系统与滤波器的关键参数:
- 通信参数:包括仿真步数、最大用户数、信噪比(SNR)、用户存活概率(模拟Markov过程)、新生概率以及检测概率(PD)。
- 杂波模型:定义了泊松分布的平均杂波率和复平面信道系数的观测范围,用于模拟虚警信号。
- 滤波器阈值:设置了剪枝(Pruning)和合并(Merging)的阈值,以及高斯分量的最大数量限制,以平衡计算精度与复杂度。
2. 地面真值(Ground Truth)与观测数据生成
仿真构建了一个动态变化的“真实世界”场景:
- 状态空间模型:采用常速(CV)模型描述信道系数的变化。状态向量包含四个维度:信道实部位置、信道虚部位置、实部变化率、虚部变化率。
- 用户动态演化:
*
存活:遍历上一时刻的活跃用户,根据存活概率判定其是否保留,并叠加过程噪声更新状态。
*
新生:通过泊松分布决定每一帧新接入的用户数量,并从预设的高斯混合模型(Birth Model)中随机初始化新用户的位置和速度。
*
信号生成:通过观测矩阵提取真实用户的信道位置,叠加由SNR决定的高斯白噪声。
*
杂波生成:在观测区域内根据泊松率生成均匀分布的随机杂波点。
*
漏检模拟:根据检测概率随机决定某些真实用户在当前时刻是否产生观测值。
3. GM-PHD 滤波算法主循环
这是代码的核心处理部分,通过递推方式估计多用户状态:
- 初始化:建立空的权重、均值和协方差集合。
- 预测步骤 (Prediction):
* 调用预测函数,结合用户存活概率和状态转移矩阵,将上一时刻的高斯分量预测到当前时刻。
* 同时叠加新生用户的高斯混合模型分量,以此覆盖潜在的新用户接入区域。
* 计算杂波空间密度(Kappa)。
* 调用更新函数,利用当前时刻的观测集合(含噪声和杂波),根据贝叶斯规则更新预测分量的权重、均值和协方差。此步骤修正了预测偏差并抑制了杂波影响。
- 剪枝与合并 (Pruning & Merging):
* 为了防止高斯分量数量随时间指数级增长,调用剪枝函数删除权重极低的分量。
* 合并状态空间距离过近的分量,近似为一个高斯分布,从而控制计算量。
* 遍历处理后的高斯分量,提取权重超过特定阈值(如0.5)的分量均值,作为当前时刻检测到的活跃用户信道状态估计值。
关键算法与函数说明
虽然代码未展示具体的子函数文件,但主流程中调用的关键逻辑如下:
- gm_phd_predict: 执行卡尔曼滤波的预测步骤,处理存活目标的高斯分量演化,并合并新生目标的高斯分量。
- gm_phd_update: 核心更新逻辑。对于每一个观测值,计算其与现有高斯分量的关联程度(似然比),调整分量权重。未被观测值验证的分量权重会降低,而被验证的分量权重会增加。
- gm_phd_prune: 资源管理逻辑。通过设定的截断阈值和合并距离阈值,动态维护高斯混合项的规模,确保算法实时性。
使用方法
- 确保MATLAB路径中包含所有相关辅助函数文件(如预测、更新、剪枝函数的实现)。
- 直接运行主仿真脚本。
- 程序将自动执行数据生成、滤波处理,并计算估计误差(注:代码中预留了OSPA距离和RMSE的存储数组,表明程序设计目的是为了进行统计性能分析)。
性能评估指标
代码中预留了以下数据结构用于后续的性能绘图与分析:
- OSPA History: 用于存储最优子模式分配距离,综合评价基数估计误差和状态空间位置误差。
- Cardinality RMSE: 活跃用户数量估计的均方根误差。
- True/Est Cardinality: 真实用户数量与估计用户数量的对比记录,用于直观展示检测性能。