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