int=.001; npts=512; noise=.5; here=(npts-1)/1000; t=0:int:here; freq=120; [xx,n]=size(t); x=sin(2*pi*freq*t); y=x+noise*randn(size(t)); figure(1) subplot(1,2,1) plot(t(1:50),x(1:50),'b') ylim([-2 2]) title('Clean Data') subplot(1,2,2) plot(t(1:50),y(1:50),'g') title('Noisy Data') ylim([-2 2]) pause Y=fft(y); Pyy=Y.*conj(Y); f=(1/int)/512*(0:255); f2=[-(f(255)-f) f]; figure(2) subplot(2,2,1) plot(t(1:50),y(1:50),'r') title('Noisy Data') subplot(2,2,2) plot(f2,real(fftshift(Y)),'g') title('Real Terms') subplot(2,2,3) plot(f,Pyy(1:npts/2),'b') title('Power Spectrum') subplot(2,2,4) plot(f2,imag(fftshift(Y)),'c') title('Imag Terms') pause %create a "step" function b1=1:1:30; b2=1:1:50; b3=1:1:340; b4=1:1:50; b5=1:1:42; b=[zeros(size(b1)) ones(size(b2)) zeros(size(b3)) ones(size(b4)) zeros(size(b5))]; x2=linspace(0, 1, 512) figure(3) plot(x2,b,'k') ylim([0 2]) title('Filter Function') axis tight pause FRY=real(Y).*b; FIY=imag(Y).*b; i=sqrt(-1); FY=FRY+FIY*i; IFY=ifft(FY); figure(4) subplot(2,2,1) scale=max(real(Y)); plot(f2,real(Y),'r',f2,scale*b,'r') title('Real Terms & Filter') subplot(2,2,2) scale=max(imag(Y)); plot(f2,imag(Y),'b',f2,scale*b,'g') title('Imag Terms & Filter') subplot(2,2,3) plot(FRY,'b') title('Filtered Real Terms') subplot(2,2,4) plot(FIY,'c') title('Filtered Imag Terms') pause figure(5) subplot(1,2,1) plot(t(1:50),y(1:50),'r') title('Noisy Data') ylim([-2 2]) subplot(1,2,2) plot(t(1:50),real(IFY(1:50)),'k') title('Filtered Data') ylim([-2 2])