%
% FIR-design på slutten av forelesing i INF3470
% for sammneligning med IIR-design ut fra samme krav
%
% S Holm, 19.11.2013
%
disp('Krav:')
disp('------------------------------------------')
echo on
Fsample=4;      % samplefrekvens, kHz 
Fp=0.8;         % passbånd slutt, kHz, 
Fs=1;           % stoppbånd start, kHz 
alpha_p = 0.5;  % max passbånd ripple, dB 
alpha_s=40;     % max stoppbånd ripple, dB
echo off
disp('------------------------------------------')
disp('Trykk mellomrom for å fortsette')
pause

maxdB = 10; % in display
mindB = -50; % in display
maxphi = 0; % in phase display
minphi = -1500; % in phase display

display('FIR med Kaiser vindu')

F = [Fp Fs]/Fsample;
A = [1 0];
%
% passband ripple divided by two since firpm fits to +/- passband error
% while the IIR routines fit to [0 -passband error]
%
DEV = [1-10^(-alpha_p/2/20) 10^(-alpha_s/20)]; 

[Nk,Fk,BTA,filtype] = kaiserord(F,A,DEV,Fs)
b = fir1(Nk, Fk, filtype, kaiser(Nk+1,BTA ), 'noscale' );

figure(11)
freqz(b,1);
title(['FIR med Kaiser vindu, orden ',num2str(Nk),', beta ',num2str(BTA)])
axis([0 1 mindB maxdB])
subplot(2,1,2)
axis([0 1 minphi maxphi]);
pause

%
% -------------
%
disp('FIR med Parks-McClellan metoden (Remez)')

[Np,Fo,Ao,W] = firpmord(F,A,DEV,Fs)  % estimate order
% add 1 to get good enough stopband error:
Np = Np+1;
b=firpm(Np,Fo,Ao,W);
figure(12)
freqz(b,1);
title(['FIR med Parks-McClellan metoden, orden ',num2str(Np)])
axis([0 1 mindB maxdB])
subplot(2,1,2)
axis([0 1 minphi maxphi]);
pause
%
% -------------
%
display('FIR med frekvenssamplingsmetoden (ingen transisjon)')
Nfs = 300; % prøve og feile

Ffs  = 2*[0 Fp Fs Fsample/2]/Fsample;
Afs = [1 1 0 0];

b = fir2(Nfs,Ffs,Afs); % ingen transisjonssamples
figure(13)
freqz(b,1);
title(['FIR med frekvenssamplingsmetoden, orden ',num2str(Nfs)])
axis([0 1 mindB maxdB])
subplot(2,1,2)
axis([0 1 minphi maxphi]);
%
% sidelobes in the -100 dB region
%



