基于多级随机共振与OMP正交匹配追踪的微弱信号去噪算法MATLAB仿真

基于多级随机共振与OMP正交匹配追踪的微弱信号去噪算法MATLAB仿真 目录1.引言2.算法测试效果3.算法涉及理论知识概要3.1 多级随机共振原理3.2 字典学习与OMP正交匹配追踪原理3.3 完整算法实现流程4.核心程序5.完整算法代码文件获得1.引言本文针对低信噪比下扩频导航信号被强噪声淹没难以有效接收的问题采用多级串联随机共振结合字典学习正交匹配追踪(OMP)的联合处理方案完成信号去噪复原。接收信号为导航扩频信号载波频率4.092MHz采样频率204.6MHzCA码速率2.046Mcps数据码速率50bps二次调制码速率1Kbps。在AWGN高斯白噪声环境下当信噪比下降至‑20dB时原始信号波形会完全被噪声掩盖传统滤波方法难以提取有效信号本方案首先依靠多级随机共振利用噪声能量增强微弱信号再通过字典学习与OMP稀疏重构进一步滤除残余噪声最终实现微弱扩频信号恢复。2.算法测试效果3.算法涉及理论知识概要3.1 多级随机共振原理随机共振区别于传统降噪思路传统降噪尽可能抑制噪声而随机共振可以利用部分噪声能量将噪声的能量向有用信号转移实现微弱信号的增强。单级随机共振的信号增强能力存在上限受系统势阱参数限制对极低信噪比信号提升有限因此系统采用三级串联多级随机共振结构将前一级随机共振的输出作为后一级的输入逐级完成信号增强累积信号增益进一步挖掘噪声的辅助增强效果。随机共振系统采用朗之万方程描述二阶朗之万系统表达式该微分方程没有解析解工程仿真中采用四阶龙格‑库塔算法对微分方程做离散数值求解。考虑系统为实时数据流处理不能对完整长信号一次性运算需要对输入带噪信号做分段处理每段数据长度为FLEN逐段送入随机共振模块迭代运算。同时系统引入FFT频率反馈机制第一次迭代没有频率估计结果反馈频率置0后续每一段信号处理完成后对输出做FFT频谱分析估计得到载波频率\(F_{est}\)将该频率反馈回输入端完成多普勒频偏修正补偿传输过程带来的载波频率偏移提升随机共振处理效果。Simulink仿真中噪声源必须使用AWGN模块生成高斯白噪声AWGN模块可以精准设定输入信噪比SNR能够严格控制噪声功率若直接使用随机数模块生成噪声噪声功率不可控多次仿真噪声统计特性不一致实验结果不具备可复现性。仿真分别在SNR10dB、0dB、‑10dB、‑20dB条件下做对比测试无随机共振处理时SNR降低到‑20dB原始载波信号完全淹没在噪声经过三级串联随机共振处理之后即使‑20dB极低信噪比场景信号波形得到显著增强但输出仍然残留大量噪声分量仅依靠随机共振无法实现高质量信号复原需要后续稀疏重构进一步降噪。3.2 字典学习与OMP正交匹配追踪原理经过多级随机共振增强后的信号还存在残余噪声利用信号在变换域具备稀疏性的特点采用字典学习结合正交匹配追踪OMP算法完成信号稀疏表示与重构降噪。信号稀疏表示含义原始信号Y可以被过完备字典D中少量原子线性组合近似表达满足式中Y为经过多级随机共振输出的待处理信号D为过完备原子字典X为稀疏系数矩阵稀疏系数矩阵只有少量非零元素非零元素的数量由稀疏度决定本系统设置稀疏度(step4)代表信号可以用原维度1/(step*step)数量的原子进行表征。3.3 完整算法实现流程1.信号预处理与分段接收带噪扩频信号采用 AWGN 模块添加指定信噪比高斯白噪声将长信号切分为长度FLEN的分段数据块逐块送入处理链路。2.多级随机共振增强将分段信号送入三级串联随机共振系统使用四阶龙格‑库塔求解朗之万动力学方程首段频率反馈置零后续分段对输出做FFT频谱估计得到载波频率Fest反馈输入端完成多普勒频偏修正输出经过噪声能量转移增强后的信号。3.过完备DCT字典初始化利用离散余弦基生成初始字典经过向量归一化、克罗内克积得到二维过完备字典。4.OMP稀疏分解将随机共振输出信号作为样本集执行OMP正交匹配追踪贪婪算法迭代求解稀疏系数矩阵迭代终止条件为达到稀疏度上限或者残差低于误差阈值。5.字典原子迭代更新逐个遍历字典原子筛选对应样本子集计算局部残差矩阵执行SVD奇异分解更新字典原子将迭代残差作为下一轮输入循环优化字典。6.信号重构输出利用优化后的字典与稀疏系数矩阵完成信号重构输出最终去噪恢复的扩频信号。4.核心程序clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default) LEN 10000; load mat\awgnsignal2.mat time2 ans.Time; for i 1:length(time2) Xawgn(i,1) ans.Data(1,1,i); end figure; subplot(211); plot(time2(1:LEN),Xawgn(1:LEN));title(噪声信号); xlim([0,time2(LEN)]); xstage1func_gz(1.8,0.01,0.1,Xawgn); xstage2func_gz(1.8,0.01,0.1,xstage1); xstage3func_gz(1.8,0.01,0.1,xstage2); xstage3(1:200)[]; xstage3xstage3-mean(xstage3); xstage3xstage3/max(abs(xstage3)); subplot(212); plot(time2(1:LEN),xstage3(1:LEN));title(随机共振信号); xlim([0,time2(LEN)]);5.完整算法代码文件获得完整程序见博客首页左侧或者打开本文底部GZH名片V关注后回复码X151V