基于稀疏编码的信号去噪

一、前言
通过把含噪信号在合适的原子库上进行分解,可以得到更加集中的分解系数,也就是说仅通过字典中的少数原子的线性组合即可表示出信号,再通过分离信号有效成分和噪声成分对应的系数,再重构出信号的有效成分,可以达到去除噪声的目的。
二、KSVD算法
信号关于字典的稀疏表示数学模型:
min||X||0st||YDX||2F
min||YDX||2Fst||X||0T0
式中,Y是样本矩阵,每一列均为一个样本,大小为n*N,D是过完备字典,大小为n*K,X是稀疏矩阵,大小为K*N。 ||||0 L0 范数,表示向量的非零项。X与Y按列对应,表示D中元素按照 Xi 为系数线性组合为Y。
目的是找到让X尽量稀疏的D
这里写图片描述
三、算法求解
首先,设定一个初始化的字典,然后用匹配追踪(MP)、正交匹配追踪(OMP)或基寻踪(BP)等信号分解算法的到稀疏系数矩阵X。再固定矩阵X,逐列更新字典D,即仅对字典D的第k个原子进行更新,其他原子都保持不变。
字典D的更新是逐列进行的。首先假设系数矩阵X和字典D都是固定的,将要更新的是字典的第k列 dk ,系数矩阵X中 dk 对应第k行为 Xk ,则
这里写图片描述
得到当前误差矩阵Ek后,我们只需要调整 dk Xk ,使其乘积与 Ek 的误差尽可能的小。对于上面的问题,如果直接用 Ek 的SVD分解结果来更新 dk Xk ,则会导致 Xk 不稀疏,出现”发散”。换句话说,与更新 dk 前的非零元所处位置和value不一样。怎么办呢?我们可以只保留系数中的非零值,再进行SVD分解就不会出现这种现象了。所以对 Ek Xk 做变换, Xk 中只保留X中非零位置的, Ek 只保留 dk Xk 中非零位置乘积后的那些项。然后做SVD分解,更新 dk
四、去噪
基于稀疏编码的信号去噪分为两个步骤:字典训练以及稀疏编码。首先需要获取先验的信号字典,对于与信号相关的噪声,也需要获取先验的噪声字典。然后用信号字典与噪声字典的混合字典对带有噪声的信号进行稀疏编码。这样信号字典所编码的成分,即为真实信号的估计值,噪声字典所编码的成分为噪声信号中结构化成分,而最后噪声中的非结构化成分会残留在残差中。
五、程序

猜你喜欢

转载自blog.csdn.net/weixin_38900691/article/details/78317906