Thursday, October 19, 2017

HRIR, HRTF, dan BRIR

Artikel ini berkaitan dengan bidang ilmu akustik, subbidang spatial sound. HRIR, head related impulse response, merupakan impulse response kedua telinga ketika mendengarkan `sesuatu`. Jadi sebenarnya, apa yang kita dengarkan adalah `sesuatu` yang telah bercampur dengan `lingkungan`. Lingkungan ini bisa berupa ruangan. Idealnya, apa yang kita dengarkan tidak dipengaruhi oleh lingkungan. Untuk mencapai kondisi ideal inilah dilakukan pengukuran pada ruangan anechoic, ruang kedap suara, dimana apa yang kita dengarkan adalah sumber bunyi murni pada posisi tertentu. HRIR ini diukur pada kondisi tersebut, ruang kedap, sehingga respon yang diterima oleh telinga murni hanya pengaruh bentuk kepala dan posisi telinga kita serta posisi sumber suara.

Jika HRIR merupakan respon telinga karena pengaruh bentuk kepala dalam domain waktu, maka HRTF adalah Fourrier transform dari HRIR. Jadi HRTF merupakan HRIR dalam domain frekuensi.  HRTF dan HRIR ini paling banyak dipakai untuk mensimulasikan suara atau disebut auralisasi pada suatu desain ruangan untuk mendapatkan persepsi pendengaran di ruangan tersebut.

Pengukuran HRTF

HRTF diukur di ruang kedap suara dengan menggunakan head and torso simulator (HATS). Jadi hasil pengukuran sangat bergantung pada jenis HATS yang digunakan. Berbeda HATS (atau memakai manikin, atau manusia asli), maka hasilnya juga berbeda. Namun hasil pada HATS yang mewakili bentuk kebanyakan manusia bisa dipakai untuk men-generalisir hasil pengukuran.

Pada telinga HATS dipasang mikrofon kecil di dalam lubang telinga. Sumber suara dibangkitkan, umumya dipakai sinyal sine sweep atau MLS (maximum length sequences) dan direkam hasil impulsnya dengan mic di dalam HATS tadi. Geometri pengukuran membentuk geometri sehingga posisi sumber didefinisikan oleh tiga parameter (elevation, azimuth, jarak). Contoh suara pada (0,30,1) berarti pada sudut elevasi 0 derajat (tepat di depan, elevasi = sudut antara sumbu horizontal telinga dengan ketinggian sumber suara)) pada azimuth 30 derajat dari depan (depan kanan) dan pada jarak 1 m. Jarak biasanya tidak disebutkan karena pengukuran HRTF biasanya pada satu jarak/jari-jari yang sama.

Gambar berikut adalah konfigurasi posisi azimuth dan elevasi pada pengukuran HRTF sedangkan gambar bawahnya adalah contoh posisi sumber suara pada (30, 0).

Azimuth dan elevasi pada pengukuran HRTF (Sumber gambar: iidal-lab, IT Chiba)
Contoh posisi sumber suara pada (30, 0)

Tiap-tiap database HRTF kadang menggunakan notasi elevasi dan azimuth yang berbeda-beda. Misal database MIT (1994), posisi $90^o$ di sebelah kanan dan $-90^o$ di sebelah kiri, HRTF lainnya seperti database HRTF Nagoya University (Itakura Lab, 1999), tidak menggunakan tanda negatif ($0^o-355^o$).  Elevasi pengukuran untuk kedua dataset tsb mulai dari $-40^o/-45^o$ sampai dengan $90^o$ (tepat di atas kepala). Database HRTF lainnya mungkin menggunakan notasi yang berbeda (dari kiri ke kanan), anda harus memastikan notasi pengukuran HRTF tsb sebelum menggunakannya. Hal ini biasanya ditulis pada bagian `dokumentasi`.

Berikut beberapa database HRTF yang sering digunakan pada komunitas akustik (klik untuk menuju laman downloadnya):
  1. MIT Kemar Dataset
  2. Nagoya HRTF dataset
  3. CIPIC (gunakan archive.org untuk membuka link jika tidak ditemukan)
  4. ARI Database (Austria Acoustic Research Institute)
  5. RIEC Tohoku
  6. RWTH Aachen HRTF
  7. Oldenburg Univ. database

Simulasi HRTF

Maksud simulasi HRTF adalah mendapatkan simulasi dari sumber suara pada posisi tertentu (elevasi dan azimuth). Silahkan download file berikut dan coba script Octave berikut,
%% hrtf*sound simulation, azimuth speech: 0, music:30, all elev:0.
% btatmaja@gmail.com, based on ica-bench

% cd synthetic-bench/code    % Change to the code subdir to have things working 
% addpath('../synthetic-bench');

[s1, fs] = audioread( '../sources/mike.wav');       % Read one sound 
[s2, fs] = audioread( '../sources/beet.wav'); 

%% samakan ukuran
if length(s1) > length(s2)
	s1 = s1(1:length(s2));
else
	s2 = s2(1:length(s1));
end

%% mendapatkan auralisasi cara I
d1 = hrtf(0);		% suara orang di depan
d2 = hrtf(30);		% music di depan kanan

%% konvolusi (respon masing2 telinga akibat sumber suara dan HRTF
telingaL = conv(s1, d1(:,1)) + conv(s1, d2(:,1));
telingaR = conv(s1, d1(:,2)) + conv(s2, d2(:,2));

Pengukuran BRIR

Bagaimana dengan BRIR? Jika HRIR (Binaural Room Impulse Response) diukur/rekam pada ruang kedap suara, maka BRIR diukur/direkam pada ruang sebenarnya (ruang dengan gema) sehingga efek pantulan ruang terasa. BRIR ini, secara simulasi, juga dapat dibuat dengan menambahkan gema pada HRIR. Jika perekaman hanya melibatkan satu sensor saja (mono), maka disebut monoaural room impulse response, atau RIR saja. Jadi perbedaan HRIR/HRTF dan BRIR terletak pada kondisi ruang pengukuran, jika dilakukan pada anechoic room maka disebut HRTF, jika pada ruang biasa maka disebut BRIR.

HRTF juga bisa disebut sebagai BRIR pada ruang dengan RT = 0 dB, karena tujuan utama dari BRIR adalah mendapatkan impulse respon dari ruang yang identik dengan reverberation time (RT). Jadi BRIR ini biasanya diukur pada ruang dengan RT yang berbeda-beda untuk mengetahui karakteristik ruangnya.

Contoh beberapa list BRIR database adalah sebagai berikut:
  1. Oldenburg Univ. database (HRTF dan BRIR)
  2. Surrey University BRIR database (SOFA format dan WAV)

Simulasi BRIR

Dengan menggunakan file dan folder pada simulasi HRTF sebelumnya, kita coba simulasikan BRIR dengan kode berikut.
[s1, fs] = audioread( '../sources/mike.wav');       % Read one sound 
[s2, fs] = audioread( '../sources/beet.wav'); 

%% samakan ukuran
if length(s1) > length(s2)
	s1 = s1(1:length(s2));
else
	s2 = s2(1:length(s1));
end

%% mendapatkan auralisasi cara I
d1 = audioread('./brir/CortexBRIR_0_47s_0deg_16k.wav');		% suara orang di depan
d2 = audioread('./brir/CortexBRIR_0_47s_30deg_16k.wav');		% music di depan kanan

%% konvolusi (respon masing2 telinga akibat sumber suara dan HRTF
telingaL = conv(s1, d1(:,1)) + conv(s1, d2(:,1));
telingaR = conv(s1, d1(:,2)) + conv(s2, d2(:,2));


Selamat mencoba! gunakan `soundsc(telingaR, fs)` baik pada HRTF maupun BRIR untuk mendengarkan hasil auralisasi, konvolusi antara dry signal dengan impulse respon.

Sumber:
  1. https://en.wikipedia.org/wiki/Head-related_transfer_function
  2. https://www.sofaconventions.org/mediawiki/index.php/Files
  3. http://sound.media.mit.edu/ica-bench/
  4. Etc
Related Posts Plugin for WordPress, Blogger...