Índice:

Como fazer um teste de audição para adultos usando o MATLAB: 6 etapas
Como fazer um teste de audição para adultos usando o MATLAB: 6 etapas

Vídeo: Como fazer um teste de audição para adultos usando o MATLAB: 6 etapas

Vídeo: Como fazer um teste de audição para adultos usando o MATLAB: 6 etapas
Vídeo: Eletroencefalograma - preparo para o exame por Dra. Paula Girotto 2024, Dezembro
Anonim
Como fazer um teste de audição para adultos usando o MATLAB
Como fazer um teste de audição para adultos usando o MATLAB

ISENÇÃO DE RESPONSABILIDADE: Nosso teste NÃO é um diagnóstico médico e não deve ser usado como tal. Para medir a audição com precisão, consulte um profissional médico.

Usando materiais que já tínhamos, nosso grupo fez um teste de audição. Nosso teste é para uso em adultos e adolescentes apenas porque a audição de crianças pequenas vem em vários intervalos e deve ser medida apenas por um profissional.

Este projeto foi inspirado enquanto trabalhava em nossa aula BME MATLAB e tocava com sons feitos por ondas sinusoidais. Estávamos interessados em saber como uma onda senoidal pode ser alterada para reproduzir um som em tons diferentes.

Tudo o que precisávamos para este projeto era um computador executando o MATLAB R2018b e um par de fones de ouvido. Incluímos uma personagem original, Frances, como mascote para tornar o programa mais engraçado.

Etapa 1: Criar uma entrada do usuário para analisar a idade do usuário

Crie uma entrada do usuário para analisar a idade do usuário
Crie uma entrada do usuário para analisar a idade do usuário
Crie uma entrada do usuário para analisar a idade do usuário
Crie uma entrada do usuário para analisar a idade do usuário

A primeira parte deste código é fazer uma entrada do usuário na qual decide se ele tem idade suficiente para fazer o teste de audição. Por que não fazer isso também adicionando fotos bobas de nosso mascote, Frances? Para fazer isso, baixe o arquivo zip incluído e, em seguida, extraia-o em um arquivo que pode ser puxado para o código. Prossiga com o upload em lote do arquivo cheio de desenhos usando:

Dir = 'C: / Usuários / phoeb / OneDrive / Documentos / MATLAB / Frances Drawings'; GetDir = 'C: / Usuários / phoeb / OneDrive / Documentos / MATLAB / Frances Drawings / *. Jpg';

Para apresentar as caixas de mensagens e grandes imagens dos desenhos, usamos este método divertido de mostrar Frances para você. Simplesmente leia uma imagem de sua escolha com o formato: variable = imread ('nameofpicture.jpg');

Em seguida, prossiga para mostrá-lo usando imshow (variável); ele aparecerá como uma figura em seu MatLab quando você executá-lo!

A seguir estão as caixas de mensagens que são usadas em todo o código. uiwait () é uma função na qual o código é interrompido até que a função escolhida para uiwait seja concluída. Esta função escolhida é msgbox ('mensagem', 'título', 'ícone')!

Você pode se sentir à vontade para alterar as mensagens que Frances diz, desde que você siga o formato msgbox () acima. Se você quiser usar fotos de Frances, rotule 'ícone' como 'personalizado' e prossiga com uma vírgula e a variável de leitura da imagem que você escolheu! Você também pode usar os tipos de 'ícone' predefinidos. deve ser parecido com isto:

hi = imread ('Regular.jpg'); % lê a imagem do arquivo enviadoimshow (hi); uiwait (msgbox ('Olá e obrigado por escolher nosso teste de audição! Aqui é Frances e ele estará ajudando você hoje com seu teste!', 'Bem-vindo!', 'custom', oi));

Em seguida, crie uma entrada que pergunte a idade do usuário, assim!

UserAge = input ('Antes de iniciarmos este teste, quantos anos (anos) você tem? (Por exemplo, 32, 56, …) n', 's');

NOTA: se as figuras estão estranhas e são muitas, use fechar tudo para remover as figuras anteriores à medida que seu código é executado

Em seguida, crie uma estrutura de switch case! Lembre-se de que a entrada do usuário está em string e você precisa convertê-la em um valor numérico. Portanto, use str2double (UserAge). Cada caso deve ter uma faixa de idades, como 4 a 6 ou 18 a 40. para que a variável a ser verificada como verdadeira para um dos casos, use num2cell (array) assim:

switch str2double (UserAge)% muda a variável de uma string para um valor numérico case num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Você é um feto! Frances acha que você deveria fazer o teste de audição com um médico!', 'Teste negado!', 'custom', frances));

Retorna

Os grupos anteriores devem ser retornados para evitar que o usuário prossiga com o código.

Lembre-se de encerrar a estrutura do caso e fechar todas as figuras.

Etapa 2: Teste o áudio para o usuário

Teste o áudio para o usuário
Teste o áudio para o usuário

Este segmento existe para garantir que o som do participante em seu dispositivo não seja muito baixo nem muito alto.

Para dar ao usuário algum aviso, uma caixa de mensagem aparece e aguarda a confirmação do usuário antes de continuar com o som: uiwait (msgbox ('Antes do início do teste, gostaríamos de fazer um teste de áudio para ter certeza de seu volume está certo! Pronto? ',' Espere! ',' ajuda '));

Uma onda senoidal é reproduzida com uma amplitude de 1 e a taxa de amostragem de 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * sin (2 * pi * 200 * T); som (y, SampleRate);

O usuário então faz uma pergunta com uma resposta inserida pelo usuário: Q = input ('Você pode ouvir o som? [Y / n] n', 's');

Depois, há um tempo para procurar quando Q == 'n', se verdadeiro então o som se repete e pergunta ao usuário novamente até que a resposta mude de 'n' para 'y': enquanto Q == 'n' se strcmp (Q, 'n') disp ('Aumentar o volume do computador.'); wait_sound; pausa (2); Q = input ('Você consegue ouvir o som agora? [Y / n] n', 's'); fim fim

Então, há um momento de espera antes de prosseguir para a parte de exame real do código.

Etapa 3: faça o teste de audiometria para a orelha direita

Faça o teste de audiometria para o ouvido direito
Faça o teste de audiometria para o ouvido direito

Neste código, um loop será executado por 6 iterações com frequências e volumes variados para cada ouvido individual. Dependendo do ouvido que você deseja testar, a variável Out terá som em uma linha e zeros na outra.

Primeiro, você cria dois vetores de linha vazia para registrar as frequências e a amplitude do som que o usuário ouve.

Esta parte está em um loop indexado para quantos sons você quiser tocar, se quiser randomizar as frequências tocadas e a amplitude.

F é a frequência: r = (rand * 10000); Fs = 250 + r; (a função rand é criar uma frequência gerada aleatoriamente) t é uma certa quantidade de tempo progredido determinado por: t = linspace (0, Fs * 2, Fs * 2); s é a onda senoidal: s = sin (2 * pi * t * 1000); (isso pode ser multiplicado pela variável aleatória w para criar um valor de amplitude / dB aleatório para a função de som: w = rand;)

A saída para a orelha direita é: Out = [zeros (size (t)); s] ';

As saídas são reproduzidas por meio do código: sound (Out, Fs)

A próxima etapa é fazer uma interface de usuário com os registros de código se o usuário ouviu o som ou não.

Primeiro você faz uma figura e determina a posição em que a figura aparecerá: gcbf = figura ('pos', [30 800 350 150]);

*** Se o botão não aparecer para você, a posição da figura, conforme mostrado pela matriz acima, pode estar posicionada incorretamente para o seu computador. Para resolver isso, altere os valores 30 e 800 para a posição desejada. Por exemplo, ter [0 0 350 150] irá gerar o botão gui na parte inferior esquerda do monitor. ***

Um botão de alternância é feito para gravar quando o usuário ouve o som, e a posição e a exibição podem ser personalizadas: tb = uicontrol ('Estilo', 'botão de alternância', 'String', 'Pressione o botão quando ouvir um som', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Este código em particular tem o resumo do código e os vetores vazios adicionam um valor se o botão for pressionado.

Em seguida, crie uma função de espera para receber a resposta do botão e ative o código no botão quando pressionado: h = randi ([4, 7]); uiwait (gcbf, h); (fizemos a variável aleatória h para que os participantes não pudessem trapacear e determinar o número de segundos necessários para responder.)

Depois que o loop for concluído, mantenha a variável de saída de frequência (freq_right) em Hz, portanto, deixe-o como está. Em seguida, converta a variável dB_right de amps para decibéis usando a equação: dB_right = mag2db (amp_right) * (- 1);

Em seguida, adicione a função: fechar tudo. isso sairá de quaisquer figuras desnecessárias que possam ter aparecido.

Adicione uma função de pausa, cerca de 10 segundos, para dar tempo para o usuário se ajustar e se preparar para o ouvido esquerdo.

Etapa 4: crie o mesmo código para a orelha esquerda

Crie o mesmo código para a orelha esquerda
Crie o mesmo código para a orelha esquerda

Repita o código usado para a orelha direita para fazer o próximo segmento que testa a orelha esquerda. A única diferença é mudar de qual canal de saída o som virá. Para fazer isso, inverta a ordem dos valores da matriz para a variável Out. Deve ser assim:

Out = [s; zeros (tamanho (t))] ';

Ao fazer isso, nenhum som sairá do canal direito, mas sim do canal esquerdo!

Etapa 5: faça uma figura lado a lado para comparar os dados

Faça uma figura lado a lado para comparar os dados
Faça uma figura lado a lado para comparar os dados
Faça uma figura lado a lado para comparar os dados
Faça uma figura lado a lado para comparar os dados

Agora faça um gráfico para mostrar os dados! Você está colocando dois gráficos em uma única figura, então faça isso!

figura (1); subtrama (1, 2, 1); *** subtrama (1, 2, 2) para o outro

Para cada subtrama, adicione esses patches com cores e coordenadas específicas. Eles se separam do gráfico dependendo de quão grande é o grau de perda auditiva. Igual a:

patch ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on% O subplot irá agora conter os seguintes patches e gráficos de dispersão

texto (3173, 8, 'Normal');

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

texto (3577, 33, 'Suave');

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

texto (2870, 48, 'Moderado');

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

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

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

texto (3142, 80, 'Grave');

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

texto (3200, 103, 'Profundo')

Em seguida, adicione os gráficos de dispersão esquerdo e direito! Podemos fornecer uma média nacional geral para você! Aqui:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % valor x, orelha esquerdaNat_dBL = [10 3 10 15 10 15]; valor% y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % orelha direita

Nat_dBR = [10 5 10 15 10 15];

Os gráficos de dispersão devem distinguir os pontos esquerdo e direito. Você poderia fazer cruzes e círculos!

NL = dispersão (Nat_FreqL, Nat_dBL, 'bx'); % plota pontos de cruz azulNR = dispersão (Nat_FreqR, Nat_dBR, 'ro'); % plota círculos vermelhos

Faça uma legenda para o gráfico nacional atribuindo-o a variáveis específicas: legend ([NL NR], {'title1', 'title2'});

Defina seu limite x de 250 a 8000 Hz e seu limite y de -10 a 120 dB. Lembre-se de alterar suas marcações verticais com yticks ()

Identifique o eixo x como "Frequência Hz" e o eixo y como "Pitch dB".

Inverta o eixo y reunindo o eixo com ax = gca

Em seguida, vincule a propriedade da direção y a ela com: ax. YDir = 'reverse

Agora, o código do segundo é quase o mesmo, mas sem a legenda e sem representar os gráficos de dispersão com as variáveis dos testes esquerdo e direito.

Depois de tudo isso, adicione uma função de pausa por cerca de 10 segundos para que o usuário possa ver seus resultados.

Etapa 6: Adicione uma pequena mensagem de agradecimento, se desejar

Adicione uma pequena mensagem de agradecimento se desejar!
Adicione uma pequena mensagem de agradecimento se desejar!

Isso é apenas para diversão, se você quiser, mas adicione outro imread (), imshow () e uiwait (msgbox ()) para agradecimento e despedida! Fora isso, lembre-se de colocar clf; feche tudo; clc; para fechar tudo. Bom trabalho você fez!

Recomendado: