Page 106 - 201806
P. 106
936 2018 年 11 月
∆ (1, 1) V 的第一列作为更新后的稀疏系数。按照 为帧数)。其次,利用 DCT得到一个n × n维的字典
ˆ
上述过程得到新的字典D。 D 1 (n 为帧长),则初始过完备字典 D = [D 1 D 1 ],
字典D 的维度为n × 2n,并对初始字典D 进行归一
2.2 传统OMP算法的基本理论
化处理。
OMP 算法选择字典原子在信号投影上的最大
值来表达原信号,每次选择的原子都与之前的原子 3.2 基于K-SVD和改进OMP算法的字典更新
正交。算法的具体流程如下: 3.2.1 OMP算法运算速度改进
步骤一 设置参数,假设含噪语音用 y 表示,字 在传统的 OMP 算法中,其算法都是通过矩阵
典为D,稀疏度为T,x为稀疏系数。 运算来实现的,想要进行算法运算速度的改进,可以
步骤二 初始化,设残差 r (0) = y,索引集 通过减少矩阵运算次数和维度来实现。这里就是将
Λ = 0,迭代因子j = 1,最大迭代次数为k。迭代过 求解原信号稀疏逼近的运算过程进行相应的矩阵
0
程如下: 变换,来减少原运算的次数和维度,从而提高 OMP
(1) 寻找残差 r (j−1) 与字典 D 中的某列 d j 内 算法的运算速度。再利用最小二乘法求得x k 的j 阶
积最大值所对应的下标λ,即 逼近,已知信号 y 和字典 D 求 x 的 k 稀疏逼近 x k ,
用矩阵可以表示为
λ = arg max ⟨r (j−1) , d j ⟩ . (3)
j=1,··· ,N + T T −1
x k = D y = D (DD ) y. (7)
(2) 更新索引集 Λ (j) ,令 Λ (j) (j) = λ。更新字
为了减少稀疏逼近x k 的计算量,运用所学的矩
典的原子:
阵知识,可以将式(7)改写成
D (j) = D(:, Λ (j) (1 : j)). (4) + T T −1
x k = D y = D (D D) y, (8)
(3) 利用最小二乘法得到x k 的j 阶逼近:
T
其中,D D 为对称的正定矩阵,在每次的字典更新
(j)
(j)
x = argmin
y − D x k
. (5) 时都能找到一原子向量d,则新的字典可以表示为
k
(4) 更新残差: D = [D, d]. (9)
e
(j) (j) (j) 用上面的新字典计算x k 时,表达式为
λ = y − D x ; j = j + 1. (6)
k
e T e −1
(5) 判断迭代是否结束。如果j > k,则结束;否 x k = (D D) y, (10)
则,从1循环。
T
T
D T D D D d
步骤三 输出x的k 稀疏逼近x k 。 D D= [ D d = , (11)
]
e T e
T
T
由以上流程可看出,OMP 算法只是用来得到 d T d D d d
原信号的最佳稀疏逼近,也就是尽可能地重构原信 其中,D D 的集合乘积是由 D DD D、D d、
T
T
T
e T e
号。对于含噪语音,传统OMP算法只是重构出含噪 d D 和d d四部分组成。D D 是上一次运算的结
T
T
T
语音,并不能达到去噪效果。为了能让OMP算法只 果,因此就没必要每次都计算一遍,而只需对原来的
重构出含噪语音中的干净语音,就要对其就行改进。 矩阵更新一列和一行即可。D d和d D 互为转置,
T
T
同时 OMP 算法是一种追踪算法,但与其他追踪算 也只需计算其中一个就行。d d 是d 的二范数的平
T
法相比,利用最小二乘法求解稀疏逼近,其运算速度 方,可直接调用函数norm( )求得。这样就降低了原
并不具有优势,针对这一问题,这里也将进行 OMP 运算的计算次数和维度,从而提高了 OMP 算法的
算法运算速度的改进。 运算速度。
3.2.2 K-SVD与改进OMP算法的字典更新
3 改进的OMP算法的稀疏去噪
本文将用第 3.1 节初始归一化后的过完备字典
3.1 初始化 D 作为 K-SVD 算法的初始化字典,来训练干净语
首先,读入含噪语音存为y,将y 分帧处理,可得 音。通过第 2.1 节中的 K-SVD 算法与第 3.2.1 节改
ˆ
一个维度为 n × m 的二维矩阵 A n×m (n 为帧长,m 进的OMP算法相结合来获得干净语音的字典D。