
%%%%%%%%%%%%%%%%%%%%%%%% 1. ORNEK
frekans_pass=10*10^3; 
frekans_stop=200*10^3; 
Zayiflama_pass=3; % db
Zayiflama_stop=130; %

f_sample=400*10^3; 

N_frekans_sayisi=512;

n=ceil(Zayiflama_stop/(20*log10(frekans_stop/frekans_pass)));
%  [n, W_kesim]=buttord(frekans_pass,frekans_stop,Zayiflama_pass,Zayiflama_stop,'s');

[As_nominal,Bs_nominal]=butter(n,1,'s');  % nominal alçak geçiren filtre

[H_nominal,w_nominal]=freqs(As_nominal,Bs_nominal);
% çizdirme:
semilogy(w_nominal,abs(H_nominal)) 


[As,Bs]=butter(n,2*pi*frekans_pass,'s') ;  %kesim frekansı frekans_pass olan filtre

[H,w]=freqs(As,Bs,N_frekans_sayisi);
% çizdirme
semilogy(w/(2*pi),abs(H)) 

% ayrıklaştırma:
[Az, Bz]=impinvar(As,Bs,f_sample);
[Hz fz]=freqz(Az,Bz,2*N_frekans_sayisi,'whole',f_sample);

% ayrık ve sürekli zaman filtrelerinin karşılaştırması:
semilogy(w/(2*pi),abs(H),fz(1:N_frekans_sayisi),abs(Hz(1:N_frekans_sayisi))) 


%%%%%%%%%%%%%%%%%%%%%%%% 2. ORNEK
frekans_pass_1=100; 
frekans_pass_2=600; 
frekans_stop_1=200; 
frekans_stop_2=400; 
Zayiflama_pass=1; % db
Zayiflama_stop=20; %
f_sample=10*10^3; 


Wn=[2*pi*600 2*pi*100];
N_frekans_sayisi=512;

W_PASS=2*pi.*[frekans_pass_1 frekans_pass_2];
W_STOP=2*pi.*[frekans_stop_1 frekans_stop_2];
%[n_derece, W_kesim] = buttord(W_PASS, W_STOP, Zayiflama_pass, Zayiflama_stop, 's')


B=2*pi*(frekans_pass_2-frekans_pass_1);
w0_kare=4*pi^2*(frekans_pass_2*frekans_pass_1);
% denormalize
w_normaliz_pass_1=(B*2*pi*frekans_pass_1)/(-(2*pi*frekans_pass_1)^2+w0_kare);
w_normaliz_pass_2=(B*2*pi*frekans_pass_2)/(-(2*pi*frekans_pass_2)^2+w0_kare);
w_normaliz_stop_1=(B*2*pi*frekans_stop_1)/(-(2*pi*frekans_stop_1)^2+w0_kare);
w_normaliz_stop_2=(B*2*pi*frekans_stop_2)/(-(2*pi*frekans_stop_2)^2+w0_kare);

n_derece=max(ceil(Zayiflama_stop/(20*log10(w_normaliz_stop_1/w_normaliz_pass_1))),ceil(Zayiflama_stop/(20*log10(w_normaliz_stop_2/w_normaliz_pass_2))))
 
 
 
 
% nominal alçak geçiren filtre
[As_nominal,Bs_nominal]=butter(n_derece,1,'s'); 
[H_nominal,w_nominal]=freqs(As_nominal,Bs_nominal);
% çizdirme:
semilogy(w_nominal,abs(H_nominal)) 

[As,Bs]=butter(n_derece,Wn,'stop','s');

[H,w]=freqs(As,Bs,N_frekans_sayisi);
% çizdirme
semilogy(w/(2*pi),abs(H)) 

% ayrıklaştırma:
[Az, Bz]=impinvar(As,Bs,f_sample);
[Hz fz]=freqz(Az,Bz,2*N_frekans_sayisi,'whole',f_sample);

% ayrık ve sürekli zaman filtrelerinin karşılaştırması:
semilogy(w/(2*pi),abs(H),fz(1:N_frekans_sayisi),abs(Hz(1:N_frekans_sayisi))) 

% Bu örnek ayrıklaşınca olmadı neden ?

%%%%%%%% 3 ornek %%%%


frekans_pass_1=200; 
frekans_pass_2=400; 
frekans_stop_1=100; 
frekans_stop_2=600; 
Zayiflama_pass=3; % db
Zayiflama_stop=20; %
f_sample=10*10^3; 


Wn=[2*pi*200 2*pi*400];
N_frekans_sayisi=512;
W_PASS=2*pi.*[frekans_pass_1 frekans_pass_2];
W_STOP=2*pi.*[frekans_stop_1 frekans_stop_2];
%[n_derece, W_kesim] = buttord(W_PASS, W_STOP, Zayiflama_pass, Zayiflama_stop, 's')


B=2*pi*(frekans_pass_2-frekans_pass_1);
w0_kare=4*pi^2*(frekans_pass_2*frekans_pass_1);
% denormalize
w_normaliz_pass_1=(-(2*pi*frekans_pass_1)^2+w0_kare)/(B*2*pi*frekans_pass_1);
w_normaliz_pass_2=(-(2*pi*frekans_pass_2)^2+w0_kare)/(B*2*pi*frekans_pass_2);
w_normaliz_stop_1=(-(2*pi*frekans_stop_1)^2+w0_kare)/(B*2*pi*frekans_stop_1);
w_normaliz_stop_2=(-(2*pi*frekans_stop_2)^2+w0_kare)/(B*2*pi*frekans_stop_2);

n_derece=max(ceil(Zayiflama_stop/(20*log10(w_normaliz_stop_1/w_normaliz_pass_1))),ceil(Zayiflama_stop/(20*log10(w_normaliz_stop_2/w_normaliz_pass_2))))
 
  % nominal alçak geçiren filtre
[As_nominal,Bs_nominal]=butter(n_derece,1,'s'); 
[H_nominal,w_nominal]=freqs(As_nominal,Bs_nominal);
% çizdirme:
semilogy(w_nominal,abs(H_nominal)) 

[As,Bs]=butter(n_derece,Wn,'s');

[H,w]=freqs(As,Bs,N_frekans_sayisi);
% çizdirme
semilogy(w/(2*pi),abs(H)) 

% ayrıklaştırma:
[Az, Bz]=impinvar(As,Bs,f_sample);
[Hz fz]=freqz(Az,Bz,2*N_frekans_sayisi,'whole',f_sample);

% ayrık ve sürekli zaman filtrelerinin karşılaştırması:
semilogy(w/(2*pi),abs(H),fz(1:N_frekans_sayisi),abs(Hz(1:N_frekans_sayisi)));grid


