Atensi, hubungannya dengan cocktail party problem dan deep learning

Beberapa hari ini saya kembali membaca beberapa paper tentang fenomena “cocktail party”, tema penelitian saya saat S1 dan S2. Dulu, bahkan sampai minggu lalu, saya hanya membaca banyak paper dari aspek statitsik, algoritma, dan aplikasinya. Padahal teknik tersebut (ICA/BSS) diusulkan untuk meniru cara kerja otak manusia. Karena sedang mengambil kuliah tentang “perceptual”, sekarang saya sedang membaca beberapa paper tentang bagaimana otak memproses fenomea “cocktail party”. Total yang saya baca adalah tentang persepsi, kognisi dan proses biologi, bukan rekayasa matematika atau deep learning, tapi tentang jaringan saraf sebenarnya.

Atensi

Apakah atensi itu? Atensi merupakan proses kognitif dan perilaku untuk memilih informasi tertentu dan mengabaikan informasi lainnya. Studi tentang atensi ini mulai berkembang ketika Cherry pada tahun 1953 mempublikasikan papernya tentang eksperimen “shadowing task”: dimana responden diperdengarkan dua pesan melalui headphone secara dichotic (satu pesan untuk tiap kanal, kanan dan kiri). Pesan terserbut merupakan pesan utama (attended) dan sampingan (non-attended). Cherry menemukan bahwa sangat kecil sekali reponden memperhatikan pesan sampingan, misalnya apakah pesan itu diucapkan oleh laki-laki/wanita, bahasa apa yang digunakan, dll. Eksperimen Cherry ini membuka jalan lahirnya teori tentang atensi dan beberapa modelnya.

Gambar 1. Model atensi Broadbent dan Treisman

Cocktail Party
Broadbent pada 1958 melanjutkan eksperimen dan teori yang dilakukan oleh Cherry.  Dia mengembangkan model filter dari atensi. Dia berpendapat bahwa sistem otak auditori manusia memfilter informasi yang ingin dia konsentrasikan dan mengesampingkan informai lainnya. Model atensi Broadbent ini dilanjutkan oleh Treisman.

Treisman berpendapat bahwa pada proses atensi selektif, tidak semua informasi diblok oleh filter seperti yang diusulkan oleh Broadbent. Informasi sampingan tersebut tetap diolah namun melemah atau beratenuasi. Model Treisman ini dinamakan model atensi atenuasi. Informasi yang melemah tadi masih sampai pada auditory cortex dan ada mekanisme threshold yang bisa menyebabkan atensi berpindah ke informasi sampingan atau tambahan ini. Misalnya ketika nama seseorang dipanggil dia langsung menoleh. Perbedaan model atensi filter dari Broadbent dan model atensi atenuasi Treisman dapat diilustasikan pada gambar 1 di atas.

Pada proses atensi (fokus pada salah satu informasi) mekanisme “sensory gating” ditengarai ada diantara thalamus dan auditory cortex ini (Gambar 2). Pada auditory sensory gating, mekanisme tersebut bekerja untuk menutup informasi yang tidak relevan (Broadbent’ model) atau mengurangi arus informasi tambahan (Treisman model) dengan threshold tertentu. Mekanisme auditory sensory gating ini mendukung model atensi dan bagaimana otak kita mengolah informasi pada cocktail party problem.

Pada pemrosesan data sensorik, dua pendekatan bisa digunakan, top-down dan bottom-up. Misalnya pada cocktail party, apakah suara yang mendrive kita untuk fokus pada percakapan tersebut (bottom-up) ataukah kognitif kita yang menggerakan kita untuk fokus pada percakapan tersebut (top-down). Banyak ilmuwan berpendapat kedua proses tersebut terjadi pada sistem auditori kita, namun banyak juga yang meyakini salah satunya.

Gambar 2. Diagram skematik dari sebuah sirkuit atensi auditori [5]

Deep Learning

“Attention is all you need” adalah paper yang melegenda. Sampai saat tulisan ini ditulis, paper tersebut sudah disitasi oleh 1332 (and counting), bahkan sudah disitasi sebelum paper tersebut terbit (preprint). Jadi apa sebenarnya atensi pada deep learning?

Lebih jelas tentang bagaimana atensi bekerja pada peristiwa Cocktail party bisa dibaca pada
PR (pekerjaan rumah) saya berikut,  “Mechanism on how auditory system solves the cocktail party problem.”

Visualiasasi dalam Python
Meski tidak berdasar pada paper (dan kadang memang begitu), contoh berikut merupakan implementasi sederhana atensi dalam deep learning dengan menggunakan toolkit Keras. Ide dasarnya adalah: menggunakan softmax mask di dalam jaringan. Dengan cara ini akan didapatkan distribusi yang ternormalisasi dari tiap step waktu atau unit pada sebuah layer berdasarkan input yang masuk.
Hal tersebut penting untuk melihat bagian mana yang berkontribusi banyak pada hasil prediksi yang dihasilkan oleh model.

Atensi, di dalam deep learning, diimplementasikan dengan manambahkannya pada hidden layer, yakni berupa encoder dan decoder. Dengan atensi kita peroleh vektor $c_i$ dari hidden layer $s_1, s_2, …, s_m$ yang akan digunakan pada layer $h_i$ untuk prediksi. Konteks vektor $c_i$ ditentukan oleh rata-rata dari weighted state sebelumnya dengan skor atensi $a_i$,

\begin{align}\begin{split}
\mathbf{c}_i &= \sum\limits_j a_{ij}\mathbf{s}_j\\
\mathbf{a}_i &= \text{softmax}(f_{att}(\mathbf{h}_i, \mathbf{s}_j))
\end{split}\end{align}

Dengan $f_att(.)$ merupakan fungsi atensi yang menghitung skor tak ternormalisasi dari hidden state saat ini $h_i$ dengan hiddden state sebelumnya $_j$. Gambar berikut merupakan hasil atensi

Pada gambar diatas, diumpamakan data dengan jumlah 32 sekuen, dimana data ke-2 (v[1]) yang ingin di diperhatikan. Sehingga, struktur datanya kurang lebih begini:

data ke-    input(size=32)                    output (biner)
0 0.12 0.23 0.12 ... 0.003 1
1 0.03 0.3 0.03 ... 0.12 0
...
31 0.01 0.4 0.13 ... 0.03 1

Dengan visualisasi atensi diatas, didapatkan data ke-1 memilihi bobot yang lebih dari data lainnya dalam menghasilkan output. Demikilanlah “atensi”.

Referensi:

  • https://github.com/philipperemy/keras-attention-mechanism 
  • https://srome.github.io/Understanding-Attention-in-Neural-Networks-Mathematically/
  • http://r4ds.had.co.nz/ 
  • https://distill.pub/2016/augmented-rnns/
  • Mencoba Kaldi di Ubuntu 18.04, cuda9.0

    Ini adalah catatan saya saat mencoba Kaldi (speech recognition toolkit) pada Ubuntu 18.04. Spesifikasi PC yang saya gunakan adalah CPU i9-7900X dan GPU GTX 1060. Hasil percobaan ini membuahkan satu paper yang saya submit pada ASJ spring meeting 2019.

    Instalasi

    Instalasi kaldi adalah proses pertama, dan bisa jadi, tersulit. Jika anda “SUCCESS” menginstall Kaldi, proses selanjutnya akan mudah. Jika tidak, akan terhenti. Berikut adalah dasar alur kerja setelah meng-clone Kaldi.

    Pertama clone Kaldi ke direktori PC kita.

    git clone https:/github.com/kaldi-asr/kaldi

    Alur dasar instalasi:
    1. Pada direktori tools

    less INSTALL
    ./extras/check_dependencies.sh
    make

    Jika tidak ada masalah saat `check_dependencies` anda bisa melanjutkan ke `make`, jika tidak, selesaikan apa kekuarang dari persyaratan instalasi tersebut (bisa berupa library atlas, blas, dll). Kemudian, `make` lagi. Bisa juga make ditambahkan opsi `-j` jika running pada multicore CPU (umumnya), dan menspesifikasi compiler CXX (C++) jika tidak ingine menggunakan default ubuntu, misal `CXX=g++-5.0 make`. Saya menggunakan `CXX=g++-6.0` karena CUDA yang saya pakai (9.0) tidak komptaibel dengan GCC-7, bawaan default Ubuntu. 2. Pada direktori SRC

    less INSSTALL
    ./configure --share
    make depend -j 8
    make -j

    Banyak argument yang ditambahkan pada saat `configure`, misalnya direktori CUDA, libatlas dll. Contoh:

    ./configure --shared --use-gpu=no

    Namun umumnya Kaldi sudah mengenali jika PC kita menggunakan GPU/tidak, dimana letak library dll. Jadi, gunakan alur dasar di atas dahulu, jika error, coba gunakan argumen yang sesuai. Saya sendiri tidak langsung berhasil saat instalasi Kaldi, butuh beberapa hari (plus luck!) untuk berhasil menginstallnya. Silahkan baca pertanyaan saya di grup Kaldi ini. Jika telah berhasil terinstall (tidak ada error), check instalasi anda dengan:

    make test

    Pastikan semua output textnya menampilkan kata “SUCCESS” untuk tiap library Kaldi, contoh:

    $ make test
    Running matrix-lib-test ... 2s... SUCCESS matrix-lib-test
    Running sparse-matrix-test ... 0s... SUCCESS sparse-matrix-test
    ...

    Inilah kenapa saya menyatakan harus “SUCCESS” menginstal Kaldi sebelum menggunakannya.

    Troubleshooting

    Diantara beberapa error yang saya hadapai, error-error berikut adalah yang paling vital. Saya copy-pastekan beserta solusinya dalama bahasa Inggris agar searchable di Google.

    1. Error when “make test” on src/matrix.
    Error message:

    ... FAIL matrix-lib-test

    Dig more to find what actually broke. Use valgrind: “valgrind matrix-lib-test”
    Output:

    ./matrix-lib-test: symbol lookup error: libkaldi-matrix.so: undefined symbol: clapack_sgetrf
    ==4035==
    ==4035== HEAP SUMMARY:
    ==4035== in use at exit: 16,256 bytes in 46 blocks
    ==4035== total heap usage: 58,566 allocs, 58,520 frees, 8,833,488 bytes allocated
    ==4035==
    ==4035== LEAK SUMMARY:
    ==4035== definitely lost: 0 bytes in 0 blocks
    ==4035== indirectly lost: 0 bytes in 0 blocks
    ==4035== possibly lost: 5,472 bytes in 19 blocks
    ==4035== still reachable: 10,784 bytes in 27 blocks
    ==4035== suppressed: 0 bytes in 0 blocks
    ==4035== Rerun with --leak-check=full to see details of leaked memory
    ==4035==
    ==4035== For counts of detected and suppressed errors, rerun with: -v
    ==4035== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

    So the culprit is LAPACK.
    Solution: Reinstall again liblapack via libatlas and libopenblas using apt-get or other method.

    2. Error: Iteration stops on run_tdnn.sh no memory
    Solution:
    You shouldn’t really be running multiple jobs on a single GPU. If you want to run that script on a machine that has just one GPU, one way to do it is to set exclusive mode via:

    sudo nvidia-smi -c 3

    and to the train.py script, change the option “–use-gpu=yes” to “–use-gpu=wait” which will cause it to run the GPU jobs sequentially, as each waits till it can get exclusive use of the GPU.

    3.Errror: "Refusing to split data for number of speakers"
    Solution:
    You didn’t provide enough info, but in general, you cannot split the directory in more parts than the number of speakers is. So if you called the decoding with -nj 30 and you have 25 speakers (you can count lines of the spk2utt file) this is the error you receive. So try to change number of speaker: value of argument “-nj” (30 in that example).

    TDNN

    Kaldi menggunakan TDNN sebagai classifier. TDNN merupakan kependekan dari “time delay neural network”. Idenya adalah untuk mengurangi waktu komputasi pada feed forward network atau RNN yang cukup menguras sumber daya komputasi. Alih-alih memasukkan input pada jaringan secara bersamaan, input pada tiap layer dapat dimasukkan secara serial atau sekuensial.

    Contoh riilnya jika kita punya input gambar dengan ukuran 28 x 28 piksel. Jika menggukanan DNN kovensional (misal MLP, multilayer perceptron), maka pada input layer kita memiliki 784 nodes (hasil kali 28 dengan 28). Dengan time delay neural network, citra piksel yang kita masukkan pada input layer hanya 28 piksel (baris pertama) pada satu waktu, 28 piksel pada waktu selanjutnya dan seterusnya sampai selesai. Sehingga, pada kasus tersebut kita hanya punya 28 node.

    Pada pengenalan sinyal suara, maka inputnya berupa MFCC. Dalam hal ini ukuran datanya adalah 39 (jumlah fitur) dikali dengan panjang segment. Maka pada tiap satu waktu, TDNN memasukkan memasukkan fitur tersebut per waktu, jika tanpa subsampling. Jika dengan menggunakan subsampling, maka fitur pada konteks tersebut saja yang diambil, misal {-1, 1}. Pada contoh tersebut, hanya waktu t+1 dan t-1 saja fitur diambil. Penjelasan lebih lanjut tentang cara kerja TDNN ini bisa dibaca di paper saya yang juga disertakan di repo Github saya untuk uji coba kaldi dengan dataset bahasa Indonesia ini.

    Pada gambar di bawah ini gambar warna merah adalah arsitektur TDNN menggunakan sampling {-1, 1} untuk semua layer. Jika tidak menggunakan subsampling, yang dipakai adalah gambar hitam dan merah.

    Arsitektur TDNN dengan 6 layer: warna merah menunjukkan subsampling {-1, 1}

    Hasil

    Percobaan menggunakan Kaldi pada Ubuntu 18.04 ini membuahkan sebuah paper. Sebelumnya saya telah mencoba pada Ubuntu 14.04 dan 16.04 tapi tidak ada paper yang dihasilkan, hehe. Paper tersebut bisa dibaca di researchgate berikut (termasuk hasil WERnya, word error rate), untuk repository github (dataset tidak disertakan) bisa lacak di sini.

    Phase Unwrapping

    Samakah hasil perhitungan: $ \cos (420^\circ)$ dengan $\cos (420^\circ-2\pi)$? Ide inilah yang (menurut saya) melatarbelakangi teknik phase unwrapping pada analisa sinyal.

    Phase unwrapping adalah metode untuk “membuka” fase sinyal. Algoritma metode untuk unwrapping fase ini adalah sebagai berikut: “Jika selisih antara dua skalar fase dalam array lebih dari dikont, yakni $\pi$ (3.14, dalam radian), maka nilai skalar yang lebih tinggi tadi dikurangi $2 \pi$. Nilai diskont ini bisa dirubah, namun defaultnya adalah $\pi$.

    Perhatikan contoh berikut. Vektor $x$ adalah array yang berisi fase dari suatu sinyal.

    $$ px = [0~ 1~ 3.24~ 5~ 6.28~ 10~ 13~ 16]$$

    Jika selisih antara $x[n]$ dengan $x[n+1]$ lebih besar dari $\pi$ maka dilakukan unwrapping fase. Sehingga untuk vektor fase $x$ diatas hasilnya adalah,

    $$ px2 = [0.0~        1.0~        2.0~        3.24~      5.0~     
           6.28~      3.72~  6.72~ 9.72] $$

    Vektor $px2$ merupakan hasil phase unwrapping dalam radian agar tracking fase terlihat lebih halus. Lihar gambar di bawah ini untuk hasil plot fase (atas) dengan unwrapping fase (bawah).

    Plot fase (atas) dengan unwrapping fase (bawah)

    Zero Padding dan efeknya pada FFT

    Zero padding berarti menambahkan nol diakhir sinyal. Misal kita memiliki vektor x sebagai berikut,

    $$ x = [0 ~1~ 2 ~3 ~1~ 2~ 3~ 2~ 4~ 3] $$

    Vektor tersebut memiliki ukuran 10 data. Zero padding adalah menambahkan nol di belakang vektor tersebut, misalnya kita tambahkan lima nol di belakang data terakhir sehingga menjadi,

    $$x = [0 ~1~ 2~ 3~ 1~ 2~ 3~ 2~ 4~ 3~ 0~ 0~ 0~ 0~ 0]$$

    Zero padding ini biasanya digunakan agar spektrum yang kita plot menjadi lebih halus.

    Implementasi dengan Python

    Implementasi zero padding dengan python bisa bermacam-macam, salah satunya dengan np.pad (salah lainnya dengan menggunakan np.zeros).

    Contohnya adalah sebagai berikut:

    >>> x = np.array([1, 2, 3, 4, 5])
    >>> xpad = np.pad(x, (0, 5), 'constant') # menambahkan lima nol di belakang vektor a
    >>> x
    [1, 2, 3, 4 , 5, 0, 0, 0, 0, 0]

    Efek terhadap FFT

    Untuk apa menambahkah nol di akhir sinyal? Untuk memperhalus tampilan FFT agar lebih mudah difahami. Perhatikan skrip python berikut dan plot hasilnya.

    https://gist.github.com/bagustris/65537598464f712b2e81e334dde5b6e1.js

    Hasil:
    Spektrum tanpa zero padding (biru) dan dengan zero padding (merah).

    Zero padding (red) vs Non zero padding (blue)

    Agar lebih jelas, kita zoom sebagai berikut.

    Disini terlihat lebih jelas perbedaan spektrum setelah zero padding

    Selamat belajar, semoga bermanfaat.

    Merobohkan penghalang dalam "menulis"

    Sebetulnya saya ingin membaca sebuah buku “How to Write a lot: A practical guide to productive academic writing”, tapi setelah saya cari cari-cari di perpus tidak ketemu (padahal saya cek di web ada: “borrowable” dan “in place”). Saya baca versi ebooknya, tidak puas. Dari googling, saya menemukan seseorang sudah meresumenya. Berikut adalah terjemahan bebas saya atas resume tersebut.

    1. Penghalang #1: “Saya tidak punya waktu untuk menulis”
    2. Solusi: Alokasikan waktu menulis, sediakan dan jadwalkan waktu tersebut.

    3. Penghalang #2: “Saya butuh membaca lebih banyak, menganalisa tulisan orang lain, dll untuk menulis”
    4. Solusi: Lakukan sekarang juga dan tulislah hasil bacaanmu dan analisamu, langsung setelah itu.

    5. Penghalang #3: “(Kayaknya) Saya butuh laptop baru …”
    6. Solusi: Tidak, kamu tidak butuh laptop baru. Tulisan ini ditulis dengan laptop produksi 6 tahun yang lalu.

    7. Penghalang #4: “Saya tidak punya inspirasi untuk menulis”
    8. Solusi: Kamu tidak perlu menunggu inspirasi datang, cukup duduk, tulis. Gerakkan tanganmu di atas tuts keyboard, tulis.

    9. Penghalang #5: “Saya tidak punya motivasi (untuk menulis)”
    10. Solusi:

      A post shared by Bagus Tris Atmaja (@bagustris) on
    That’s all! Penghalang ke #5 di atas bukan dari buku, tapi dari saya sendiri. Selamat menulis!

    Ketidaklinearan sistem pendengaran [6]

    Catatan kuliah “Human perceptual model and its system”, pertemuan ke-6.

    Telinga manusia merupakan sistem yang tidak linear. Apa buktinya? Fakta berikut merupakan beberapa bukti ketidaklinearan sistem pendengaran manusia. Meskipun ada beberapa bukti kelinearan pada fenomena berikut (misalnya emisi spontan pada otoakustik), dengan menggunakan sifat ketidaklinearan fenomena tersebut justru menjadikannya masuk akal.

    Respon basilar membrane (pemilihan frekuensi)

    Pemilihan frekuensi: Kemampuan telinga untuk memisahkan komponen frekuensi dari suara kompleks. Basilar membrane hanya bergetar pada tempat/lokasi dimana frekuensinya sama (resonansi). Seperti diketahui sebelumnya, respon frekuensi pada basilar membrane berjalan dari frekuensi tinggi (base) menuju frekuensi rendah (apex). Response basilar membrane merupakan filter dimana fitter tersebut gabungan dari banyak bandpass filter. Karenanya filter auditori ini disebut filterbank.

    Respone basilar membrane ini tidak liner. Dilihat dari skala yang digunakan (Bark dan ERB), keduanya menggunakan spasi logaritmik. Meski model auditory seperti gammatone masih menggunakan filter linear, namun model yang lain seperti double-resonance nonlinear (DRNL) menggunakan konsep nonlinear yang memberikan hasil yang lebih bagus daripada filter linear.
    Contoh skala bark yang diturunkan dari konsep critical band (Zwicker model) seperti terlihat pada gambar di bawah. Perlu diingat bahwa skala yang lain, yakni ERB-rate, lebih banyak dipakai karena hasilnya cocok baik dari eksperimen psikoakustik maupun psikologi.
    Auditori filter dalam frekuensi Bark

    Saturasi Cochlea

    Outer Hair Cell (OHC) sebagai organ aktif diketahui memiliki saturasi sebagai ciri ketidaklinearannya. Perilaku ini bisa diobservasi dengan mengukur gaya aktifnya terhadap dispacement bengkok dari stereocilia. Hasilnya didapatkan kurva yang mirip sigmoid atau tanh (saturasi pada bagian bawah dan atasnya).

    Fungsi Input/Output (Kompresi suara level tinggi)

    Kerja telinga dalam mengolah suara level rendah dan tinggi tidak linear. Pada suara level tinggi, telinga bekerja pasif (respon IHC, inner hair cell). Namun pada suara level rendah, telinga bekerja aktif nonlinear dengan memberikan gain terhadap suara level rendah tersebut. Pada gambar diatas terlihat pada level 20-60 dB, OHC (outer hair cell) memberikan gain yang signifikan sehingga gerak respon BM (basilar membrane) menjadi cepat. Inilah mengapa pada orang-orang yang sudah tua tidak bisa mendengar suara kecil, namun jika kita keraskan (diatas 60 dB), mereka langsung mendengar suara.

    Kombinasi tone

    Jika ada dua nada frekuensi yang dijumlahkan, jika selisih antar frekuensinya kecil (kurang dari 15 Hz), maka
    akan terjadi bunyi pelayangan, frekuensi baru yang timbul, dimana besarnya $f_{beat} = f_1 – f_2$.
    Jika perbedaan frekuensinya lebih dari 50 Hz, yang terjadi adalah kombinasi tone. Frekuensi baru yang dihasilkan tidak saja $f_1 – f_2$ melainkan bisa ada tambahan frekuensi lain seperti,

    $$ 2f_{1}-f_{2},3f_{1} – 2f_{2}, … , f_{1} – k(f_{2}-f_{1}) $$
    dimana $k$ adalah integer (1, 2, 3, ..).

    Ilustrasi beat dapat yang menghasilkan $f_1-f_2$ dapat dijelaskan pada gambar berikut.

    Ilustrasi modulasi amplitudo yang menimbulkan efek beat dan kombinasi tone (200 Hz dan 210 Hz)

    Jika menggunakan speaker, silahkan play suara berikut untuk mendengarkan efek kombinasi tone. Suara dibawah adalah gabungan dari frekuensi 1000 Hz dan 500 Hz, anda akan mendengar frekuensi tambahan 500 Hz. Keraskan volume dan dengarkan di lingkungan yang sepi.

    https://freesound.org/embed/sound/iframe/456734/simple/large/

    Jika menggunakan headphones (disarankan), gunakan suara di bawah ini:
    https://freesound.org/embed/sound/iframe/456735/simple/large/

    Emisi otoakustik

    Telinga selain sebagai organ pendengaran juga mengeluarkan suara. Tidak percaya? Fenomena ini disebut sebagai emisik otoakustik. Berdasarkan pengukuran (pada kanal telinga) ternyata telinga juga mengeluarkan bunyi. Bunyi tersebut bisa berasal dari bunyi pantul dan dari fenomena lain di bawah ini. Fenomena emisi otoakustik ini dimanfaatkan sebagai metoda tes pendengaran pada bayi yang baru lahir.

    Echo cochlear
    Fenoma ini diketahui pertama kali pada marmut yang membuktikan adanya emisi otoakustik pada telinga. Meski sulit dijelaskan, ahli auditori meyakini fenomena ini ditimbulkan karena cochlea memproses, memboboti dan menjumlah semua frekuensi yang ditimbulkan sehingga ada frekuensi juga yang dihasilkan akibat frekuensi sebelumnya tadi.

    Emisi nada tunggal
    Jika sebuah ledakan nada tunggal diperdengarkan pada cochlea, frekuensi yang sama akan dihasilkan oleh cochlea. Dengan manipulasi two-tone supression, nada tunggal ini bisa diukur.

    Emisi spontan
    Emisi spontan ini bisa diukur tanpa stimuli (bunyi trigger). Fenomena ini menunjukkan bahwa cochlea merupakan organ aktif.

    Bonus: Beat dan Binaural beat

    Beat dan binaural beat bukan menunjukkan ketiaklinearan sistem pendengaran, namun justru sebaliknya. Setiap sistem linear mengikuti prinsip superposisi, bila x1 menghasilkan y1 dan x2 menghasilkan y2, maka respon sistem dengan input keduanya akan menghasilkan y1+y2. Disinilah beat terjadi,

    $$ \cos (2 \pi f_1 t)+ \cos (2 \pi f_2 t) =  2 \cos \left (2 \pi \frac {f_1 +f_2 }{2} t \right) \cos \left( 2 \pi\frac{f_1 -f_2}{2} t \right) $$

    Dari persamaan diatas, bisa diketahui bahwa sisi kanan merupakan mode interferensi. Bila = 1, maka akan terjadi interferensi konstruktif, sebaliknya bila = 0 maka akan terjadi interferensi destruktif.  Variasi konstruktif dan destruktif tersebut menghasilkan beat jika beda frekuensinya kurang dari 15 Hz (sumber lain menyebutkan 20 atau 30 Hz).

    Untuk mendengar beat bisa menjumlah dua frekuensi, misal 200 dan 210 Hz (hasilnya seperti pada gambar diatas) pada masing-masing kanal speaker. Jadi suara yang dihasilkan satu speaker merupakan jumlahan kedua frekuensi terebut. Jika dua nada tersebut diperdengarkan melalui masing-masing kanal headphone maka yang terjadi adalah binaural beat, selama beda frekuensinya kurang dari 40 Hz dan kedua nadanya kurang dari 1500 Hz. Ini adalah ilusi auditori.

    Berikut adalah demo beat dan binarual beat. Dengarkan dengan menggunakan headphones.

    Beat:
    https://freesound.org/embed/sound/iframe/456737/simple/large/

    Binaural beat:
    https://freesound.org/embed/sound/iframe/456736/simple/large/

    Fisiologi dari peripheral auditori dan pemodelannya [5]

    Catatan kuliah human perceptual system and its model, pertemuan kelima, kelanjutan kuliah sebelumnya.

    Sistem auditori merupakan sistem pemrosesan aktif, otak  turut andil dalam memproses gelombang mekanik suara menjadi sinyal nerve. Otak bisa menambah dan mengurangi gain dalam sistem auditori.

    Mekanika kontrol otak ke sistem pendengaran tersebut juga meliputi  kemampuan otak untuk mengendalikan hair cell, artinya sistem efferent (dari otak ke peripheral) bisa mengontrol ketidak-linearan sistem pendengaran.

    Lagi, bagian-bagian telinga dapat dipecah sebagai berikut:

    Anatomi manusia (dimodifikasi dari Wikipedia)

    Pembagian telinga tersebut (luar, tengah, dalam) berdasarkan bentuk sinyal saat memasuki bagian tersebut yakni mekanik (akustik), getaran dan elektrik.
    Telinga bagian luar
    Telinga bagian luar terdiri atas pinna, concha dan kanal telinga. Bagian ini berguna untuk mengempasis suara frekuensi tinggi yang membantu sistem pendengaran kita  untuk menentukan letak dari sumber suara. Secara umum, telinga bagian luar bertugas mengarahkan sinyal akustik menuju ear drum / membran timpani.
    Telinga bagian tengah
    Telinga bagian tengah berfungsi untuk impedance matching, seperti yang telah dijelaskan di sini. Bagian ini merupakan bagian berisi udara diantara eardrum dan  terdapat tiga tulang terkecil didalam tubuh yang disebut ossicles (auditory ossicle) yang terdiri atas malleus, incus dan stapes. Stapes terhubung ke cochlea melalui oval window. Gambar di bawah ini menunjukkan detail anatomi telinga bagian tengah.

    Anatomi telinga bagian tengah (dimodifikasi dari wikipedia)

    Telinga bagian dalam
    Telinga bagian dalam merupakan bagian terpenting yang terdiri dari sistem auditori (cochlea), sistem vestibuli serta perylimph dan endolimph. Gambar berikut menunjukkan detail anatomi telinga bagian dalam.

    Anatomi telinga bagian dalam (dimodifikasi dari wikipedia)

    Cochlea
    Anaotmi Cochlea:
    Dua membranes (partitions)
    •  Reissner’s membrane
    • Basilar membrane
    Tiga kompartemen:
    • Scala vestibuli
    • Scala tympani
    • Scala media
    Masuk
    • Oval window
    Keluar
    • Round window
    Anatomi organ corti:
    1. Hair cell
    • Inner hair cells: IHCs : 3,500 cells
    • Outer hair cells: OHCs: 12,000 cells
    2. Tectorial membrane

    Basilar membrane

    Bandpass filter merupakan kumpulan bandpass filter kontinyu. Berapa jumlah filternya, tidak diketahui sampai sekarang. Setiap filter memiliki lebar bandwith yang berbeda (melebar) dari frekuensi rendah ke frekuensi tinggi. Respon basilar membrane merupakan salah satu dasar dari ketidak-linearan telinga yang akan dibahas pada tulisan selanjutnya.
    Gambar penampang cochlea dalam koil dan penampang irisannya tanpa koil ditunjukkan oleh gambar di bawah ini. Di situ terjadi perubahan getaran fluida menjadi impuls saraf (nerve impulse) yang dipersepsi oleh otak sebagai suara.

    Irisan penampang cochlea, dengan koil (atas) dan tanpa koil (bawah)

    Pengukuran Basilar membrane

    Pengukuran dan respon basilar membran sering dimodelkan dengan dua sinyal berikut:
    1. Gammatone : gamma + (pure) tone
    2. Gammachirp : gammar + chirp
    gamma: sinyal memiliki distribusi gamma
    chirp:  karakteristik sinyal pendek dan tajam (seperti suara burung dan insekta)

    Transduksi

    Proses transduksi merupakan perubahan dari getaran (displacement) dari basilar membrane menjadi aktivitas elektrik. Gerakan basilar membrane ini disebut sebagai basilar membrane motion (bmm). Poresesnya adalah sebagai berikut:
    1. Gerakan basilar membrane menuju scala tympani menghasilkan efek yang berlawanan, menyebabkan stereocilia membengkok ke kiri.
    2.  Ketika stereocilia kembali membenkok ke kanan, ujung sambungannya melar dan kanal ion terbuka. Ion K+ yang bermuatan positif memasuki sel, menyebabkan bagian dalam sel menjadi lebih positif (depolarization).
    3. Ketika stereocila membengkok ke arah sebalinya, ujung sambungan menjadi kendor dan kanalnya menjadi longgar.
    Detail proses tersebut bisa dilihat pada video berikut:

    Gerakan Outer Hair Cell (OHC) pada penjelasan di atas dapat dilihat di video di bawah ini.

    Jadi, pergerakan stereocilia menghasilkan dua hal:
    1. Perubahan elektrik pada IHC
    2. Firing (aktivitas) di neuron (spike)

    Persepsi manusia terhadap “fase”
    Dapatkah kita mempersepsi perbedaan fase suara? Banyak buku yang menyatakan bahwa manusia “tuli” terhadap persepsi fase.