Categories
DSP

Transformasi Fourier – Kapan muncul frekuensi-nya?

Kalau Anda belum tahu cerita saya tentang Transformasi Fourier silahkan klik disini. Jika sudah saya punya pertanyaan…

Baiklah pakai contoh saja dengan Matlab…

Kita buat sebuah sinyal sebagai berikut, masih sama seperti sebelumnya, namun kali ini kedua frekuensi, yaitu 100 Hz dan 200Hz tidak muncul bersamaan tetapi bergantian, apakah Transformasi Fourier mampu melihat kedua frekuensi ini?

fs = 1000;
t = 0:1/fs:0.5;
tx = [t t+t(length(t))];
y1 = sin(2*pi*100*t);
y2 = sin(2*pi*200*t);
y = [y1 y2];
plot(tx,y);
title(‘Sinyal dengan kandungan 2 frekuensi’)
xlabel(‘waktu (detik)’);

Hasilnya, gambaran dari sinyal yang saya tanyakan adalah sebagai berikut…

Kemudian kita lakukan FFT…

Y = fft(y);

Kita gambarkan hasilnya dengan perintah-perintah berikut…

f = fs*(0:(length(Y)-1)/2)/length(Y);
figure;
plot(f,abs(Y(1:(length(Y)+1)/2)));
title(‘Kandungan frekuensi sinyal y (gambar 1 sisi)’);
xlabel(‘frekuensi (Hz)’);

hasilnya sebagai berikut…

Mmmm bisa khan? Sama saja hasilnya… bisa diperoleh 2 frekuensi sesuai dengan dugaan kita, bagaimana jika ditambahkan derau kemudian di-FFT…

ya= y + 2*randn(size(tx));
figure;
plot(tx,ya);
title(‘Sinyal apakah ini….??’);
xlabel(‘waktu (detik)’)
;

YA = fft(ya);
f = fs*(0:(length(YA)-1)/2)/length(YA);
figure;
plot(f,abs(YA(1:(length(YA)+1)/2)));
title(‘Kandungan frekuensi sinyal apa ini….??’);
xlabel(‘frekuensi (Hz)’);

Nah hasilnya…

Sama seperti artikel saya yang lalu khan? Luar biasa Transformasi Fourier ini…

Sekarang pertanyaan saya, lantas bisakah kita tahu bahwasanya ke-2 frekuensi tidak bersamaan munculnya? Ya tidak bisa-lah… hanya kandungan frekuensi saja, sedangkan kapan dan lama waktu muncul masing-masing freuensi itu kita tidak tahu… lantas kalo mo tahu? Ya pake lainnya donk… apaan tuch? Pake STFT (Short Time Fourier Trasnform)…

Wah apa lagi nich…

Ceritanya begini, jika TF bekerja untuk seluruh sinyal, tapi STFT hanya bekerja pada sebuah jendela yang kecil yang kemudian digeser-geser mulai dari awal hingga akhir untuk mendapatkan interpretasi data keseluruhan secara waktu dan frekuensi atau istilahnya time-frequency domain… di Matlab pake perintah specgram()

figure;
specgram(y,256,1000);

Keterangan:
256 sebagai panjang jendela, sedangkan 1000 merupakan fs-nya

Hasilnya…

Nah tuch… kelihatan bahwa kedua frekuensi muncul secara tidak bersamaan, lebih tepat berturutan, hanya saja tidak terlalu jelas dimana tepatnya frekuensi mulai bergantian… Baik sekarang Anda perhatikan masing-masing perintah dan hasil gambarnya sebagai berikut:

figure;
specgram(y,64,1000);
figure;
specgram(y,128,1000);
figure;
specgram(y,256,1000);

Hasilnya secara berturutan…

Mm menarik hasilnya, dengan semakin besar ukuran jendela, semakin akurat resolusi frekuensinya, tapi semakin gak jelas resolusi waktunya. Demikian juga sebaliknya, semakin kecil ukuran jendelanya, semakin bagus resolusi waktunya, tapi resolusi frekuensi-nya makin jelek…

Ini-lah yang dimaksudkan dengan Ketidak-pastian Heisenberg… ada semacam trade-off antara resolusi waktu dan frekuensi, tapi minimal sudah kita peroleh ranah waktu-frekuensi, alhamdulillah…

Ada komentar saudara-saudari sekalian?

Categories
DSP

Transformasi Fourier, apaan tuch?

Transformasi Fourier merupakan keluarga dari Transformasi Integral, gampangnya, ini adalah ‘alat’ yang bisa kita gunakan untuk melihat sinyal dengan kacamata yang lain. Jika selama ini kita hanya melihat sinyal melalui osiloskop atau alat sejenis lainnya, itu adalah visualisasi sinyal dalam ranah waktu (time domain), sumbu horisontal-nya waktu (t) dan sumbu vertikal-nya adalah amplitudo (A)…

Mmmm lantas ngapain? Ya kita tidak bisa tahu secara langsung informasi penting di ranah waktu kecuali amplitudo dan kapan terjadinya, bisakah menghitung frekuensinya? Mmmm gampang, itu mungkin jawaban Anda, karena bisa jadi Anda hanya membayangkan sebuah gelombang sinusoidal, Anda tinggal hitung berapa gelombang dalam satu detiknya, thing! Langsung ketemu sekian gelombang/detik atau pake satuan cycle/sec atau Hz…

Nah kalo sinyalnya kayak gini gimana dong…

Okey… okey, Anda bisa bilang ‘Ya iyalah mosok ya iya donk… Gimana ngitungnya kalo bentuk gak karuan kayak gitu, terkesan acak dech, jangan-jangan emang gak periodik… piye to iki mas…??’

Baik sebelum cari informasi frekuensi dari gelombang tersebut, akan saya jelaskan langkah demi langkah… Are You ready?? Are You ready?? Are You ready?? wis gak usah kebanyakan omong/tanya…

Masih pake bantuan Matlab, kita awali dengan mendefinisikan sinyal yang akan digunakan sebagai percobaan. Frekuensi cuplikan 1000 Hz (=fs), kita gambar hanya 0,5 detik pertama (=t) untuk sebuah sinyal dengan 2 kandungan frekuensi 100 Hz dan 200 Hz (=y):

fs = 1000;
t = 0:1/fs:0.5;
y = sin(2*pi*100*t)+sin(2*pi*200*t);

kemudian kita gambar yuuk…

plot(t,y);
title(‘Sinyal dengan kandungan 2 frekuensi’)
xlabel(‘waktu (detik)’);

hasilnya…

Kemudian kita lakukan FFT (Fast Fourier Transform), pake perintah fft-nya Matlab:

Y = fft(y);

Kemudian kita gambar hasilnya apa adanya, ingat bahwa hasil dari FFT selalu ada 2 (karena efek simetris):

f = fs*(0:length(Y)-1)/length(Y);
figure;
plot(f,abs(Y));
title(‘Kandungan frekuensi sinyal y (gambar 2 sisi)’)
xlabel(‘frekuensi (Hz)’);

hasilnya…

Baik sekarang kita gambar 1 sisi saja yach…

f = fs*(0:(length(Y)-1)/2)/length(Y);
figure
plot(f,abs(Y(1:(length(Y)+1)/2)));
title(‘Kandungan frekuensi sinyal y (gambar 1 sisi)’)
xlabel(‘frekuensi (Hz)’);

hasilnya…

Gimana mudeng, paham? Enak khan langsung ketahuan frekuensinya… 100Hz dan 200Hz…! Ups terus gimana dengan gambar pertama tadi? Ini dia hasil FFT-nya…

We.. e.. e… jebulannya (ternyata) bagaimana? kandungan-nya sama seperti sinyal awal, 100 Hz dan 200Hz, tapi kok ada tambahan gambar ‘rumput’-nya ya? Ya iyalah donk… lha wong sinyal asli saya kasih derau atau sinyal acak kok… he he he…

Silahken kasih komentar atau pertanyaan, atau barangkali Anda penasaran dengan skrip/program untuk membuat sinyal asli plus acak dan menampilkan FFT-nya? Silahken berkomentar…

NB:
Kenapa saya pake perintah figure untuk memplot gambar-gambar berikutnya? ya supaya gambar awal tidak hilang donk dan ada gambar baru yang muncul… he he he gitu aja kok repot…