自适应滤波器方法之最小均方(LMS)算法
- 滤波器的作用:改变信号频谱
- 自适应滤波器:一种能够根据输入信号自动调整自身参数的数字滤波器。不需要事先知道输入信号和噪声的统计特性,是处理非平稳信号的有效手段。
1 定义
- 滤波器参数:
N
N
N个独立的滤波器系数组成的向量
w ( n ) = [ w 0 ( n ) , w 1 ( n ) , ⋯ , w N − 1 ( n ) ] T \mathbf{w}(n)={[w_0(n),w_1(n),\cdots,w_{N-1}(n)]}^T w(n)=[w0(n),w1(n),⋯,wN−1(n)]T - 输入信号:假设是一个实数信号(语音时域信号)
x ( n ) = ( [ x ( n ) , x ( n − 1 ) , ⋯ , x ( n − N + 1 ) ] ) T \mathbf{x}(n)=([x(n),x(n-1),\cdots,x(n-N+1)])^T x(n)=([x(n),x(n−1),⋯,x(n−N+1)])T - 输出信号:滤波器系数和输入信号的线性卷积,为实际输出
y ( n ) = ∑ i = 0 N − 1 w i ( n ) x ( n − i ) = w T ( n ) x ( n ) = x T ( n ) w ( n ) y(n)=\sum_{i=0}^{N-1}w_i(n)x(n-i)=\mathbf{w}^T(n)\mathbf{x}(n)=\mathbf{x}^T(n)\mathbf{w}(n) y(n)=i=0∑N−1wi(n)x(n−i)=wT(n)x(n)=xT(n)w(n) - 期望输出: d ( n ) d(n) d(n)
- 误差信号——后验误差:用
n
n
n时刻的滤波器系数向量去计算
n
n
n时刻的误差
e ( n ) = d ( n ) − y ( n ) = d ( n ) − w T ( n ) x ( n ) e(n)=d(n)-y(n)=d(n)-\mathbf{w}^T(n)\mathbf{x}(n) e(n)=d(n)−y(n)=d(n)−wT(n)x(n) - 目标函数:最小均方误差(MMSE)准则
J ( w ) = E { ∣ e ( n ) ∣ 2 } = E { ∣ d ( n ) − w T ( n ) x ( n ) ∣ 2 } J(\mathbf{w})=E \{{|e(n)|}^2\}=E\{|d(n)-\mathbf{w}^T(n)\mathbf{x}(n)|^2\} J(w)=E{∣e(n)∣2}=E{∣d(n)−wT(n)x(n)∣2} - 最小化目标函数:令
J
(
w
)
J(\mathbf{w})
J(w)对
w
\mathbf{w}
w的导数为
0
\mathbf{0}
0
E { x ( n ) x T ( n ) } w ( n ) − E { x ( n ) d ( n ) } = R w − r = 0 E\{\mathbf{x}(n)\mathbf{x}^T(n)\}\mathbf{w}(n)-E\{\mathbf{x}(n)d(n)\}=\mathbf{Rw-r=0} E{x(n)xT(n)}w(n)−E{x(n)d(n)}=Rw−r=0
(1) E { x ( n ) x T ( n ) } E\{\mathbf{x}(n)\mathbf{x}^T(n)\} E{x(n)xT(n)}包含了输入向量 x ( n ) \mathbf{x}(n) x(n)相关矩阵的信息,记作 R \mathbf{R} R
(2) E { x ( n ) d ( n ) } E\{\mathbf{x}(n)d(n)\} E{x(n)d(n)}包含了输入向量 x ( n ) \mathbf{x}(n) x(n)和期望输出信号 d ( n ) d(n) d(n)之间的相关向量,记作 r \mathbf{r} r - 维纳(Wiener)滤波器:均方误差最小意义上的统计最优滤波器
w o p t = R − 1 r \mathbf{w}_{opt}=\mathbf{R}^{-1}\mathbf{r} wopt=R−1r
2 Wiener滤波器的优缺点
- 优点:有非常高的理论价值
- 缺点:本质上不是自适应滤波器,不适用于非平稳过程或信号
- 分析:求期望时必须利用全部的历史数据(
N
N
N时刻之前)和当前数据(
N
N
N时刻)来估计当前信号的统计值。一旦下一时刻(
N
+
1
N+1
N+1时刻)来了新的采样点
x
(
n
+
1
)
x(n+1)
x(n+1),需要重新更新计算期望值(
R
R
R和
r
r
r)。这样一来:
(1)很不划算
(2)输入的若为非平稳信号,由于其统计特性随时间变化而变化,会使得求解不准确
3 基本LMS算法
- 为了避免涉及数学期望,使用目标函数的瞬时梯度代替数学期望:
▽ ^ ( n ) = − 2 e ( n ) x ( n ) \hat{\triangledown}(n)=-2e(n)\mathbf{x}(n) ▽^(n)=−2e(n)x(n) - 基于采样点更新的标准时域LMS算法的逐点更新公式:新时刻的滤波器系数向量=老时刻的滤波器系数向量+(负梯度方向的)调整量
w ( n + 1 ) = w ( n ) + 2 μ x ( n ) e ( n ) \mathbf{w}(n+1)=\mathbf{w}(n)+2\mu\mathbf{x}(n)e(n) w(n+1)=w(n)+2μx(n)e(n)
其中, μ \mu μ为调整步长,是一个经验值
4 标准LMS算法的执行流程
- 滤波器初始化: w ( 0 ) 、 x ( 0 ) \mathbf{w}(0)、\mathbf{x}(0) w(0)、x(0)
- 对每一个新的输入采样 x ( n ) x(n) x(n),计算输出信号 y ( n ) y(n) y(n)
- 利用更新公式更新滤波器系数 w ( n ) \mathbf{w}(n) w(n)
- 循环2~3直到得到输出序列和误差序列
5 总结
- LMS算法的基本思想:梯度下降
瞬时梯度的数学期望 = 真实梯度(瞬时梯度是真实梯度的无偏估计)
- LMS算法的优点:算法简单,容易实现
- LMS算法的缺点:收敛速度慢,跟踪性能差
因为估计方差(即梯度噪声)不为0,对于每一步来讲,瞬时梯度一定不等于真实梯度,即中间的估计存在噪声
梯度噪声:会导致滤波器的每一次更新都不会严格按照真实梯度方法进行,而是有一定偏差
但梯度噪声并不是一无是处,它能够帮助跳出那些可能存在的局部最优值,从而向全局最优值方法继续移动
- LMS算法的改进思路:block LMS
block LMS:累计block个采样点后更新一次滤波器系数
优点:可以减少梯度噪声每一个block的梯度仍然是每一个采样点产生的瞬时梯度的求和,因此它仍然是真实梯度的无偏估计
但由于累积的采样点更多,因此方差更小
6 逼逼叨
…好累啊这个,不想弄了…