% from demo program filtdem in lab1
%% create the test signal
clear all;
Fs = 200; % sampling frequency
t=(1:100)/Fs ; % obtain sampling time vector [ 1*1/Ts 2*1/Ts ... 100/Ts]
s1= sin(2*pi*10*t); % create 5 hz test signal , 100 samples
s2= sin(2*pi*30*t);%s2= sin(2*pi*15*t); % create 15 hz test signal , 100 samples
s3= sin(2*pi*50*t);%s3= sin(2*pi*30*t); % create 30 hz test signal , 100 samples
s= s1+s2+s3 ; % Create a test signal that contain 3 different frequecy 5,15 and 30Hz
plot(t,s) % plot the signal vs time(seconds)
%% Design the filter
%b = fir1( n , wn );
a=-1;
b=fir1(33,0.2);
%figure()
%freqz(b,a,512,Fs);
% implement an IIR bandpass filter using the elliptic method
%[b,a] = ellip(4,0.1,40,[10 20]*2/Fs);
%From ellip help instruction, cut off frequency Wp must be 0.0 < Wp < 1.0,
% with 1.0 corresponding to half the sample rate, thus frequency used in this function is divided by Fs/2
% check the frequency response of the filter that has been designed earlier
% to see if it meet the desired specification
figure()
freqz(b,a,512,Fs); % short cut way to get frequency response plot (Fs = sampling frequency in Hz)
figure();
[H,w] = freqz(b,a,512);
% Obtain the frequency response H, evaluated at N=512 points equally spaced around the
% upper half of the unit circle, frequency ranging from 0 to pi
% w in radians/sample (discrete time frequency)
f = w*Fs/(2*pi); %conversion to frequency in Hz based on formula w = 2*pi*f/Fs
% Plot frequency response in Hz
figure,plot(f,abs(H)), title('frequency response of the elliptic IIR bandpass filter');
ylabel('magnitude of H(w)'); xlabel('Frequency in Hz');
% apply the filter to filter the input signal s and get output signal sf
sf = filter(b,a,s);
figure, plot(t,sf);
xlabel('Time in seconds');
ylabel('waveform magnitude');
axis([0 1 -1 1]);
%% Find the frequency content (freq. spectrum) of the signal before filtering
% Obtain freq spectrum by performing 512 point DFT using fft algorithm, a higher number gives spectrum
% with better resolution,
% Take note that the DFT sample below are for frequency ranging from 0->fsampling/2
S = fft(s,512) ; % DFT samples vector [S(1) S(2) .....S(512) ]
% Find freq spectrum for signal after filtering
SF = fft(sf,512) ; % DFT samples vector [SF(1) SF(2) .....SF(512) ]
% Plot the frequency spectrum S for the signal before filtering
% frequency in hertz
% Due to the periodic nature of the frequency spectrum of discrete time signal
% we only take half of the 512 samples
wk = (0:511) * (2*pi/512) ; % frequency vector in omega 0-2pi
fk = wk * Fs/(2*pi);
figure, plot(fk(1:256), abs(S(1:256)), 'b-' ); grid on % black line
xlabel(' Frequency (Hz) ');
ylabel('Magnitude of fourier transform samples');
hold on
% Plot the frequency spectrum SF for the filtered signal
plot(fk(1:256), abs(SF(1:256)), 'r--'); % red dotted line
xlabel(' Frequency (Hz) ');
ylabel('Magnitude of fourier transform samples');
Comments