Table des matières:

Comment faire un test auditif pour adultes à l'aide de MATLAB : 6 étapes
Comment faire un test auditif pour adultes à l'aide de MATLAB : 6 étapes

Vidéo: Comment faire un test auditif pour adultes à l'aide de MATLAB : 6 étapes

Vidéo: Comment faire un test auditif pour adultes à l'aide de MATLAB : 6 étapes
Vidéo: Le test auditif complet en 6 étapes 2024, Juillet
Anonim
Comment faire un test auditif pour adultes à l'aide de MATLAB
Comment faire un test auditif pour adultes à l'aide de MATLAB

AVIS DE NON-RESPONSABILITÉ: Notre test n'est PAS un diagnostic médical et ne doit pas être utilisé comme tel. Pour mesurer avec précision l'audition, veuillez consulter un professionnel de la santé.

En utilisant du matériel que nous avions déjà, notre groupe a fait un test auditif. Notre test est réservé aux adultes et aux adolescents, car l'audition des jeunes enfants est disponible dans différentes plages et ne doit être mesurée que par un professionnel.

Ce projet a été inspiré en travaillant dans notre classe BME MATLAB et en jouant avec des sons produits par des ondes sinusoïdales. Nous étions intéressés par la manière dont une onde sinusoïdale pouvait être modifiée pour jouer un son à différentes hauteurs.

Tout ce dont nous avions besoin pour ce projet était un ordinateur exécutant MATLAB R2018b et une paire d'écouteurs. Nous avons inclus un personnage original, Frances, comme mascotte pour rendre le programme plus humoristique.

Étape 1: Créer une entrée utilisateur pour analyser l'âge de l'utilisateur

Créer une entrée utilisateur pour analyser l'âge de l'utilisateur
Créer une entrée utilisateur pour analyser l'âge de l'utilisateur
Créer une entrée utilisateur pour analyser l'âge de l'utilisateur
Créer une entrée utilisateur pour analyser l'âge de l'utilisateur

La première partie de ce code consiste à faire une entrée utilisateur dans laquelle il décide s'il est assez vieux pour procéder au test auditif. Pourquoi ne pas le faire en ajoutant également des images idiotes de notre mascotte, Frances ? Pour ce faire, téléchargez le fichier zip inclus, puis extrayez-le dans un fichier pouvant être extrait dans le code. Procédez au téléchargement par lots du fichier rempli de dessins en utilisant ceci:

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

Afin de présenter les boîtes de message et les grandes images des dessins, nous avons utilisé cette méthode amusante de vous montrer Frances. Il suffit de lire une image de votre choix au format: variable = imread('nameofpicture.jpg');

Ensuite, continuez à l'afficher en utilisant imshow(variable); il apparaîtra alors sous forme de chiffre dans votre MatLab lorsque vous l'exécuterez !

Viennent ensuite les boîtes de message qui sont utilisées tout au long du code. uiwait() est une fonction dans laquelle le code est arrêté jusqu'à ce que la fonction choisie pour uiwait soit terminée. Cette fonction choisie est msgbox('message', 'title', 'icon') !

Vous pouvez vous sentir libre de modifier les messages que Frances dit tant que vous suivez le format msgbox() ci-dessus. Si vous souhaitez utiliser des images de Frances, étiquetez 'icon' comme 'custom' et procédez avec une virgule et la variable de l'imread de l'image que vous avez choisie ! Vous pouvez également utiliser les types d'icônes prédéfinis. ça devrait ressembler à ça:

salut = imread('Regular.jpg'); % lit l'image à partir du fichier uploadedimshow(hi); uiwait(msgbox('Bonjour et merci d'avoir choisi notre test auditif ! C'est Frances et il va vous aider aujourd'hui avec votre test !', 'Bienvenue !', 'personnalisé', salut));

Créez ensuite une entrée qui demande l'âge de l'utilisateur comme ça !

UserAge = input('Avant de commencer ce test, quel âge (années) avez-vous ? (par exemple 32, 56, …)\n', 's');

REMARQUE: si les chiffres sont étranges et qu'il y en a trop, utilisez tout fermer afin de supprimer les chiffres précédents au fur et à mesure que votre code s'exécute.

Créez ensuite une structure de boîtier de commutation ! N'oubliez pas que l'entrée utilisateur est sous forme de chaîne et que vous devez la convertir en valeur numérique. Utilisez donc str2double(UserAge). Chaque cas doit avoir une plage d'âges telle que 4 à 6 ou 18 à 40. pour que la variable à vérifier est vraie pour l'un des cas, utilisez num2cell(array) comme ceci:

