Anda di halaman 1dari 12

MODUL

ALGORITMA DISCRETE FOURIER TRANSFORM (DFT)


DAN FAST FOURIER TRANSFORM (FFT)

Disusun oleh:
MUH FAKHRI, S.T
19941002 201801 1 001
RUSTAMAJI, S.Si
19890322 201801 1 001
FITRIANA NUR HASANAH AP, S.T
19951216 201801 2 001

LEMBAGA PENERBANGAN DAN ANTARIKSA NASIONAL


PUSAT TEKNOLOGI ROKET
JL. RAYA LAPAN MEKARSARI, RUMPIN, BOGOR, 16350 JAWA
BARAT
I. Pendahuluan
Menurut Buku Understanding Digital Signal Processing,
Second Edition karangan Richard G. Lyons. Discrete Fourier Transform
(DFT) adalah prosedur powerful yang digunakan dalam pemrosesan
sinyal digital dan filterisasi digital. DFT memungkinkan kita untuk
menganalisa, memanipulasi dan mensintesis sinyal yang tidak
mungkin dapat dilakukan dalam pemrosesan sinyal analog.
Sedangkan menurut buku Handbook of Digital Signal
Processing Engineering Applications, DFT merupakan gambaran
karakteristik spektrum periodik dari suatu sampel data. DFT memiliki
spectrum garis yang mewakili periode sekuensial N. Adanya istilah
“discrete fourier transform” karena DFT memberikan gambaran deret
fourier untuk sekuens terbatas.
Berdasarkan kedua pengertian tersebut, maka dengan kata
lain DFT merupakan prosedur matematika yang dapat digunakan
untuk menentukan harmonik atau frekuensi, yang merupakan bagian
dari sekuens sinyal diskrit. DFT berasal dari transformasi fourier
continue X(f) yang didefinisikan sebagai :

𝑋(𝑓) = ∫−∞ 𝑥(𝑡)𝑒 −𝑗2𝜋𝑓𝑡 (1)
Dimana x(t) adalah sinyal kontinu dalam domain waktu
Didalam pemrosesan sinyal continue, persamaan (1)
digunakan untuk mentransformasikan fungsi sinyal dalam domain
waktu x(t) ke domain frekuensi X(f). Hasil dari transformasi ke domain
frekuensi dimanfaatkan untuk menganalisa nilai frekuensi dari suatu
sinyal dan membuka analisa baru dalam analisa sinyal serta
kemungkinan-kemungkinan pemrosesan dalam bidang teknik dan
fisika.
Dalam bidang teknologi RADAR roket, transformasi ini
digunakan untuk menganalisa perubahan frekuensi akibat efek
Doppler yang dapat digunakan untuk mengetahui kecepatn roket dari
perubahan frekuensi tersebut. Selain itu, digunakan sebagai filter
untuk mengurangi derau dari sinyal yang diterima.
Dengan perkembangan computer digital, ilmuwan berhasil
menyatakan DFT sebagai discrete frequency-domain sequence X(m)
dimana :
𝑋(𝑚) = ∑𝑁−1
𝑛=0 𝑥(𝑛)
−𝑗2𝜋𝑛𝑚/𝑁
(2)

Transformasi balik dari DFT dinyatakan sebagai berikut:

𝑥(𝑛) = 1/𝑁 ∑𝑁−1


𝑛=0 𝑋(𝑚)𝑒
𝑗2𝜋𝑛𝑚/𝑁
(3)
Dimana x(n) adalah sekuen diskrit nilai sample dalam fungsi
waktu dari variabel kontinu x(t).
Persamaan (2) tersebut jika dinyatakan dalam bentuk
rectangular didapat:
2𝜋𝑛𝑚 2𝜋𝑛𝑚
𝑋(𝑚) = ∑𝑁−1
𝑛=0 𝑥(𝑛)[cos ( ) − 𝑗𝑠𝑖𝑛 ( )] (4)
𝑁 𝑁

Dimana :
X(m) : komponen output DFT ke m (contohnya X(0), X(1), X(2), dst)

m : indeks output DFT dalam domain frekuensi (m=0,1,2,3,…,N-1)

x(n) : sekeuns sample input (x(0), x(1), x(2), dst)

n : indeks sample input dalam fungsi waktu (n=0,1,2,3,…,N-1)


N : jumlah sampel sekuen input dan jumlah titik frekuensi di output
DFT

II. Algoritma Discrete Fourier Transform


Untuk lebih jelas mengenai perhitungan DFT, sebagai contoh
saat N=4, n dan m bernilai 0 sampai 3, maka persamaan (4) akan
mempunyai keluaran sebagai berikut:
2𝜋𝑛𝑚 2𝜋𝑛𝑚
𝑋(𝑚) = ∑3𝑛=0 𝑥(𝑛)[cos ( ) − 𝑗𝑠𝑖𝑛 ( )] (5)
4 4

Sebagai contoh untuk m = 0,


0.0 0.0
𝑋(0) = 𝑥(0) cos (2𝜋. ) − 𝑗𝑥(0) sin (2𝜋. )+
4 4
1.0 1.0 2.0
𝑥(1) cos (2𝜋. ) − 𝑗𝑥(1) sin (2𝜋. ) + 𝑥(2) cos (2𝜋. )−
4 4 4
2.0 3.0 3.0
𝑗𝑥(2) sin (2𝜋. ) + 𝑥(3) cos (2𝜋. ) − 𝑗𝑥(3) sin (2𝜋. )
4 4 4

(6)
m = 1,2 dan 3 mempunyai penyelesaian seperti diatas. Setiap
nilai output X(m) adalah penjumlahan dari perkalian titik diantara
nilai input sinyal sekuens dan bentuk sinusoidal kompleks. Nilai
frekuensi dari gelombang sinusoidal berbeda bergantung pada
sampling rate (fs), samplingan sinyal awal, dan jumlah sample N.
Contohnya jika kita mensampling sinyal kontinyu dengan 500
sampel/detik, dilakukan dengan sampel data DFTE 16-titik, frekuensi
dasar gelombang sinusoidalnya adalah fs/N = 500/16 atau 31,25 Hz.
Frekuensi analisa yang lain adalah multipel integral dari frekuensi
dasar,
X(0) = frekuensi pertama = 0 · 31.25 = 0 Hz,]
X(1) = frekuensi kedua = 1 · 31.25 = 31,25 Hz,
X(2) = frekuensi ketiga = 2 · 31.25 = 62,5 Hz,
X(15) = frekuensi keenambelas = 15 · 31.25 = 468,75 Hz
Dari contoh perhitungan diatas, maka algoritma dari DFT
sebagai berikut:
a. Inisialisasi m = 0
b. Hitung 𝑥(𝑛)−𝑗2𝜋𝑛𝑚/𝑁 untuk n=0 sampai N-1
c. Jumlah perhitungan x(0) sampai x(N-1)
d. Ulangi langkah a sampai c untuk m yang berbeda, m=1 sampai
m=N-1

III. Pemrograman pada MATLAB

Penggunaan DFT pada Matlab dapat menggunakan fungsi


yang dibuat sendiri dengan algoritma DFT atau menggunakan fungsi
yang sudah disediakan oleh Matlab, yaitu fft.m . Syntax untuk
fungsi ini sebagai berikut:
Y = fft(X) (7)
Y = fft(X,n) (8)
Y = fft(x,n,dim) (9)

Pada fungsi diatas, fft(x) menghitung DFT dari X


menggunakan algoritma Fast Fourier Transform. Jika X adalah sebuah
vector, maka fft(x) mengembalikan nilai transformasi Fourier dari
vector X. Jika X adalah matriks, maka fft(x) menghitung kolom X
sebagai vector dan mengembalikan nilai transformasi dari setiap
kolom. Sedangkan fft(X,n) mengembalikan n-titik DFT. Jika nilai
n tidak spesifik, maka ukuran Y sama dengan X. Fungsi
fft(X,n,dim) mengembalikan tranformasi Fourier dari dimensi
dim. Sebagai contoh, jika X adalah matrix, maka fft(X,n,2)
mengembalikan n-titik tranformasi Fourier dari setiap baris matrix X.

Contoh penggunaan fungsi ini di MATLAB sebagai berikut:

Pada contoh ini, transformasi Fourier digunakan untuk menemukan


komponen frekuensi dari sinyal yang mengandung derau. Langkah
pertama menentukan parameter sinyal dengan frekuensi sampling
1kHz dan durasi sinyal 1 detik.
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector

Selanjutnya membentuk sinyal yang mengandung sinus 50Hz dengan


amplitude 0.7 dan sinus 120 Hz dengan amplitude 1.
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

Selanjutnya menambahkan derau pada sinyal


X = S + 2*randn(size(t));

Selanjutnya mem-plot sinyal di domain waktu.


plot(1000*t(1:50),X(1:50))
title('Signal Corrupted with Noise')
xlabel('t (milliseconds)')
ylabel('X(t)')
Gambar 1 Sinyal dengan derau

Lalu hitung transformasi Fourier dari sinyal tersebut


Y = fft(X);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

Lalu defenisikan frekuensi domain f dan plot transformasi Fouriernya


f = Fs*(0:(L/2))/L;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|'
Gambar 2 Hasil transformasi Fourier

Dari grafik diatas terlihat ada dua komponen sinyal yaitu 50 Hz dan
120 Hz. Dan komponen derau sebesar 0.2.

Untuk fungsi yang dibuat sendiri tanpa menggunakaan fungsi


yang disediakan MATLAB. Programnya sebagai berikut untuk
tranformasi fourier:
%DFT bentuk exponential
for k=0:Na-1
for n=0:Na-1
Xfe(k+1)=Xfe(k+1)+(xn(n+1)*exp((-
1i)*2*pi*k*n/Na));
end
end

%DFT bentuk rectangular


for k=0:Na-1
for n=0:Na-1
Xfr(k+1)=Xfe(k+1)+xn(n+1)*(cos(2*pi*n*k/Na)-
1i*sin(2*pi*n*k/Na));
end
end
Contoh penggunaan program tersebut sebagai berikut:
%Program simulasi DFT dan IDFT

clc;
clear;

%% Input Parameter
Fs=8000; % Frekuensi sampling[Hz]
Ts=1/Fs; % Periode sampling [s]
V=0.01; % Window Stop Time

f1=500; % Frekuensi sinus [Hz]


t=0:Ts:V-Ts; % Time step [s]

%% Signal Generation
xn=sin(2*pi*f1*t); % Buat data x[n]

%% Signal Processing
N=2*length(xn); % Jumlah titik DFT
L=length(xn); % Hitung panjang data x(n)
D=abs(N-L); % Hitung beda panjang data
if N>L % Cek apakah N > L
x=[xn,zeros(1,D)]; % Zero padding
end
Na=length(xn); % Hitung kembali panjang data
x(n)
Xfe=zeros(1,Na); % Pre-alokasi vektor hasil DFT
Xfr=zeros(1,Na); % Pre-alokasi vektor hasil DFT

%DFT bentuk exponential


for k=0:Na-1
for n=0:Na-1
Xfe(k+1)=Xfe(k+1)+(xn(n+1)*exp((-
1i)*2*pi*k*n/Na));
end
end

%DFT bentuk rectangular


for k=0:Na-1
for n=0:Na-1
Xfr(k+1)=Xfe(k+1)+xn(n+1)*(cos(2*pi*n*k/Na)-
1i*sin(2*pi*n*k/Na));
end
end

f=(0:length(Xfe)-1)*Fs/Na; % Hitung frekuensi DFT


%Inverse DFT
N=length(Xfe); % Hitung pannjang data X[k]
Xinv=zeros(1,N); % Pre-alokasi vektor hasil IDFT

for n=0:N-1
for k=0:N-1
Xinv(n+1) = Xinv(n+1) + (1/N)*
Xfe(k+1)*exp(1j*2*pi*n*k/N);
end
end

%% Plot Section
figure(1);
subplot(2,2,1);
plot(f,abs(Xfe));
title('DFT bentuk exponential');
xlabel('Frekuensi [Hz]');
ylabel('Magnitude');
grid on;
subplot(2,2,2);
plot(f,abs(Xfr));
title('DFT bentuk rectangular');
xlabel('Frekuensi [Hz]');
ylabel('Magnitude');
grid on;
subplot(2,2,3);
plot(f,abs(fft(xn)));
title('Menggunakan FFT');
xlabel('Frekuensi [Hz]');
ylabel('Magnitude');
grid on;

figure(2)
subplot(2,1,1);
stem(xn);
title('Signal x[n]');
xlabel('Waktu [s]');
ylabel('Magnitude');
grid on;
subplot(2,1,2);
stem(real(Xinv));
title('Inverse DFT');
xlabel('Waktu [s]');
ylabel('Magnitude');
grid on;
Gambar 3 Sinyal dan Inverse DFT

Gambar 4 Hasil transformasi Fourier


IV. Referensi
1. Richards G. Lyons, 2004, “Understanding Digital Signal Processing“,
Prentice-Hall.
2. Douglas F. Elliott, 1987, “Handbook of Digital Signal Processing,
Engineering Applications“, Academic Press Inc.
3. Vijay K. Madisetti, 1999, “Digital Signal Processing Handbook“,
Chapman & Hall.
4. B.A. Shenoi, 2006, “Introduction to Digital Signal processing and Filter
Design“, John Wiley & Sons.

Anda mungkin juga menyukai