Innholdsfortegnelse:

Hvordan lage en hørselstest for voksne ved hjelp av MATLAB: 6 trinn
Hvordan lage en hørselstest for voksne ved hjelp av MATLAB: 6 trinn

Video: Hvordan lage en hørselstest for voksne ved hjelp av MATLAB: 6 trinn

Video: Hvordan lage en hørselstest for voksne ved hjelp av MATLAB: 6 trinn
Video: Какой размер вентиляционного отверстия слухового аппарата использовать? 2024, Juli
Anonim
Hvordan lage en voksen hørselstest ved hjelp av MATLAB
Hvordan lage en voksen hørselstest ved hjelp av MATLAB

ANSVARSFRASKRIVELSE: Testen vår er IKKE en medisinsk diagnostikk og bør ikke brukes som sådan. Kontakt en lege for å måle hørsel nøyaktig.

Ved å bruke materialer vi allerede hadde, foretok gruppen vår en hørselstest. Vår test er kun til bruk for voksne og tenåringer fordi små barns hørsel kommer i forskjellige områder og bare måles av en profesjonell.

Dette prosjektet ble inspirert mens vi jobbet i BME MATLAB -klassen og lekte med lyder fra sinusbølger. Vi var interessert i hvordan en sinusbølge kan endres for å spille en lyd på forskjellige tonehøyder.

Alt vi trengte for dette prosjektet var en datamaskin som kjører MATLAB R2018b og et par ørepropper. Vi inkluderte en original karakter, Frances, som en maskot for å gjøre programmet mer humoristisk.

Trinn 1: Opprett en brukerinput for å analysere brukerens alder

Lag en brukerinput for å analysere brukerens alder
Lag en brukerinput for å analysere brukerens alder
Lag en brukerinput for å analysere brukerens alder
Lag en brukerinput for å analysere brukerens alder

Den første delen til denne koden er å legge inn en brukerinngang som avgjør om de er gamle nok til å fortsette å gjøre hørselstesten. Hvorfor ikke gjøre det ved også å legge til dumme bilder av maskoten vår, Frances? For å gjøre dette, last ned zip -filen som er inkludert og pakk den ut til en fil som kan trekkes opp i koden. Fortsett med batchopplasting av filen full av tegninger ved å bruke dette:

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

For å presentere meldingsboksene og store bilder av tegningene brukte vi denne morsomme metoden for å vise Frances for deg. Bare les inn et bilde du ønsker med formatet: variable = imread ('nameofpicture.jpg');

Fortsett deretter med å vise det ved å bruke imshow (variabel); den vil da vises som en figur i MatLab når du kjører den!

Deretter er meldingsboksene som brukes i hele koden. uiwait () er en funksjon der koden stoppes til funksjonen som er valgt for uiwait er ferdig. Denne valgte funksjonen er msgbox ('melding', 'tittel', 'ikon')!

Du kan gjerne endre meldingene Frances sier så lenge du følger msgbox () -formatet ovenfor. Hvis du vil bruke Frances -bilder, merker du 'ikon' som 'egendefinert' og fortsetter med komma og variabelen for bildet av bildet du valgte! Du kan også bruke de forhåndsinnstilte ikonikonene. det skal se slik ut:

hei = imread ('Regular.jpg'); % leser bildet fra filen uploadedimshow (hei); uiwait (msgbox ('Hei og takk for at du valgte vår hørselstest! Dette er Frances, og han hjelper deg i dag med testen din!', 'Velkommen!', 'tilpasset', hei));

Lag deretter et input som spør brukerens alder slik!

UserAge = input ('Før vi starter denne testen, hvor gammel (år) er du? (F.eks. 32, 56, …) n', 's');

MERK: hvis tallene er rare og det er for mange, bruker du Lukk alle for å fjerne de tidligere tallene mens koden din kjører

Lag deretter en switch case -struktur! Husk at brukerinngangen er i streng, og du må konvertere den til en numerisk verdi. Så bruk str2double (UserAge). Hvert tilfelle bør ha en rekke aldre som 4 til 6 eller 18 til 40. for å ha variabelen for å verifisere som sann for en av tilfellene, bruk num2cell (array) slik:

bytt str2double (UserAge) % endrer variabel fra en streng til en numerisk verdi case num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Du er et foster! Frances synes du bør gjøre hørselstesten din med en lege i stedet!', 'Test nektet!', 'tilpasset', frances));

komme tilbake

De tidligere gruppene bør returneres for å forhindre at brukeren fortsetter med koden.

Husk å avslutte saksstrukturen og lukke alle tall.

Trinn 2: Test lyden for brukeren

Test lyden for brukeren
Test lyden for brukeren

Dette segmentet eksisterer for å sikre at deltakerens lyd på enheten hverken er for stille eller for høy.

For å gi brukeren en advarsel dukker det opp en meldingsboks og venter på bekreftelse fra brukeren før han fortsetter med lyden: uiwait (msgbox ('Før testen starter, vil vi gjerne gjøre en lydtest for å kontrollere volumet ditt er riktig! Klar? ',' Hold ut! ',' hjelp '));

En sinusbølge spilles med en amplitude på 1 og samplingsfrekvensen på 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); lyd (y, SampleRate);

Brukeren blir deretter stilt et spørsmål med et brukerinntatt svar: Q = input ('Kan du høre lyden? [Y/n] n', 's');

Så er det en stund se etter når Q == 'n', hvis det er sant, gjentas lyden og spør brukeren igjen til svaret har endret seg fra 'n' til 'y': mens Q == 'n' if strcmp (Q, 'n') disp ('Skru volumet på datamaskinen høyere.'); ventelyd; pause (2); Q = input ('Kan du høre lyden nå? [Y/n] n', 's'); ende ende

Det er deretter et øyeblikk å vente før vi fortsetter med den faktiske undersøkelsesdelen av koden.

Trinn 3: Gjør audiometri -testen for høyre øre

Gjør audiometri -testen for høyre øre
Gjør audiometri -testen for høyre øre

I denne koden vil en løkke kjøre for 6 iterasjoner med varierende frekvenser og volumer for hvert enkelt øre. Avhengig av øret du vil teste, vil Out -variabelen ha lyd i en rad og nuller i en annen.

Først lager du to tomme linjevektorer for å registrere frekvenser og amplitude av lyd som brukeren hører.

Denne delen er i en indeksert loop for hvor mange lyder du vil spille hvis du ønsker å randomisere frekvensene som spilles og amplituden.

F er frekvensen: r = (rand*10000); Fs = 250 + r; (randfunksjonen er å lage en tilfeldig generert frekvens) t er en viss tid som går fremover bestemme av: t = linspace (0, Fs*2, Fs*2); s er sinusbølgen: s = sin (2*pi*t*1000); (dette kan multipliseres med den tilfeldige variabelen w for å lage en tilfeldig amplitude/dB -verdi for lydfunksjonen: w = rand;)

Utgangen for høyre øre er: Out = [nuller (størrelse (t)); s] ';

Utgangene spilles gjennom koden: lyd (Out, Fs)

Det neste trinnet er å lage et brukergrensesnitt med kodepostene enten brukeren hørte lyden eller ikke.

Først lager du en figur og bestemmer posisjonen der figuren skal vises: gcbf = figure ('pos', [30 800 350 150]);

*** Hvis knappen ikke vises for deg, kan plasseringen av figuren, som vist med matrisen ovenfor, være plassert feil for datamaskinen din. For å løse dette, endre 30 og 800 verdier til hvilken posisjon du ønsker. For eksempel vil det å ha [0 0 350 150] gi gui -knappen nederst til venstre på skjermen. ***

En vippeknapp er laget for å ta opp når brukeren hører lyden, og posisjonen og displayet kan tilpasses: tb = uicontrol ('Style', 'togglebutton', 'String', 'Trykk på knappen når du hører en lyd', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Denne koden har koden gjenoppta og de tomme vektorene legger til en verdi hvis du trykker på knappen.

Lag deretter en ventefunksjon for å ta inn responsen på knappen og aktivere koden i knappen når du trykker på: h = randi ([4, 7]); uiwait (gcbf, h); (vi gjorde den tilfeldige variabelen h, slik at deltakerne ikke kunne jukse og bestemme antall sekunder som var nødvendig for å svare.)

Etter at løkken er ferdig, behold frekvensutgangsvariabelen (freq_right) i Hz, så la den være i fred. Konverter deretter dB_right-variabelen fra ampere til desibel ved å bruke ligningen: dB_right = mag2db (amp_right)*(-1);

Legg deretter til funksjonen: lukk alle. dette vil gå ut av alle unødvendige tall som kan ha dukket opp.

Legg til en pause -funksjon, ca. 10 sekunder, for å gi brukeren tid til å justere og forberede seg på venstre øre.

Trinn 4: Lag samme kode for venstre øre

Lag samme kode for venstre øre
Lag samme kode for venstre øre

Gjenta koden for brukt for høyre øre for å lage det neste segmentet som tester venstre øre. Den eneste forskjellen er å endre hvilken utgangskanal lyden kommer fra. For å gjøre dette, snu rekkefølgen på arrayverdiene for variabelen Out. Det skal se slik ut:

Ut = [s; nuller (størrelse (t))] '';

Ved å gjøre det, kommer det ingen lyd ut av den høyre kanalen, men den venstre kanalen i stedet!

Trinn 5: Lag en side ved side-figur for å sammenligne dataene

Lag en side-ved-side-figur for å sammenligne dataene
Lag en side-ved-side-figur for å sammenligne dataene
Lag en side-ved-side-figur for å sammenligne dataene
Lag en side-ved-side-figur for å sammenligne dataene

Lag nå en graf for å vise dataene! Du legger to grafer i en enkelt figur, så gjør dette!

figur (1); delplot (1, 2, 1); *** delplott (1, 2, 2) for den andre

Legg til disse oppdateringene med spesifikke farger og koordinater for hvert delplott. Disse deler av grafen, avhengig av hvor stor hørselstap det er. Som så:

lapp ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Subplot vil nå inneholde følgende oppdateringer og scatterplots

tekst (3173, 8, 'Normal');

lapp ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % grønn

tekst (3577, 33, 'Mild');

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

tekst (2870, 48, 'moderat');

lapp ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % blå

tekst (1739, 62, 'Moderat alvorlig');

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

tekst (3142, 80, 'Alvorlig');

lapp ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % rød

tekst (3200, 103, 'Dyp')

Legg deretter til venstre og høyre spredningsplott! Vi kan gi deg et generelt nasjonalt gjennomsnitt for deg! Her:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-verdi, venstre øreNat_dBL = [10 3 10 15 10 15]; % y-verdi

Nat_FreqR = [250 500 1000 2000 4000 8000]; % høyre øre

Nat_dBR = [10 5 10 15 10 15];

Spredningsplottene skal skille mellom venstre og høyre punkt. Du kan gjøre kryss og sirkler!

NL = scatter (Nat_FreqL, Nat_dBL, 'bx'); % plotter blått kryss poengNR = scatter (Nat_FreqR, Nat_dBR, 'ro'); % plotter røde sirkler

Lag en forklaring for den nasjonale grafen ved å tilordne den til bestemte variabler: forklaring ([NL NR], {'title1', 'title2'});

Sett x -grensen din fra 250 til 8000 Hz og din y -grense fra -10 til 120 dB. Husk å endre de vertikale flåttene dine med yticks ()

Merk x -aksen din "Frekvens Hz" og din y -akse "Pitch dB".

Snu y -aksen ved å samle aksen med ax = gca

Bind deretter egenskapen til y -retningen til den med: ax. YDir = 'reverse

Nå er koden for den andre omtrent den samme, men uten forklaring og grafering av scatterplotene med variablene fra venstre og høyre test.

Etter alt dette, legg til en pause -funksjon i omtrent 10 sekunder slik at brukeren kan se på resultatene sine.

Trinn 6: Legg til en liten takkemelding hvis du vil

Legg til en liten takkemelding hvis du vil!
Legg til en liten takkemelding hvis du vil!

Dette er bare for moro skyld, men legg til en annen imread (), imshow () og uiwait (msgbox ()) for takk og farvel! Annet enn det, husk å sette clf; Lukk alle; clc; for å lukke alt. Bra jobba du gjorde det!

Anbefalt: