当前位置:   article > 正文

最小二乘算法MATLAB代码实现_matlab 白化滤波最小二乘法

matlab 白化滤波最小二乘法

最小二乘(Least Square)准则:以误差的平方和最小作为最佳准则的误差准则

定义式中, ξ(n)是误差信号的平方和;ej是j时刻的误差信号,

dj是j时刻的期望信号,Xj是j时刻的输入信号构成的向量, W表示滤波器的权系数构成的向量。通过选择W,使ξ(n)取得最小值的滤波称为最小二乘(Least Square,简称LS)滤波,而满足E[e2j]取得最小值的滤波称为最小均方误差(Least Mean Square, 简称LMS)滤波。

最小二乘法代码

  1. function [yn,W,en]=LMS(xn,dn,M,mu,itr)
  2. % LMS(Least Mean Squre)算法
  3. % 输入参数:
  4. % xn 输入的信号序列 (列向量)
  5. % dn 所期望的响应序列 (列向量)
  6. % M 滤波器的阶数 (标量)
  7. % mu 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
  8. % itr 迭代次数 (标量) 默认为xn的长度,M<itr<length(xn)
  9. % 输出参数:
  10. % W 滤波器的权值矩阵 (矩阵)
  11. % 大小为M x itr,
  12. % en 误差序列(itr x 1) (列向量)
  13. % yn 实际输出序列 (列向量)
  14. % 参数个数必须为4个或5
  15. if nargin == 4 % 4个时递归迭代的次数为xn的长度
  16. itr = length(xn);
  17. elseif nargin == 5 % 5个时满足M<itr<length(xn)
  18. if itr>length(xn) | itr<M
  19. error('迭代次数过大或过小!');
  20. end
  21. else
  22. error('请检查输入参数的个数!');
  23. end
  24. % 初始化参数
  25. en = zeros(itr,1); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
  26. W = zeros(M,itr); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0
  27. % 迭代计算
  28. for k = M:itr % 第k次迭代
  29. x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入
  30. y = W(:,k-1).' * x; % 滤波器的输出
  31. en(k) = dn(k) - y ; % 第k次迭代的误差
  32. % 滤波器权值计算的迭代式
  33. W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
  34. end
  35. % 求最优时滤波器的输出序列
  36. yn = inf * ones(size(xn));
  37. for k = M:length(xn)
  38. x = xn(k:-1:k-M+1);
  39. yn(k) = W(:,end).'* x;
  40. end

测试调用已经写好的最小二乘法算法

  1. %function main()
  2. close all
  3. % 周期信号的产生
  4. t=0:99;
  5. xs=10*sin(0.5*t);
  6. figure;
  7. subplot(2,1,1);
  8. plot(t,xs);grid;
  9. ylabel('幅值');
  10. title('{输入周期性信号}');
  11. % 噪声信号的产生
  12. randn('state',sum(100*clock));
  13. xn=randn(1,100);
  14. subplot(2,1,2);
  15. plot(t,xn);grid;
  16. ylabel('幅值');
  17. xlabel('时间');
  18. title('{随机噪声信号}');
  19. % 信号滤波
  20. xn = xs+xn;
  21. xn = xn.' ; % 输入信号序列
  22. dn = xs.' ; % 预期结果序列
  23. M = 20 ; % 滤波器的阶数
  24. rho_max = max(eig(xn*xn.')); % 输入信号相关矩阵的最大特征值
  25. mu = rand()*(1/rho_max) ; % 收敛因子 0 < mu < 1/rho
  26. [yn,W,en] = LMS(xn,dn,M,mu);
  27. % 绘制滤波器输入信号
  28. figure;
  29. subplot(2,1,1);
  30. plot(t,xn);grid;
  31. ylabel('幅值');
  32. xlabel('时间');
  33. title('{滤波器输入信号}');
  34. % 绘制自适应滤波器输出信号
  35. subplot(2,1,2);
  36. plot(t,yn);grid;
  37. ylabel('幅值');
  38. xlabel('时间');
  39. title('{自适应滤波器输出信号}');
  40. % 绘制自适应滤波器输出信号,预期输出信号和两者的误差
  41. figure
  42. plot(t,yn,'b',t,dn,'g',t,dn-yn,'r');grid;
  43. legend('自适应滤波器输出','预期输出','误差');
  44. ylabel('幅值');
  45. xlabel('时间');
  46. title('{自适应滤波器}');

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/117379
推荐阅读
相关标签
  

闽ICP备14008679号