Daftar Isi:

Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB: 6 Langkah
Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB: 6 Langkah

Video: Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB: 6 Langkah

Video: Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB: 6 Langkah
Video: Tes Pendengaran Keren: Apa Kamu Manusia Super? 2024, November
Anonim
Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB
Cara Membuat Tes Pendengaran Orang Dewasa Menggunakan MATLAB

PENOLAKAN: Tes kami BUKAN diagnostik medis dan tidak boleh digunakan seperti itu. Untuk mengukur pendengaran secara akurat, hubungi profesional medis.

Menggunakan bahan yang sudah kami miliki, kelompok kami membuat tes pendengaran. Tes kami hanya untuk penggunaan orang dewasa dan remaja karena pendengaran anak-anak memiliki berbagai rentang dan harus diukur hanya oleh seorang profesional.

Proyek ini terinspirasi saat bekerja di kelas BME MATLAB kami dan bermain dengan suara yang dibuat oleh gelombang sinus. Kami tertarik dengan cara gelombang sinus dapat diubah untuk memainkan suara pada nada yang berbeda.

Yang kami butuhkan untuk proyek ini adalah komputer yang menjalankan MATLAB R2018b dan sepasang earbud. Kami menyertakan karakter asli, Frances, sebagai maskot untuk membuat program lebih lucu.

Langkah 1: Buat Input Pengguna untuk Menganalisis Usia Pengguna

Buat Input Pengguna untuk Menganalisis Usia Pengguna
Buat Input Pengguna untuk Menganalisis Usia Pengguna
Buat Input Pengguna untuk Menganalisis Usia Pengguna
Buat Input Pengguna untuk Menganalisis Usia Pengguna

Bagian pertama dari kode ini adalah membuat input pengguna yang memutuskan apakah mereka cukup umur untuk melanjutkan melakukan tes pendengaran. Mengapa tidak melakukannya dengan menambahkan gambar konyol dari maskot kita, Frances? Untuk melakukannya, unduh file zip yang disertakan dan kemudian ekstrak ke file yang dapat ditarik ke dalam kode. Lanjutkan untuk mengunggah file yang penuh dengan gambar dengan menggunakan ini:

Dir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings';GetDir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings\*.jpg';

Untuk menampilkan kotak pesan dan gambar besar dari gambar, kami menggunakan metode menyenangkan untuk menunjukkan Frances kepada Anda. Cukup imread gambar pilihan Anda dengan format: variabel = imread('nameofpicture.jpg');

Kemudian lanjutkan untuk menampilkannya dengan menggunakan imshow(variable); itu kemudian akan muncul sebagai gambar di MatLab Anda ketika Anda menjalankannya!

Berikutnya adalah kotak pesan yang digunakan di seluruh kode. uiwait() adalah fungsi di mana kode dihentikan sampai fungsi yang dipilih untuk uiwait selesai. Fungsi yang dipilih ini adalah msgbox('message', 'title', 'icon')!

Anda dapat dengan bebas mengubah pesan yang dikatakan Frances selama Anda mengikuti format msgbox() di atas. Jika Anda ingin menggunakan gambar Frances, beri label 'icon' sebagai 'custom' dan lanjutkan dengan koma dan variabel imread dari gambar yang Anda pilih! Anda juga dapat menggunakan jenis 'ikon' yang telah ditetapkan sebelumnya. seharusnya terlihat seperti ini:

hi = imread('Reguler.jpg'); % membaca gambar dari file yang diuploadimshow(hi); uiwait(msgbox('Halo dan terima kasih telah memilih tes pendengaran kami! Ini Frances dan dia akan membantu Anda hari ini dengan tes Anda!', 'Selamat datang!', 'custom', hai));

Selanjutnya buat input yang menanyakan usia pengguna seperti itu!

UserAge = input('Sebelum kita memulai tes ini, berapa umur (tahun) Anda? (mis. 32, 56, …)\n', 's');

CATATAN: jika angkanya aneh dan terlalu banyak, gunakan tutup semua untuk menghapus angka sebelumnya saat kode Anda berjalan

Kemudian buat struktur switch case! Ingat bahwa input pengguna dalam string dan Anda perlu mengubahnya menjadi nilai numerik. Jadi gunakan str2double(UserAge). Setiap kasus harus memiliki rentang usia seperti 4 hingga 6 atau 18 hingga 40. agar variabel yang diverifikasi benar untuk salah satu kasus, gunakan num2cell(array) seperti:

switch str2double(UserAge) % mengubah variabel dari string menjadi nilai numerik case num2cell(0:3)

perancis = imread('Telur.jpg');

imshow (Prancis);

uiwait(msgbox('Kamu adalah janin! Frances berpikir kamu harus melakukan tes pendengaran dengan dokter sebagai gantinya!', 'Tes Ditolak!', 'custom', frances));

kembali

Grup sebelumnya harus dikembalikan untuk mencegah pengguna melanjutkan dengan kode.

Ingatlah untuk mengakhiri struktur kasus dan menutup semua angka.

Langkah 2: Uji Audio untuk Pengguna

Uji Audio untuk Pengguna
Uji Audio untuk Pengguna

Segmen ini ada untuk memastikan bahwa suara peserta di perangkat mereka tidak terlalu pelan atau terlalu keras.

Untuk memberikan peringatan kepada pengguna, sebuah kotak pesan muncul dan menunggu konfirmasi dari pengguna sebelum melanjutkan dengan suara: uiwait(msgbox('Sebelum tes dimulai, kami ingin melakukan tes audio untuk memastikan volume Anda benar! Siap?', 'Tunggu!', 'tolong'));

Gelombang sinus dimainkan dengan amplitudo 1 dan laju sampel 1000 Hz: T = [0:1/SampleRate:2]; y = 1*sin(2*pi*200*T); suara(y, SampleRate);

Pengguna kemudian diberi pertanyaan dengan tanggapan yang dimasukkan pengguna: Q = input('Dapatkah Anda mendengar suaranya? [y/n] n', 's');

Kemudian ada beberapa saat mencari ketika Q == 'n', jika benar maka suara berulang dan ditanyakan kembali kepada pengguna hingga jawabannya berubah dari 'n' menjadi 'y': while Q == 'n' if strcmp(Q, 'n') disp('Mengubah volume komputer anda lebih keras.'); tunggu_suara; jeda (2); Q = input('Bisakah kamu mendengar suaranya sekarang? [y/n] n', 's'); akhir akhir

Kemudian ada saat menunggu sebelum melanjutkan ke bagian pemeriksaan kode yang sebenarnya.

Langkah 3: Lakukan Tes Audiometri untuk Telinga Kanan

Lakukan Tes Audiometri untuk Telinga Kanan
Lakukan Tes Audiometri untuk Telinga Kanan

Dalam kode ini, sebuah loop akan berjalan selama 6 iterasi dengan frekuensi dan volume yang bervariasi untuk setiap telinga individu. Tergantung pada telinga yang ingin Anda uji, variabel Keluar akan memiliki suara di satu baris dan nol di baris lainnya.

Pertama Anda membuat dua vektor garis kosong untuk merekam frekuensi dan amplitudo suara yang didengar pengguna.

Bagian ini berada dalam indeks untuk loop untuk berapa pun banyak suara yang ingin Anda mainkan jika Anda ingin mengacak frekuensi yang dimainkan dan amplitudonya.

F adalah frekuensi: r = (rand*10000); Fs = 250 + r; (fungsi rand adalah untuk membuat frekuensi yang dibangkitkan secara acak) t adalah jumlah waktu tertentu yang ditentukan oleh: t = linspace(0, Fs*2, Fs*2); s adalah gelombang sinus: s = sin(2*pi*t*1000); (ini dapat dikalikan dengan variabel acak w untuk membuat nilai amplitudo/dB acak untuk fungsi suara: w = rand;)

Output untuk telinga kanan adalah: Keluar = [nol(ukuran(t)); S]';

Output dimainkan melalui kode: sound(Out, Fs)

Langkah selanjutnya adalah membuat antarmuka pengguna dengan kode yang merekam apakah pengguna mendengar suara atau tidak.

Pertama Anda membuat gambar dan menentukan posisi di mana gambar akan muncul: gcbf = figure('pos', [30 800 350 150]);

***Jika tombol tidak muncul untuk Anda, posisi gambar, seperti yang ditunjukkan oleh larik di atas, mungkin salah posisi untuk komputer Anda. Untuk mengatasi ini, ubah nilai 30 dan 800 ke posisi mana pun yang Anda inginkan. Misalnya, memiliki [0 0 350 150] akan memunculkan tombol gui di kiri bawah monitor.***

Tombol sakelar dibuat untuk merekam saat pengguna mendengar suara, dan posisi serta tampilan dapat disesuaikan: tb = uicontrol('Style', 'togglebutton', 'String', 'Tekan tombol saat Anda mendengar suara', ' tag', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Kode khusus ini memiliki kode resume dan vektor kosong menambah nilai jika tombol ditekan.

Kemudian buat fungsi tunggu untuk memasukkan respons tombol dan mengaktifkan kode di tombol saat ditekan: h = randi([4, 7]); uiwait(gcbf, h); (kami melakukan variabel acak h sehingga peserta tidak dapat menyontek dan menentukan jumlah detik yang diperlukan untuk merespons.)

Setelah loop selesai, pertahankan variabel keluaran frekuensi (freq_right) dalam Hz jadi biarkan saja. Kemudian konversikan variabel dB_right dari amp ke desibel dengan menggunakan persamaan: dB_right = mag2db(amp_right)*(-1);

Kemudian tambahkan fungsi: tutup semua. ini akan keluar dari angka yang tidak perlu yang mungkin muncul.

Tambahkan fungsi jeda, sekitar 10 detik, untuk memberikan waktu bagi pengguna untuk menyesuaikan dan mempersiapkan telinga kiri.

Langkah 4: Buat Kode yang Sama untuk Telinga Kiri

Buat Kode yang Sama untuk Telinga Kiri
Buat Kode yang Sama untuk Telinga Kiri

Ulangi kode untuk digunakan untuk telinga kanan untuk membuat segmen berikutnya yang menguji telinga kiri. Satu-satunya perbedaan adalah mengubah saluran keluaran mana suara akan berasal. Untuk melakukannya, balikkan urutan nilai larik untuk variabel Keluar. Seharusnya terlihat seperti ini:

Keluar = [s; nol(ukuran(t))]';

Dengan demikian, tidak ada suara yang akan keluar dari saluran kanan melainkan saluran kiri!

Langkah 5: Buat Gambar Berdampingan untuk Membandingkan Data

Buat Gambar Berdampingan untuk Membandingkan Data
Buat Gambar Berdampingan untuk Membandingkan Data
Buat Gambar Berdampingan untuk Membandingkan Data
Buat Gambar Berdampingan untuk Membandingkan Data

Sekarang buatlah grafik untuk menunjukkan data tersebut! Anda menempatkan dua grafik menjadi satu gambar jadi lakukan ini!

angka(1);subplot(1, 2, 1); ***subplot(1, 2, 2) untuk yang lainnya

Untuk setiap subplot, tambahkan patch ini dengan warna dan koordinat tertentu. Bagian ini keluar dari grafik tergantung pada seberapa besar tingkat gangguan pendengarannya. Seperti:

patch([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); % yellowhold pada % Subplot sekarang akan menampung patch dan scatterplot berikut

teks(3173, 8, 'Normal');

tambalan([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % hijau

teks(3577, 33, 'ringan');

patch([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % cyan

teks(2870, 48, 'Sedang');

patch([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % biru

teks(1739, 62, 'Sedang Parah');

patch([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % ungu

teks(3142, 80, 'Parah');

patch([250 8000 8000 250], [120 120 90 90], [0.96, 0.24, 0.24]); % merah

teks (3200, 103, 'Mendalam')

Kemudian tambahkan plot pencar kiri dan kanan! Kami dapat memberikan rata-rata nasional umum untuk Anda! Di Sini:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % nilai-x, earNat_dBL kiri = [10 3 10 15 10 15]; % nilai-y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % telinga kanan

Nat_dBR = [10 5 10 15 10 15];

Plot pencar harus membedakan titik kiri dan kanan. Anda bisa melakukan persilangan dan lingkaran!

NL = pencar(Nat_FreqL, Nat_dBL, 'bx'); % plot titik silang biruNR = scatter(Nat_FreqR, Nat_dBR, 'ro'); % plot lingkaran merah

Buat legenda untuk grafik nasional dengan menetapkannya ke variabel tertentu: legend([NL NR], {'title1', 'title2'});

Tetapkan batas x Anda dari 250 hingga 8000 Hz dan batas y Anda dari -10 hingga 120 dB. Ingatlah untuk mengubah tanda centang vertikal Anda dengan yticks()

Label sumbu x Anda "Frekuensi Hz" dan sumbu y Anda "Pitch dB".

Membalikkan sumbu y dengan mengumpulkan sumbu dengan ax = gca

Kemudian ikat properti arah y dengan: ax. YDir = 'reverse

Sekarang kode untuk yang kedua hampir sama tetapi tanpa legenda dan grafik scatterplot dengan variabel dari tes kiri dan kanan.

Setelah semua ini, tambahkan fungsi jeda selama sekitar 10 detik sehingga pengguna dapat melihat hasilnya.

Langkah 6: Tambahkan Sedikit Pesan Terima Kasih Jika Anda Mau

Tambahkan Sedikit Pesan Terima Kasih Jika Anda Mau!
Tambahkan Sedikit Pesan Terima Kasih Jika Anda Mau!

Ini hanya untuk bersenang-senang jika Anda ingin tetapi tambahkan imread(), imshow() dan uiwait(msgbox()) yang lain sebagai ucapan terima kasih dan perpisahan! Selain itu, ingatlah untuk meletakkan clf; tutup semua; kl; untuk menutup semuanya. Kerja bagus Anda melakukannya!

Direkomendasikan: