最小二乘(Least Square)准则:以误差的平方和最小作为最佳准则的误差准则
定义式中, ξ(n)是误差信号的平方和;ej是j时刻的误差信号,
dj是j时刻的期望信号,Xj是j时刻的输入信号构成的向量, W表示滤波器的权系数构成的向量。通过选择W,使ξ(n)取得最小值的滤波称为最小二乘(Least Square,简称LS)滤波,而满足E[e2j]取得最小值的滤波称为最小均方误差(Least Mean Square, 简称LMS)滤波。
最小二乘法代码
function [yn,W,en]=LMS(xn,dn,M,mu,itr)
% LMS(Least Mean Squre)算法
% 输入参数:
% xn 输入的信号序列 (列向量)
% dn 所期望的响应序列 (列向量)
% M 滤波器的阶数 (标量)
% mu 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
% itr 迭代次数 (标量) 默认为xn的长度,Mlength(xn) | itr
测试调用已经写好的最小二乘法算法
%function main()
close all
% 周期信号的产生
t=0:99;
xs=10*sin(0.5*t);
figure;
subplot(2,1,1);
plot(t,xs);grid;
ylabel('幅值');
title('{输入周期性信号}');
% 噪声信号的产生
randn('state',sum(100*clock));
xn=randn(1,100);
subplot(2,1,2);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('{随机噪声信号}');
% 信号滤波
xn = xs+xn;
xn = xn.' ; % 输入信号序列
dn = xs.' ; % 预期结果序列
M = 20 ; % 滤波器的阶数
rho_max = max(eig(xn*xn.')); % 输入信号相关矩阵的最大特征值
mu = rand()*(1/rho_max) ; % 收敛因子 0 < mu < 1/rho
[yn,W,en] = LMS(xn,dn,M,mu);
% 绘制滤波器输入信号
figure;
subplot(2,1,1);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('{滤波器输入信号}');
% 绘制自适应滤波器输出信号
subplot(2,1,2);
plot(t,yn);grid;
ylabel('幅值');
xlabel('时间');
title('{自适应滤波器输出信号}');
% 绘制自适应滤波器输出信号,预期输出信号和两者的误差
figure
plot(t,yn,'b',t,dn,'g',t,dn-yn,'r');grid;
legend('自适应滤波器输出','预期输出','误差');
ylabel('幅值');
xlabel('时间');
title('{自适应滤波器}');