Sadržaj:

Kako napraviti test sluha za odrasle pomoću MATLAB -a: 6 koraka
Kako napraviti test sluha za odrasle pomoću MATLAB -a: 6 koraka

Video: Kako napraviti test sluha za odrasle pomoću MATLAB -a: 6 koraka

Video: Kako napraviti test sluha za odrasle pomoću MATLAB -a: 6 koraka
Video: TEST ZA SLUH - Testirajte svoj sluh i saznaćete koliko dobro čujete 2024, Studeni
Anonim
Kako napraviti test sluha za odrasle pomoću MATLAB -a
Kako napraviti test sluha za odrasle pomoću MATLAB -a

ODRICANJE: Naš test NIJE medicinska dijagnostika i ne bi se trebao koristiti kao takav. Za precizno mjerenje sluha posjetite liječnika.

Koristeći materijale koje smo već imali, naša je grupa napravila test sluha. Naš je test namijenjen odraslima i tinejdžerima samo zato što sluh male djece ima različite raspone i trebao bi ga mjeriti samo stručnjak.

Ovaj je projekt inspiriran dok smo radili u razredu BME MATLAB i svirali sa zvukovima sinusnih valova. Zanimali su nas načini na koji se sinusni val može promijeniti kako bi se reproducirao zvuk na različitim visinama.

Sve što nam je trebalo za ovaj projekt bilo je računalo s MATLAB R2018b i par slušalica. Uključili smo originalnog lika Frances kao maskotu kako bismo program učinili duhovitijim.

Korak 1: Stvorite korisnički unos za analizu dobi korisnika

Napravite korisnički unos za analizu dobi korisnika
Napravite korisnički unos za analizu dobi korisnika
Napravite korisnički unos za analizu dobi korisnika
Napravite korisnički unos za analizu dobi korisnika

Prvi dio ovog koda je unijeti korisnički unos u kojem se odlučuje jesu li dovoljno stari za nastavak testiranja sluha. Zašto to ne biste učinili dodavanjem glupih slika naše maskote, Frances? Da biste to učinili, preuzmite uključenu zip datoteku, a zatim je ekstrahirajte u datoteku koja se može povući u kôd. Nastavite skupni prijenos datoteke pune crteža koristeći ovo:

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

Kako bismo predstavili okvire s porukama i velike slike crteža, upotrijebili smo ovu zabavnu metodu da vam pokažemo Frances. Jednostavno imreadujte sliku po svom izboru u formatu: variable = imread ('nameofpicture.jpg');

Zatim nastavite prikazivati pomoću imshow (varijabla); tada će se prikazati kao brojka u vašem MatLabu kada je pokrenete!

Slijede okviri poruka koji se koriste u cijelom kodu. uiwait () je funkcija u kojoj se kôd zaustavlja sve dok se ne odabere funkcija odabrana za uiwait. Ova odabrana funkcija je msgbox ('poruka', 'naslov', 'ikona')!

Možete slobodno promijeniti poruke koje Frances kaže sve dok slijedite gornji format msgbox (). Ako želite koristiti Frances slike, označite 'icon' kao 'custom' i nastavite to sa zarezom i varijablom imread slike koju ste odabrali! Također možete koristiti unaprijed postavljene vrste ikona. to bi trebalo izgledati ovako:

hi = imread ('Regular.jpg'); % čita sliku iz datoteke uploadedimshow (zdravo); uiwait (msgbox ('Pozdrav i hvala što ste odabrali naš test sluha! Ovo je Frances i on će vam danas pomoći s vašim testom!', 'Dobro došli!', 'prilagođeno', zdravo));

Zatim stvorite unos koji tako pita o dobi korisnika!

UserAge = input ('Prije nego što započnemo ovaj test, koliko imate (godina)? (Npr. 32, 56, …) n', 's');

NAPOMENA: ako su brojke čudne, a ima ih previše, upotrijebite zatvori sve kako biste uklonili ranije brojke dok se vaš kôd pokreće

Zatim stvorite strukturu kućišta prekidača! Upamtite da je korisnički unos u nizu i morate ga pretvoriti u brojčanu vrijednost. Zato upotrijebite str2double (UserAge). Svaki slučaj trebao bi imati raspon dobi, kao što je 4 do 6 ili 18 do 40. kako bi varijabla za provjeru bila istinita za jedan od slučajeva koristi num2cell (niz) ovako:

switch str2double (UserAge) % mijenja varijablu iz niza u brojčanu vrijednost slučaj num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Vi ste fetus! Frances misli da biste umjesto toga trebali napraviti test sluha kod liječnika!', 'Test odbijen!', 'prilagođeno', frances));

povratak

Ranije grupe treba vratiti kako bi se spriječilo da korisnik nastavi s kodom.

Ne zaboravite završiti strukturu kućišta i zatvoriti sve brojke.

Korak 2: Testirajte zvuk za korisnika

Testirajte zvuk za korisnika
Testirajte zvuk za korisnika

Ovaj segment postoji kako bi se osiguralo da zvuk sudionika na njihovom uređaju nije ni pretih ni preglasan.

Da biste upozorili korisnika, pojavit će se okvir s porukom i čeka potvrdu korisnika prije nego što nastavi sa zvukom: uiwait (msgbox ('Prije početka testiranja, htjeli bismo napraviti audio test kako bismo bili sigurni da je vaš volumen) je li u redu! Spremni? ',' Čekaj! ',' pomoć '));

Svira se sinusni val s amplitudom 1 i frekvencijom uzorkovanja od 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); zvuk (y, SampleRate);

Korisniku se zatim postavlja pitanje s korisničkim odgovorom: Q = ulaz ('Čujete li zvuk? [Y/n] n', 's');

Zatim postoji neko vrijeme traženja kada je Q == 'n', ako je istina, tada se zvuk ponavlja i ponovno se traži korisnik sve dok se odgovor ne promijeni iz 'n' u 'y': dok je Q == 'n' ako strcmp (Q, 'n') disp ('Pojačajte glasnoću računala.'); čekaj_zvuk; stanka (2); Q = ulaz ('Možete li sada čuti zvuk? [Y/n] n', 's'); kraj kraj

Zatim postoji trenutak čekanja prije nego što pređete na stvarni ispitni dio koda.

Korak 3: Napravite test audiometrije za desno uho

Napravite test audiometrije za desno uho
Napravite test audiometrije za desno uho

U ovom kodu petlja će se izvoditi 6 iteracija s različitim frekvencijama i glasnoćom za svako pojedinačno uho. Ovisno o uhu koje želite testirati, varijabla Out će imati zvuk u jednom redu, a nule u drugom.

Prvo napravite dva prazna vektora za snimanje frekvencija i amplitude zvuka koje korisnik čuje.

Ovaj dio je u indeksiranoj petlji za koliko god zvukova želite reproducirati ako želite nasumično reproducirati frekvencije i amplitudu.

F je frekvencija: r = (rand*10000); Fs = 250 + r; (rand funkcija je stvaranje nasumično generirane frekvencije) t je određeno vrijeme koje napreduje određeno prema: t = linspace (0, Fs*2, Fs*2); s je sinusni val: s = sin (2*pi*t*1000); (ovo se može pomnožiti sa slučajnom varijablom w kako bi se stvorila slučajna vrijednost amplitude/dB za funkciju zvuka: w = rand;)

Izlaz za desno uho je: Out = [nule (veličina (t)); s] ';

Izlazi se reproduciraju putem koda: zvuk (Out, Fs)

Sljedeći korak je uvođenje korisničkog sučelja sa zapisima koda je li korisnik čuo zvuk ili ne.

Prvo napravite lik i odredite položaj u kojem će se lik pojaviti: gcbf = figure ('pos', [30 800 350 150]);

*** Ako se gumb ne pojavi za vas, položaj figure, kao što je prikazano gornjim nizom, može biti pogrešno postavljen za vaše računalo. Da biste to riješili, promijenite vrijednosti 30 i 800 u željeni položaj. Na primjer, ako imate [0 0 350 150], pojavit će se gui gumb u donjem lijevom kutu monitora. ***

Prekidač je napravljen za snimanje kada korisnik čuje zvuk, a položaj i prikaz se mogu prilagoditi: tb = uicontrol ('Style', 'togglebutton', 'String', 'Pritisnite gumb kad čujete zvuk', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Ovaj kod ima kod za nastavak i prazni vektori dodaju vrijednost ako se pritisne gumb.

Zatim stvorite funkciju čekanja za unos odgovora gumba i aktivirajte kôd u gumbu kada se pritisne: h = randi ([4, 7]); uiwait (gcbf, h); (radili smo slučajnu varijablu h tako da sudionici nisu mogli varati i odrediti broj sekundi potrebnih za odgovor.)

Nakon što je petlja završena, zadržite frekvencijsku izlaznu varijablu (freq_right) u Hz pa je ostavite na miru. Zatim pretvorite varijablu dB_right iz pojačala u decibele pomoću jednadžbe: dB_right = mag2db (amp_right)*(-1);

Zatim dodajte funkciju: zatvori sve. ovo će izaći iz svih nepotrebnih brojki koje su se mogle pojaviti.

Dodajte funkciju pauze, oko 10 sekundi, kako biste korisniku dali vremena da se prilagodi i pripremi za lijevo uho.

Korak 4: Izradite isti kod za lijevo uho

Izradite isti kod za lijevo uho
Izradite isti kod za lijevo uho

Ponovite kôd koji se koristi za desno uho kako biste napravili sljedeći segment koji testira lijevo uho. Jedina razlika je promjena s kojeg izlaznog kanala će zvuk dolaziti. Da biste to učinili, preokrenite redoslijed vrijednosti niza za varijablu Out. To bi trebalo izgledati ovako:

Izlaz = [s; nule (veličina (t))] ';

Na taj način iz desnog kanala neće izlaziti zvuk, već iz lijevog kanala!

Korak 5: Napravite sliku jednu pored druge za usporedbu podataka

Napravite sliku jednu pored druge za usporedbu podataka
Napravite sliku jednu pored druge za usporedbu podataka
Napravite sliku jednu pored druge za usporedbu podataka
Napravite sliku jednu pored druge za usporedbu podataka

Sada napravite grafikon za prikaz podataka! Stavljate dva grafikona u jednu brojku, pa to učinite!

slika (1); podcrt (1, 2, 1); *** podcrt (1, 2, 2) za drugi

Za svaki podcrt dodajte ove zakrpe s određenim bojama i koordinatama. Ovi dijelovi s grafikona ovisno o tome koliko je velik stupanj oštećenja sluha. Ovako:

zakrpa ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Podcrt će sada sadržavati sljedeće zakrpe i raspršene karte

tekst (3173, 8, 'Normalno');

zakrpa ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % zeleno

tekst (3577, 33, 'Blago');

zakrpa ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % cijan

tekst (2870, 48, 'Umjereno');

zakrpa ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % plavo

tekst (1739, 62, 'Umjereno ozbiljno');

zakrpa ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % ljubičasta

tekst (3142, 80, 'Teško');

zakrpa ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % Crvena

tekst (3200, 103, 'Duboko')

Zatim dodajte lijevo i desno raspršeno zemljište! Možemo vam dati opći nacionalni prosjek! Ovdje:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-vrijednost, lijevo uhoNat_dBL = [10 3 10 15 10 15]; % y-vrijednost

Nat_FreqR = [250 500 1000 2000 4000 8000]; % desno uho

Nat_dBR = [10 5 10 15 10 15];

Grafikoni raspršenja trebali bi razlikovati lijevu i desnu točku. Mogli biste napraviti križeve i krugove!

NL = raspršivanje (Nat_FreqL, Nat_dBL, 'bx'); % iscrtava plave križne točkeNR = raspršivanje (Nat_FreqR, Nat_dBR, 'ro'); % iscrtava crvene krugove

Napravite legendu za nacionalni grafikon dodijelivši ga posebnim varijablama: legend ([NL NR], {'title1', 'title2'});

Postavite svoje ograničenje x od 250 do 8000 Hz i ograničenje y od -10 do 120 dB. Ne zaboravite promijeniti svoje okomite kvačice pomoću ytickova ()

Osi x označite kao "Frekvencija Hz", a osi y "Nagib dB".

Preokrenite os y skupljanjem osi s ax = gca

Zatim vežite svojstvo smjera y za njega s: ax. YDir = 'reverse

Sada je kôd za drugi otprilike isti, ali bez legende i grafikona raspršenih grafikona s varijablama iz lijevog i desnog testa.

Nakon svega ovoga dodajte funkciju pauze na 10 -ak sekundi kako bi korisnik mogao pogledati svoje rezultate.

Korak 6: Dodajte malu poruku zahvale ako želite

Dodajte malu poruku zahvale ako želite!
Dodajte malu poruku zahvale ako želite!

Ovo je samo za zabavu ako želite, ali dodajte još jedan imread (), imshow () i uiwait (msgbox ()) za zahvalu i oproštaj! Osim toga, ne zaboravite staviti clf; zatvori sve; clc; kako bi sve zatvorio. Dobar posao ti je uspjelo!

Preporučeni: