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

N=11;                                                        % 필터 차수 설정
Nd=1024;                                                     % 데이터 수 설정 
n=0:Nd-1;                                                    % 시간축 생성 
num=zeros(1,N+1); num(1)=1; num(N+1)=-1;                     % 전달 함수 분자의 계수 
den=zeros(1,N+1); den(1)=N; den(2)=-N;                       % 전달 함수 분모의 계수
[Hf,f]=freqz(num, den);                                      % 주파수 응답 계산 
fc=find(abs(Hf)>=max(abs(Hf))/sqrt(2),1,'last');             % 차단 주파수 탐색
fc=(fc-1)/(2*length(f))                                      % 차단 주파수 계산
x=cos(0.04*pi*n)+cos(0.1*pi*n-pi/3)+cos(0.3*pi*n+pi/4);      % 입력 신호 생성
y=filter(num,den,x);                                         % 필터 출력 신호 계산
f2=(1/Nd)*[-Nd/2+1:Nd/2];                                    % 주파수축 생성
Xf=fftshift((1/Nd)*fft(x));                                  % 입력 스펙트럼 생성
Yf=fftshift((1/Nd)*fft(y));                                  % 출력 스펙트럼 생성
 
figure(1)                                                    % 그림창 1 지정
zplane(num, den);                                            % 극과 영점을 그림
title('\bf{이동 평균 필터의 극과 영점}');                      % 그림 제목

figure(2)                                                    % 그림창 2 지정
subplot(2,1,1);                                              % 2행 1열 분할 그림창 1번 창
plot(f/(2*pi),abs(Hf));                                      % 필터의 진폭 응답을 그림
title('\bf{이동 평균 필터의 진폭 응답}');                      % 그림 제목
xlabel('\bf{F}'); grid on;                                   % x축 라벨 및 그리드 표시 
subplot(2,1,2);                                              % 2행 1열 분할 그림창 1번 창
plot(f/(2*pi),angle(Hf));                                    % 필터의 위상 응답을 그림 
title('\bf{이동 평균 필터의 위상 응답}');                      % 그림 제목
xlabel('\bf{F}'); grid on;                                   % x축 라벨 및 그리드 표시 

figure(3)                                                    % 그림창 3 지정
subplot(2,1,1);                                              % 2행 1열 분할 그림창 1번 창
stem(n(1:101),x(1:101));                                     % 입력 신호를 그림
title('\bf{입력 신호}');                                      % 그림 제목
xlabel('\bf{n}'); grid on;                                   % x축 라벨 및 그리드 표시 
subplot(2,1,2);                                              % 2행 1열 분할 그림창 2번 창
stem(n(1:101),y(1:101));                                     % 출력 신호를 그림
title('\bf{출력 신호}');                                      % 그림 제목
xlabel('\bf{n}'); grid on;                                   % x축 라벨 및 그리드 표시 

figure(4)                                                    % 그림창 4 지정
subplot(2,1,1);                                              % 2행 1열 분할 그림창 1번 창 
plot(f2,abs(Xf));                                            % 입력 신호 스펙트럼을 그림
title('\bf{입력 신호의 스펙트럼}');                           % 그림 제목 
xlabel('\bf{F}');                                            % x축 라벨 표시 
subplot(2,1,2);                                              % 2행 1열 분할 그림창 2번 창 
plot(f2,abs(Yf));                                            % 출력 신호 스펙트럼을 그림
title('\bf{출력 신호의 스펙트럼}');                            % 그림 제목 
xlabel('\bf{F}');                                            % x축 라벨 표시 