Tabla de contenido:

Cómo hacer una prueba de audición para adultos con MATLAB: 6 pasos
Cómo hacer una prueba de audición para adultos con MATLAB: 6 pasos

Video: Cómo hacer una prueba de audición para adultos con MATLAB: 6 pasos

Video: Cómo hacer una prueba de audición para adultos con MATLAB: 6 pasos
Video: Qué pruebas se deben hacer a los niños para diagnosticar descartar problemas de oído y de audición 2024, Mes de julio
Anonim
Cómo hacer una prueba de audición para adultos con MATLAB
Cómo hacer una prueba de audición para adultos con MATLAB

DESCARGO DE RESPONSABILIDAD: Nuestra prueba NO es un diagnóstico médico y no debe usarse como tal. Para medir la audición con precisión, consulte a un profesional médico.

Utilizando materiales que ya teníamos, nuestro grupo hizo una prueba de audición. Nuestra prueba es solo para adultos y adolescentes porque la audición de los niños pequeños se presenta en varios rangos y solo debe medirla un profesional.

Este proyecto se inspiró mientras trabajaba en nuestra clase de BME MATLAB y jugaba con sonidos hechos por ondas sinusoidales. Estábamos interesados en las formas en que se puede cambiar una onda sinusoidal para reproducir un sonido en diferentes tonos.

Todo lo que necesitábamos para este proyecto era una computadora con MATLAB R2018b y un par de auriculares. Incluimos un personaje original, Frances, como mascota para hacer el programa más divertido.

Paso 1: cree una entrada de usuario para analizar la edad del usuario

Cree una entrada de usuario para analizar la edad del usuario
Cree una entrada de usuario para analizar la edad del usuario
Cree una entrada de usuario para analizar la edad del usuario
Cree una entrada de usuario para analizar la edad del usuario

La primera parte de este código consiste en realizar una entrada de usuario en la que decida si tiene la edad suficiente para proceder a realizar la prueba de audición. ¿Por qué no hacerlo añadiendo también imágenes tontas de nuestra mascota, Frances? Para hacerlo, descargue el archivo zip incluido y luego extráigalo a un archivo que se puede extraer en el código. Proceda a cargar por lotes el archivo lleno de dibujos usando esto:

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

Para presentar los cuadros de mensaje y las imágenes grandes de los dibujos, usamos este divertido método de mostrárselo a Frances. Simplemente lea una imagen de su elección con el formato: variable = imread ('nameofpicture.jpg');

Luego proceda a mostrarlo usando imshow (variable); luego aparecerá como una figura en su MatLab cuando lo ejecute.

A continuación, se encuentran los cuadros de mensaje que se utilizan en todo el código. uiwait () es una función en la que el código se detiene hasta que finaliza la función elegida para uiwait. ¡Esta función elegida es msgbox ('mensaje', 'título', 'icono')!

Puede cambiar los mensajes que dice Frances siempre que siga el formato msgbox () anterior. Si desea utilizar imágenes de Frances, etiquete 'icono' como 'personalizado' y continúe con una coma y la variable de la lectura de la imagen que eligió. También puede utilizar los tipos de 'iconos' preestablecidos. Debe tener un aspecto como este:

hola = imread ('Regular.jpg'); % lee la imagen del archivo subidoimshow (hola); uiwait (msgbox ('¡Hola y gracias por elegir nuestra prueba de audición! ¡Soy Frances y él te ayudará hoy con tu prueba!', '¡Bienvenido!', 'personalizado', hola));

¡A continuación, cree una entrada que pregunte la edad del usuario así!

UserAge = input ('Antes de comenzar esta prueba, ¿cuántos años (años) tienes? (P. Ej., 32, 56,…) n', 's');

NOTA: si las cifras son extrañas y hay demasiadas, use cerrar todo para eliminar las cifras anteriores a medida que se ejecuta su código

¡Entonces crea una estructura de caja de interruptor! Recuerde que la entrada del usuario está en una cadena y debe convertirla en un valor numérico. Entonces usa str2double (UserAge). Cada caso debe tener un rango de edades, como 4 a 6 o 18 a 40. para que la variable a verificar sea verdadera para uno de los casos, use num2cell (matriz) así:

switch str2double (UserAge)% cambia la variable de una cadena a un valor numérico caso num2cell (0: 3)

frances = imread ('Huevo.jpg');

imshow (frances);

uiwait (msgbox ('¡Eres un feto! ¡Frances cree que deberías hacer tu prueba de audición con un médico!', '¡Prueba denegada!', 'personalizado', frances));

regreso

Los grupos anteriores deben devolverse para evitar que el usuario continúe con el código.

Recuerde finalizar la estructura del caso y cerrar todas las figuras.

Paso 2: prueba el audio para el usuario

Pruebe el audio para el usuario
Pruebe el audio para el usuario

Este segmento existe para garantizar que el sonido del participante en su dispositivo no sea ni demasiado bajo ni demasiado alto.

Para advertir al usuario, aparece un cuadro de mensaje que espera la confirmación del usuario antes de continuar con el sonido: uiwait (msgbox ('Antes de que comience la prueba, nos gustaría hacer una prueba de audio para asegurarnos de que su volumen ¿Está bien! ¿Listo? ',' ¡Espera! ',' Ayuda '));

Se reproduce una onda sinusoidal con una amplitud de 1 y una frecuencia de muestreo de 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * sin (2 * pi * 200 * T); sonido (y, SampleRate);

Luego se le hace una pregunta al usuario con una respuesta ingresada por el usuario: Q = input ('¿Puedes escuchar el sonido? [Y / n] n', 's');

Luego hay un tiempo para buscar cuando Q == 'n', si es verdadero, entonces el sonido se repite y vuelve a preguntar al usuario hasta que la respuesta haya cambiado de 'n' a 'y': while Q == 'n' if strcmp (Q, 'n') disp ('Aumente el volumen de su computadora.'); esperar_sonido; pausa (2); Q = input ('¿Puedes oír el sonido ahora? [Y / n] n', 's'); fin fin

Luego hay un momento de espera antes de continuar con la parte de examen real del código.

Paso 3: Realice la prueba de audiometría para el oído derecho

Realice la prueba de audiometría para el oído derecho
Realice la prueba de audiometría para el oído derecho

En este código, se ejecutará un bucle durante 6 iteraciones con frecuencias y volúmenes variables para cada oído individual. Dependiendo del oído que desee probar, la variable Out tendrá sonido en una fila y ceros en otra.

Primero, crea dos vectores de línea vacíos para registrar las frecuencias y la amplitud del sonido que escucha el usuario.

Esta parte está en un bucle for indexado para la cantidad de sonidos que desee reproducir si desea aleatorizar las frecuencias reproducidas y la amplitud.

F es la frecuencia: r = (rand * 10000); Fs = 250 + r; (la función rand es crear una frecuencia generada aleatoriamente) t es una cierta cantidad de tiempo progresado determinado por: t = linspace (0, Fs * 2, Fs * 2); s es la onda sinusoidal: s = sin (2 * pi * t * 1000); (esto se puede multiplicar por la variable aleatoria w para crear un valor aleatorio de amplitud / dB para la función de sonido: w = rand;)

La salida para el oído derecho es: Out = [zeros (size (t)); s]';

Las salidas se reproducen a través del código: sonido (Out, Fs)

El siguiente paso es crear una interfaz de usuario con los registros de código si el usuario escuchó el sonido o no.

Primero haces una figura y determinas la posición en la que aparecerá la figura: gcbf = figure ('pos', [30 800 350 150]);

*** Si el botón no aparece para usted, la posición de la figura, como se muestra en la matriz de arriba, puede estar mal colocada para su computadora. Para solucionar esto, cambie los valores 30 y 800 a la posición que desee. Por ejemplo, tener [0 0 350 150] generará el botón de la interfaz gráfica de usuario en la parte inferior izquierda del monitor. ***

Se crea un botón de alternancia para grabar cuando el usuario escucha el sonido, y la posición y la visualización se pueden personalizar: tb = uicontrol ('Estilo', 'botón de alternancia', 'Cadena', 'Presione el botón cuando escuche un sonido', ' tag ',' togglebutton1 ',' Posición ', [30 60300 40],' Devolución de llamada ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Este código en particular tiene el resumen del código y los vectores vacíos agregan un valor si se presiona el botón.

Luego cree una función de espera para recibir la respuesta del botón y active el código en el botón cuando se presiona: h = randi ([4, 7]); uiwait (mcdb, h); (Hicimos la variable aleatoria h para que los participantes no pudieran hacer trampa y determinar la cantidad de segundos necesarios para responder).

Una vez finalizado el ciclo, mantenga la variable de salida de frecuencia (freq_right) en Hz, así que déjela en paz. Luego convierta la variable dB_right de amperios a decibelios usando la ecuación: dB_right = mag2db (amp_right) * (- 1);

Luego agregue la función: cerrar todo. esto saldrá de cualquier figura innecesaria que pueda haber aparecido.

Agregue una función de pausa, de unos 10 segundos, para dar tiempo al usuario para que se ajuste y se prepare para el oído izquierdo.

Paso 4: cree el mismo código para la oreja izquierda

Cree el mismo código para la oreja izquierda
Cree el mismo código para la oreja izquierda

Repita el código usado para el oído derecho para hacer el siguiente segmento que prueba el oído izquierdo. La única diferencia es cambiar de qué canal de salida vendrá el sonido. Para hacer esto, cambie el orden de los valores de la matriz para la variable Out. Debe tener un aspecto como este:

Fuera = [s; ceros (tamaño (t))] ';

Al hacerlo, no saldrá sonido del canal derecho, sino del canal izquierdo.

Paso 5: haga una figura lado a lado para comparar los datos

Haga una figura lado a lado para comparar los datos
Haga una figura lado a lado para comparar los datos
Haga una figura lado a lado para comparar los datos
Haga una figura lado a lado para comparar los datos

¡Ahora haz una gráfica para mostrar los datos! Estás poniendo dos gráficos en una sola figura, ¡así que haz esto!

figura (1); subparcela (1, 2, 1); *** subtrama (1, 2, 2) para la otra

Para cada subtrama, agregue estos parches con colores y coordenadas específicos. Estas secciones del gráfico dependen de qué tan grande sea el grado de pérdida auditiva. Al igual que:

parche ([250 8000 8000 250], [25 25-10-10], [1,00, 0,89, 0,29]); % yellowhold on% La subtrama ahora contendrá los siguientes parches y diagramas de dispersión

texto (3173, 8, 'Normal');

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

texto (3577, 33, 'leve');

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

texto (2870, 48, 'Moderado');

parche ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % azul

texto (1739, 62, 'Moderadamente severo');

parche ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % púrpura

texto (3142, 80, 'Severo');

parche ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % rojo

texto (3200, 103, 'Profundo')

¡Luego agregue los gráficos de dispersión izquierdo y derecho! ¡Podemos proporcionarle un promedio 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]; % oreja derecha

Nat_dBR = [10 5 10 15 10 15];

Los diagramas de dispersión deben distinguir los puntos izquierdo y derecho. ¡Podrías hacer cruces y círculos!

NL = dispersión (Nat_FreqL, Nat_dBL, 'bx'); % traza puntos cruzados azulesNR = dispersión (Nat_FreqR, Nat_dBR, 'ro'); % traza círculos rojos

Haga una leyenda para el gráfico nacional asignándola a variables específicas: leyenda ([NL NR], {'título1', 'título2'});

Establezca su límite x de 250 a 8000 Hz y su límite y de -10 a 120 dB. Recuerde cambiar sus tics verticales con yticks ()

Etiquete su eje x "Frecuencia Hz" y su eje y "Pitch dB".

Invierta el eje y reuniendo el eje con ax = gca

Luego, vincula la propiedad de la dirección y con: ax. YDir = 'reverse

Ahora el código para el segundo es aproximadamente el mismo pero sin la leyenda y graficando los diagramas de dispersión con las variables de las pruebas izquierda y derecha.

Después de todo esto, agregue una función de pausa durante unos 10 segundos para que el usuario pueda ver sus resultados.

Paso 6: ¡Agregue un pequeño mensaje de agradecimiento si lo desea

¡Agregue un pequeño mensaje de agradecimiento si lo desea!
¡Agregue un pequeño mensaje de agradecimiento si lo desea!

Esto es solo por diversión si lo desea, pero agregue otro imread (), imshow () y uiwait (msgbox ()) como agradecimiento y despedida. Aparte de eso, recuerde poner clf; cierra todo; clc; para cerrar todo. ¡Buen trabajo lo hiciste!

Recomendado: