Sommario:

Come eseguire un test dell'udito per adulti utilizzando MATLAB: 6 passaggi
Come eseguire un test dell'udito per adulti utilizzando MATLAB: 6 passaggi

Video: Come eseguire un test dell'udito per adulti utilizzando MATLAB: 6 passaggi

Video: Come eseguire un test dell'udito per adulti utilizzando MATLAB: 6 passaggi
Video: Se Vedi Questo In Mare, Esci Subito! 😱 2024, Dicembre
Anonim
Come eseguire un test dell'udito per adulti utilizzando MATLAB
Come eseguire un test dell'udito per adulti utilizzando MATLAB

DISCLAIMER: Il nostro test NON è una diagnostica medica e non deve essere utilizzato come tale. Per misurare con precisione l'udito, consultare un medico.

Usando i materiali che avevamo già, il nostro gruppo ha fatto un test dell'udito. Il nostro test è solo per adulti e adolescenti perché l'udito dei bambini è disponibile in varie gamme e dovrebbe essere misurato solo da un professionista.

Questo progetto è stato ispirato mentre lavoravamo nella nostra classe BME MATLAB e suonavamo con suoni prodotti da onde sinusoidali. Eravamo interessati ai modi in cui un'onda sinusoidale poteva essere modificata per riprodurre un suono a diverse altezze.

Tutto ciò di cui avevamo bisogno per questo progetto era un computer con MATLAB R2018b e un paio di auricolari. Abbiamo incluso un personaggio originale, Frances, come mascotte per rendere il programma più divertente.

Passaggio 1: creare un input utente per analizzare l'età dell'utente

Crea un input utente per analizzare l'età dell'utente
Crea un input utente per analizzare l'età dell'utente
Crea un input utente per analizzare l'età dell'utente
Crea un input utente per analizzare l'età dell'utente

La prima parte di questo codice consiste nel fare un input da parte dell'utente in cui decide se sono abbastanza grandi per procedere con il test dell'udito. Perché non farlo aggiungendo anche immagini sciocche della nostra mascotte, Frances? Per fare ciò, scarica il file zip incluso e quindi estrailo in un file che può essere richiamato nel codice. Procedi a caricare in batch il file pieno di disegni usando questo:

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

Per presentare le finestre di messaggio e le immagini grandi dei disegni, abbiamo utilizzato questo divertente metodo per mostrarti Frances. Imread semplicemente un'immagine a tua scelta con il formato: variable = imread('nameofpicture.jpg');

Quindi procedi a mostrarlo usando imshow(variable); verrà quindi visualizzato come una figura nel tuo MatLab quando lo esegui!

Poi ci sono le caselle di messaggio che vengono utilizzate in tutto il codice. uiwait() è una funzione in cui il codice viene interrotto fino al termine della funzione scelta per uiwait. Questa funzione scelta è msgbox('message', 'title', 'icon')!

Puoi sentirti libero di cambiare i messaggi che Frances dice fintanto che segui il formato msgbox() sopra. Se vuoi usare le immagini di Frances, etichetta 'icon' come 'custom' e procedi con una virgola e la variabile dell'imread dell'immagine che hai scelto! Puoi anche usare i tipi di 'icona' preimpostati. Dovrebbe sembrare come questo:

ciao = imread('Regular.jpg'); % legge l'immagine dal file uploadedimshow(hi); uiwait(msgbox('Ciao e grazie per aver scelto il nostro test dell'udito! Sono Frances e ti aiuterà oggi con il tuo test!', 'Benvenuto!', 'custom', ciao));

Quindi crea un input che chieda l'età dell'utente in questo modo!

UserAge = input('Prima di iniziare questo test, quanti anni hai (anni)? (es. 32, 56, …)\n', 's');

NOTA: se le cifre sono strane e sono troppe, usa chiudi tutto per rimuovere le cifre precedenti durante l'esecuzione del codice

Quindi crea una struttura del caso di commutazione! Ricorda che l'input dell'utente è in stringa e devi convertirlo in un valore numerico. Quindi usa str2double(UserAge). Ogni caso dovrebbe avere un intervallo di età come da 4 a 6 o da 18 a 40. per verificare che la variabile sia vera per uno dei casi, utilizzare num2cell(array) in questo modo:

switch str2double(UserAge) % cambia variabile da stringa a valore numerico case num2cell(0:3)

frances = imread('Egg.jpg');

imshow (Francia);

uiwait(msgbox('Sei un feto! Frances pensa che dovresti invece fare il test dell'udito con un dottore!', 'Test Negato!', 'custom', frances));

Restituzione

I gruppi precedenti devono essere restituiti per impedire all'utente di procedere con il codice.

Ricorda di terminare la struttura del caso e chiudere tutte le cifre.

Passaggio 2: testare l'audio per l'utente

Prova l'audio per l'utente
Prova l'audio per l'utente

Questo segmento esiste per garantire che il suono del partecipante sul proprio dispositivo non sia né troppo basso né troppo alto.

Per avvisare l'utente, viene visualizzata una finestra di messaggio e attende la conferma dell'utente prima di continuare con il suono: uiwait(msgbox('Prima che inizi il test, vorremmo eseguire un test audio per assicurarci che il tuo volume ha ragione! Pronto?', 'Aspetta!', 'aiuto'));

Viene riprodotta un'onda sinusoidale con un'ampiezza di 1 e una frequenza di campionamento di 1000 Hz: T = [0:1/SampleRate:2]; y = 1*peccato(2*pi*200*T); sound(y, SampleRate);

All'utente viene quindi posta una domanda con una risposta immessa dall'utente: Q = input('Riesci a sentire il suono? [y/n] n', 's');

Quindi c'è un po' di tempo per cercare quando Q == 'n', se vero, il suono si ripete e chiede di nuovo all'utente fino a quando la risposta non cambia da 'n' a 'y': mentre Q == 'n' if strcmp(Q, 'n') disp('Alza il volume del tuo computer.'); wait_sound; pausa(2); Q = input('Riesci a sentire il suono ora? [s/n] n', 's'); fine fine

C'è poi un momento di attesa prima di passare alla parte di esame vera e propria del codice.

Passaggio 3: eseguire il test audiometrico per l'orecchio destro

Fai il test audiometrico per l'orecchio destro
Fai il test audiometrico per l'orecchio destro

In questo codice, un ciclo verrà eseguito per 6 iterazioni con frequenze e volumi variabili per ogni singolo orecchio. A seconda dell'orecchio che si desidera testare, la variabile Out avrà un suono in una riga e degli zeri in un'altra.

Per prima cosa crei due vettori di linea vuoti per registrare le frequenze e l'ampiezza del suono che l'utente sente.

Questa parte è in un loop for indicizzato per tutti i suoni che si desidera riprodurre se si desidera randomizzare le frequenze riprodotte e l'ampiezza.

F è la frequenza: r = (rand*10000); Fs = 250 + r; (la funzione rand è quella di creare una frequenza generata casualmente) t è una certa quantità di tempo trascorso determinato da: t = linspace(0, Fs*2, Fs*2); s è l'onda sinusoidale: s = sin(2*pi*t*1000); (questo può essere moltiplicato per la variabile casuale w per creare un valore casuale di ampiezza/dB per la funzione del suono: w = rand;)

L'output per l'orecchio destro è: Out = [zeros(size(t)); S]';

Le uscite vengono riprodotte tramite il codice: sound(Out, Fs)

Il passaggio successivo consiste nel creare un'interfaccia utente con il codice che registra se l'utente ha sentito o meno il suono.

Per prima cosa fai una figura e determina la posizione in cui apparirà la figura: gcbf = figure('pos', [30 800 350 150]);

***Se il pulsante non viene visualizzato per te, la posizione della figura, come mostrato dall'array sopra, potrebbe essere posizionata in modo errato per il tuo computer. Per risolvere questo problema, modifica i valori 30 e 800 nella posizione desiderata. Ad esempio, avere [0 0 350 150] genererà il pulsante gui in basso a sinistra del monitor.***

Viene creato un pulsante di attivazione per registrare quando l'utente sente il suono e la posizione e la visualizzazione possono essere personalizzate: tb = uicontrol('Style', 'togglebutton', 'String', 'Premere il pulsante quando si sente un suono', ' tag', 'togglebutton1', 'Posizione', [30 60 300 40], 'Richiamata', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Questo particolare codice fa riprendere il codice e i vettori vuoti aggiungono un valore se si preme il pulsante.

Quindi creare una funzione di attesa per ricevere la risposta del pulsante e attivare il codice nel pulsante quando viene premuto: h = randi([4, 7]); uiwait(gcbf, h); (abbiamo fatto la variabile casuale h in modo che i partecipanti non potessero barare e determinare il numero di secondi necessari per rispondere.)

Dopo che il ciclo è terminato, mantieni la variabile di uscita della frequenza (freq_right) in Hz, quindi lasciala stare. Quindi converti la variabile dB_right da amp a decibel usando l'equazione: dB_right = mag2db(amp_right)*(-1);

Quindi aggiungi la funzione: chiudi tutto. questo uscirà da tutte le cifre non necessarie che potrebbero essere emerse.

Aggiungere una funzione di pausa, di circa 10 secondi, per dare tempo all'utente di adattarsi e prepararsi per l'orecchio sinistro.

Passaggio 4: crea lo stesso codice per l'orecchio sinistro

Crea lo stesso codice per l'orecchio sinistro
Crea lo stesso codice per l'orecchio sinistro

Ripeti il codice usato per l'orecchio destro per creare il segmento successivo che mette alla prova l'orecchio sinistro. L'unica differenza sta nel cambiare da quale canale di uscita proverrà il suono. Per fare ciò, invertire l'ordine dei valori dell'array per la variabile Out. Dovrebbe sembrare come questo:

Fuori = [s; zeri(dimensione(t))]';

In questo modo, nessun suono uscirà dal canale destro ma invece dal canale sinistro!

Passaggio 5: crea una figura affiancata per confrontare i dati

Crea una figura affiancata per confrontare i dati
Crea una figura affiancata per confrontare i dati
Crea una figura affiancata per confrontare i dati
Crea una figura affiancata per confrontare i dati

Ora fai un grafico per mostrare i dati! Stai mettendo due grafici in una singola figura, quindi fallo!

figura (1); sottotrama (1, 2, 1); ***sottotrama (1, 2, 2) per l'altro

Per ogni sottotrama, aggiungi queste patch con colori e coordinate specifici. Questi sezionano il grafico a seconda di quanto è grande il grado di perdita dell'udito. Così:

patch([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); %yellowhold su % La sottotrama ora conterrà le seguenti patch e grafici a dispersione

testo (3173, 8, "Normale");

patch([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % verde

testo(3577, 33, 'lieve');

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

text(2870, 48, 'Moderato');

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

testo(1739, 62, "Moderatamente grave");

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

testo (3142, 80, "grave");

patch([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % rosso

text(3200, 103, 'Profondo')

Quindi aggiungi i grafici a dispersione sinistro e destro! Possiamo fornire una media nazionale generale per te! Qui:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % valore x, earNat_dBL sinistro = [10 3 10 15 10 15]; % valore y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % orecchio destro

Nat_dBR = [10 5 10 15 10 15];

I grafici a dispersione dovrebbero distinguere i punti sinistro e destro. Potresti fare croci e cerchi!

NL = scatter(Nat_FreqL, Nat_dBL, 'bx'); % traccia i punti incrociati bluNR = scatter(Nat_FreqR, Nat_dBR, 'ro'); % traccia i cerchi rossi

Crea una legenda per il grafico nazionale assegnandola a variabili specifiche: legend([NL NR], {'title1', 'title2'});

Imposta il tuo limite x da 250 a 8000 Hz e il tuo limite y da -10 a 120 dB. Ricorda di cambiare i segni di spunta verticali con yticks()

Etichetta il tuo asse x "Frequenza Hz" e il tuo asse y "Pitch dB".

Invertire l'asse y raccogliendo l'asse con ax = gca

Quindi associare la proprietà della direzione y ad essa con: ax. YDir = 'reverse

Ora il codice per il secondo è più o meno lo stesso ma senza la legenda e il grafico dei grafici a dispersione con le variabili dei test sinistro e destro.

Dopo tutto questo, aggiungi una funzione di pausa per circa 10 secondi in modo che l'utente possa guardare i risultati.

Passaggio 6: aggiungi un piccolo messaggio di ringraziamento se lo desideri

Aggiungi un piccolo messaggio di ringraziamento se lo desideri!
Aggiungi un piccolo messaggio di ringraziamento se lo desideri!

Questo è solo per divertimento se lo desideri, ma aggiungi un altro imread(), imshow() e uiwait(msgbox()) per un grazie e un addio! A parte questo, ricordati di mettere clf; chiudi tutto; clc; per chiudere tutto. Buon lavoro ce l'hai fatta!

Consigliato: