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

N=16;                                        % 한 주기의 신호의 샘플 개수
x=[1 2 2 1];                                 % 신호 x[n] 데이터 입력
x=[x zeros(1,N-length(x))];                  % x[n]에 영 채우기 시행
n=0:N-1;                                     % 시간축 설정 
k=0:N-1;                                     % 샘플 스펙트럼의 주파수축 설정 
WN=exp(-j*2*pi/N).^n;                        % 회전 인자 WN^n 계산
for m=1:N                 
    X(m)=sum(x.*WN.^(m-1));                  % DFT 수행
end
df=1/500; f=df*[0:500];                      % DTFT 스펙트럼의 주파수축 설정
W=exp(-j*2*pi.*f);                           % e^jOmega 계산 
Xf=zeros(1,length(f));                       % DTFT 초기화 
for m=1:N   
   Xf=Xf+x(m)*W.^(m-1);                      % DTFT 수행
end
for m=1:N   
   x(m)=sum(X.*(WN.^(-1)).^(m-1))/N;         % IDFT 수행
end

subplot(2,1,1);                              % 2행 1열 배열 그림 창의 1번 창
stem(k,abs(X));                              % DFT의 진폭 스펙트럼을 그림  
hold on                                      % 현재의 그림창을 그대로 유지
plot(f*N,abs(Xf),'--r');                     % DTFT의 진폭 스펙트럼을 그림 
title('진폭 스펙트럼');                       % 그림 제목
xlabel('\bf{F}'); grid on;                   % x축 라벨 및 그리드 표시 
subplot(2,1,2);                              % 2행 1열 배열 그림 창의 2번 창
stem(k,angle(X));                            % DFT의 위상 스펙트럼을 그림 
hold on                                      % 현재의 그림창을 그대로 유지
plot(f*N,angle(Xf),'--r');                   % DTFT의 위상 스펙트럼을 그림 
title('위상 스펙트럼');                       % 그림 제목
xlabel('\bf{F}'); grid on;                   % x축 라벨 및 그리드 표시 