12/22/2016

Mendapatkan Impulse Response menggunakan sinyal TSP

Hello, kali ini sedikit akan membahas tentang akustik lagi yaitu impulse response. Impulse response atau transfer function bisa dikatakan sebuah model dari propagasi suara. Dalam prakteknya, propagasi suara akan berbeda-beda tergantung pada lingkungannya. Misalnya seperti diilustrasikan pada gambar di bawah, suara yang direkam oleh mikrofon tidak hanya berasal langsung dari mulut pembicara, tetapi termasuk juga refleksi dari lantai ataupun dinding. Bagaimana suatu lingkungan mempengaruhi suara dapat dideskripsikan oleh impulse response dan inilah yang akan kita coba ukur.
 
Ilustrasi suara langsung dengan beberapa refleksi
Pada tulisan ini, saya membuat code untuk TSP menggunakan Octave berdasarkan referensi paper berikut ini: "Suzuki, Y., Asano, F., Kim, H. Y., & Sone, T. (1995). An optimum computer‐generated pulse signal suitable for the measurement of very long impulse responses. The Journal of the Acoustical Society of America, 97(2), 1119-1123". Hasil program berupa suara TSP yang kemudian dibunyikan oleh speaker dan direkam oleh mikrofon. Hasil rekaman akan dianalisa kembali oleh program dan hasil akhirnya berupa impulse response dari tempat yang kita ukur. Gambar di bawah ini menunjukkan contoh hasil impulse response yang telah diberi label dan diplot dalam grafik semi-log time domain.

Contoh impulse response yang telah diberi label dan diplot dalam grafik semi-log time domain.
Namun, tulisan kali ini tidak menjelaskan bagaimana sinyal TSP bisa mendapatkan impulse response dari suatu ruangan. Untuk lebih jelasnya terkait sinyal TSP, silahkan akses tutorial di youtube pada link ini (untuk TSP cukup nonton hingga 4:27).


Saya asumsikan kalian telah menonton tutorial di atas. Oke sekarang saatnya mencoba mengukur impulse response menggunakan sinyal TSP. Ada beberapa tahapan yang perlu dilakukan yakni sebagain berikut.

--------------------------------------------------------------------------------------------------------------------
Updated 28 Desember 2016 
Untuk bahasa pemrograman Julia, dapat didownload di link berikut Download TSP-Julia. Cara penggunaan mirip seperti langkah-langkah di bawah ini.

Updated 29 Desember 2016
Untuk bahasa pemrograman Python => Download TSP-Python
---------------------------------------------------------------------------------------------------------------------

Langkah Pertama, download dan ekstrak program untuk membuat TSP di link berikut (Dowload TSP-Octave). Setelah diekstrak kalian akan menemukan 3 folder dan 1 mfile seperti screenshot di bawah ini.


Langkah Kedua, buka file "main.m" menggunakan editor Octave maka kalian akan melihat code seperti di bawah ini

close all
clear
clc

% Add 'TSP algo' path
addpath([pwd '/Algo']);

% List of what you want to do
list = {'MakeTSP' 'AnalyzeTSP'};

% Please select 1 (MakeTSP) or 2 (AnalyzeTSP)
Command = list{1};

switch (Command)
 
  % (1)
  case 'MakeTSP'
    % Define the sampling Frequency
    fs = 44100;
    % TSP length, 2^i:: 9 <= i <= 16
    i = 14;
    % When beep sound will be started (in seconds)
    startbeep = 1;
    % Define the number of repetition of TSP
    Nrep = 19;
    % Save TSPsec to a specific file name
    filename = 'TSPsignal50';

    % ########################################
    % Make TSP Sequences

    TSPsequences(fs,i,startbeep,Nrep,filename)
    % ########################################
 
  % (2)
  case 'AnalyzeTSP'
    % file name of the sound that we want to analyze
    filename = 'QR-[2016.12.21]-130154.wav';
    % Save the impulse to a specific file name
    ir_filesave = 'ImpulseResponse';

    % Define the number of repetition of TSP
    Nrep = 19;

    
    % ########################################
    % Analyze the sound

    TSPanalyzer(filename,ir_filesave,Nrep)
    % ########################################

    % Define the sampling Frequency
    fs = 44100;
    % Plot the impulse response
    load(sprintf('./Impulse-Results/%s.mat',ir_filesave))
    t = transpose((0:length(ir)-1)/fs);
    figure
    subplot(211)
    plot(t,ir,'b','LineWidth',1.5), xlim([min(t) max(t)])
    title('Impulse Response')
    subplot(212)
    plot(t,20*log10(abs(ir)),'g','LineWidth',1.5), xlim([min(t) max(t)])
    title('grafik semi-log time domain')
end


Langkah Ketiga, membuat TSP. Sebelum membuat sinyal TSP pastikan parameter di bawah ini sudah diset dengan tepat

- Untuk membuat TSP pilih 1
% Please select 1 (MakeTSP) or 2 (AnalyzeTSP)
Command = list{1};


- Tentukan frekuensi sampling (sesuaikan dengan frekuensi recorder kalian) dan nama file dari TSP pada baris dibawah case 'MakeTSP'

% Define the sampling Frequency
fs = 44100;
% TSP length, 2^i:: 9 <= i <= 16
i = 14;
% When beep sound will be started (in seconds)
startbeep = 1;
% Define the number of repetition of TSP
Nrep = 19;
% Save TSPsec to a specific file name
filename = 'TSPsignalTest';


- kemudian jalankan program dengan mengetik "main" di command line Octave anda. Setelah program dijalankan maka TSPsignalTest.wav akan muncul.


Langkah Keempat, mainkan file wav tersebut menggunakan speaker dan rekam suaranya menggunakan mikrofon. Jika kalian belum mempersiapkan speaker dan mikrofon, sekedar untuk testing kalian bisa memainkan file wav tersebut menggunakan speaker laptop dan merekamnya menggunakan mikrofon handphone. Jangkan lupa pastikan frekuensi sampling dari mikrofon handphone sudah sama dengan frekuensi sampling dari file wav yaitu 44100 Hz dan hasil rekaman harus berupa file wav (bukan Mp3 atau Mp4 dll).

Sekedar untuk testing, laptop dan handphone bisa juga dipakai

Langkah Kelima, simpan hasil rekaman di folder seperti screenshot di bawah


Langkah Keenam, set parameter di bawah baris case 'AnalyzeTSP'. Pastikan namafile yang akan dianalisa sudah tepat dan hasil analisa disimpan dengan nama 'ImpulseResponse'.

% file name of the sound that we want to analyze
filename = 'testdata.wav';
% Save the impulse to a specific file name
ir_filesave = 'ImpulseResponse';

% Define the number of repetition of TSP
Nrep = 19;
 


% ########################################
% Analyze the sound

TSPanalyzer(filename,ir_filesave,Nrep)
% ########################################

% Define the sampling Frequency
fs = 44100;


dan jangan lupa untuk memilih 2 pada baris ini
% Please select 1 (MakeTSP) or 2 (AnalyzeTSP)
Command = list{2};


Langkah Terakhir, jalankan program lagi dengan mengetik 'main' di command line. Hasil analisa akan disimpan di folder Impulse-Results sebagai mat file dan kita juga akan mendapatkan grafik seperti di bawah ini.


Ini adalah hasil akhir. Selamat mencoba.

No comments:

Post a Comment