Sisukord:

Täiskasvanute kuulmistesti tegemine MATLABi abil: 6 sammu
Täiskasvanute kuulmistesti tegemine MATLABi abil: 6 sammu

Video: Täiskasvanute kuulmistesti tegemine MATLABi abil: 6 sammu

Video: Täiskasvanute kuulmistesti tegemine MATLABi abil: 6 sammu
Video: Täiskasvanute E-Gümnaasium 2024, November
Anonim
Kuidas teha täiskasvanute kuulmistesti MATLAB abil
Kuidas teha täiskasvanute kuulmistesti MATLAB abil

VASTUTUS: Meie test EI OLE meditsiiniline diagnostika ja seda ei tohiks sellisena kasutada. Kuulmise täpseks mõõtmiseks pöörduge arsti poole.

Kasutades juba olemasolevaid materjale, tegi meie rühm kuulmistesti. Meie test on mõeldud kasutamiseks täiskasvanutele ja teismelistele ainult seetõttu, et väikelaste kuulmine on erinevates vahemikes ja seda peaks mõõtma ainult professionaal.

See projekt sai inspiratsiooni meie BME MATLAB klassis töötades ja siinuslainete helidega mängides. Meid huvitas viis, kuidas siinuslainet saaks muuta, et esitada heli erinevatel kõrgustel.

Selle projekti jaoks oli meil vaja ainult arvutit, milles töötab MATLAB R2018b, ja paar kõrvaklappe. Programmi humoorikamaks muutmiseks kaasasime maskottina algupärase tegelase Francesi.

Samm: looge kasutaja sisendi kasutaja vanuse analüüsimiseks

Looge kasutaja vanuse analüüsimiseks kasutaja sisend
Looge kasutaja vanuse analüüsimiseks kasutaja sisend
Looge kasutaja vanuse analüüsimiseks kasutaja sisend
Looge kasutaja vanuse analüüsimiseks kasutaja sisend

Selle koodi esimene osa on teha kasutaja sisend, mis otsustab, kas ta on piisavalt vana, et kuulmistesti teha. Miks mitte seda teha, lisades rumalaid pilte ka meie maskottist Francesist? Selleks laadige alla kaasas olev zip -fail ja ekstraheerige see seejärel faili, mille saab koodi üles tõmmata. Jätkake joonistega faili üleslaadimist, kasutades järgmist:

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

Sõnumikastide ja jooniste suurte piltide esitamiseks kasutasime seda lõbusat meetodit, kuidas teile Francesit näidata. Lihtsalt imread oma valitud pilti vormingus: variable = imread ('nameofpicture.jpg');

Seejärel jätkake selle kuvamist, kasutades imshow (muutuja); siis kuvatakse see teie MatLabis figuurina selle käivitamisel!

Järgmisena on sõnumikastid, mida kasutatakse kogu koodi ulatuses. uiwait () on funktsioon, mille korral kood peatatakse kuni uiwaiti jaoks valitud toimingu lõpetamiseni. See valitud funktsioon on msgbox ('sõnum', 'pealkiri', 'ikoon')!

Võite Francesi sõnumeid vabalt muuta, kui järgite ülaltoodud vormingut msgbox (). Kui soovite kasutada Francesi pilte, märgistage „ikoon“kohandatuks ja jätkake seda koma ja valitud pildi imreadi muutujaga! Võite kasutada ka eelseadistatud ikoonitüüpe. see peaks välja nägema selline:

tere = imread ('Regular.jpg'); % loeb pilti üleslaaditud failist (hi); uiwait (msgbox ('Tere ja aitäh, et valisite meie kuulmistesti! See on Frances ja ta aitab teid täna teie testiga!', 'Tere tulemast!', 'kohandatud', tere));

Seejärel looge sisend, mis küsib kasutaja vanust nii!

UserAge = input ('Enne kui alustame seda testi, kui vana (aastat) olete? (Nt 32, 56,…) n', 's');

MÄRKUS. Kui arvud on imelikud ja neid on liiga palju, kasutage koodi sulgemise ajal varasemate arvude eemaldamiseks nuppu Sulge kõik

Seejärel looge lülituskorpuse struktuur! Pidage meeles, et kasutaja sisend on string ja peate selle teisendama arvväärtuseks. Nii et kasutage str2double (UserAge). Iga juhtumi vanusevahemik peaks olema vahemikus 4 kuni 6 või 18 kuni 40. Muutuja kinnitamiseks ühe juhtumi puhul kasutage tõeks num2cell (massiivi) järgmiselt:

