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 .wavhasil 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
|
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:
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)