Fourier Transform

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

박학민

clear; clc; close all;

N = 256;
% N denotes the summation (or integration) size for DT-FT/DT-IFT.
% N should be an even number.
W = 32;
% W is the one-sided width of the rectangular signal.
G = 4;
% G is the sampling (or upsampling) period
% W/G should be an integer and N/(2*G) should also be an integer.

%=========================================================================
%1. ORIGINAL RECTANGULAR SIGNAL in TIME DOMAIN and ITS DT-FT
%-------------------------------------------------------------------------
xx1 = zeros(1,N); %x1(t)를 만들기 위해 길이 N의 벡터 생성
xx1(1,(-W:W)+N/2+1) = ones(1,2*W+1); %N의 중심에서 –W~W에 해당하는 진폭 1인 사각신호
생성

% N point DFT
for k=0:N-1 % frequency domain index
X1(k+1)=0;
for n=-N/2:N/2-1 % time domain index
X1(k+1) = X1(k+1) + xx1(n+N/2+1)*exp(-j*k*(2*pi)/N*n);
end
end
XX1(1,1:N/2) = X1(1,N/2+1:N); %X1을 이동하여 XX1으로 저장
XX1(1,N/2+1:N) = X1(1,1:N/2); %X1을 이동하여 XX1으로 저장
XX1 = real(XX1);

drawfig2(1,N, ...
xx1,-1,2,'1. ORIGINAL RECTANGULAR SIGNAL in TIME DOMAIN','x_1[n]', ...
XX1,-max(XX1)*0.3,max(XX1)*1.1,'\Rightarrow DT FT RESULTS in FREQUENCY
DOMAIN','X_1[k]');
% 1번째 subplot 그림창에,그림번호 1, 신호길이 N, 타임도메인신호 xx1을 amplitude = [-1,
2]영역에서 그리고, 그림 제목을 ‘1. ORIGINAL RECTANGULAR SIGNAL in TIME DOMAIN'으로 y
축 이름을'x_1[n]'으로 설정,
% 2번째 subplot 그림창에, 푸리에변환된 신호 (주파수 스펙트럼) XX1을 진폭이
[-max(XX1)*0.3 ~ max(XX1)*1.1] 범위에서 그리기, 제목을 ’=> DT FT RESULTS in
FREQUENCY DOMAIN', y축 이름을 'X_1[k]'로 설정
1번째 subplot 창에 n=-32~32인 구간에만 1인 x1[n]신호를 관찰할 수 있음.
2번째 subplot 창에 x1[n]의 푸리에변환한 신호 X1[k]를 보였음. 사각파형의 푸리에변환인 싱크
파형임을 관찰할 수 있음.

%=========================================================================
%2. SAMPLING in TIME DOMAIN and ITS DT-FT
%-------------------------------------------------------------------------
xx2 = zeros(1,N); %x2(t)를 만들기 위해 길이 N의 벡터 생성
xx2(1,(-W:G:W)+N/2+1) = ones(1,2*W/G+1); %샘플링 간격 G(=4)로 x1을 샘플링하여 xx2에
저장

% 샘플링된 신호 xx2를 푸리에변환 (주파수 신호로 변환)


for k=0:N-1
X2(k+1)=0;
for n=-N/2:N/2-1
X2(k+1) = X2(k+1) + xx2(n+N/2+1)*exp(-j*k*(2*pi)/N*n);
end
end
XX2(1,1:N/2) = X2(1,N/2+1:N); %X2을 이동하여 XX2으로 저장
XX2(1,N/2+1:N) = X2(1,1:N/2); %X2을 이동하여 XX2으로 저장
XX2 = real(XX2); %XX2의 실수성분을 XX2로 저장 (허수 영역 버리기)
drawfig2(2,N,xx2,-1,2,'2. SAMPLING in TIME DOMAIN','x_2[n]', ...
XX2,-max(XX1)*0.3,max(XX1)*1.1,'\Rightarrow DT FT RESULTS in FREQUENCY
DOMAIN','X_2[k]');
% 1번째 subplot 그림창에, 그림번호 2, 신호길이 N, 타임도메인신호 xx2을 amplitude = [-1,
2]영역에서 그리고, 그림 제목을 '2. SAMPLING in TIME DOMAIN',으로 y축 이름을'x_2[n]'으로
설정,
% 2번째 subplot 그림창에 푸리에변환된 신호 (주파수 스펙트럼) XX2의 real성분을 진폭이
[-max(XX2)*0.3 ~ max(XX2)*1.1] 범위에서 그리기. 그리기, 제목을 ’=> DT FT RESULTS in
FREQUENCY DOMAIN', y축 이름을 'X_2[k]'로 설정

샘플링 주기(간격)=4로 샘플링한 신호 x2[n]을 subplot 창 1번째에 보임.


subplot 창 2번째에서, 샘플링 되었으므로, 시간축에서 이산신호는 주파수축에서 주기신호로 표현
됨을 알 수 있음.
주파수축에서 XX1이 N을 주기로 반복되는 반면 시간축에서 4로 샘플링하였으므로 N/4=64를 주기로
반복되고 있음을 관찰할 수 있음.

%=========================================================================
%3. DECIMATION(=DOWNSAMPLING) in TIME DOMAIN and ITS DT-FT
%-------------------------------------------------------------------------
xx3 = zeros(1,N); %x3(t)를 만들기 위해 길이 N의 벡터 생성
WW = W/G; %Decimation된 신호 길이 생성
xx3(1,(-WW:WW)+N/2+1) = ones(1,2*WW+1); %Decimation된 영역에만 1을 넣어 x3(t)에 해
당하는 xx3 벡터 생성
% xx3에 대한 푸리에변환
for k=0:N-1
X3(k+1)=0;
for n=-N/2:N/2-1
X3(k+1) = X3(k+1) + xx3(n+N/2+1)*exp(-j*k*(2*pi)/N*n);
end
end
XX3(1,1:N/2) = X3(1,N/2+1:N); %X3을 이동하여 XX3으로 저장
XX3(1,N/2+1:N) = X3(1,1:N/2); %X3을 이동하여 XX3으로 저장
XX3 = real(XX3); %XX3의 실수성분을 XX3로 저장 (허수 영역 버리기)

drawfig2(3,N,xx3,-1,2,'3. DECIMATION(=DOWNSAMPLING) in TIME DOMAIN','x_3[n]',


...
XX3,-max(XX1)*0.3,max(XX1)*1.1,'\Rightarrow DT FT RESULTS in FREQUENCY
DOMAIN','X_3[k]');
% 1번째 subplot 그림창에, 그림번호 3, 신호길이 N, 타임도메인신호 xx3을 amplitude = [-1,
2]영역에서 그리고, 그림 제목을 '3. DECIMATION(=DOWNSAMPLING) in TIME DOMAIN',으로 y축
이름을'x_3[n]'으로 설정,
% 2번째 subplot 그림창에 푸리에변환된 신호 (주파수 스펙트럼) XX3의 real성분을 진폭이
[-max(XX3)*0.3 ~ max(XX3)*1.1] 범위에서 그리기. 그리기, 제목을 ’=> DT FT RESULTS in
FREQUENCY DOMAIN', y축 이름을 'X_3[k]'로 설정
subplot 1번째 그림에서 4배 decimation (downsampling)된 신호의 파형을 관찰할 수 있음. 신
호의 샘플 개수는 x1[n]에 비해 줄었지만, x2[n]의 개수는 유지하는 반면 신호의 폭이 감소하였음.
이러한 경우 frequency expansion 현상이 나타남.
subplot2에서 X2에 비해 frequency expansion된 X3의 스펙트럼을 관찰할 수 있음.

%=========================================================================
%4. MULTIPLICATION of TWO SINC FUNCTIONS in FREQUENCY DOMAIN and ITS DT-IFT
%-------------------------------------------------------------------------

XX4 = XX3.*XX3; %(2*WW) is a scale factor.


% 주파수 도메인 신호 XX3의 제곱하여 XX4에 저장

% XX4에 대한 역푸리에변환
for n=-N/2:N/2-1
xx4(n+N/2+1) = 0;
for k=-N/2:N/2-1
xx4(n+N/2+1) = xx4(n+N/2+1) + 1/N*XX4(k+N/2+1)*exp(j*k*2*pi/N*n);
end
end
xx4 = real(xx4); %역푸리에변환된 신호의 실수성분만 취함 (허수영역 버리기)

drawfig2(4,N, ...
xx4,-1,20,'\Rightarrow DT IFT RESULTS in TIME DOMAIN','x_4[n]', ...
XX4,-max(XX4)*0.3,max(XX4)*1.1,'4. MULTIPLICATION of TWO SINC FUNCTIONS in
FREQUENCY DOMAIN','X_4[k]');
% 1번째 subplot 그림창에, 그림번호 4, 신호길이 N, 타임도메인신호 xx4를 amplitude = [-1,
20]영역에서 그리고, 그림 제목을 '=>DT IFT RESULTS in TIME DOMAIN',으로 y축 이름을
'x_4[n]'으로 설정,
% 2번째 subplot 그림창에 푸리에변환된 신호 (주파수 스펙트럼) XX4의 real성분을 진폭이
[-max(XX4)*0.3 ~ max(XX4)*1.1] 범위에서 그리기. 그리기, 제목을 ’4. MULTIPLICATION of
TWO SINC FUNCTIONS in FREQUENCY DOMAIN', y축 이름을 'X_4[k]'로 설정
subplot 2번째 창에 sinc 함수의 제곱을 볼 수 있음.
subplot 1번째 창에 삼각파형을 관찰할 수 있음. 이는 주파수축에서 sinc 스펙트럼의 푸리에역변
환이 사각파형이고, 주파수 축에서의 곱은 시간 도메인에서 콘볼루션이다. 시간축에서 사각파형의 콘
볼루션은 삼각형임.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TERM PROJECT PROGRAMMING STARTS. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%=========================================================================
%5. UPSAMPLING in TIME DOMAIN and its DT-FT
% (Note that upsampling period is given as G.)
%-------------------------------------------------------------------------
% YOU HAVE TO FILL IN THIS PART.
x5UpSample = zeros(1,N); % up sampling을 위한 영벡터 생성
idx = 1:G:length(x5UpSample);
x5UpSample(idx) = xx4(N/2+(-N/G/2:N/G/2-1)); % 4간격으로 x5Upsample에 저장 (우변),
xx4에서 가져올 영역을 선별 (우변)
xx5=x5UpSample;
%upsamling한 신호를 푸리에변환
for k=0:N-1
X5(k+1)=0;
for n=-N/2:N/2-1
X5(k+1) = X5(k+1) + xx5(n+N/2+1)*exp(-j*k*(2*pi)/N*n);
end
end
XX5(1,1:N/2) = X5(1,N/2+1:N);
XX5(1,N/2+1:N) = X5(1,1:N/2);
XX5 = real(XX5);
drawfig2(5,N, ...
xx5,-1,20,'5. UPSAMPLING in TIME DOMAIN','x_5[n]', ...
XX5,-max(XX5)*0.3,max(XX5)*1.1,'\Rightarrow DT FT RESULTS in FREQUENCY
DOMAIN','X_5[k]');
% 1번째 subplot 그림창에, 그림번호 5, 신호길이 N, 타임도메인신호 xx5를 amplitude =
[-1, 20]영역에서 그리고, 그림 제목을 '5. UPSAMPLING in TIME DOMAIN',으로 y축 이름을
'x_5[n]'으로 설정,
% 2번째 subplot 그림창에 주파수 축에서의 싱크파형의 제곱을 upsampling한 XX5의 real성분을
진폭이 [-max(XX5)*0.3 ~ max(XX5)*1.1] 범위에서 그리기. 그리기, 제목을 ’=> DT FT
RESULTS in FREQUENCY DOMAIN', y축 이름을 'X_5[k]'로 설정

그림 4의 삼각파형을 4배 up-sampling한 그림이 subplot의 1번째 창임. 시간축에서 4배 upsampling


은 주파수축에서 4배 compression 된다. 그림 4에서 X4[k]에 비해 4배 copression 되었음을 알 수 있
음.

You might also like