gusucode.com > 信号处理工具箱 - signal源码程序 > signal\signal\sigdemos\filtdem.m
function slide=filtdem % FILTDEM Filter design and filtering demo. % This demonstration designs a filter with the Signal Processing Toolbox % and applies it to a signal made up of harmonic components. % % To see it run, type 'filtdem'. % % See also FILTDEM2, FILTDEMO. % Copyright (c) 1988-98 by The MathWorks, Inc. % $Revision: 1.1 $ if nargout<1, playshow filtdem else %========== Slide 1 ========== slide(1).code={ 'Fs=100;', 't=(1:100)/Fs;', 's1=sin(2*pi*t*5); s2=sin(2*pi*t*15); s3=sin(2*pi*t*30);', ' s=s1+s2+s3;', ' plot(t,s);', ' xlabel(''Time (seconds)'');', ' ylabel(''Time waveform'');', ' drawnow;', '' }; slide(1).text={ ' Press the "Start" button to see a demonstration of', ' filtering with the Signal Processing Toolbox.', '', ' >> Fs=100;', ' >> t=(1:100)/Fs;', ' >> s1=sin(2*pi*t*5); s2=sin(2*pi*t*15); s3=sin(2*pi*t*30);', ' >> s=s1+s2+s3;', ' >> plot(t,s);'}; %========== Slide 2 ========== slide(2).code={ }; slide(2).text={ ' Here''s an example of filtering with the Signal Processing', ' Toolbox. First make a signal with three sinusoidal', ' components (at frequencies of 5, 15, and 30 Hz).', ' >> Fs=100;', ' >> t=(1:100)/Fs;', ' >> s1=sin(2*pi*t*5); s2=sin(2*pi*t*15); s3=sin(2*pi*t*30);', ' >> s=s1+s2+s3;', ' >> plot(t,s);'}; %========== Slide 3 ========== slide(3).code={ '[b,a]=ellip(4,0.1,40,[10 20]*2/Fs);', '[H,w]=freqz(b,a,512);', 'plot(w*Fs/(2*pi),abs(H));', 'xlabel(''Frequency (Hz)'');', 'ylabel(''Mag. of frequency response'');', 'grid;', 'drawnow;', '' }; slide(3).text={ ' To design a filter to keep the 15 Hz sinusoid and get rid', ' of the 5 and 30 Hz sinusoids, we create an eighth order', ' IIR filter with a passband from 10 to 20 Hz. Here is its', ' frequency response. The filter was created with the ELLIP', ' command.', ' >> [b,a]=ellip(4,0.1,40,[10 20]*2/Fs);', ' >> [H,w]=freqz(b,a,512);', ' >> plot(w*Fs/(2*pi),abs(H));'}; %========== Slide 4 ========== slide(4).code={ 'sf=filter(b,a,s);', 'plot(t,sf);', 'xlabel(''Time (seconds)'');', 'ylabel(''Time waveform'');', 'axis([0 1 -1 1]);', 'drawnow; pause(1);' }; slide(4).text={ 'After filtering, we see the signal is a 15 Hz sinusoid,', ' exactly as expected.', '', ' >> sf=filter(b,a,s);', ' >> plot(t,sf);', ' >> xlabel(''Time (seconds)'');', ' >> ylabel(''Time waveform'');', ' >> axis([0 1 -1 1]);'}; %========== Slide 5 ========== slide(5).code={ 'S=fft(s,512);', 'SF=fft(sf,512);', 'w=(0:255)/256*(Fs/2);', 'plot(w,abs([S(1:256)'' SF(1:256)'']));', 'xlabel(''Frequency (Hz)'');', 'ylabel(''Mag. of Fourier transform'');', 'grid;', '' }; slide(5).text={ ' Finally, here is the frequency content of the signal before and', ' after filtering. Notice the peaks at 5 and 30 Hz have been', ' effectively eliminated.', ' >> S=fft(s,512);', ' >> SF=fft(sf,512);', ' >> w=(0:255)/256*(Fs/2);', ' >> plot(w,abs([S(1:256)'' SF(1:256)'']));', ' >> xlabel(''Frequency (Hz)'');', ' >> ylabel(''Mag. of Fourier transform'');'}; end