lüliti str2double (UserAge) % muudab muutuja stringist numbriliseks väärtuseks case num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Sa oled loode! Frances arvab, et peaksid kuulmise testi tegema hoopis arsti juures!', 'Test denied!', 'custom', frances));

tagasi

Varasemad rühmad tuleks tagastada, et takistada kasutajal koodiga jätkamist.

Ärge unustage korpuse struktuuri lõpetada ja kõik arvud sulgeda.

2. samm: testige kasutaja heli

Testige kasutaja heli
Testige kasutaja heli

See segment on loodud tagamaks, et osaleja heli tema seadmes pole liiga vaikne ega liiga vali.

Kasutajale mõne hoiatuse saamiseks ilmub teade ja ootab kasutaja kinnitust, enne kui jätkab heliga: uiwait (msgbox ('Enne testi algust tahaksime teha helitesti, et veenduda teie helitugevuses on õige! Valmis? ',' Oota! ',' abi '));

Siinuslaine esitatakse amplituudiga 1 ja proovivõtu sagedusega 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*patt (2*pi*200*T); heli (y, SampleRate);

Seejärel esitatakse kasutajale küsimus, mille kasutaja on vastanud: Q = sisend ('Kas sa kuuled heli? [Y/n] n', 's');

Siis tuleb mõnda aega otsida, millal Q == 'n', kui see on tõene, siis heli kordub ja küsis kasutajat uuesti, kuni vastus on muutunud n -st y -ks: samas kui Q == 'n', kui strcmp (Q, 'n') disp ('Keerake arvuti helitugevust valjemaks.'); oota_heli; paus (2); Q = sisend ('Kas sa kuuled heli praegu? [Y/n] n', 's'); lõpp lõpp

Seejärel tuleb oodata hetke enne koodi tegeliku uurimisosa juurde kandmist.

3. samm: tehke parema kõrva audiomeetria test

Tehke parema kõrva audiomeetria test
Tehke parema kõrva audiomeetria test

Selles koodis töötab silmus 6 iteratsiooni erineva sageduse ja helitugevusega iga kõrva jaoks. Sõltuvalt kõrvast, mida soovite testida, on muutuja Out ühes reas heli ja teises null.

Esmalt tehke kaks tühja rea vektorit, et salvestada kasutaja kuuldava heli sagedused ja amplituud.

See osa on indutseeritud silmuse järgi, kui palju helisid soovite esitada, kui soovite juhitud sagedusi ja amplituudi muuta.

F on sagedus: r = (rand*10000); Fs = 250 + r; (randi funktsioon on luua juhuslikult genereeritud sagedus) t on teatud ajavahemik, mille määrab kindlaks: t = linspace (0, Fs*2, Fs*2); s on siinuslaine: s = sin (2*pi*t*1000); (seda saab korrutada juhusliku suurusega w, et luua helifunktsioonile juhuslik amplituud/dB väärtus: w = rand;)

Parema kõrva väljund on: Väljas = [nullid (suurus (t))); s] ';

Väljundid esitatakse koodi kaudu: heli (Out, Fs)

Järgmine samm on luua kasutajaliides koos koodikirjetega, kas kasutaja kuulis heli või mitte.

Esmalt tehke joonis ja määrake asukoht, kus see kuvatakse: gcbf = joonis ('pos', [30 800 350 150]);

*** Kui nupp ei ilmu teile, võib joonise asukoht, nagu ülaltoodud massiiv näitab, teie arvuti jaoks valesti paigutada. Selle lahendamiseks muutke 30 ja 800 väärtust soovitud asendisse. Näiteks kui teil on [0 0 350 150], tekib monitori vasakus alanurgas gui nupp. ***

