%% Algoritmo funcional LMS close all; clear all fs=8000; T=1/fs; t=0:T:0.1; x=randn(1,length(t)); n=filter([ 0 0 0 0 0 0 0 0 0 0.8 ],1,x); o=sin(2*pi*300*t); d=sin(2*pi*300*t)+n;% generate signal plus noise mu=0.001; N=16; w=zeros(1,N); y=zeros(1,length(t)); e=y; % adaptive filtering using LMS algorithm for m=N+1:1:length(t)-1 sum=0; for i=1:1:N sum=sum+w(i)*x(m-i); end y(m)=sum; e(m)=d(m)-y(m); for i=1:1:N w(i)=w(i)+2*mu*e(m)*x(m-i); W(:,m)=w'; end end D=2*abs(fft(d))/length(d);D(1)=D(1)/2; O=2*abs(fft(o))/length(o);O(1)=O(1)/2; f=[0:1:length(d)/2]*8000/length(d); E=2*abs(fft(e))/length(e); E(1)=E(1)/2; subplot(4,1,1),plot(o,'k');grid; ylabel('Original signal') subplot(4,1,2),plot(d,'k');grid; ylabel('Corrupt. signal') subplot(4,1,3),plot(x,'k');grid;ylabel('Ref. noise'); subplot(4,1,4),plot(e,'k');grid; ylabel('Clean signal'); xlabel('Number of samples'); figure subplot(3,1,1),plot(f,O(1:length(f)),'k');grid; ylabel('Original. spectrum') subplot(3,1,2),plot(f,D(1:length(f)),'k');grid; ylabel('Corrupt. spectrum') subplot(3,1,3),plot(f,E(1:length(f)),'k');grid ylabel('Enhanced spectrum'); xlabel('Frequency (Hz)'); figure(3) plot(W')