Categories
DSP

Pengaruh Panjang Data, Jendela & Frekuensi Cuplik pada FFT

Artikel yang saya tulis ini merupakan jawaban detil dari soal yang ada di bukunya Li Tan, 2008, “Digital Signal Processing: Fundamentals and Application“, nomor 4.17 dan 4.18. Intinya diketahui sebuah isyarat yang terdiri dari 3 macam sinusoidal dengan persamaan di bawah ini. Akan dilakukan eksperimen pengaruh penggunaan jendela, panjang data dan frekuensi pencuplikan Fs pada algoritma FFT untuk menemukan spektrum dari sinyal ini.

Matlab-nya sebagai berikut:function p4_17(Fs);

switch nargin
case 0
Fs = 8000;
end

t=[0:1/Fs:0.1];
x1 = 5 * cos(2*pi*500*t);
x2 = 5 * cos((2*pi*1200*t)+(0.25*pi));
x3 = 5 * cos((2*pi*1800*t)+(0.5*pi));

subplot(3,1,1); plot(t,x1);
title(‘x1(t)’);
subplot(3,1,2); plot(t,x2);
title(‘x2(t)’);
subplot(3,1,3); plot(t,x3);
title(‘x3(t)’);

x = x1+x2+x3;
figure;
plot(t,x);
title(‘x(t) = x1(t) + x2(t) + x3(t)’);

L = length(x);

NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(x,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

figure;
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2)))
title(‘Spektrum Sisi-tunggal dari x(t) tanpa jendela’)
xlabel(‘Frekuensi (Hz)’)
ylabel(‘|Y(f)|’);

% ———————-TRIANGULAR——————————
x_tri = x .* triang(L)’;

Y = fft(x_tri,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

figure;
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2)))
title(‘Spektrum Sisi-tunggal dari x(t) menggunakan jendela Segitiga’)
xlabel(‘Frekuensi (Hz)’)
ylabel(‘|Y(f)|’);

% ———————-HAMMING——————————
x_ham = x .* hamming(L)’;

Y = fft(x_ham,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

figure;
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2)))
title(‘Spektrum Sisi-tunggal dari x(t) menggunakan jendela Hamming’)
xlabel(‘Frekuensi (Hz)’)
ylabel(‘|Y(f)|’);

% ———————-HANNING——————————
x_han = x .* hann(L)’;

Y = fft(x_han,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

figure;
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2)))
title(‘Spektrum Sisi-tunggal dari x(t) menggunakan jendela Hanning’)
xlabel(‘Frekuensi (Hz)’)
ylabel(‘|Y(f)|’);

wvtool(triang(L),hamming(L),hann(L));
% h=legend(‘Triangular’,’Hamming’,’Hanning’);
% set(h,’Interpreter’,’None’);

Berikut ini adalah plot dari masing-masing sinusoidal:

Dan ini adalah penggabungan dari ketiga sinusoidal tersebut:

Berikut ini adalah hasil FFT tanpa menggunakan jendela apapun dan panjang datanya 801, yang masing-masing terdiri dari spektrum tanpa jendela, spektrum dengan jendela Segitiga, Hamming, Hanning dan tampilan wvtool yang membandingkan ketiga jendela serta responnya:

Hasil FFT tanpa menggunakan jendela

Hasil FFT menggunakan Jendela Segitiga – Triangular

Hasil FFT menggunakan Jendela Hamming

Hasil FFT menggunakan Jendela Hanning

Dan berikut ini adalah perbandingan ketiga jendela (Segitiga – Triangular, Hamming dan Hanning) menggunakan program wvtool-nya Matlab:

Perbandingan Jendela Segitiga, Hamming dan Hanning dengan wvtool-nya Matlab

Bagaimana kesimpulan Anda tentang penggunaan jendela atau tidak? Ternyata tanpa penggunaan jendela, hasilnya ada artifact atau ‘cacat’ pada hasil spektrumnya, jika cacat ini terlalu besar dan pemisahan dua frekuensi atau lebih terlalu dekat, maka kemungkinan besar, spektrum kesulitan untuk memisahkan kedua frekuensi yang saling berdekatan tersebut, silahkan Anda modifikasi Matlab-nya untuk melakukan percobaan sendiri. Kemudian, dalam kasus ini, jendela yang hasilnya bisa dikatakan terbaik adalah Hanning, perhatikan hasilnya pada gambar yang bersangkutan, bukankah hasilnya sudah smooth (halus), tidak ada riak2 di bagian bawah spektrum?

Dan berikut ini masing-masing adalah hasil percobaan dengan panjang data yang berbeda-beda, masing-masing (secara berurutan untuk panjang data 240, 256, 450, 475, 500 dan 512). Ingatlah bahwa untuk panjang data yang bukan merupakan kelipatan 2^n, maka akan ditambahkan data-data nol untuk melengkapi jumlah data menjadi bentuk 2^n, proses ini disebut sebagai zerro padding.

Hasil FFT dengan panjang data 240

Hasil FFT dengan panjang data 256 – dyadic

Hasil FFT dengan panjang data 460

Hasil FFT dengan panjang data 475

Hasil FFT dengan panjang data 500

Hasil FFT dengan panjang data 512 – Dyadic

Bagaimana dengan kesimpulan Anda? Sudah sangat jelas jika menggunakan visualisasi seperti ini khan? Jumlah data 256 dan 512 merupakan kelipatan 2^n atau yang disebut sebagai dyadic. Hasilnya lebih baik dibandingkan jika harus dilakukan zero padding, penambahan data nol untuk melengkapi jumlah data dalam bentuk 2^n.

Baiklah, yang berikutnya adalah percobaan dengan mengubah Frekuensi Pencuplikan atau Sampling Frequency. Hasilnya ditunjukkan berikut ini, masing-masing untuk frekuensi cuplik 1000 Hz (berarti frekuensi maksimum yang bisa di-spektrumkan adalah separonya, 500 Hz), 1500 Hz, 2000 Hz, 2500 Hz, 3600 Hz dan 4000 Hz. Ingat bahwa sinyal kita kandungan frekuensinya adalah 500, 1200 dan 1800 Hz.

Dengan Fs = 1 kHz, yang 200 Hz adalah aliasing |1000 Hz – 1200 Hz|!

Dengan Fs = 1,5 KHz, yang 300 Hz adalah aliasing |1500 Hz – 1200 Hz|!

Dengan Fs = 2 kHz, yang 200 (2000 Hz – 1800 Hz) dan 800 Hz (2000 Hz – 1200 Hz) adalah Aliasing!

Dengan Fs = 2,5 kHz, yang 750 Hz adalah aliasing!

Dengan Fs = 3,6 kHz, tidak ada aliasing tetapi kehilangan frekuensi 1800 Hz!

Dengan Fs = 4 kHz – sempurna!

Bagaimana kesimpulan Anda? Makanya berhati-hatilah dalam menentukan frekuensi pecncuplikan sedemikian hingga bisa terhindari dari efek-efek negatif aliasing, sebagaimana ditunjukkan pada gambar-gambar tersebut.

Semoga bermanfaat, amin!