Sisällysluettelo:

Aikuisten kuulotestin tekeminen MATLABin avulla: 6 vaihetta
Aikuisten kuulotestin tekeminen MATLABin avulla: 6 vaihetta

Video: Aikuisten kuulotestin tekeminen MATLABin avulla: 6 vaihetta

Video: Aikuisten kuulotestin tekeminen MATLABin avulla: 6 vaihetta
Video: Kuulowebinaari, osa 4 2024, Marraskuu
Anonim
Kuinka tehdä aikuisten kuulotesti MATLABin avulla
Kuinka tehdä aikuisten kuulotesti MATLABin avulla

VASTUUVAPAUSLAUSEKE: Testimme EI ole lääketieteellinen diagnoosi, eikä sitä tule käyttää sellaisenaan. Jos haluat mitata kuulosi tarkasti, ota yhteys lääkäriin.

Käyttämällä jo olemassa olevia materiaaleja ryhmämme teki kuulotestin. Testi on tarkoitettu vain aikuisille ja teini -ikäisille, koska pienten lasten kuulo vaihtelee eri alueilla ja sen saa mitata vain ammattilainen.

Tämä projekti sai inspiraation työskennellessään BME MATLAB -luokassamme ja leikkiessä siniaaltojen äänillä. Olimme kiinnostuneita tavoista muuttaa siniaalto niin, että se toistaa äänen eri kentillä.

Tähän projektiin tarvitsimme vain tietokoneen, jossa on MATLAB R2018b, ja pari nappikuuloketta. Lisäsimme alkuperäisen hahmon, Francesin, maskotiksi, jotta ohjelma olisi humoristisempi.

Vaihe 1: Luo käyttäjätulo käyttäjän iän analysoimiseksi

Luo käyttäjätulo käyttäjän iän analysoimiseksi
Luo käyttäjätulo käyttäjän iän analysoimiseksi
Luo käyttäjätulo käyttäjän iän analysoimiseksi
Luo käyttäjätulo käyttäjän iän analysoimiseksi

Tämän koodin ensimmäinen osa on syöttää käyttäjä, joka päättää, ovatko he tarpeeksi vanhoja kuulotestin suorittamiseen. Miksi et tekisi sitä lisäämällä myös typeriä kuvia maskotistamme Francesista? Voit tehdä tämän lataamalla mukana toimitetun zip -tiedoston ja purkaaksesi sen tiedostoon, joka voidaan vetää koodiin. Jatka erälatauksella piirustusten täyttämää tiedostoa käyttämällä tätä:

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

Voidaksemme esittää viestien laatikot ja suuret kuvat piirustuksista käytimme tätä hauskaa tapaa näyttää Frances sinulle. Yksinkertaisesti kuvittele valitsemasi kuva muodossa: variable = imread ('nameofpicture.jpg');

Jatka sen näyttämistä käyttämällä imshow (muuttuja); se näkyy hahmona MatLabissasi, kun käytät sitä!

Seuraavaksi ovat viestikentät, joita käytetään koko koodissa. uiwait () on toiminto, jossa koodi pysäytetään, kunnes uiwaitille valittu toiminto on valmis. Tämä valittu toiminto on msgbox ('viesti', 'otsikko', 'kuvake')!

Voit vapaasti muuttaa Francesin sanomia niin kauan kuin noudatat yllä olevaa msgbox () -muotoa. Jos haluat käyttää Frances -kuvia, merkitse 'kuvake' mukautetuksi ja jatka pilkulla ja valitsemasi kuvan imread -muuttujalla! Voit myös käyttää esiasetettuja kuvaketyyppejä. sen pitäisi näyttää tältä:

hei = imread ('Regular.jpg'); % lukee kuvan ladatusta näytöstä (hei); uiwait (msgbox ('Hei ja kiitos, että valitsit kuulokokeen! Tämä on Frances ja hän auttaa sinua tänään testissäsi!', 'Tervetuloa!', 'custom', hei));

Luo seuraavaksi syöttö, joka kysyy käyttäjän ikää!

UserAge = input ('Kuinka vanha (vuotta) olet ennen tämän testin aloittamista? (Esim. 32, 56,…) n', 's');

HUOMAUTUS: jos luvut ovat outoja ja niitä on liikaa, käytä sulje kaikki, jos haluat poistaa aiemmat luvut koodin toimiessa

Luo sitten kytkinkotelorakenne! Muista, että käyttäjän syöttö on merkkijono ja sinun on muunnettava se numeeriseksi arvoksi. Joten käytä str2double (UserAge). Jokaisella tapauksella tulisi olla ikä -alueita, kuten 4–6 tai 18–40. Jotta muuttuja vahvistaisi todeksi jossakin tapauksessa, käytä num2cell (taulukko) seuraavasti:

kytkin str2double (UserAge) % muuttaa muuttujan merkkijonosta numeeriseksi arvoksi tapaus num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Olet sikiö! Francesin mielestä sinun pitäisi tehdä kuulotesti lääkärin kanssa!', 'Testi kielletty!', 'custom', frances));

palata

Aiemmat ryhmät tulee palauttaa, jotta käyttäjä ei voi jatkaa koodin käyttöä.

Muista lopettaa kotelorakenne ja sulkea kaikki luvut.

Vaihe 2: Testaa käyttäjän ääni

Testaa käyttäjän ääni
Testaa käyttäjän ääni

Tämä segmentti on tarkoitettu varmistamaan, että osallistujan ääni laitteellaan ei ole liian hiljainen eikä liian voimakas.

Antaakseen käyttäjälle varoituksen viesti -ruutu ponnahtaa esiin ja odottaa vahvistusta käyttäjältä ennen kuin jatkat äänen kanssa: uiwait (msgbox ('Ennen kuin testi alkaa, haluamme tehdä äänitestin varmistaaksesi äänenvoimakkuuden on oikein! Valmis? ',' Odota! ',' help '));

Siniaaltoa toistetaan amplitudilla 1 ja näytteenottotaajuudella 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); ääni (y, SampleRate);

Käyttäjältä kysytään sitten kysymys, johon käyttäjä on antanut vastauksen: Q = input ('Kuuletko äänen? [Y/n] n', 's');

Sitten on jonkin aikaa etsittävä, milloin Q == 'n', jos tosi, ääni toistuu ja kysyi käyttäjältä uudelleen, kunnes vastaus on muuttunut n: stä y: ksi: Q == 'n' jos strcmp (Q, 'n') disp ('Käännä tietokoneen äänenvoimakkuus kovemmaksi.'); odota_ääni; tauko (2); Q = tulo ('Kuuletko äänen nyt? [Y/n] n', 's'); loppu loppu

Sitten on hetki odottamista ennen kuin siirrytään koodin varsinaiseen tutkimusosaan.

Vaihe 3: Tee oikean korvan audiometriatesti

Tee oikean korvan audiometriatesti
Tee oikean korvan audiometriatesti

Tässä koodissa silmukka suoritetaan 6 iteraatiota vaihtelevalla taajuudella ja äänenvoimakkuudella kullekin korvalle. Riippuen korvasta, jonka haluat testata, Out -muuttujan ääni kuuluu yhdellä rivillä ja nollat toisella.

Ensin teet kaksi tyhjää rivivektoria käyttäjän kuultavien äänen taajuuksien ja amplitudin tallentamiseksi.

Tämä osa on indeksoitu silmukalle, vaikka kuinka monta ääntä haluat toistaa, jos haluat satunnaistaa toistetut taajuudet ja amplitudin.

F on taajuus: r = (rand*10000); Fs = 250 + r; (rand -funktion tarkoituksena on luoda satunnaisesti luotu taajuus) t on tietty aika, jonka eteneminen määritetään seuraavasti: t = linspace (0, Fs*2, Fs*2); s on siniaalto: s = sin (2*pi*t*1000); (tämä voidaan kertoa satunnaismuuttujalla w ja luoda äänitoiminnolle satunnainen amplitudi/dB -arvo: w = rand;)

Oikean korvan ulostulo on: Out = [nollia (koko (t))); s] ';

Lähdöt toistetaan koodilla: ääni (Out, Fs)

Seuraava vaihe on tehdä käyttöliittymä kooditietueisiin, onko käyttäjä kuullut äänen vai ei.

Tee ensin kuva ja määritä paikka, jossa kuva näkyy: gcbf = luku ('pos', [30 800 350 150]);

*** Jos painike ei näy sinulle, kuvan sijainti, kuten yllä olevasta taulukosta näkyy, saattaa olla sijoitettu väärin tietokoneellesi. Ratkaise tämä muuttamalla 30- ja 800 -arvot haluamaasi asentoon. Esimerkiksi [0 0 350 150] -merkin käyttäminen synnyttää gui -painikkeen näytön vasemmassa alakulmassa. ***

Vaihtopainike tallennetaan, kun käyttäjä kuulee äänen, ja sijainti ja näyttö voidaan mukauttaa: tb = uicontrol ('Tyyli', 'vaihtopainike', 'Jono', 'Paina painiketta, kun kuulet äänen', '' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Backback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Tällä koodilla on koodin jatkaminen ja tyhjät vektorit lisäävät arvon, jos painiketta painetaan.

Luo sitten odotusfunktio napin vasteen vastaanottamiseksi ja aktivoi painikkeen koodi, kun sitä painetaan: h = randi ([4, 7]); uiwait (gcbf, h); (Teimme satunnaismuuttujan h, jotta osallistujat eivät voineet huijata ja määrittää vastaamiseen tarvittavia sekunteja.)

Kun silmukka on valmis, pidä taajuuslähtömuuttuja (freq_right) Hz: nä, joten jätä se rauhaan. Muunna sitten dB_right-muuttuja ampeereista desibeleiksi käyttämällä yhtälöä: dB_right = mag2db (amp_right)*(-1);

Lisää sitten toiminto: sulje kaikki. tämä poistuu tarpeettomista luvuista, jotka ovat mahdollisesti nousseet esiin.

Lisää taukotoiminto, noin 10 sekuntia, jotta käyttäjä voi sopeutua ja valmistautua vasempaan korvaan.

Vaihe 4: Luo sama koodi vasemmalle korvalle

Luo sama koodi vasemmalle korvalle
Luo sama koodi vasemmalle korvalle

Toista oikean korvan koodi ja tee seuraava segmentti, joka testaa vasenta korvaa. Ainoa ero on muuttaa, mistä lähtökanavasta ääni tulee. Voit tehdä tämän kääntämällä muuttujan Out taulukon arvojärjestyksen. Sen pitäisi näyttää tältä:

Ulos = [s; nollia (koko (t))] '';

Tällä tavalla ääni ei tule oikeasta kanavasta, vaan vasemmasta kanavasta!

Vaihe 5: Tee vierekkäinen kuva tietojen vertaamiseksi

Vertaa tietoja tekemällä vierekkäinen kuva
Vertaa tietoja tekemällä vierekkäinen kuva
Vertaa tietoja tekemällä vierekkäinen kuva
Vertaa tietoja tekemällä vierekkäinen kuva

Tee nyt kaavio tietojen näyttämiseksi! Laitat kaksi kaaviota yhteen kuvaan, joten tee tämä!

kuva (1); osakaavio (1, 2, 1); *** osaosuus (1, 2, 2) toista varten

Lisää jokaiseen osajoukkoon nämä värit ja koordinaatit. Nämä osiot poistetaan kaaviosta sen mukaan, kuinka suuri kuulon heikkeneminen on. Niin kuin:

laastari ([250 8000 8000 250], [25 25-10-10], [1,00, 0,89, 0,29]); % yellowhold %

teksti (3173, 8, 'Normaali');

laastari ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % vihreää

teksti (3577, 33, 'Lievä');

laastari ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % syaania

teksti (2870, 48, 'Kohtalainen');

laastari ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % sininen

teksti (1739, 62, 'Kohtalaisen vaikea');

laastari ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % violetti

teksti (3142, 80, 'Vaikea');

laastari ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % punainen

teksti (3200, 103, 'Syvä')

Lisää sitten vasen ja oikea sirontakuvaaja! Voimme tarjota sinulle yleisen kansallisen keskiarvon! Tässä:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-arvo, vasen korvaNat_dBL = [10 3 10 15 10 15]; % y-arvo

Nat_FreqR = [250 500 1000 2000 4000 8000]; % oikea korva

Nat_dBR = [10 5 10 15 10 15];

Hajautuskäyrien tulisi erottaa vasen ja oikea piste. Voit tehdä ristejä ja ympyröitä!

NL = hajonta (Nat_FreqL, Nat_dBL, 'bx'); % piirtää sinisiä ristipisteitäNR = hajonta (Nat_FreqR, Nat_dBR, 'ro'); % piirtää punaisia ympyröitä

Tee kansalliselle kuvaajalle selite määrittämällä se tietyille muuttujille: selite ([NL NR], {'title1', 'title2'});

Aseta x -raja 250 -8000 Hz ja y -raja -10 -120 dB. Muista muuttaa pystysuuntaiset punkit yticksillä ()

Merkitse x -akselillesi "Frequency Hz" ja y -akselillesi "Pitch dB".

Käännä y -akseli keräämällä akseli axilla = gca

Sido sitten y -suunnan ominaisuus siihen seuraavasti: ax. YDir = 'reverse

Nyt toisen koodi on suunnilleen sama, mutta ilman selitystä ja piirtämättä hajontakaavioita vasemman ja oikean testin muuttujilla.

Kaiken tämän jälkeen lisää taukotoiminto noin 10 sekunniksi, jotta käyttäjä voi tarkastella tuloksia.

Vaihe 6: Lisää pieni kiitosviesti, jos haluat

Lisää pieni kiitosviesti, jos haluat!
Lisää pieni kiitosviesti, jos haluat!

Tämä on vain huvin vuoksi, jos haluat, mutta lisää toinen imread (), imshow () ja uiwait (msgbox ()) kiitos ja hyvästit! Muuten, muista laittaa clf; sulje kaikki; clc; kaiken sulkemiseksi. Hyvä työ teit sen!

Suositeltava: