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

wsl=0.15*pi; wsh=0.75*pi;                             % 저지 대역 경계 주파수 설정
wpl=0.3*pi; wph=0.6*pi;                               % 통과 대역 경계 주파수 설정
N=40;                                                 % 샘플 스펙트럼의 수 설정
n=0:N-1;                                              % 시간축 설정
a=(N-1)/2;                                            % 스팩트럼 구간 경계 설정
wr=2*pi/N;                                            % 주파수축 샘플링 간격(해상도)
d1=0.109; d2=0.594; 
Hr=[zeros(1,4) d1 d2 ones(1,7) d2 d1 zeros(1,5)];     % [0 pi] 구간의 샘플 스펙트럼 값
Hr=[Hr 0 fliplr(Hr(2:length(Hr)))];                   % [ 2pi] 구간의 샘플 스펙트럼 값
k1=0:floor(a); k2=floor(a)+1:N-1;                     % 샘플링 구간 생성
Hang=[-a*wr*k1 a*wr*(N-k2)];                          % 샘플 스펙트럼의 위상 계산
Hk=Hr.*exp(j*Hang);                                   % 샘플 스펙트럼 생성
h=ifft(Hk);                                           % IDFT에 의해 임펄스 응답 구함
[H w]=freqz(h,[1]);                                   % 필터 주파수 응답 계산
L=length(w); dw=pi/L;                                 % 주파수축 간격
Hmag=20*log10(abs(H)/max(abs(H)));                    % 로그 척도(dB) 크기 응답 계산
Ap=-min(Hmag(ceil(wpl/dw):ceil(wph/dw)))              % 필터 통과대역 감쇠 계산
As=-max(Hmag(ceil(wsh/dw):length(w)))                 % 필터 저지대역 감쇠 계산 
wc1=find(Hmag>=-3,1,'first')/L                        % 하측대역 차단 주파수 계산
wc2=find(Hmag>=-3,1,'last')/L                         % 상측대역 차단 주파수 계산

Hd=[0 0 1 1 0 0];                                     % 이상적 크기 응답 데이터
wd=[0 0.15 0.3 0.6 0.75 1]/2;                         % 이상적 크기 응답 값 주파수

subplot(2,2,1);                                       % 2행 2열 분할 그림 창의 1번 창
plot(n(1:N/2)/N,Hr(1:N/2),'o',wd, Hd,'r');            %  샘플 스펙트럼 응답을 그림
axis([0 0.5 -0.1 1.1]);                
title('\bf{샘플 스펙트럼}');                           % 그림 제목
xlabel('\bf{F}'); grid on;                            % x축 라벨 및 그리드 표시 
subplot(2,2,2);                                       % 2행 2열 분할 그림 창의 2번 창
stem(n,h); axis([0 40 -0.3 0.4]);                     % 필터 임펄스 응답을 그림
title('\bf{임펄스 응답}');                             % 그림 제목
xlabel('\bf{n}'); grid on;                            % x축 라벨 및 그리드 표시 
subplot(2,2,3);                                       % 2행 2열 분할 그림 창의 3번 창
plot(n(1:N/2)/N,Hr(1:N/2),'o',w/(2*pi), abs(H));      % 샘플 스펙트럼 응답을 그림
axis([0 0.5 -0.1 1.1]);        
title('\bf{크기 응답}');                               % 그림 제목
xlabel('\bf{F}'); grid on;                            % x축 라벨 및 그리드 표시 
subplot(2,2,4);                                       % 2행 2열 분할 그림 창의 4번 창
plot(w/(2*pi),Hmag); axis([0 0.5 -110 10]);           % 필터 크기 응답(dB)을 그림 
title('\bf{크기 응답(dB)}');                           % 그림 제목
xlabel('\bf{F}'); grid on;                            % x축 라벨 및 그리드 표시 