Cuprins:

Cum se face un test de auz pentru adulți folosind MATLAB: 6 pași
Cum se face un test de auz pentru adulți folosind MATLAB: 6 pași

Video: Cum se face un test de auz pentru adulți folosind MATLAB: 6 pași

Video: Cum se face un test de auz pentru adulți folosind MATLAB: 6 pași
Video: 智利挪威三文鱼北京新发地案板投毒?美军耳机的秘密窗式冷气机循环病毒 Chilean Norwegian salmon spread virus? AC window catch the virus. 2024, Decembrie
Anonim
Cum se face un test de auz pentru adulți folosind MATLAB
Cum se face un test de auz pentru adulți folosind MATLAB

DISCLAIMER: Testul nostru NU este un diagnostic medical și nu trebuie utilizat ca atare. Pentru a măsura cu precizie auzul, vă rugăm să consultați un medic.

Folosind materiale pe care le aveam deja, grupul nostru a făcut un test auditiv. Testul nostru este destinat adulților și adolescenților doar pentru că auzul copiilor mici vine în diferite domenii și trebuie măsurat numai de către un profesionist.

Acest proiect a fost inspirat în timp ce lucrați în clasa noastră BME MATLAB și jucam cu sunete produse de unde sinusoidale. Am fost interesați de modurile în care o undă sinusoidală ar putea fi schimbată pentru a reda un sunet la diferite tonuri.

Tot ce aveam nevoie pentru acest proiect a fost un computer care rulează MATLAB R2018b și o pereche de căști. Am inclus un personaj original, Frances, ca mascot pentru a face programul mai plin de umor.

Pasul 1: Creați o intrare de utilizator pentru a analiza vârsta utilizatorului

Creați o intrare de utilizator pentru a analiza vârsta utilizatorului
Creați o intrare de utilizator pentru a analiza vârsta utilizatorului
Creați o intrare de utilizator pentru a analiza vârsta utilizatorului
Creați o intrare de utilizator pentru a analiza vârsta utilizatorului

Prima parte a acestui cod este de a face o intrare a utilizatorului în care decide dacă sunt suficient de în vârstă pentru a continua testul auditiv. De ce nu o faceți adăugând și imagini prostești cu mascota noastră, Frances? Pentru aceasta, descărcați fișierul zip inclus și extrageți-l într-un fișier care poate fi tras în cod. Procedați la încărcarea în lot a fișierului plin de desene utilizând acest lucru:

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

Pentru a prezenta casetele de mesaje și imaginile mari ale desenelor, am folosit această metodă distractivă de a-ți arăta Frances. Pur și simplu citiți o imagine la alegere cu formatul: variable = imread ('nameofpicture.jpg');

Apoi continuați să-l arătați folosind imshow (variabilă); atunci va apărea ca o figură în MatLab atunci când îl rulați!

Următoarele sunt casetele de mesaje care sunt utilizate în întregul cod. uiwait () este o funcție în care codul este oprit până când se termină fuction-ul ales pentru uiwait. Această funcție aleasă este msgbox („mesaj”, „titlu”, „pictogramă”)!

Vă puteți simți liber să schimbați mesajele pe care le spune Frances atâta timp cât urmați formatul msgbox () de mai sus. Dacă doriți să utilizați fotografii Frances, etichetați „pictograma” ca „personalizată” și continuați cu o virgulă și cu variabila de citire a imaginii pe care ați ales-o! De asemenea, puteți utiliza tipurile de „pictograme” presetate. ar trebui să arate așa:

hi = imread ('Regular.jpg'); % citește imaginea din fișierul uploadedimshow (hi); uiwait (msgbox ("Bună ziua și vă mulțumim că ați ales testul nostru auditiv! Acesta este Frances și vă va ajuta astăzi cu testul dvs.!", "Bun venit!", "personalizat", salut));

Apoi creați o intrare care solicită vârsta utilizatorului așa!

UserAge = input („Înainte de a începe acest test, câți ani aveți? (De ex. 32, 56,…) n ',„ s”);

NOTĂ: dacă cifrele sunt ciudate și sunt prea multe, folosiți închidere pentru a elimina cifrele anterioare pe măsură ce rulează codul dvs.

Apoi creați o structură de caz de comutare! Amintiți-vă că introducerea utilizatorului este în șir și trebuie să o convertiți într-o valoare numerică. Deci, utilizați str2double (UserAge). Fiecare caz ar trebui să aibă o gamă de vârste, cum ar fi 4 până la 6 sau 18 până la 40. Pentru a avea variabila de verificat ca fiind adevărată pentru unul dintre cazuri, utilizați num2cell (matrice) astfel:

switch str2double (UserAge)% modifică variabila dintr-un șir într-o valoare numerică caz num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox („Ești un făt! Frances crede că ar trebui să-ți faci testul auditiv cu un medic!”, „Test refuzat!”, „personalizat”, frances));

întoarcere

Grupurile anterioare ar trebui returnate pentru a împiedica utilizatorul să continue cu codul.

Nu uitați să încheiați structura carcasei și să închideți toate cifrele.

Pasul 2: Testați sunetul pentru utilizator

Testați sunetul pentru utilizator
Testați sunetul pentru utilizator

Acest segment există pentru a se asigura că sunetul participantului de pe dispozitivul său nu este nici prea liniștit, nici prea puternic.

Pentru a oferi utilizatorului o avertizare, apare o casetă de mesaj și așteaptă confirmarea utilizatorului înainte de a continua cu sunetul: uiwait (msgbox („Înainte de începerea testului, am dori să facem un test audio pentru a ne asigura are dreptate! Gata? ',' Stai! ',' ajutor '));

O undă sinusoidală este redată cu o amplitudine de 1 și rata de eșantionare de 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * sin (2 * pi * 200 * T); sunet (y, SampleRate);

Utilizatorului i se pune apoi o întrebare cu un răspuns introdus de utilizator: Q = intrare („Puteți auzi sunetul? [Y / n] n ',' s ');

Apoi, există o perioadă de timp pentru a căuta când Q == 'n', dacă este adevărat, atunci sunetul se repetă și a cerut din nou utilizatorului până când răspunsul s-a schimbat de la 'n' la 'y': în timp ce Q == 'n' dacă strcmp (Q, 'n') disp ('Măriți volumul computerului mai tare.'); wait_sound; pauză (2); Q = intrare ('Puteți auzi sunetul acum? [Y / n] n', 's'); sfârșit sfârșit

Există apoi un moment de așteptare înainte de a trece la porțiunea de examinare efectivă a codului.

Pasul 3: Faceți testul de audiometrie pentru urechea dreaptă

Faceți testul de audiometrie pentru urechea dreaptă
Faceți testul de audiometrie pentru urechea dreaptă

În acest cod, o buclă va rula pentru 6 iterații cu frecvențe și volume variabile pentru fiecare ureche individuală. În funcție de urechea pe care doriți să o testați, variabila Out va avea sunet într-un rând și zerouri în altul.

Mai întâi creați doi vectori de linie goi pentru a înregistra frecvențele și amplitudinea sunetului pe care îl aude utilizatorul.

Această porțiune este într-o buclă indexată pentru oricâte sunete doriți să redați dacă doriți să randomizați frecvențele redate și amplitudinea.

F este frecvența: r = (rand * 10000); Fs = 250 + r; (funcția rand este de a crea o frecvență generată aleatoriu) t este o anumită perioadă de timp progresată determinată de: t = linspace (0, Fs * 2, Fs * 2); s este unda sinusoidală: s = sin (2 * pi * t * 1000); (aceasta poate fi înmulțită cu variabila aleatorie w pentru a crea o amplitudine aleatorie / valoare dB pentru funcția de sunet: w = rand;)

Ieșirea pentru urechea dreaptă este: Out = [zerouri (dimensiunea (t)); s] ';

Ieșirile sunt redate prin cod: sunet (Out, Fs)

Următorul pas este de a crea o interfață cu utilizatorul cu înregistrările de cod, indiferent dacă utilizatorul a auzit sunetul sau nu.

Mai întâi faceți o figură și determinați poziția în care va apărea figura: gcbf = cifră ('pos', [30 800 350 150]);

*** Dacă butonul nu apare pentru dvs., poziția figurii, așa cum se arată în matricea de mai sus, poate fi poziționată greșit pentru computerul dvs. Pentru a rezolva acest lucru, schimbați valorile 30 și 800 în orice poziție doriți. De exemplu, dacă aveți [0 0 350 150] va apărea butonul gui din partea stângă jos a monitorului. ***

Un buton de comutare este făcut pentru a înregistra când utilizatorul aude sunetul, iar poziția și afișajul pot fi personalizate: tb = uicontrol („Stil”, „comutator”, „Șir”, „Apăsați butonul când auziți un sunet”, „ tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Acest cod particular are reluarea codului și vectorii goi adaugă o valoare dacă butonul este apăsat.

Apoi creați o funcție de așteptare pentru a obține răspunsul butonului și activați codul din buton când apăsați: h = randi ([4, 7]); uiwait (gcbf, h); (am făcut variabila aleatorie h, astfel încât participanții să nu poată înșela și să determine numărul de secunde necesare pentru a răspunde.)

După ce bucla este terminată, păstrați variabila de ieșire de frecvență (freq_right) în Hz, așa că lăsați-o în pace. Apoi convertiți variabila dB_right de la amperi la decibeli utilizând ecuația: dB_right = mag2db (amp_right) * (- 1);

Apoi adăugați funcția: închideți toate. aceasta va ieși din orice cifre inutile care ar fi putut apărea.

Adăugați o funcție de pauză, aproximativ 10 secunde, pentru a da timp utilizatorului să se ajusteze și să se pregătească pentru urechea stângă.

Pasul 4: Creați același cod pentru urechea stângă

Creați același cod pentru urechea stângă
Creați același cod pentru urechea stângă

Repetați codul folosit pentru urechea dreaptă pentru a face următorul segment care testează urechea stângă. Singura diferență este schimbarea canalului de ieșire din care va proveni sunetul. Pentru a face acest lucru, răsturnați ordinea valorilor matricei pentru variabila Out. Ar trebui să arate astfel:

Out = [s; zerouri (dimensiunea (t))] ';

Procedând astfel, nu va ieși niciun sunet din canalul drept, ci canalul stâng!

Pasul 5: Faceți o figură alăturată pentru a compara datele

Faceți o figură alăturată pentru a compara datele
Faceți o figură alăturată pentru a compara datele
Faceți o figură alăturată pentru a compara datele
Faceți o figură alăturată pentru a compara datele

Acum faceți un grafic pentru a arăta datele! Puneți două grafice într-o singură figură, așa că faceți acest lucru!

figura (1); subtrama (1, 2, 1); *** parcela secundară (1, 2, 2) pentru cealaltă

Pentru fiecare subplot, adăugați aceste patch-uri cu culori și coordonate specifice. Aceste secțiuni din grafic în funcție de cât de mare este gradul de pierdere a auzului. Ca astfel:

plasture ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on% Subplotul va conține acum următoarele patch-uri și scatterplots

text (3173, 8, „Normal”);

plasture ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % verde

text (3577, 33, „ușor”);

plasture ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % cyan

text (2870, 48, „Moderat”);

plasture ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % albastru

text (1739, 62, „Moderat sever”);

plasture ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % Violet

text (3142, 80, „Sever”);

plasture ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % roșu

text (3200, 103, „Profund”)

Apoi adăugați graficele de împrăștiere stânga și dreapta! Vă putem oferi o medie națională generală pentru dvs.! Aici:

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

Nat_FreqR = [250 500 1000 2000 4000 8000]; % urechea dreapta

Nat_dBR = [10 5 10 15 10 15];

Graficele de împrăștiere ar trebui să discearnă punctele din stânga și din dreapta. Ai putea face cruci și cercuri!

NL = scatter (Nat_FreqL, Nat_dBL, 'bx'); % trasează puncte de cruce albastre NR = scatter (Nat_FreqR, Nat_dBR, 'ro'); % complotează cercuri roșii

Creați o legendă pentru graficul național atribuindu-l unor variabile specifice: legendă ([NL NR], {'title1', 'title2'});

Setați limita x de la 250 la 8000 Hz și limita y de la -10 la 120 dB. Nu uitați să vă schimbați căpușele verticale cu yticks ()

Etichetați-vă axa x „Frecvența Hz” și axa y „Pitch dB”.

Inversați axa y prin adunarea axei cu ax = gca

Apoi legați proprietatea direcției y de aceasta cu: ax. YDir = 'invers

Acum, codul pentru al doilea este aproximativ același, dar fără legendă și graficul diagramelor de dispersie cu variabilele din testele din stânga și din dreapta.

După toate acestea, adăugați o funcție de pauză timp de aproximativ 10 secunde, astfel încât utilizatorul să poată privi rezultatele lor.

Pasul 6: Adăugați un mic mesaj de mulțumire dacă doriți

Adăugați un mic mesaj de mulțumire dacă doriți!
Adăugați un mic mesaj de mulțumire dacă doriți!

Acest lucru este doar pentru distracție, dacă doriți, dar adăugați un alt imread (), imshow () și uiwait (msgbox ()) pentru mulțumiri și adio! În afară de asta, nu uitați să puneți clf; inchide tot; clc; pentru a închide totul. Bună treabă ai făcut-o!

Recomandat: