Innehållsförteckning:

Hur man gör ett vuxenhörningstest med MATLAB: 6 steg
Hur man gör ett vuxenhörningstest med MATLAB: 6 steg

Video: Hur man gör ett vuxenhörningstest med MATLAB: 6 steg

Video: Hur man gör ett vuxenhörningstest med MATLAB: 6 steg
Video: Hur man gör ett intro på Youtube | Gratis och enkelt 2024, Juli
Anonim
Hur man gör ett hörselprov för vuxna med MATLAB
Hur man gör ett hörselprov för vuxna med MATLAB

DISCLAIMER: Vårt test är INTE en medicinsk diagnostik och ska inte användas som sådant. Kontakta en läkare för att mäta hörseln exakt.

Med hjälp av material vi redan hade gjorde vår grupp ett hörselprov. Vårt test är endast avsett för vuxna och tonåringar eftersom små barns hörsel finns i olika intervall och endast bör mätas av en professionell.

Detta projekt inspirerades när vi arbetade i vår BME MATLAB -klass och lekte med ljud från sinusvågor. Vi var intresserade av hur en sinusvåg kan ändras för att spela ett ljud på olika platser.

Allt vi behövde för detta projekt var en dator som kör MATLAB R2018b och ett par öronsnäckor. Vi inkluderade en originalkaraktär, Frances, som en maskot för att göra programmet mer humoristiskt.

Steg 1: Skapa en användarinmatning för att analysera användarens ålder

Skapa en användarinmatning för att analysera användarens ålder
Skapa en användarinmatning för att analysera användarens ålder
Skapa en användarinmatning för att analysera användarens ålder
Skapa en användarinmatning för att analysera användarens ålder

Den första delen till den här koden är att göra en användarinmatning som avgör om de är tillräckligt gamla för att fortsätta göra hörselprovet. Varför inte göra det genom att också lägga till dumma bilder på vår maskot, Frances? För att göra det, ladda ner zip -filen som ingår och extrahera den sedan till en fil som kan dras upp i koden. Fortsätt att ladda upp filen full av ritningar med hjälp av följande:

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

För att presentera meddelanderutorna och stora bilder på ritningarna använde vi denna roliga metod för att visa Frances för dig. Läs bara in en bild efter eget val med formatet: variable = imread ('nameofpicture.jpg');

Fortsätt sedan med att visa den med hjälp av imshow (variabel); den kommer sedan att visas som en figur i din MatLab när du kör den!

Därefter är meddelanderutorna som används i hela koden. uiwait () är en funktion där koden stoppas tills den funktion som väljs för uiwait är klar. Denna valda funktion är msgbox ('meddelande', 'titel', 'ikon')!

Du kan gärna ändra meddelandena Frances säger så länge du följer msgbox () -formatet ovan. Om du vill använda Frances -bilder, märk "ikon" som "anpassad" och fortsätt med ett kommatecken och variabeln för bildens inläsning! Du kan också använda de förinställda "ikon" -typerna. det ska se ut så här:

hi = imread ('Regular.jpg'); % läser bilden från filen uploadedimshow (hi); uiwait (msgbox ('Hej och tack för att du valde vårt hörselprov! Detta är Frances och han hjälper dig idag med ditt test!', 'Välkommen!', 'anpassad', hej));

Skapa sedan en ingång som frågar användarens ålder så!

UserAge = input ('Innan vi börjar detta test, hur gammal (år) är du? (T.ex. 32, 56, …) n', 's');

OBS: om siffrorna är konstiga och det är för många, använd stäng alla för att ta bort de tidigare siffrorna när din kod körs

Skapa sedan en switch case -struktur! Kom ihåg att användarinmatningen är i sträng och du måste konvertera det till ett numeriskt värde. Så använd str2double (UserAge). Varje fall bör ha ett åldersintervall som 4 till 6 eller 18 till 40. för att få variabeln att verifiera som sann för ett av fallen använder num2cell (array) så här:

switch str2double (UserAge) % ändrar variabel från en sträng till ett numeriskt värde fall num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Du är ett foster! Frances tycker att du borde göra ditt hörselprov med en läkare istället!', 'Test nekat!', 'anpassad', frances));

lämna tillbaka

De tidigare grupperna bör returneras för att förhindra att användaren fortsätter med koden.

Kom ihåg att avsluta ärendestrukturen och stänga alla siffror.

Steg 2: Testa ljudet för användaren

Testa ljudet för användaren
Testa ljudet för användaren

Detta segment finns för att säkerställa att deltagarens ljud på deras enhet varken är för tyst eller för högt.

För att ge användaren en varning dyker det upp en meddelanderuta som väntar på bekräftelse från användaren innan han fortsätter med ljudet: uiwait (msgbox ('Innan testet börjar vill vi göra ett ljudtest för att se till att din volym är rätt! Klar? ',' Vänta! ',' hjälp '));

En sinusvåg spelas med en amplitud på 1 och samplingshastigheten på 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); ljud (y, SampleRate);

Användaren får sedan en fråga med ett användarinmatat svar: Q = input ('Kan du höra ljudet? [Y/n] n', 's');

Sedan är det en stund att leta efter när Q == 'n', om det är sant upprepas ljudet och frågar användaren igen tills svaret har ändrats från 'n' till 'y': medan Q == 'n' if strcmp (Q, 'n') disp ('Vrid datorns volym högre.'); vänta_ljud; paus (2); Q = input ('Kan du höra ljudet nu? [Y/n] n', 's'); slutet slut

Det finns sedan ett ögonblick av väntan innan vi fortsätter med den faktiska undersökningsdelen av koden.

Steg 3: Gör Audiometri -testet för höger öra

Gör Audiometri -testet för höger öra
Gör Audiometri -testet för höger öra

I denna kod kommer en loop att köras för 6 iterationer med varierande frekvenser och volymer för varje enskilt öra. Beroende på vilket öra du vill testa kommer Out -variabeln att ha ljud i en rad och nollor i en annan.

Först gör du två tomma linjevektorer för att spela in frekvenser och amplitud av ljud som användaren hör.

Den här delen är i en indexerad loop för hur många ljud du vill spela om du vill slumpmässigt spela de frekvenser som spelas och amplituden.

F är frekvensen: r = (rand*10000); Fs = 250 + r; (randfunktionen är att skapa en slumpmässigt genererad frekvens) t är en viss tidsperiod som bestäms av: t = linspace (0, Fs*2, Fs*2); s är sinusvågen: s = sin (2*pi*t*1000); (detta kan multipliceras med slumpvariabeln w för att skapa ett slumpmässigt amplitud/dB -värde för ljudfunktionen: w = rand;)

Utgången för höger öra är: Ut = [nollor (storlek (t)); s] ';

Utgångarna spelas upp genom koden: sound (Out, Fs)

Nästa steg är att skapa ett användargränssnitt med kodposter om användaren hörde ljudet eller inte.

Först gör du en siffra och bestämmer i vilken position figuren ska visas: gcbf = figure ('pos', [30 800 350 150]);

*** Om knappen inte visas för dig kan positionen i figuren, som visas i matrisen ovan, placeras fel för din dator. För att lösa detta, ändra 30 och 800 värden till vilken position du önskar. Till exempel kommer att ha [0 0 350 150] gui -knappen längst ner till vänster på monitorn. ***

En växelknapp görs för att spela in när användaren hör ljudet, och positionen och displayen kan anpassas: tb = uicontrol ('Style', 'togglebutton', 'String', 'Tryck på knappen när du hör ett ljud', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Denna specifika kod har koden återupptas och de tomma vektorerna lägger till ett värde om knappen trycks in.

Skapa sedan en väntefunktion för att ta in svaret på knappen och aktivera koden i knappen när du trycker på: h = randi ([4, 7]); uiwait (gcbf, h); (vi gjorde slumpvariabeln h så att deltagarna inte kunde fuska och bestämma antalet sekunder som var nödvändiga för att svara.)

När slingan är klar, behåll frekvensutmatningsvariabeln (freq_right) i Hz så låt den vara ifred. Konvertera sedan variabeln dB_right från ampere till decibel med hjälp av ekvationen: dB_right = mag2db (amp_right)*(-1);

Lägg sedan till funktionen: stäng alla. detta kommer att gå ur alla onödiga siffror som kan ha dykt upp.

Lägg till en pausfunktion, cirka 10 sekunder, för att ge användaren tid att justera och förbereda sig för vänster öra.

Steg 4: Skapa samma kod för vänster öra

Skapa samma kod för vänster öra
Skapa samma kod för vänster öra

Upprepa koden för används för höger öra för att göra nästa segment som testar vänster öra. Den enda skillnaden är att ändra vilken utgångskanal ljudet kommer från. För att göra detta, vänd ordningen på arrayvärdena för variabeln Out. Det ska se ut så här:

Ut = [s; nollor (storlek (t))] '';

Genom att göra det kommer inget ljud ut från den högra kanalen utan den vänstra kanalen istället!

Steg 5: Gör en sida vid sida-figur för att jämföra data

Gör en sida vid sida-figur för att jämföra data
Gör en sida vid sida-figur för att jämföra data
Gör en sida vid sida-figur för att jämföra data
Gör en sida vid sida-figur för att jämföra data

Gör nu en graf för att visa data! Du lägger två grafer i en enda siffra så gör det här!

figur (1); delplan (1, 2, 1); *** delplan (1, 2, 2) för den andra

För varje delplan lägger du till dessa patchar med specifika färger och koordinater. Dessa delar av diagrammet beroende på hur stor hörselnedsättning det är. Såhär:

patch ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Delplot kommer nu att hålla följande patchar och scatterplots

text (3173, 8, 'Normal');

patch ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % grönt

text (3577, 33, 'Mild');

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

text (2870, 48, "Måttlig");

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

text (1739, 62, 'Måttligt svår');

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

text (3142, 80, "Allvarlig");

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

text (3200, 103, 'djupgående')

Lägg sedan till vänster och höger spridningsdiagram! Vi kan ge dig ett allmänt nationellt genomsnitt för dig! Här:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-värde, vänster öraNat_dBL = [10 3 10 15 10 15]; % y-värde

Nat_FreqR = [250 500 1000 2000 4000 8000]; % höger öra

Nat_dBR = [10 5 10 15 10 15];

Spridningsplanerna ska urskilja vänster och höger punkter. Du kan göra kors och cirklar!

NL = scatter (Nat_FreqL, Nat_dBL, 'bx'); % plottar blå korspunkterNR = scatter (Nat_FreqR, Nat_dBR, 'ro'); % plottar röda cirklar

Skapa en legend för den nationella grafen genom att tilldela den till specifika variabler: legend ([NL NR], {'title1', 'title2'});

Ställ in din x -gräns från 250 till 8000 Hz och din y -gräns från -10 till 120 dB. Kom ihåg att ändra dina vertikala fästingar med ytstick ()

Märk din x -axel "Frekvens Hz" och din y -axel "Pitch dB".

Vänd y -axeln genom att samla axeln med ax = gca

Bind sedan egenskapen för y -riktningen till den med: ax. YDir = 'reverse

Nu är koden för den andra ungefär densamma men utan förklaring och diagram över spridningsplanerna med variablerna från vänster och höger test.

Efter allt detta, lägg till en pausfunktion i cirka 10 sekunder så att användaren kan titta på sina resultat.

Steg 6: Lägg till ett litet tackmeddelande om du vill

Lägg till ett litet tackmeddelande om du vill!
Lägg till ett litet tackmeddelande om du vill!

Detta är bara för skojs skull om du vill, men lägg till en annan imread (), imshow () och uiwait (msgbox ()) för ett tack och avsked! Annat än det, kom ihåg att sätta clf; Stäng alla; clc; för att stänga allt. Bra jobbat du gjorde det!

Rekommenderad: