文档详情

最新LMS算法matlab实现资料.pdf

发布:2020-09-09约6.24千字共7页下载文档
文本预览下载声明
精品文档 LMS 算法 function [yn,W,en]=LMS(xn,dn,M,mu,itr) % LMS(Least Mean Squre) 算法 % 输入参数 : % xn 输入的信号序列 (列向量 ) % dn 所期望的响应序列 (列向量 ) % M 滤波器的阶数 (标量 ) % mu 收敛因子 (步长 ) (标量 ) 要求大于 0,小于 xn 的相关矩阵最大特征值 的倒数 % itr 迭代次数 (标量 ) 默认为 xn 的长度 ,Mitrlength(xn) % 输出参数 : % W 滤波器的权值矩阵 (矩阵 ) % 大小为 M x itr, % en 误差序列 (itr x 1) (列向量 ) % yn 实际输出序列 ( 列向量 ) % 参数个数必须为 4 个或 5 个 if nargin == 4 % 4 个时递归迭代的次数为 xn 的长度 itr = length(xn); elseif nargin == 5 % 5 个时满足 Mitrlength(xn) if itrlength(xn) | itrM error( 迭代次数过大或过小 !); end else error(请检查输入参数的个数 !); end % 初始化参数 en = zeros(itr,1); % 误差序列 ,en(k)表示第 k 次迭代时预期输出与实际输入的 误差 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 精品文档 精品文档 调用 LMS 算法 %function main() close all % 周期信号的产生 t=0:99; xs=10*sin(0.5*t); figure; subplot(2,1,1); plot(t,xs);grid; ylabel( 幅值 ); title(it{ 输入周期性信号 }); % 噪声信号的产生 randn(state,sum(100*clock)); xn=randn(1,100); subplot(2,1,2); plot(t,xn);grid; ylabel( 幅值 ); xlabel( 时间 ); title(it{ 随机噪声信号 }); % 信号滤波 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);
显示全部
相似文档