Kui kasutaja kuuleb heli, salvestatakse lülitusnupp ning asukohta ja kuva saab kohandada: tb = uicontrol ('Stiil', 'lülitusnupp', 'String', 'Vajutage heli kuuldes nuppu', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Backback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Sellel koodil on koodi jätkamine ja tühjad vektorid lisavad nupule vajutamisel väärtuse.

Seejärel looge ootamisfunktsioon nupu vastuse vastuvõtmiseks ja aktiveerige nupul vajutamisel kood: h = randi ([4, 7]); uiwait (gcbf, h); (tegime juhuslikku muutujat h, nii et osalejad ei saanud petta ja määrata vastamiseks vajalike sekundite arvu.)

Kui tsükkel on lõppenud, hoidke sagedusväljundi muutujat (freq_right) Hz -is, nii et jätke see rahule. Seejärel teisendage muutuja dB_right võimenditest detsibellideks, kasutades võrrandit: dB_right = mag2db (amp_right)*(-1);

Seejärel lisage funktsioon: sulgege kõik. see väljub kõikidest mittevajalikest arvudest, mis võisid esile kerkida.

Lisage pausifunktsioon, umbes 10 sekundit, et anda kasutajale aega kohanemiseks ja vasaku kõrva ettevalmistamiseks.

Samm: looge vasaku kõrva jaoks sama kood

Looge vasaku kõrva jaoks sama kood
Looge vasaku kõrva jaoks sama kood

Järgmise vasaku kõrva testimise segmendi tegemiseks korrake parema kõrva jaoks kasutatud koodi. Ainus erinevus on muuta, millisest väljundkanalist heli tuleb. Selleks pöörake muutuja Out massiivi väärtuste järjekorda. See peaks välja nägema selline:

Väljas = [s; nullid (suurus (t))]”;

Seda tehes ei tule heli paremast kanalist, vaid vasakust kanalist!

Samm: tehke andmete võrdlemiseks kõrvuti joonis

Andmete võrdlemiseks tehke kõrvuti joonis
Andmete võrdlemiseks tehke kõrvuti joonis
Andmete võrdlemiseks tehke kõrvuti joonis
Andmete võrdlemiseks tehke kõrvuti joonis

Nüüd tehke andmete kuvamiseks graafik! Paned kaks graafikut ühte kujundisse, nii et tee seda!

joonis (1); alamjoon (1, 2, 1); *** alamplaan (1, 2, 2) teise jaoks

Lisage iga alamkrundi jaoks need plaastrid, millel on kindlad värvid ja koordinaadid. Need jaotised eraldatakse graafikust sõltuvalt sellest, kui suur on kuulmislangus. Nii nagu:

plaaster ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Alamjoonisel on nüüd järgmised plaastrid ja hajumiskohad

tekst (3173, 8, 'Tavaline');

plaaster ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % roheline

tekst (3577, 33, 'Kerge');

plaaster ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % tsüaan

tekst (2870, 48, 'Mõõdukas');

plaaster ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % sinine

tekst (1739, 62, 'Mõõdukalt raske');

plaaster ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % lilla

tekst (3142, 80, 'Raske');

plaaster ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % punane

tekst (3200, 103, „Põhjalik”)

Seejärel lisage vasak ja parem hajumisjoonised! Saame pakkuda teile üldist riigi keskmist! Siin:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-väärtus, vasak kõrvNat_dBL = [10 3 10 15 10 15]; % y-väärtus

Nat_FreqR = [250 500 1000 2000 4000 8000]; % parem kõrv

Nat_dBR = [10 5 10 15 10 15];

Hajutusgraafikud peaksid eristama vasakut ja paremat punkti. Võiks teha riste ja ringe!

NL = hajumine (Nat_FreqL, Nat_dBL, 'bx'); % joonistab siniseid ristpunkteNR = hajumine (Nat_FreqR, Nat_dBR, 'ro'); % joonistab punaseid ringe

Tehke rahvusgraafile legend, määrates selle konkreetsetele muutujatele: legend ([NL NR], {'title1', 'title2'});

Seadke oma x -piirmääraks 250 kuni 8000 Hz ja y -piiriks -10 kuni 120 dB. Ärge unustage muuta oma vertikaalseid puuke yticksiga (

Märkige oma x -teljele "Frequency Hz" ja y -teljele "Pitch dB".

Pöörake y -telg ümber, kogudes telje koos ax = gca

Seejärel seo y suuna omadus sellega: ax. YDir = 'reverse

Nüüd on teise kood umbes sama, kuid ilma legendita ja hajutamisjooniste joonistamisega vasak- ja paremkatse muutujatega.

Pärast kõike seda lisage pausifunktsioon umbes 10 sekundiks, et kasutaja saaks nende tulemusi vaadata.

6. samm: kui soovite, lisage väike tänusõnum

Kui soovite, lisage väike tänusõnum!
Kui soovite, lisage väike tänusõnum!

See on lihtsalt lõbu pärast, kui soovite, kuid tänamiseks ja hüvastijätmiseks lisage veel üks imread (), imshow () ja uiwait (msgbox ())! Peale selle ärge unustage panna clf; sulgege kõik; clc; et kõik sulgeda. Hea töö, et sa seda tegid!

Soovitan: