Friday, May 01, 2009

Pengolahan Sinyal Akustik

Ada beberapa cara untuk merekam dan menganalisa sinyal suara dengan software Matlab. Untuk perekaman, bisa melalui daq toolbox (data acquisition), perintah wavrecord serta audiorecorder. Semua teknik tersebut mensyaratkan adanya souncard yang telah terpasang, baik internal maupun eksternal.

Berikut proses perekaman dengan perintah wavrecord:

>> Fs=8000;   % deklarasi frekuensi sampling
>> y=wavrecord(5.0*Fs,Fs); % merekam suara selama lima detik
>> figure(1);
>> plot(y);    % menggambar bentuk gelombang
>> wavwrite(y,Fs,'aiueo.wav') % menyimpan file .wav

hasil perintah diatas adalah sebagai berikut:
Gb.1 Waveform Sinyal Akustik


Gambar diatas adalah plot sinyal suara dalam domain waktu yang biasa disebut waveform. Pada Matlab, amplitudo sinyal akan dibatasi pada range [-1 1] dikarenakan ini adalah sinyal teganan yang dinormalisasi (encoding PCM) dan tidak bersatuan. Sedangkan pada sumbu-x grafik diatas adalah masih dalam sample point (jumlah sample) bukan dalam satuan detik. Untuk menjadikan sumbu-x menjadi detik, maka dapat kita definisikan variabel t sebagai berikut,

t = 1/Fs:1/Fs:length(y)/Fs;
plot(t,y)

Simple bukan..? Next analysis....

Analisis

Hampir semua analisa sinyal dilakukan dalam domain waktu dan frekuensi, karena itulah disebut time-frequency analysis. Dalam domain waktu, sinyal digambarkan dengan bentuk waveform dimana sumbu-x menunjukkan time dan sumbu-y menunjukkan besarnya amplitude tiap waktu. Bentuk ini kadang kurang informatif karena kita tidak bisa mengetahui besarnya magnitude tiap waktu. Untuk itu diperlukan sebuah transformasi yang mampu mengubah waveform menjadi spectrum, dimana tiap komponen frekuensi akan terlihat jelas. Nah, Fourier Transform merupakan tranformasi yang dapat melakukan hal ini. Apalagi ditambah dengan adanya FFT atau Fast Fourier Transform, maka waktu komputasi akan menjadi lebih cepat sehingga memudahkan analisa sinyal suara. Output dari FFT berupa spectrum yang menggambarkan grafik frekuensi dengan magnitudo.

Berikut cara mengubah waveform dari sinyal y hasil perekaman menjadi spectrum dengan teknik sekaligus perintah fft:
>> z=wavread('aiueo');
>> Y=fft(z);
>> f=Fs*(0:length(Y)-1)/length(Y);
>> figure(2);
>> plot(f,abs(Y));
>> title(’Kandungan frekuensi sinyal y (gambar 2 sisi)’)
>> xlabel(’frekuensi (Hz)’);
>> ylabel(‘Magnitude’)
Nah, hasil dari script diatas adalah tampilan spektrum sebagai berikut:

Gb 2. Spektrum Sinyal Akustik

Fourier transform dapat dilihat dari salah satu sisi saja, untuk melihatnya bias dengan mengganti perintah plot(f,abs(Y)); dengan plot(f,abs(Y(1:(length(Y)+1)/2)));

Analisa selanjutnya adalah dengan melihat spectrogram sinyal suara. Spectogram ini diperoleh dari Short Time Fourier Transform (STFT). Berikut perintah untuk melihat spectrogram sinyal (suara).
figure(3);
subplot(311);
specgram(y,64,Fs);
title('Spektogram dengan panjang window 64')
xlabel('time(s)');
ylabel('frekuensi(Hz)');
subplot(312);
specgram(z,128,Fs);
title('Spektogram dengan panjang window 128')
xlabel('time(s)');
ylabel('frekuensi(Hz)');
subplot(313);
specgram(z,256,Fs);
title('Spektogram dengan panjang window 256')
xlabel('time(s)');
ylabel('frekuensi(Hz)');

Hasilnya adalah sebagai berikut:

Gb.3 Spectogram Sinyal Suara

Analisa-lah gambar tersebut, apa yang membedakannya?

*) mulai versi 2007 keatas, baik Matlab maupun Octave menggunakan fungsi "spectrogram". Fungsi "specgram" masih bisa digunakan, namun pada rilis selanjutnya mungkin sudah tidak bisa dipakai lagi.

(Tribute to Fisis 3 Terakhir, Lab Akustik TF ITS)
Related Posts Plugin for WordPress, Blogger...