Sadržaj:

Kako napraviti test sluha za odrasle koristeći MATLAB: 6 koraka
Kako napraviti test sluha za odrasle koristeći MATLAB: 6 koraka

Video: Kako napraviti test sluha za odrasle koristeći MATLAB: 6 koraka

Video: Kako napraviti test sluha za odrasle koristeći MATLAB: 6 koraka
Video: ОШИБКИ В САНТЕХНИКЕ! | Как нельзя делать монтаж канализации своими руками 2024, Decembar
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 grupa je napravila test sluha. Naš test je za odrasle i tinejdžere samo zato što sluh male djece ima različite raspone i treba ih mjeriti samo stručnjak.

Ovaj projekt je inspiriran dok smo radili u klasi BME MATLAB i svirali sa zvukovima sinusnih valova. Zanimali su nas načini na koje se sinusni val može promijeniti tako da reproducira zvuk na različitim visinama.

Sve što nam je trebalo za ovaj projekat bio je računar sa MATLAB R2018b i par slušalica. Uključili smo originalnog lika, Frances, kao maskotu kako bismo program učinili duhovitijim.

Korak 1: Kreirajte korisnički unos za analizu starosti korisnika

Kreirajte korisnički unos za analizu starosti korisnika
Kreirajte korisnički unos za analizu starosti korisnika
Kreirajte korisnički unos za analizu starosti korisnika
Kreirajte korisnički unos za analizu starosti 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 učinite 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 s paketnim otpremanjem 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 s prikazom 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 funkcija koja je izabrana za uiwait ne završi. 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 sa zarezom i varijablom imread slike koju ste odabrali! Također možete koristiti unaprijed postavljene tipove ikona. trebalo bi da izgleda ovako:

hi = imread ('Regular.jpg'); % čita sliku iz datoteke uploadedimshow (zdravo); uiwait (msgbox ('Zdravo i hvala vam š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 kreirajte 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 kreirajte strukturu razvodnog kućišta! Upamtite da je korisnički unos u nizu i morate to pretvoriti u brojčanu vrijednost. Zato koristite str2double (UserAge). Svaki slučaj bi trebao imati raspon dobi, kao što je 4 do 6 ili 18 do 40. da bi varijabla za provjeru bila istinita za jedan od slučajeva koristi num2cell (niz) ovako:

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

frances = imread ('Egg.jpg');

imshow (Francuska);

uiwait (msgbox ('Vi ste fetus! Frances misli da biste umjesto toga trebali obaviti test sluha kod ljekara!', 'Test odbijen!', 'prilagođen', 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 previše tih ni preglasan.

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

Pušta 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 odgovorom koji je unijeo korisnik: Q = input ('Čujete li zvuk? [Y/n] n', 's');

Zatim postoji neko vrijeme traženja kada je Q == 'n', ako je tačno, onda se zvuk ponavlja i ponovo pita korisnika sve dok se odgovor ne promijeni iz 'n' u 'y': dok je Q == 'n' if strcmp (Q, 'n') disp ('Pojačajte zvuk računara.'); wait_sound; pauza (2); Q = ulaz ('Možete li sada čuti zvuk? [Y/n] n', 's'); end end

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 raditi 6 iteracija sa različitim frekvencijama i jačinom za svako pojedinačno uho. Ovisno o uhu koje želite testirati, Out varijabla ć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 for 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 napredovanja određeno: 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 da se stvori slučajna amplituda/dB vrijednost za zvučnu funkciju: 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 bez obzira je li korisnik čuo zvuk ili ne.

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

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

Dugme za prebacivanje se snima kada korisnik čuje zvuk, a položaj i prikaz se mogu prilagoditi: tb = uicontrol ('Style', 'togglebutton', 'String', 'Pritisnite dugme kada č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 dugme.

Zatim kreirajte funkciju čekanja da unesete odgovor gumba i aktivirate 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 izlaznu varijablu frekvencije (freq_right) u Hz pa je ostavite na miru. Zatim pretvorite varijablu dB_right iz pojačala u decibele koristeći jednadžbu: dB_right = mag2db (amp_right)*(-1);

Zatim dodajte funkciju: zatvori sve. ovo će ukloniti sve nepotrebne brojke 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: Kreirajte isti kod za lijevo uho

Kreirajte isti kod za lijevo uho
Kreirajte isti kod za lijevo uho

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

Out = [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); potcrt (1, 2, 1); *** podcrt (1, 2, 2) za drugi

Za svaki podcrt dodajte ove zakrpe sa određenim bojama i koordinatama. Ovi dijelovi grafikona zavisno od toga koliko je veliki stepen 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]); % crveno

tekst (3200, 103, 'Dubok')

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

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-vrijednost, lijevo earNat_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 trebaju 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 tako što ćete ga dodijeliti posebnim varijablama: legend ([NL NR], {'title1', 'title2'});

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

Označite svoju os x "Frekvencija Hz", a os y "Nagib dB".

Obrnite os y skupljanjem osi sa ax = gca

Zatim vežite svojstvo smjera y za njega sa: 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 oko 10 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 zatvorili. Dobar posao!

Preporučuje se: