基于Nandi特征参数的软件无线电调制识别仿真系统
项目简介
本项目是一个针对软件无线电(SDR)领域自动调制识别(AMC)课题开发的MATLAB仿真系统。程序严格遵循并复现了Azzouz和Nandi提出的经典调制识别理论,通过提取信号的瞬时幅度、瞬时相位和瞬时频率等关键统计特征,实现了对多种模拟与数字调制信号的自动分类与识别。
该系统不仅实现了信号的生成与加噪,还构建了完整的特征提取与决策树分类流程,详细仿真了在不同信噪比(SNR)环境下算法的鲁棒性。这为通信对抗、频谱监测及认知无线电领域的研究提供了可靠的算法验证平台和代码参考。
主要功能特性
1. 多样化信号生成
系统支持生成六种典型的数字调制信号,涵盖了幅度、相位和频率调制:
- ASK类:2ASK (OOK), 4ASK
- PSK类:2PSK (BPSK), 4PSK (QPSK)
- FSK类:2FSK, 4FSK
2. 高保真信道模拟
- 支持自定义采样频率、载波频率、符号速率等系统参数。
- 内置高斯白噪声(AWGN)信道模型,支持在宽范围信噪比(-5dB 至 20dB)下测试算法性能。
3. Nandi关键特征提取
利用Hilbert变换提取解析信号,计算下列核心特征参数用于分类:
- Gamma_max ($gamma_{max}$):瞬时幅度归一化功率谱密度的最大值,用于区分恒包络与非恒包络信号。
- Sigma_aa ($sigma_{aa}$):绝对归一化瞬时幅度的标准差。
- Sigma_dp ($sigma_{dp}$):非线性瞬时相位(去除载波线性趋势后)的标准差。
- Sigma_ap ($sigma_{ap}$):绝对非线性瞬时相位的标准差。
- Sigma_af ($sigma_{af}$):绝对归一化中心瞬时频率的标准差,用于区分频率调制信号。
4. 决策树分类器
实现了一个基于经验阈值的多层逻辑判决树,能够根据提取的特征自动判定调制类型。
5. 可视化分析
- 识别率曲线:绘制在不同SNR下的总体识别准确率变化趋势。
- 混淆矩阵:展示在高信噪比条件下的详细分类结果,便于分析误判情况。
---
算法实现细节与逻辑
本仿真程序的核心流程严格按照“信号生成 -> 特征提取 -> 分类判决”的逻辑执行,以下是各模块的详细实现说明:
1. 信号生成模块
程序首先生成随机比特流,然后根据不同的调制原理映射为基带符号,最后加载到20kHz的载波上。
- ASK:通过脉冲幅度调制生成,2ASK使用OOK方式,4ASK使用多电平映射。
- PSK:通过相位映射生成,BPSK相位偏移$pi$,QPSK包含I/Q两路正交分量。
- FSK:通过频率偏移生成,保证了相位的连续性(CPFSK模型)。
- 生成后的信号会叠加指定功率的高斯白噪声以模拟真实信道环境。
2. 特征提取模块 (Nandi算法核心)
对接收到的实信号进行Hilbert变换得到解析信号 $z(t)$,进而计算:
- 瞬时幅度:$a(t) = |z(t)|$
- 瞬时相位:$phi(t) = text{unwrap}(text{angle}(z(t)))$
- 瞬时频率:通过相位差分获得,并去除了直流分量(载波)。
基于上述瞬时量,计算Nandi定义的统计量。例如,计算 $gamma_{max}$ 时,对归一化幅度的自相关谱进行了FFT变换;计算相位特征时,通过线性拟合去除了载波引起的线性相位趋势,仅保留非线性相位波动。
3. 分类判决逻辑
分类器采用分层决策树结构,逻辑如下:
*
依据:检查 $gamma_{max}$ 和 $sigma_{aa}$。若数值较大(超过设定阈值),判定为ASK信号。
*
子分类:在ASK类内部,利用 $gamma_{max}$ 的大小区分 2ASK 和 4ASK。由于2ASK (OOK) 包含零电平,其频谱波动特性通常比4ASK更为剧烈。
*
依据:针对非ASK信号,检查频率标准差 $sigma_{af}$。FSK信号的频率随符号跳变,该值较大。
*
子分类:根据 $sigma_{af}$ 的数值大小区分 2FSK 和 4FSK(4ASK频偏跨度更大,方差更高)。
*
依据:若 $sigma_{af}$ 较小,则判定为PSK信号。
*
子分类:利用绝对非线性相位的标准差 $sigma_{ap}$ 区分 2PSK 和 4PSK。4PSK的相位分布点更多,在特定归一化下统计特性与2PSK存在差异。
---
使用方法
- 环境准备:确保安装了 MATLAB 软件(推荐 R2016b 及以上版本)。
- 运行仿真:
* 直接运行主函数脚本。
* 程序将自动初始化参数,开始蒙特卡洛仿真循环。
* 控制台会实时输出当前的进度(处理的SNR点)以及总耗时。
- 参数调整:
* 在代码开头的
sys_params 结构体中修改系统参数。
*
Fs,
Fc,
Rb:调整采样率、载波和速率。
*
SNR_dB:修改信噪比扫描范围。
*
MonteCarlo:增加次数以获得更平滑的曲线(默认100次)。
- 查看结果:
* 仿真结束后会自动弹出一个图形窗口。
* 左侧子图显示识别准确率随信噪比变化的曲线。
* 右侧子图显示在最高信噪比下的分类混淆矩阵。
系统要求
- 软件:MATLAB
- 工具箱:Signal Processing Toolbox (用于
hilbert, rectpulse 等函数) - 硬件:标准PC即可,仿真耗时取决于蒙特卡洛次数和信噪比点数。