Taula de continguts:

Com fer una prova d’audició per a adults mitjançant MATLAB: 6 passos
Com fer una prova d’audició per a adults mitjançant MATLAB: 6 passos

Vídeo: Com fer una prova d’audició per a adults mitjançant MATLAB: 6 passos

Vídeo: Com fer una prova d’audició per a adults mitjançant MATLAB: 6 passos
Vídeo: Versión completa: Crecer con el TDAH, José Ramón Gamo, neuropsicólogo 2024, Desembre
Anonim
Com fer una prova d’audició per a adults mitjançant MATLAB
Com fer una prova d’audició per a adults mitjançant MATLAB

EXCLUSIÓ DE RESPONSABILITAT: La nostra prova NO és un diagnòstic mèdic i no s’ha d’utilitzar com a tal. Per mesurar amb precisió l'audició, consulteu un professional mèdic.

Amb el material que ja teníem, el nostre grup va fer una prova auditiva. La nostra prova només s’utilitza per a adults i adolescents, perquè l’audició dels nens petits s’ofereix en diversos rangs i només hauria de ser mesurada per un professional.

Aquest projecte es va inspirar mentre treballava a la nostra classe BME MATLAB i jugava amb sons fets per ones sinusoïdals. Ens interessava la manera com es podia canviar una ona sinusoïdal per reproduir un so a diferents tocs.

Tot el que necessitàvem per a aquest projecte era un ordinador amb MATLAB R2018b i un parell d’auriculars. Vam incloure un personatge original, Frances, com a mascota per fer el programa més divertit.

Pas 1: creeu una entrada d'usuari per analitzar l'edat de l'usuari

Creeu una entrada d'usuari per analitzar l'edat de l'usuari
Creeu una entrada d'usuari per analitzar l'edat de l'usuari
Creeu una entrada d'usuari per analitzar l'edat de l'usuari
Creeu una entrada d'usuari per analitzar l'edat de l'usuari

La primera part d’aquest codi és fer una entrada de l’usuari en què decideixi si tenen l’edat suficient per procedir a fer la prova auditiva. Per què no fer-ho afegint també imatges ximples de la nostra mascota, Frances? Per fer-ho, descarregueu el fitxer zip inclòs i, a continuació, extracteu-lo a un fitxer que es pugui incloure al codi. Procediu a la càrrega per lots del fitxer ple de dibuixos mitjançant aquest:

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

Per tal de presentar els quadres de missatges i les grans imatges dels dibuixos, hem utilitzat aquest divertit mètode per mostrar-vos Frances. Simplement llegiu una imatge que trieu amb el format: variable = imre ('nameofpicture.jpg');

A continuació, continueu mostrant-lo mitjançant imshow (variable); llavors apareixerà com una figura al vostre MatLab quan el feu servir!

A continuació, es mostren els quadres de missatges que s’utilitzen a tot el codi. uiwait () és una funció en què el codi s'atura fins que s'acaba la fuction escollida per a uiwait. Aquesta funció escollida és msgbox ('missatge', 'títol', 'icona').

Podeu canviar els missatges que diu Frances sempre que seguiu el format msgbox () anterior. Si voleu utilitzar imatges Frances, etiqueteu "icona" com a "personalitzat" i continueu amb una coma i la variable de la lectura de la imatge que trieu. També podeu utilitzar els tipus de "icona" predefinits. hauria de ser així:

hi = imread ('Regular.jpg'); % llegeix la imatge del fitxer uploadedimshow (hola); uiwait (msgbox ("Hola i gràcies per triar la nostra prova auditiva. Aquesta és Frances i ell us ajudarà avui amb la vostra prova!", "Benvinguda", "personalitzada", hola));

A continuació, creeu una entrada que demani l'edat de l'usuari així.

UserAge = input ('Abans de començar aquesta prova, quants anys (anys) teniu? (Per exemple, 32, 56, …) n', 's');

NOTA: si les figures són estranyes i n’hi ha massa, utilitzeu-les tanca totes per eliminar les figures anteriors mentre s’executa el vostre codi.

A continuació, creeu una estructura de majúscules i minúscules. Recordeu que l’entrada de l’usuari està en cadena i que haureu de convertir-la en un valor numèric. Per tant, utilitzeu str2double (UserAge). Cada cas hauria de tenir un interval d’edats com ara de 4 a 6 o de 18 a 40. Per tenir la variable que es verifiqui com a certa per a un dels casos, utilitzeu num2cell (array) així:

switch str2double (UserAge)% canvia la variable d'una cadena a un valor numèric majúscules i minúscules num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ("Ets un fetus! Frances creu que hauries de fer la prova auditiva amb un metge!", "Prova denegada!", "personalitzada", francesa));

tornar

Cal retornar els grups anteriors per evitar que l'usuari continuï amb el codi.

Recordeu acabar l’estructura del cas i tancar totes les figures.

Pas 2: proveu l'àudio per a l'usuari

Proveu l'àudio per a l'usuari
Proveu l'àudio per a l'usuari

Aquest segment existeix per assegurar-se que el so del participant al seu dispositiu no és ni massa silenciós ni massa fort.

Per donar una advertència a l’usuari, apareix un quadre de missatge i espera la confirmació de l’usuari abans de continuar amb el so: uiwait (msgbox ("Abans que comenci la prova, ens agradaria fer una prova d'àudio per assegurar-nos que el vostre volum és correcte! Llest? ', "Espera!", "ajuda"));

Es reprodueix una ona sinusoïdal amb una amplitud d'1 i la freqüència de mostreig de 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * sin (2 * pi * 200 * T); so (y, SampleRate);

A continuació, es fa una pregunta a l'usuari amb una resposta introduïda per l'usuari: Q = entrada ('Podeu sentir el so? [Y / n] n', 's');

Després hi ha una estona de cerca quan Q == 'n', si és cert, el so es repeteix i torna a preguntar a l'usuari fins que la resposta hagi canviat de 'n' a 'y': mentre Q == 'n' si strcmp (Q, 'n') disp ('Augmenteu el volum de l'ordinador.'); esperar_son; pausa (2); Q = entrada ('Podeu sentir el so ara? [Y / n] n', 's'); fi final

Hi ha un moment d’espera abans de portar a la part de l’examen real del codi.

Pas 3: feu la prova d’audiometria de l’oïda dreta

Feu la prova d’audiometria de l’oïda dreta
Feu la prova d’audiometria de l’oïda dreta

En aquest codi, s'executarà un bucle per a 6 iteracions amb freqüències i volums variables per a cada oïda individual. Depenent de l’orella que vulgueu provar, la variable Out tindrà so en una fila i zeros en una altra.

En primer lloc, feu dos vectors de línia buits per registrar les freqüències i l'amplitud del so que sent l'usuari.

Aquesta porció es troba en un bucle indexat per a molts sons que vulgueu reproduir si voleu aleatoritzar les freqüències reproduïdes i l'amplitud.

F és la freqüència: r = (rand * 10000); Fs = 250 + r; (la funció rand és crear una freqüència generada aleatòriament) t és un cert temps transcorregut determinat per: t = linspace (0, Fs * 2, Fs * 2); s és l’ona sinusoïdal: s = sin (2 * pi * t * 1000); (es pot multiplicar per la variable aleatòria w per crear un valor aleatori d'amplitud / dB per a la funció de so: w = rand;)

La sortida de l’orella dreta és: Out = [zeros (mida (t)); s] ';

Les sortides es reprodueixen mitjançant el codi: so (Out, Fs)

El següent pas és crear una interfície d'usuari amb els registres de codi, tant si l'usuari ha escoltat el so com si no.

Primer feu una figura i determineu la posició en què apareixerà la figura: gcbf = figura ('pos', [30 800 350 150]);

*** Si el botó no apareix per a vosaltres, la posició de la figura, tal com es mostra a la matriu anterior, pot estar mal posicionada a l'ordinador. Per solucionar-ho, canvieu els valors de 30 i 800 a la posició que vulgueu. Per exemple, si teniu [0 0 350 150] apareixerà el botó gui a la part inferior esquerra del monitor. ***

Es fa un botó de commutació per gravar quan l'usuari escolta el so i es pot personalitzar la posició i la visualització: tb = uicontrol ("Estil", "botó de commutació", "Cadena", "Premeu el botó quan escolteu un so", " etiqueta ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Aquest codi en particular té el resum del codi i els vectors buits afegeixen un valor si es prem el botó.

A continuació, creeu una funció d'espera per obtenir la resposta del botó i activeu el codi al botó quan es prem: h = randi ([4, 7]); uiwait (gcbf, h); (Vam fer la variable aleatòria h perquè els participants no poguessin enganyar i determinar el nombre de segons necessaris per respondre.)

Un cop acabat el bucle, mantingueu la variable de sortida de freqüència (freq_right) en Hz, de manera que deixeu-la sola. A continuació, convertiu la variable dB_right d’amplis a decibels mitjançant l’equació: dB_right = mag2db (amp_right) * (- 1);

A continuació, afegiu la funció: tanca-ho tot. això sortirà de les xifres innecessàries que puguin haver aparegut.

Afegiu una funció de pausa, aproximadament 10 segons, per donar temps a l’usuari per ajustar-se i preparar-se per l’oïda esquerra.

Pas 4: creeu el mateix codi per a l’oïda esquerra

Creeu el mateix codi per a l’oïda esquerra
Creeu el mateix codi per a l’oïda esquerra

Repetiu el codi que s’utilitza per a l’orella dreta per fer el següent segment que prova l’orella esquerra. L’única diferència és canviar de quin canal de sortida provindrà el so. Per fer-ho, gireu l'ordre dels valors de la matriu per a la variable Out. Hauria de ser així:

Fora = [s; zeros (mida (t))] ';

En fer-ho, no sortirà cap so pel canal dret, sinó pel canal esquerre.

Pas 5: feu una figura paral·lela per comparar les dades

Feu una figura paral·lela per comparar les dades
Feu una figura paral·lela per comparar les dades
Feu una figura paral·lela per comparar les dades
Feu una figura paral·lela per comparar les dades

Ara feu un gràfic per mostrar les dades. Esteu posant dos gràfics en una sola figura, així que feu-ho!

figura (1); subtrama (1, 2, 1); *** subtrama (1, 2, 2) per a l'altra

Per a cada subtrama, afegiu aquests pegats amb colors i coordenades específics. Aquests aparten el gràfic en funció del grau de pèrdua auditiva que tingui. Així:

pegat ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on% La subtrama contindrà ara els següents pegats i diagrames de dispersió

text (3173, 8, 'Normal');

pegat ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % verd

text (3577, 33, "Lleu");

pegat ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % cian

text (2870, 48, "Moderat");

pegat ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % blau

text (1739, 62, "Moderadament sever");

pegat ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % porpra

text (3142, 80, "Sever");

pegat ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % vermell

text (3200, 103, "Profund")

A continuació, afegiu els gràfics de dispersió esquerra i dreta. Us podem proporcionar una mitjana nacional general. Aquí:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-value, left earNat_dBL = [10 3 10 15 10 15]; valor% y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % orella dreta

Nat_dBR = [10 5 10 15 10 15];

Els diagrames de dispersió haurien de discernir els punts esquerre i dret. Podríeu fer creus i cercles!

NL = dispersió (Nat_FreqL, Nat_dBL, 'bx'); % traça punts creuats blaus NR = dispersió (Nat_FreqR, Nat_dBR, 'ro'); % trama de cercles vermells

Feu una llegenda per al gràfic nacional assignant-la a variables específiques: llegenda ([NL NR], {'title1', 'title2'});

Establiu el límit x de 250 a 8000 Hz i el límit y de -10 a 120 dB. Recordeu canviar les paparres verticals amb yticks ()

Etiqueu l'eix x com a "Freqüència Hz" i l'eix y "Pitch dB".

Invertiu l'eix y recollint l'eix amb ax = gca

A continuació, uneix la propietat de la direcció y amb: ax. YDir = 'inversa

Ara el codi del segon és aproximadament el mateix, però sense la llegenda i el gràfic dels diagrames de dispersió amb les variables de les proves esquerra i dreta.

Després de tot això, afegiu una funció de pausa durant uns 10 segons perquè l'usuari pugui veure els seus resultats.

Pas 6: afegiu un petit missatge d'agraïment si voleu

Afegiu un petit missatge d’agraïment si voleu
Afegiu un petit missatge d’agraïment si voleu

Això només és divertit si voleu afegir un altre imread (), imshow () i uiwait (msgbox ()) per agrair-vos i comiat! A part d’això, recordeu posar clf; tancar-ho tot; clc; per tal de tancar-ho tot. Bona feina que ho vau fer!

Recomanat: