Categories
DSP FPGA

Digital Signal Processing and Deep Learning – Bisa.AI dan APTIKOM DIY

Rekaman live Sabtu, 4 Juli 2020

Pada Roundtable ini akan membahas mengenai Digital Signal Processing dan Deep Learning dengan narasumber:

  • Dr. Agfianto Eko Putra (Dosen DIKE, Fak. MIPA, Universitas Gadjah Mada, Ketua Aptikom Daerah Istimewa Yogyakarta) — Pembahasan: digital signal processing untuk kasus speech signal dan seismic dengan MATLAB;
  • M. Octaviano Pratama, M.Kom (Chief Scientist BISA AI) — Pembahasan: klasifikasi low level dan high level speech feature dengan Deep Learning;
klik disini untuk link YOUTUBE-nya . Terima kasih dan semoga bermanfaat.
Categories
FPGA

Implementasi FFT (Fast Fourier Transform) 16-Titik pada FPGA ALTERA Keluarga FLEX-10K menggunakan VHDL

Oleh Agfianto Eko Putra dan Eka Budi Santosa.

Telah dilakukan implementasi FFT 16-titik berbasis FPGA Altera keluarga FLEX-10K menggunakan deskripsi VHDL . Implementasi FFT ini didasarkan pada algoritma Radix-2 Decimation-In-Frequency. Implementasi dilakukan pada 2 (dua) macam FPGA Altera Keluarga FLEX-10K, yaitu EPF10K20TC144-3 (FLEX-10K) dan EPF10K30ETC144-1 (FLEX-10KE). Analisis pewaktuan, untuk FPGA tipe EPF10K20TC144-3, menunjukkan bahwa sistem mampu diberikan detak (clock) hingga 26,73 MHz dan melakukan proses FFT 16-titik dalam waktu 16,75 mikrodetik. Sedangkan tipe EPF10K30ETC144-1, maksimum frekuensi detak-nya adalah 60,97MHz dan melakukan proses yang sama dalam waktu 7,35 mikrodetik.

Selengkapnya bisa diunduh di sini

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:

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…