当前位置:首页 > > FPGA开源工作室

自适应滤波器(Adaptive Filter)(1)–简介
自适应滤波器(adaptive filter)(2)–LMS算法

自适应滤波器的介绍与LMS算法推到过程可参照以上两篇文章。一下是matlab演示自适应滤波器 LMS算法。

LMS算法的核心是

y(i)=w*XN';%y(n)=W*XN;
 e(i)=d(i)-y(i);
 w=w+u*e(i)'*XN; 

函数ADLMS:

% 输入参数:
%     xn   输入的信号序列 
%     d   所期望的响应序列 
%     k    滤波器的阶数 (标量) %     u   收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数 
% 输出参数:
%     W    滤波器的权值矩阵 (矩阵) %     e   误差序列(itr x 1) %     y   实际输出序列 function [y,w,e]=ADLMS(xn,d,k,u) itr = length(xn); e = zeros(1,itr); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
w = zeros(1,k); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0 y= zeros(1,itr); %存放输出信号
% 迭代计算 for i = (k+1):itr                  % 第k次迭代 XN=xn((i-k+1):(i)); y(i)=w*XN';%y(n)=W*XN;
 e(i)=d(i)-y(i);
 w=w+u*e(i)'*XN; end
clc clear all
close all

Fs =44100; fc =1000; L=44100; t=1/Fs:1/Fs:L/Fs; s=sin(2*pi*t*fc); figure(1); subplot(4,1,1); plot(t(1:512),s(1:512));grid; ylabel('幅度'); xlabel('时间'); title('原始正玄信号'); v = sqrt(0.1) * randn(1,L); subplot(4,1,2); plot(t(1:512),v(1:512));grid; ylabel('幅度'); xlabel('时间'); title('原始噪声信号'); xn=s+v; subplot(4,1,3); plot(t(1:512),xn(1:512));grid; ylabel('幅度'); xlabel('时间'); title('原始噪声+正玄信号'); %%%%%%%%%%%%%%%%%LMS%%%%%%%%%%%%%%%%%%%%% k=128; %FIR滤波器系数
u =1/512; d =s; [y,w,e]=ADLMS(xn,d,k,u) subplot(4,1,4); plot(t(512:1024),y(512:1024));grid; ylabel('幅度'); xlabel('时间'); title('自适应滤波后正玄+噪声信号'); %% ss=s-y;%剩余噪声
figure(2); subplot(2,1,1); plot(t,ss);grid; ylabel('幅度'); xlabel('时间'); title('剩余噪声'); %% 一小段三个信号比较
figure(3), t=(20000:20500); plot(t,y(20000:20500 ),'r',t,ss(20000:20500),'g',t,s(20000:20500),'b'); axis([20000,20500,-1,1]); ylabel('幅度'); xlabel('时间'); legend('去噪后的正玄+噪声信号','剩余噪声','原始正玄信号'); title('一小段三个信号比较'); 


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