自适应滤波
自适应滤波,就是利用前一时刻以获得的滤波器参数的结果,自动的调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一种能调节自身传输特性以达到最优的维纳滤波器。自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理。
自适应噪声抵消
(维纳滤波——线性滤波器)
不相关序列的统计平均值为零的原理是基于平均数的概念。
误差信号的最小均方值就是肠鸣音信号的最优估计。
但是需要肠鸣音信号与参考信号(噪声)不相关。若相关,需要知道输入信号的自相关矩阵和期望信号与输入信号的互相关矩阵。
问题:
1.虽然维纳解知道了,但两个相关矩阵不知道
2.如果信号非平稳,PR每次都不一样
最小均方误差准则的维纳滤波(LMS)
LMS算法是基于维纳滤波,然后借助于最速下降算法发展起来的。
通过维纳滤波所求解的维纳解,必须在已知输入信号与期望信号的先验统计信息,以及再对输入信号的自相关矩阵进行求逆运算的情况下才能得以确定。因此,这个维纳解仅仅是理论上的一种最优解。所以,又借助于最速下降算法,以递归的方式来逼近这个维纳解,从而避免了矩阵求逆运算,但仍然需要信号的先验信息,故而再使用瞬时误差的平方来代替均方误差,从而最终得出了LMS算法。
理论模型&代码实现
代码如下(示例):
% 输入参数:
% xn 输入的信号
% dn 所期望的响应
% M 滤波器的阶数
% mu 收敛因子(步长)
% 输出参数:
% W 滤波器系数矩阵
% en 误差序列
% yn 滤波器输出
function [yn, W, en]=lmsFunc(xn, dn, M, mu)
itr = length(xn);
en = zeros(itr,1);
W = zeros(M,itr); % 每一列代表-次迭代,初始为0
% 迭代计算
for k = M:itr % 第k次迭代
x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入
y = W(:,k-1).' * x; % 滤波器的输出
en(k) = dn(k) - y ; % 第k次迭代的误差
% 滤波器权值计算的迭代式
W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end
yn = inf * ones(size(xn)); % 初值为无穷大是绘图使用,无穷大处不会绘图
for k = M:length(xn)
x = xn(k:-1:k-M+1);
yn(k) = W(:,end).'* x; % 最终输出结果
end