close all;                                          % 모든 생성된 창을 닫음 
clear all;                                          % 열려있는 작업영역(workspace)을 모두 비움 
clc;                                                % 명령(command) 창을 비움

Ts=1; fs=1/Ts;                                      % 샘플링 주기와 샘플링 주파수
Ap=1;                                               % 통과 대역 감쇠
As=20;                                              % 저지 대역 감쇠
wplp=0.2*pi;                                        % 디지털 통과 대역 경계 주파수 
wslp=0.3*pi;                                        % 디지털 저지 대역 경계 주파수

% 2형 체비쇼프 LP 필터 
wp=(2/Ts)*tan(wplp/2);                              % 통과 대역 경계 주파수 미리 휨
ws=(2/Ts)*tan(wslp/2);                              % 저지 대역 경계 주파수 미리 휨
[N,wc]=cheb2ord(wp,ws,Ap,As,'s')                    % 필터 차수 및 차단 주파수 계산 
[num_a,den_a]=cheby2(N,As,wc,'s');                  % 아날로그 LP 필터 전달 함수 H(s) 계산
[num_lp,den_lp]=bilinear(num_a,den_a,fs);           % 디지털 LP 필터 전달 함수 H(z) 계산

% 2형 체비쇼프 BS 필터 
wpu=0.6*pi; wpl=0.2*pi;                             % BS 필터 통과 대역 경계 주파수
wsu=0.5*pi; wsl=0.3*pi;                             % BS 필터 저지 대역 경계 주파수 
h=cos((wsu+wsl)/2)/cos((wsu-wsl)/2);                % D2D 사상 파라미터 계산
k=tan((wsu-wsl)/2)*tan(wslp/2);                     % D2D 사상 파라미터 계산
c1=-2*h/(k+1); c2=(1-k)/(1+k);                      % D2D 사상 파라미터 계산
Nz=[c2 c1 1];                                       % z=N(z')/D(z')의 분자 계수
Dz=[1 c1 c2];                                       % z=N(z')/D(z')의 분모 계수
num_bs=D2Dmap(num_lp,Nz,Dz,1);                      % BS 필터 전달 함수 분자 계산
den_bs=D2Dmap(den_lp,Nz,Dz,2);                      % BS 필터 전달 함수 분모 계산
a0=den_bs(1);                                       % 분모 첫 항
num_bs=num_bs/a0; den_bs=den_bs/a0;                 % BS 필터 전달 함수 계산
[Hz,w]=freqz(num_bs,den_bs);                        % 필터 주파수 응답 계산

% 직접 디지털 2형 체비쇼프 BS 필터 구현
wpbs=[wpl wpu]; wsbs=[wsl wsu];                     % 디지털 BS 필터 주파수 사양
[N2,wc2]=cheb2ord(wpbs/pi,wsbs/pi,Ap,As)            % 필터 차수 및 차단 주파수 계산 
[num_d,den_d]=cheby2(N2,As,wc2,'stop');             % 필터 전달 함수  계산
Hz2=freqz(num_d,den_d);                             % 필터 주파수 응답 계산

subplot(2,2,1);                                     % 2행 2열 분할 그림 창의 1번 창
plot(w/(2*pi),abs(Hz)); axis([0 0.5 0 1]);          % 필터 크기 응답(대역 변환)을 그림
title('\bf{필터 크기 응답(대역 변환)}');              % 그림 제목
xlabel('\bf{F}'); grid on;                          % x축 라벨 및 그리드 표시 
subplot(2,2,3);                                     % 2행 2열 분할 그림 창의 3번 창
plot(w/(2*pi),angle(Hz)); axis([0 0.5 -4 4]);       % 필터 위상 응답(대역 변환)을 그림
title('\bf{필터 위상 응답(대역 변환)}');              % 그림 제목
xlabel('\bf{F}'); grid on;                          % x축 라벨 및 그리드 표시 
subplot(2,2,2);                                     % 2행 2열 분할 그림 창의 2번 창
plot(w/(2*pi),abs(Hz2)); axis([0 0.5 0 1]);         % 필터 크기 응답(직접 설계)을 그림
title('\bf{필터 크기 응답(직접 설계)}');              % 그림 제목
xlabel('\bf{F}'); grid on;                          % x축 라벨 및 그리드 표시 
subplot(2,2,4);                                     % 2행 2열 분할 그림 창의 4번 창
plot(w/(2*pi),angle(Hz2)); axis([0 0.5 -4 4]);      % 필터 위상 응답(직접 설계)을 그림
title('\bf{필터 위상 응답(직접 설계)}');              % 그림 제목
xlabel('\bf{F}'); grid on;                          % x축 라벨 및 그리드 표시  