switch str2double(UserAge) % change la variable d'une chaîne en une valeur numérique case num2cell(0:3)

frances = imread('Oeuf.jpg');

imshow(frances);

uiwait(msgbox('Vous êtes un fœtus ! Frances pense que vous devriez plutôt faire votre test auditif avec un médecin !', 'Test refusé !', 'personnalisé', frances));

revenir

Les groupes précédents doivent être renvoyés afin d'empêcher l'utilisateur de continuer avec le code.

N'oubliez pas de terminer la structure de cas et de fermer toutes les figures.

Étape 2: Tester l'audio pour l'utilisateur

Tester l'audio pour l'utilisateur
Tester l'audio pour l'utilisateur

Ce segment existe pour s'assurer que le son du participant sur son appareil n'est ni trop faible ni trop fort.

Pour avertir l'utilisateur, une boîte de message apparaît et attend la confirmation de l'utilisateur avant de continuer avec le son: uiwait(msgbox('Avant le début du test, nous aimerions faire un test audio pour nous assurer que votre volume a raison ! Prêt ?', 'Attendez !', 'A l'aide'));

Une onde sinusoïdale est jouée avec une amplitude de 1 et une fréquence d'échantillonnage de 1000 Hz: T = [0:1/SampleRate:2]; y = 1*sin(2*pi*200*T); sound(y, SampleRate);

L'utilisateur se voit alors poser une question avec une réponse saisie par l'utilisateur: Q = input('Pouvez-vous entendre le son ? [y/n] n', 's');

Ensuite, il y a un moment pour chercher quand Q == 'n', si vrai alors le son se répète et demande à nouveau à l'utilisateur jusqu'à ce que la réponse passe de 'n' à 'y': while Q == 'n' if strcmp(Q, 'n') disp('Augmentez le volume de votre ordinateur.'); wait_sound; pause(2); Q = input('Pouvez-vous entendre le son maintenant ? [y/n] n', 's'); fin fin

Il y a ensuite un moment d'attente avant de passer à la partie d'examen proprement dite du code.

Étape 3: Faire le test d'audiométrie pour l'oreille droite

Faire le test d'audiométrie pour l'oreille droite
Faire le test d'audiométrie pour l'oreille droite

Dans ce code, une boucle fonctionnera pendant 6 itérations avec des fréquences et des volumes variables pour chaque oreille. Selon l'oreille que vous souhaitez tester, la variable Out aura un son dans une rangée et des zéros dans une autre.

Tout d'abord, vous créez deux vecteurs de ligne vides pour enregistrer les fréquences et l'amplitude du son que l'utilisateur entend.

Cette partie est dans une boucle for indexée pour le nombre de sons que vous souhaitez jouer si vous souhaitez randomiser les fréquences jouées et l'amplitude.

F est la fréquence: r = (rand*10000); Fs = 250 + r; (la fonction rand est de créer une fréquence générée aléatoirement) t est un certain temps de progression déterminé par: t = linspace(0, Fs*2, Fs*2); s est l'onde sinusoïdale: s = sin(2*pi*t*1000); (cela peut être multiplié par la variable aléatoire w pour créer une valeur aléatoire d'amplitude/dB pour la fonction sonore: w = rand;)

La sortie pour l'oreille droite est: Out = [zéros(taille(t)); s]';

Les sorties sont jouées via le code: sound(Out, Fs)

L'étape suivante consiste à créer une interface utilisateur avec les enregistrements de code, que l'utilisateur ait entendu le son ou non.

D'abord vous faites une figure et déterminez la position dans laquelle la figure apparaîtra: gcbf = figure('pos', [30 800 350 150]);

***Si le bouton n'apparaît pas pour vous, la position de la figure, comme indiqué par le tableau ci-dessus, peut être mal positionnée pour votre ordinateur. Pour résoudre ce problème, modifiez les valeurs 30 et 800 selon la position souhaitée. Par exemple, avoir [0 0 350 150] fera apparaître le bouton gui en bas à gauche du moniteur.***

Un bouton bascule est conçu pour enregistrer lorsque l'utilisateur entend le son, et la position et l'affichage peuvent être personnalisés: tb = uicontrol('Style', 'togglebutton', 'String', 'Appuyez sur le bouton lorsque vous entendez un son', ' tag', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Ce code particulier a la reprise du code et les vecteurs vides ajoutent une valeur si le bouton est enfoncé.

Créez ensuite une fonction d'attente pour recevoir la réponse du bouton et activez le code dans le bouton lorsqu'il est enfoncé: h = randi([4, 7]); uiwait(gcbf, h); (nous avons utilisé la variable aléatoire h pour que les participants ne puissent pas tricher et déterminer le nombre de secondes nécessaires pour répondre.)

Une fois la boucle terminée, conservez la variable de sortie de fréquence (freq_right) en Hz afin de la laisser seule. Convertissez ensuite la variable dB_right d'ampères en décibels en utilisant l'équation: dB_right = mag2db(amp_right)*(-1);

Ajoutez ensuite la fonction: tout fermer. cela sortira de tous les chiffres inutiles qui peuvent avoir surgi.

Ajoutez une fonction de pause, environ 10 secondes, afin de laisser le temps à l'utilisateur de s'adapter et de se préparer à l'oreille gauche.

Étape 4: Créez le même code pour l'oreille gauche

Créer le même code pour l'oreille gauche
Créer le même code pour l'oreille gauche

Répétez le code utilisé pour l'oreille droite pour créer le segment suivant qui teste l'oreille gauche. La seule différence est de changer le canal de sortie d'où proviendra le son. Pour ce faire, inversez l'ordre des valeurs du tableau pour la variable Out. Ça devrait ressembler à ça:

Sortie = [s; zéros(taille(t))]';

Ce faisant, aucun son ne sortira du canal droit mais du canal gauche à la place !

Étape 5: Créez une figure côte à côte pour comparer les données

Faire une figure côte à côte pour comparer les données
Faire une figure côte à côte pour comparer les données
Faire une figure côte à côte pour comparer les données
Faire une figure côte à côte pour comparer les données

Maintenant, faites un graphique pour montrer les données ! Vous mettez deux graphiques en un seul chiffre, alors faites-le !

figure(1);sous-intrigue(1, 2, 1); ***sous-intrigue(1, 2, 2) pour l'autre

Pour chaque sous-parcelle, ajoutez ces patchs avec des couleurs et des coordonnées spécifiques. Ces sections du graphique dépendent de l'ampleur de la perte auditive. Ainsi:

patch([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); %yellowhold on % L'intrigue secondaire contiendra désormais les patchs et nuages de points suivants

texte (3173, 8, 'Normal');

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

texte (3577, 33, 'léger');

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

text(2870, 48, 'Modéré');

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

texte(1739, 62, 'Modérément sévère');

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

texte(3142, 80, 'Sévère');

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

texte (3200, 103, 'Profond')

Ajoutez ensuite les nuages de points de gauche et de droite ! Nous pouvons vous fournir une moyenne nationale générale! Ici:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % valeur x, oreille gaucheNat_dBL = [10 3 10 15 10 15]; % valeur y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % oreille droite

Nat_dBR = [10 5 10 15 10 15];

Les nuages de points doivent discerner les points gauche et droit. Vous pourriez faire des croix et des cercles !

NL = scatter(Nat_FreqL, Nat_dBL, 'bx'); % trace les points de croix bleusNR = scatter(Nat_FreqR, Nat_dBR, 'ro'); % trace des cercles rouges

Créez une légende pour le graphique national en l'assignant à des variables spécifiques: legend([NL NR], {'title1', 'title2'});

Réglez votre limite x de 250 à 8000 Hz et votre limite y de -10 à 120 dB. N'oubliez pas de changer vos graduations verticales avec yticks()

Étiquetez votre axe x "Fréquence Hz" et votre axe y "Pitch dB".

Inverser l'axe y en rassemblant l'axe avec ax = gca

Puis liez-y la propriété de la direction y avec: ax. YDir = 'reverse

Maintenant, le code du second est à peu près le même mais sans la légende et sans représenter graphiquement les nuages de points avec les variables des tests de gauche et de droite.

Après tout cela, ajoutez une fonction de pause d'environ 10 secondes afin que l'utilisateur puisse consulter ses résultats.

Étape 6: Ajoutez un petit message de remerciement si vous le souhaitez

Ajoutez un petit message de remerciement si vous le souhaitez !
Ajoutez un petit message de remerciement si vous le souhaitez !

C'est juste pour le plaisir si vous le souhaitez, mais ajoutez un autre imread(), imshow() et uiwait(msgbox()) pour vous remercier et au revoir ! A part ça, n'oubliez pas de mettre clf; ferme tout; clc; pour tout fermer. Bon travail tu l'as fait !

Conseillé: