自适应随机共振算法弱信号检测系统
项目简介
本项目实现了一个基于MATLAB平台的自适应随机共振(Stochastic Resonance, SR)弱信号检测系统。该系统旨在应对强噪声背景下微弱周期信号的提取难题。传统的随机共振系统极其依赖于非线性双稳态系统的结构参数(a, b),手动调节这些参数往往耗时且难以达到最佳效果。本项目引入粒子群优化算法(PSO),以系统输出信噪比(SNR)为评价指标,自适应地搜索最优系统参数,从而在当前噪声环境下实现最佳的“共振”状态,利用噪声能量显著增强微弱信号的特征频率幅值。
功能特性
- 微弱信号仿真环境:内置信号生成模块,能够模拟产生含高强度高斯白噪声的微弱低频周期信号,用于验证算法性能。
- 自适应参数寻优:采用粒子群优化算法(PSO),自动在指定搜索空间内寻找双稳态系统的最优参数组合(a, b),无需人工干预。
- 高精度数值求解:基于朗之万方程(Langevin Equation)构建双稳态模型,利用四阶龙格-库塔法(SR-RK4)进行高精度数值微分方程求解。
- 定量性能评估:通过FFT变换与功率谱密度分析,计算输入输出信噪比,量化信噪比增益。
- 多维度可视化分析:提供直观的时域波形对比和频域能够谱图对比,清晰展示随机共振前后的信号特征变化。
系统要求
- MATLAB R2016b 或更高版本
- 无需额外工具箱(算法基于基础数学函数实现)
使用方法
- 确保MATLAB环境已准备就绪。
- 打开 main.m 文件。
- 点击运行。
- 程序将在命令行窗口输出优化迭代过程(迭代次数、当前最佳SNR、对应参数)以及最终的信噪比增益结果。
- 程序运行结束时,会弹出一个包含四个子图的图形窗口,展示时域和频域的检测效果。
详细功能与实现逻辑
本项目主要通过 main.m 脚本实现,整体处理流程严格遵循以下四个步骤:
1. 信号初始化与仿真
系统首先设定采样频率及时间长度,生成一个频率为0.2Hz、幅值为0.3的微弱正弦信号。为了模拟恶劣的检测环境,系统向该信号中加入了强度为1.2的高斯白噪声。通过计算输入信号的功率谱,程序会先输出初始状态下的输入信噪比(Input SNR)。
2. PSO自适应参数寻优
这是本系统的核心模块。为了使非线性系统产生随机共振,需要调整系统参数 a 和 b。程序配置了粒子群优化算法(PSO):
- 种群设置:初始化20个粒子,最大迭代次数为30次。
- 搜索空间:参数 a 和 b 的搜索范围均设定在 [0.1, 5.0] 之间。
- 适应度函数:以随机共振输出信号的信噪比(Output SNR)作为适应度值。
- 迭代过程:在每一代中,每个粒子代表一组 (a, b) 参数,将其代入 RK4 求解器得到输出信号并计算 SNR。粒子根据个体历史最优和全局历史最优位置更新自身的速度和位置,由于目标是获得最大信噪比,算法会不断向高适应度区域收敛。
3. 数值求解与结果验证
一旦 PSO 算法完成迭代并锁定全局最优参数 (best_a, best_b),系统将最后一次调用 SR-RK4 求解器,利用这组最佳参数处理原始含噪信号,生成最终的优化输出信号。并在控制台打印最佳参数值、输出信噪比以及相对于输入的信噪比增益(dB)。
4. 频谱分析与绘图
系统对输入信号和SR输出信号分别进行 FFT 变换,计算并处理其单边幅度谱。最终生成的图形界面包含四个子图:
- 左上:输入信号的时域波形(展示纯净信号与含噪信号的对比)。
- 右上:SR输出信号的时域波形(展示经随机共振增强后的类似方波的周期信号)。
- 左下:输入信号的功率谱(通常淹没在噪声基底中)。
- 右下:SR输出信号的功率谱(展示特征频率处幅值的显著提升)。
关键算法与函数分析
主流程 (main)
负责统筹整个程序的生命周期,包括变量定义、PSO算法的主循环控制、全局最优值的更新逻辑以及最终的可视化绘图逻辑。它直接实现了 PSO 的速度更新公式和位置更新公式,并包含边界限制处理,防止参数越界。
用于数值求解的子函数 (sr_rk4_solver)
该函数实现了经典双稳态随机共振系统的数值解法。
- 数学模型:基于方程 dx/dt = ax - bx^3 + s(t)。
- 求解方法:采用四阶龙格-库塔法(Runge-Kutta 4th order),该方法比普通的欧拉法具有更高的精度和数值稳定性。
- 稳定性处理:代码中加入了对参数 a, b 的绝对值处理以及输出结果的 NaN/Inf 检查,防止在极端参数下导致数值计算发散。
用于计算信噪比的子函数 (calculate_snr)
该函数提供了一个量化的评价标准用于指导 PSO 优化。
- 计算原理:通过计算信号功率谱密度(PSD)实现。
- 信号功率提取:自动搜索目标频率(f_target)附近的峰值作为信号功率。
- 噪声功率估算:计算排除直流分量和目标信号频率邻域后的频谱平均能量作为噪声基底功率。
- 输出:返回以分贝(dB)为单位的信噪比数值。