Indholdsfortegnelse:

Sådan foretages en voksenhøretest ved hjælp af MATLAB: 6 trin
Sådan foretages en voksenhøretest ved hjælp af MATLAB: 6 trin

Video: Sådan foretages en voksenhøretest ved hjælp af MATLAB: 6 trin

Video: Sådan foretages en voksenhøretest ved hjælp af MATLAB: 6 trin
Video: Få gratis høreprøve i hjemmet samt gratis høreapparat! 2024, Juli
Anonim
Sådan foretages en voksen høretest ved hjælp af MATLAB
Sådan foretages en voksen høretest ved hjælp af MATLAB

ANSVARSFRASKRIVELSE: Vores test er IKKE en medicinsk diagnostik og bør ikke bruges som sådan. Kontakt en læge for at måle hørelsen nøjagtigt.

Ved hjælp af materialer, vi allerede havde, lavede vores gruppe en høretest. Vores test er kun til brug for voksne og teenagere, fordi små børns hørelse findes i forskellige områder og kun måles af en professionel.

Dette projekt blev inspireret, mens vi arbejdede i vores BME MATLAB -klasse og legede med lyde fra sinusbølger. Vi var interesserede i måderne, hvorpå en sinusbølge kunne ændres for at afspille en lyd ved forskellige tonehøjder.

Alt, hvad vi havde brug for til dette projekt, var en computer, der kører MATLAB R2018b og et par ørepropper. Vi inkluderede en original karakter, Frances, som en maskot for at gøre programmet mere humoristisk.

Trin 1: Opret et brugerinput for at analysere brugerens alder

Opret et brugerinput for at analysere brugerens alder
Opret et brugerinput for at analysere brugerens alder
Opret et brugerinput for at analysere brugerens alder
Opret et brugerinput for at analysere brugerens alder

Den første del af denne kode er at lave et brugerinput, hvori der afgøres, om de er gamle nok til at fortsætte med at udføre høretesten. Hvorfor ikke gøre det ved også at tilføje fjollede billeder af vores maskot, Frances? For at gøre det skal du downloade den medfølgende zip -fil og derefter pakke den ud til en fil, der kan trækkes op i koden. Fortsæt med at batch uploade filen fuld af tegninger ved hjælp af dette:

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

For at præsentere meddelelsesbokse og store billeder af tegningerne brugte vi denne sjove metode til at vise Frances til dig. Du skal blot indlæse et billede efter eget valg med formatet: variable = imread ('nameofpicture.jpg');

Fortsæt derefter med at vise det ved hjælp af imshow (variabel); det vises derefter som en figur i dit MatLab, når du kører det!

Næste er meddelelsesfelterne, der bruges i hele koden. uiwait () er en funktion, hvor koden standses, indtil den funktion, der vælges til uiwait, er færdig. Denne valgte funktion er msgbox ('besked', 'titel', 'ikon')!

Du er velkommen til at ændre de beskeder, Frances siger, så længe du følger msgbox () -formatet ovenfor. Hvis du vil bruge Frances -billeder, skal du markere 'ikon' som 'brugerdefineret' og fortsætte med et komma og variablen for indlæsning af det billede, du valgte! Du kan også også bruge de forudindstillede 'ikon' -typer. det skal se sådan ud:

hi = imread ('Regular.jpg'); % læser billedet fra filen uploadedimshow (hi); uiwait (msgbox ('Hej og tak fordi du valgte vores høretest! Dette er Frances, og han hjælper dig i dag med din test!', 'Velkommen!', 'brugerdefineret', hej));

Opret derefter et input, der spørger brugerens alder sådan!

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

BEMÆRK: Hvis tallene er underlige, og der er for mange, skal du bruge Luk alle for at fjerne de tidligere tal, mens din kode kører

Opret derefter en switch case struktur! Husk, at brugerinput er i streng, og du skal konvertere det til en numerisk værdi. Så brug str2double (UserAge). Hvert tilfælde skal have en række aldersgrupper, f.eks. 4 til 6 eller 18 til 40. For at få variablen til at verificere som sand for en af tilfældene, skal du bruge num2cell (array) sådan:

switch str2double (UserAge) % ændrer variabel fra en streng til en numerisk værdi case num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Du er et foster! Frances mener, at du i stedet bør foretage din høretest med en læge!', 'Test nægtet!', 'brugerdefineret', frances));

Vend tilbage

De tidligere grupper skal returneres for at forhindre, at brugeren fortsætter med koden.

Husk at afslutte sagsstrukturen og lukke alle tal.

Trin 2: Test lyden for brugeren

Test lyden for brugeren
Test lyden for brugeren

Dette segment eksisterer for at sikre, at deltagerens lyd på deres enhed hverken er for stille eller for høj.

For at give brugeren en advarsel dukker en meddelelsesboks op og venter på bekræftelse fra brugeren, før han fortsætter med lyden: uiwait (msgbox ('Inden testen starter, vil vi gerne lave en lydtest for at sikre, at din lydstyrke er rigtigt! Klar? ',' Hold ud! ',' hjælp '));

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

Brugeren bliver derefter stillet et spørgsmål med et brugerindtastet svar: Q = input ('Kan du høre lyden? [Y/n] n', 's');

Så er der et stykke tid kigge efter, når Q == 'n', hvis sand, så gentages lyden og spurgte brugeren igen, indtil svaret er ændret fra 'n' til 'y': mens Q == 'n' if strcmp (Q, 'n') disp ('Skru computerens lydstyrke højere op.'); ventelyd; pause (2); Q = input ('Kan du høre lyden nu? [Y/n] n', 's'); ende ende

Der er derefter et øjeblik med at vente, før vi fortsætter den faktiske undersøgelsesdel af koden.

Trin 3: Lav audiometritesten for det højre øre

Lav audiometritesten for det højre øre
Lav audiometritesten for det højre øre

I denne kode vil en loop køre for 6 iterationer med varierende frekvenser og mængder for hvert enkelt øre. Afhængigt af det øre, du vil teste, vil Out -variablen have lyd i en række og nuller i en anden.

Først laver du to tomme linievektorer for at registrere frekvenser og amplitude af lyd, som brugeren hører.

Denne del er i en indekseret loop for hvor mange lyde du vil afspille, hvis du ønsker at randomisere de afspillede frekvenser og amplituden.

F er frekvensen: r = (rand*10000); Fs = 250 + r; (randfunktionen er at oprette en tilfældigt genereret frekvens) t er en vis tidsperiode, der bestemmes af: t = linspace (0, Fs*2, Fs*2); s er sinusbølgen: s = sin (2*pi*t*1000); (dette kan ganges med den tilfældige variabel w for at oprette en tilfældig amplitude/dB værdi for lydfunktionen: w = rand;)

Outputtet til højre øre er: Out = [nuller (størrelse (t)); s] ';

Outputene afspilles via koden: lyd (Out, Fs)

Det næste trin er at oprette en brugergrænseflade med kodeposterne, uanset om brugeren har hørt lyden eller ej.

Først laver du en figur og bestemmer den position, hvor tallet skal vises: gcbf = figure ('pos', [30 800 350 150]);

*** Hvis knappen ikke vises for dig, kan placeringen af figuren, som vist af arrayet ovenfor, være placeret forkert for din computer. For at løse dette skal du ændre 30 og 800 værdierne til den position, du ønsker. Hvis du f.eks. Har [0 0 350 150], vil gui -knappen nederst til venstre på skærmen affyre. ***

En vippeknap er lavet til at optage, når brugeren hører lyden, og positionen og displayet kan tilpasses: tb = uicontrol ('Style', 'togglebutton', 'String', 'Tryk 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 særlige kode har koden genoptaget, og de tomme vektorer tilføjer en værdi, hvis der trykkes på knappen.

Opret derefter en ventefunktion for at indtage svaret på knappen og aktivere koden i knappen, når der trykkes på: h = randi ([4, 7]); uiwait (gcbf, h); (vi lavede den tilfældige variabel h, så deltagerne ikke kunne snyde og bestemme antallet af sekunder, der var nødvendige for at reagere.)

Når sløjfen er færdig, skal du holde frekvensudgangsvariablen (freq_right) i Hz, så lad den være i fred. Konverter derefter dB_right-variablen fra ampere til decibel ved at bruge ligningen: dB_right = mag2db (amp_right)*(-1);

Tilføj derefter funktionen: luk alle. dette vil afslutte alle unødvendige tal, der måtte være dukket op.

Tilføj en pause -funktion, cirka 10 sekunder, for at give brugeren tid til at justere og forberede sig på venstre øre.

Trin 4: Opret den samme kode for venstre øre

Opret den samme kode for venstre øre
Opret den samme kode for venstre øre

Gentag koden for brugt til højre øre for at lave det næste segment, der tester venstre øre. Den eneste forskel er at ændre hvilken outputkanal lyden kommer fra. For at gøre dette skal du vende rækkefølgen af arrayværdierne for variablen Out. Det skal se sådan ud:

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

Ved at gøre det kommer der ingen lyd ud af den højre kanal, men den venstre kanal i stedet!

Trin 5: Lav en side-ved-side-figur for at sammenligne dataene

Lav en side-ved-side-figur for at sammenligne dataene
Lav en side-ved-side-figur for at sammenligne dataene
Lav en side-ved-side-figur for at sammenligne dataene
Lav en side-ved-side-figur for at sammenligne dataene

Lav nu en graf for at vise dataene! Du sætter to grafer i en enkelt figur, så gør dette!

figur (1); delplot (1, 2, 1); *** delplot (1, 2, 2) for den anden

Tilføj for hver delplot disse patches med specifikke farver og koordinater. Disse afsnit fra grafen afhængigt af hvor stor høretab det er. Ligesom:

patch ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Subplot vil nu indeholde følgende patches og scatterplots

tekst (3173, 8, 'Normal');

patch ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % grøn

tekst (3577, 33, 'Mild');

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

tekst (2870, 48, 'Moderat');

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

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

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

tekst (3142, 80, 'Alvorlig');

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

tekst (3200, 103, 'dybtgående')

Tilføj derefter venstre og højre spredningsdiagram! Vi kan levere et generelt landsgennemsnit til dig! Her:

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

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

Nat_dBR = [10 5 10 15 10 15];

Spredningsdiagrammerne skal skelne venstre og højre punkter. Du kunne lave kryds og cirkler!

NL = scatter (Nat_FreqL, Nat_dBL, 'bx'); % tegner blåt kryds punkterNR = scatter (Nat_FreqR, Nat_dBR, 'ro'); % tegner røde cirkler

Lav en forklaring til den nationale graf ved at tildele den til bestemte variabler: legend ([NL NR], {'title1', 'title2'});

Indstil din x -grænse fra 250 til 8000 Hz og din y -grænse fra -10 til 120 dB. Husk at ændre dine lodrette flåter med yticks ()

Mærk din x -akse "Frekvens Hz" og din y -akse "Pitch dB".

Vend y -aksen ved at samle aksen med ax = gca

Bind derefter egenskaben for y -retningen til den med: ax. YDir = 'reverse

Nu er koden for den anden omtrent den samme, men uden forklaring og grafik af scatterplots med variablerne fra venstre og højre test.

Efter alt dette skal du tilføje en pause -funktion i cirka 10 sekunder, så brugeren kan se på deres resultater.

Trin 6: Tilføj en lille takbesked, hvis du vil

Tilføj en lille takbesked, hvis du vil!
Tilføj en lille takbesked, hvis du vil!

Dette er bare for sjov, hvis du vil, men tilføj endnu en imread (), imshow () og uiwait (msgbox ()) for en tak og farvel! Bortset fra det skal du huske at sætte clf; luk alle; clc; for at lukke alt. Godt arbejde du gjorde det!

Anbefalede: