Isi kandungan:

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

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

Video: Cara Membuat Ujian Pendengaran Orang Dewasa Menggunakan MATLAB: 6 Langkah
Video: Tanda kalau otak kamu 10x lebih jenius 2024, Julai
Anonim
Cara Membuat Ujian Pendengaran Orang Dewasa Menggunakan MATLAB
Cara Membuat Ujian Pendengaran Orang Dewasa Menggunakan MATLAB

PENAFIAN: Ujian kami BUKAN diagnostik perubatan dan tidak boleh digunakan seperti itu. Untuk mengukur pendengaran dengan tepat, sila berjumpa dengan profesional perubatan.

Dengan menggunakan bahan yang telah kami miliki, kumpulan kami membuat ujian pendengaran. Ujian kami adalah untuk penggunaan dewasa dan remaja hanya kerana pendengaran anak-anak kecil datang dalam pelbagai rentang dan harus diukur hanya oleh seorang profesional.

Projek ini diilhamkan semasa bekerja di kelas BME MATLAB kami dan bermain dengan bunyi yang dihasilkan oleh gelombang sinus. Kami tertarik dengan cara gelombang sinus dapat diubah untuk memainkan suara pada nada yang berbeda.

Yang kami perlukan untuk projek ini ialah komputer yang menjalankan MATLAB R2018b dan sepasang earbud. Kami memasukkan watak asli, Frances, sebagai maskot untuk menjadikan program ini lebih lucu.

Langkah 1: Buat Input Pengguna untuk Menganalisis Umur Pengguna

Buat Input Pengguna untuk Menganalisis Umur Pengguna
Buat Input Pengguna untuk Menganalisis Umur Pengguna
Buat Input Pengguna untuk Menganalisis Umur Pengguna
Buat Input Pengguna untuk Menganalisis Umur Pengguna

Bahagian pertama kod ini adalah membuat input pengguna yang menentukan sama ada mereka cukup umur untuk meneruskan ujian pendengaran. Mengapa tidak melakukannya dengan menambahkan gambar bodoh maskot kami, Frances? Untuk melakukannya, muat turun fail zip yang disertakan dan kemudian ekstrak ke fail yang boleh dimasukkan ke dalam kod. Teruskan memuat naik fail penuh gambar dengan menggunakan ini:

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

Untuk menunjukkan kotak mesej dan gambar besar gambar, kami menggunakan kaedah menyeronokkan ini untuk menunjukkan Frances kepada anda. Cukup baca gambar pilihan anda dengan format: variabel = imread ('nameofpicture.jpg');

Kemudian teruskan untuk menunjukkannya dengan menggunakan imshow (variabel); ia kemudian akan muncul sebagai tokoh dalam MatLab anda semasa anda menjalankannya!

Seterusnya adalah kotak mesej yang digunakan di seluruh kod. uiwait () adalah fungsi di mana kod dihentikan sehingga fuction yang dipilih untuk uiwait selesai. Fungsi yang dipilih ini adalah msgbox ('message', 'title', 'icon')!

Anda boleh menukar mesej yang Frances katakan selama anda mengikuti format msgbox () di atas. Sekiranya anda ingin menggunakan gambar Frances, labelkan 'ikon' sebagai 'kebiasaan' dan teruskan dengan koma dan pemboleh ubah susunan gambar yang anda pilih! Anda juga boleh menggunakan jenis 'ikon' yang telah ditetapkan. ia kelihatan seperti ini:

hi = imread ('Biasa.jpg'); % membaca gambar dari fail yang diuploadshow (hi); uiwait (msgbox ('Halo dan terima kasih kerana memilih ujian pendengaran kami! Inilah Frances dan dia akan membantu anda hari ini dengan ujian anda!', 'Selamat datang!', 'custom', hi));

Seterusnya buat input yang meminta usia pengguna seperti itu!

UserAge = input ('Sebelum kita memulakan ujian ini, berapa umur anda (tahun 32, 56, …) n', 's');

CATATAN: jika angka-angka itu pelik dan terlalu banyak, gunakan tutup semua untuk membuang angka sebelumnya semasa kod anda berjalan

Kemudian buat struktur sarung suis! Ingat bahawa input pengguna berada dalam rentetan dan anda perlu mengubahnya menjadi nilai berangka. Oleh itu, gunakan str2double (UserAge). Setiap kes harus mempunyai julat usia seperti 4 hingga 6 atau 18 hingga 40. untuk mempunyai pemboleh ubah untuk mengesahkan benar untuk salah satu kes menggunakan num2cell (array) seperti:

tukar str2double (UserAge)% mengubah pemboleh ubah dari rentetan ke casing nilai angka num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (perancis);

uiwait (msgbox ('Anda adalah janin! Frances berpendapat anda harus melakukan ujian pendengaran anda dengan doktor!', 'Test Denied!', 'custom', frances));

kembali

Kumpulan yang lebih awal harus dikembalikan untuk mengelakkan pengguna meneruskan kod.

Ingatlah untuk menamatkan struktur kes dan menutup semua angka.

Langkah 2: Uji Audio untuk Pengguna

Uji Audio untuk Pengguna
Uji Audio untuk Pengguna

Segmen ini wujud untuk memastikan bahawa suara peserta pada peranti mereka tidak terlalu senyap atau terlalu kuat.

Untuk memberi peringatan kepada pengguna, kotak mesej muncul dan menunggu pengesahan dari pengguna sebelum terus meneruskan dengan suara: uiwait (msgbox ('Sebelum ujian bermula, kami ingin melakukan ujian audio untuk memastikan kelantangan anda betul! Bersedia? ',' Tunggu! ',' tolong '));

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

Pengguna kemudian diajukan soalan dengan jawapan pengguna yang dimasukkan: Q = input ('Bolehkah anda mendengar suaranya? [Y / n] n', 's');

Kemudian ada beberapa saat untuk mencari Q == 'n', jika benar maka suaranya berulang dan bertanya kepada pengguna lagi sehingga jawapannya telah berubah dari 'n' menjadi 'y': sementara Q == 'n' jika strcmp (Q, 'n') disp ('Putar kelantangan komputer anda dengan lebih kuat.'); tunggu_sunyi; berhenti seketika (2); Q = input ('Bolehkah anda mendengar suaranya sekarang? [Y / n] n', 's'); hujung akhir

Ada masa menunggu sebelum membawa bahagian pemeriksaan kod yang sebenarnya.

Langkah 3: Lakukan Ujian Audiometri untuk Telinga Kanan

Lakukan Ujian Audiometri untuk Telinga Kanan
Lakukan Ujian Audiometri untuk Telinga Kanan

Dalam kod ini, satu gelung akan dijalankan selama 6 lelaran dengan frekuensi dan isipadu yang berbeza-beza untuk setiap telinga individu. Bergantung pada telinga yang ingin anda uji, pemboleh ubah Keluar akan mempunyai suara dalam satu baris dan nol di baris yang lain.

Mula-mula anda membuat dua vektor garisan kosong untuk merakam frekuensi dan amplitud suara yang didengar oleh pengguna.

Bahagian ini berada dalam gelung yang diindeks untuk seberapa banyak bunyi yang anda mahu mainkan jika anda ingin mengacak frekuensi dan amplitud yang dimainkan.

F ialah frekuensi: r = (rand * 10000); Fs = 250 + r; (fungsi rand adalah untuk membuat frekuensi yang dihasilkan secara rawak) t adalah jumlah masa yang ditentukan ditentukan oleh: t = linspace (0, Fs * 2, Fs * 2); s adalah gelombang sinus: s = sin (2 * pi * t * 1000); (ini dapat dikalikan dengan pemboleh ubah rawak w untuk membuat nilai amplitud / dB rawak untuk fungsi suara: w = rand;)

Keluaran untuk telinga kanan adalah: Keluar = [sifar (ukuran (t)); s] ';

Keluaran dimainkan melalui kod: suara (Keluar, Fs)

Langkah seterusnya adalah membuat antara muka pengguna dengan catatan kod sama ada pengguna mendengar suaranya atau tidak.

Mula-mula anda membuat angka dan menentukan kedudukan di mana angka itu akan muncul: gcbf = angka ('pos', [30 800 350 150]);

*** Jika butang tidak muncul untuk anda, posisi gambar, seperti yang ditunjukkan oleh susunan di atas, mungkin salah posisi untuk komputer anda. Untuk menyelesaikannya, ubah nilai 30 dan 800 ke kedudukan mana sahaja yang anda mahukan. Contohnya, dengan [0 0 350 150] akan memunculkan butang gui di kiri bawah monitor. ***

Tombol togol dibuat untuk merekam ketika pengguna mendengar suara, dan posisi dan paparan dapat disesuaikan: tb = uicontrol ('Style', 'togglebutton', 'String', 'Tekan butang ketika 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); '); Kod khusus ini mempunyai resume kod dan vektor kosong menambah nilai jika butang ditekan.

Kemudian buat fungsi tunggu untuk mengambil tindak balas butang dan aktifkan kod di butang apabila ditekan: h = randi ([4, 7]); uiwait (gcbf, h); (kami melakukan pemboleh ubah rawak h sehingga peserta tidak dapat menipu dan menentukan bilangan saat yang diperlukan untuk bertindak balas.)

Setelah gelung selesai, simpan pemboleh ubah keluaran frekuensi (freq_right) dalam Hz sehingga biarkan sahaja. Kemudian ubah pemboleh ubah 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 diperlukan yang mungkin muncul.

Tambahkan fungsi jeda, kira-kira 10 saat, untuk memberi masa kepada pengguna untuk menyesuaikan diri dan mempersiapkan telinga kiri.

Langkah 4: Buat Kod yang Sama untuk Telinga Kiri

Buat Kod yang Sama untuk Telinga Kiri
Buat Kod yang Sama untuk Telinga Kiri

Ulangi kod yang digunakan untuk telinga kanan untuk membuat segmen seterusnya yang menguji telinga kiri. Satu-satunya perbezaan adalah menukar saluran output dari mana suara itu akan datang. Untuk melakukan ini, balikkan susunan nilai array untuk pemboleh ubah Keluar. Ia kelihatan seperti ini:

Keluar = [s; sifar (saiz (t))] ';

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

Langkah 5: Buat Gambar Berdampingan untuk Membandingkan Data

Buat Rajah Berdampingan untuk Membandingkan Data
Buat Rajah Berdampingan untuk Membandingkan Data
Buat Rajah Berdampingan untuk Membandingkan Data
Buat Rajah Berdampingan untuk Membandingkan Data

Sekarang buat grafik untuk menunjukkan data! Anda meletakkan dua graf menjadi satu angka jadi lakukan ini!

rajah (1); subplot (1, 2, 1); *** subplot (1, 2, 2) untuk yang lain

Untuk setiap subplot, tambahkan tampalan ini dengan warna dan koordinat tertentu. Bahagian ini dari grafik bergantung pada seberapa besar tahap kehilangan pendengarannya. Seperti:

tambalan ([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); % yellowhold on% Subplot sekarang akan memegang 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');

tambalan ([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % sian

teks (2870, 48, 'Sederhana');

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

teks (1739, 62, 'Sedikit teruk');

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

teks (3142, 80, 'teruk');

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

teks (3200, 103, 'Mendalam')

Kemudian tambahkan petak penyebaran kiri dan kanan! Kami boleh memberikan purata kebangsaan umum untuk anda! Di sini:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-nilai, telinga kiriNat_dBL = [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];

Petak penyebaran harus melihat titik kiri dan kanan. Anda boleh melakukan salib dan bulatan!

NL = penyebaran (Nat_FreqL, Nat_dBL, 'bx'); % petak titik silang biruNR = penyebaran (Nat_FreqR, Nat_dBR, 'ro'); % petak bulatan merah

Buat legenda untuk grafik nasional dengan memberikannya kepada pemboleh ubah tertentu: legenda ([NL NR], {'title1', 'title2'});

Tetapkan had x anda dari 250 hingga 8000 Hz dan had y anda dari -10 hingga 120 dB. Ingatlah untuk menukar tanda tegak anda dengan yticks ()

Labelkan paksi x anda "Frekuensi Hz" dan paksi y anda "Pitch dB".

Balikkan paksi y dengan mengumpulkan paksi dengan ax = gca

Kemudian ikat sifat arah y kepadanya dengan: ax. YDir = 'terbalik

Sekarang kod untuk yang kedua hampir sama tetapi tanpa legenda dan membuat grafik plot penyebaran dengan pemboleh ubah dari ujian kiri dan kanan.

Setelah semua ini, tambahkan fungsi jeda selama kira-kira 10 saat sehingga pengguna dapat melihat hasilnya.

Langkah 6: Tambahkan sedikit Mesej Terima Kasih Sekiranya Anda Mahu

Tambahkan Mesej Terima Kasih Kecil Sekiranya Anda Mahu!
Tambahkan Mesej Terima Kasih Kecil Sekiranya Anda Mahu!

Ini hanya untuk keseronokan jika anda mahu tetapi tambahkan imread (), imshow () dan uiwait (msgbox ()) yang lain untuk terima kasih dan selamat tinggal! Selain daripada itu, ingatlah untuk meletakkan clf; tutup semua; clc; untuk menutup semuanya. Kerja bagus anda berjaya!

Disyorkan: