Оглавление:

Как сделать тест на слух у взрослых с помощью MATLAB: 6 шагов
Как сделать тест на слух у взрослых с помощью MATLAB: 6 шагов

Видео: Как сделать тест на слух у взрослых с помощью MATLAB: 6 шагов

Видео: Как сделать тест на слух у взрослых с помощью MATLAB: 6 шагов
Видео: Тест на Самый Острый Слух в Мире 2024, Июль
Anonim
Как сделать тест на слух у взрослых с помощью MATLAB
Как сделать тест на слух у взрослых с помощью MATLAB

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Наш тест НЕ является медицинской диагностикой и не должен использоваться как таковой. Чтобы точно измерить слух, обратитесь к врачу.

Используя материалы, которые у нас уже были, наша группа провела проверку слуха. Наш тест предназначен для использования взрослыми и подростками только потому, что слух маленьких детей бывает разных диапазонов и должен измеряться только профессионалом.

Этот проект был вдохновлен работой в нашем классе BME MATLAB и игрой со звуками, создаваемыми синусоидальными волнами. Нас интересовало, как можно изменить синусоидальную волну для воспроизведения звука с разной высотой тона.

Все, что нам было нужно для этого проекта, - это компьютер с MATLAB R2018b и пара наушников. Мы включили оригинального персонажа, Фрэнсис, в качестве талисмана, чтобы сделать программу более юмористической.

Шаг 1. Создайте пользовательский ввод для анализа возраста пользователя

Создайте пользовательский ввод для анализа возраста пользователя
Создайте пользовательский ввод для анализа возраста пользователя
Создайте пользовательский ввод для анализа возраста пользователя
Создайте пользовательский ввод для анализа возраста пользователя

Первая часть этого кода - сделать пользовательский ввод, в котором решает, достаточно ли он взрослый, чтобы приступить к проверке слуха. Почему бы не сделать это, добавив к тому же глупые картинки нашего талисмана Фрэнсис? Для этого загрузите прилагаемый zip-файл, а затем извлеките его в файл, который можно будет вставить в код. Приступите к пакетной загрузке файла, полного чертежей, используя следующее:

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

Чтобы представить окна сообщений и большие изображения рисунков, мы использовали этот забавный способ показать вам Фрэнсис. Просто прочтите изображение по вашему выбору в формате: variable = imread ('nameofpicture.jpg');

Затем перейдите к отображению с помощью imshow (variable); затем он будет отображаться как фигура в вашем MatLab, когда вы его запустите!

Далее идут окна сообщений, которые используются во всем коде. uiwait () - это функция, в которой код останавливается до завершения функции, выбранной для uiwait. Выбранная функция - msgbox ('сообщение', 'заголовок', 'значок')!

Вы можете свободно изменять сообщения, которые говорит Фрэнсис, если вы следуете приведенному выше формату msgbox (). Если вы хотите использовать изображения Фрэнсис, пометьте 'icon' как 'custom' и продолжайте это с запятой и переменной imread изображения, которое вы выбрали! Вы также можете использовать предустановленные типы значков. это должно выглядеть так:

привет = imread ('Regular.jpg'); % читает изображение из загруженного файла imshow (привет); uiwait (msgbox ('Здравствуйте, спасибо, что выбрали наш тест на слух! Это Фрэнсис, он поможет вам сегодня с тестом!', 'Добро пожаловать!', 'custom', привет));

Затем создайте вход, который спрашивает возраст пользователя вот так!

UserAge = input ('Перед тем, как мы начнем этот тест, сколько вам лет (лет)? (Например, 32, 56,…) n', 's');

ПРИМЕЧАНИЕ: если цифры выглядят странно и их слишком много, используйте close all, чтобы удалить более ранние цифры при запуске вашего кода.

Затем создайте структуру корпуса выключателя! Помните, что пользовательский ввод находится в виде строки, и вам нужно преобразовать ее в числовое значение. Так что используйте str2double (UserAge). У каждого случая должен быть диапазон возрастов, например от 4 до 6 или от 18 до 40. чтобы переменная проверялась как истинная для одного из случаев, используйте num2cell (массив) следующим образом:

переключатель str2double (UserAge)% изменяет переменную со строки на числовое значение case num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (франция);

uiwait (msgbox («Вы - плод! Фрэнсис считает, что вам следует провести тест слуха с врачом!», «Тест отклонен!», «custom», frances));

возвращение

Более ранние группы должны быть возвращены, чтобы пользователь не мог продолжить выполнение кода.

Не забудьте завершить структуру корпуса и закрыть все фигуры.

Шаг 2. Протестируйте звук для пользователя

Тестирование звука для пользователя
Тестирование звука для пользователя

Этот сегмент существует, чтобы гарантировать, что звук участника на их устройстве не будет ни слишком тихим, ни слишком громким.

Чтобы дать пользователю некоторое предупреждение, появляется окно сообщения и ожидает подтверждения от пользователя, прежде чем продолжить со звуком: uiwait (msgbox ('Перед началом теста мы' хотели бы провести аудиотест, чтобы убедиться, что ваша громкость правильно! Готов? »,« Постой! »,« помогите »));

Воспроизводится синусоида с амплитудой 1 и частотой дискретизации 1000 Гц: T = [0: 1 / SampleRate: 2]; у = 1 * грех (2 * пи * 200 * Т); звук (y, SampleRate);

Затем пользователю задается вопрос с введенным пользователем ответом: Q = input ('Вы слышите звук? [Y / n] n', 's');

Затем немного поищите, когда Q == 'n', если true, то звук будет повторяться и спрашивать пользователя снова, пока ответ не изменится с 'n' на 'y': в то время как Q == 'n', если strcmp (Q, 'n') disp ('Увеличьте громкость вашего компьютера.'); wait_sound; пауза (2); Q = input ('Вы слышите звук сейчас? [Y / n] n', 's'); конец конец

Затем наступает момент ожидания перед тем, как перейти к фактической проверочной части кода.

Шаг 3. Сделайте аудиометрию для правого уха

Проведите аудиометрию правого уха
Проведите аудиометрию правого уха

В этом коде цикл будет выполняться в течение 6 итераций с различными частотами и объемами для каждого отдельного уха. В зависимости от уха, которое вы хотите проверить, переменная Out будет иметь звук в одной строке и нули в другой.

Сначала вы создаете два пустых линейных вектора для записи частот и амплитуды звука, который слышит пользователь.

Эта часть находится в индексированном цикле for для любого количества звуков, которые вы хотите воспроизвести, если вы хотите рандомизировать воспроизводимые частоты и амплитуду.

F - частота: r = (rand * 10000); Fs = 250 + r; (функция rand заключается в создании случайно сгенерированной частоты) t - это определенное количество времени, которое определяется следующим образом: t = linspace (0, Fs * 2, Fs * 2); s - синусоида: s = sin (2 * pi * t * 1000); (это можно умножить на случайную величину w, чтобы получить случайное значение амплитуды / дБ для звуковой функции: w = rand;)

Выходные данные для правого уха: Out = [нули (размер (t)); s] ';

На выходах воспроизводится код: звук (Out, Fs)

Следующим шагом является создание пользовательского интерфейса с записью кода, слышал ли пользователь звук или нет.

Сначала вы создаете фигуру и определяете позицию, в которой она появится: gcbf = figure ('pos', [30 800 350 150]);

*** Если кнопка не отображается для вас, положение рисунка, как показано в массиве выше, может быть неправильным для вашего компьютера. Чтобы решить эту проблему, измените значения 30 и 800 на любое желаемое положение. Например, при наличии [0 0 350 150] появится кнопка графического интерфейса в нижнем левом углу монитора. ***

Кнопка переключения предназначена для записи, когда пользователь слышит звук, а положение и отображение можно настроить: tb = uicontrol ('Style', 'togglebutton', 'String', 'Нажмите кнопку, когда вы услышите звук', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Обратный вызов ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Этот конкретный код имеет возобновление кода, а пустые векторы добавляют значение, если кнопка нажата.

Затем создайте функцию ожидания для получения ответа кнопки и активации кода в кнопке при нажатии: h = randi ([4, 7]); uiwait (gcbf, h); (мы использовали случайную величину h, чтобы участники не могли обмануть и определить количество секунд, необходимое для ответа.)

После завершения цикла оставьте переменную частотного выхода (freq_right) в Гц, так что оставьте это в покое. Затем преобразуйте переменную dB_right из ампер в децибелы, используя уравнение: dB_right = mag2db (amp_right) * (- 1);

Затем добавьте функцию: закрыть все. это приведет к выходу из любых ненужных фигур, которые могли появиться.

Добавьте функцию паузы, около 10 секунд, чтобы дать пользователю время настроить и подготовиться к левому уху.

Шаг 4. Создайте тот же код для левого уха

Создайте тот же код для левого уха
Создайте тот же код для левого уха

Повторите код для правого уха, чтобы создать следующий сегмент, который проверяет левое ухо. Единственная разница заключается в изменении выходного канала, из которого будет поступать звук. Для этого измените порядок значений массива для переменной Out. Должно получиться так:

Out = [s; нули (размер (t))] ';

При этом звук не будет выходить из правого канала, а будет выходить только из левого канала!

Шаг 5: сделайте параллельный рисунок для сравнения данных

Сделайте параллельный рисунок для сравнения данных
Сделайте параллельный рисунок для сравнения данных
Сделайте параллельный рисунок для сравнения данных
Сделайте параллельный рисунок для сравнения данных

Теперь сделайте график, чтобы показать данные! Вы помещаете два графика в одну фигуру, так что сделайте это!

рисунок (1); подсюжет (1, 2, 1); *** подзаговор (1, 2, 2) для другого

Для каждого участка добавьте эти участки с определенными цветами и координатами. Эти участки выключаются на графике в зависимости от степени потери слуха. Вот так:

патч ([250 8000 8000 250], [25 25-10-10], [1.00, 0.89, 0.29]); % yellowhold на% Подсюжет теперь будет содержать следующие патчи и диаграммы рассеяния

текст (3173, 8, 'Нормальный');

патч ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % зеленый

текст (3577, 33, 'Мягкий');

патч ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % голубой

текст (2870, 48, 'Умеренный');

патч ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % синий

текст (1739, 62, «Умеренно суровый»);

патч ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % фиолетовый

текст (3142, 80, «Серьезный»);

патч ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % красный

текст (3200, 103, 'Глубокий')

Затем добавьте левую и правую диаграмму рассеяния! Мы можем предоставить вам общий средний показатель по стране! Здесь:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-значение, левое earNat_dBL = [10 3 10 15 10 15]; % y-значение

Nat_FreqR = [250 500 1000 2000 4000 8000]; % Правое ухо

Nat_dBR = [10 5 10 15 10 15];

Диаграммы разброса должны различать левую и правую точки. Можно было делать крестики и кружочки!

NL = разброс (Nat_FreqL, Nat_dBL, 'bx'); % отображает синие точки пересечения NR = разброс (Nat_FreqR, Nat_dBR, 'ro'); % отображает красные круги

Сделайте легенду для национального графика, назначив ее определенным переменным: legend ([NL NR], {'title1', 'title2'});

Установите предел x от 250 до 8000 Гц и предел y от -10 до 120 дБ. Не забудьте изменить вертикальные отметки с помощью yticks ()

Обозначьте ось x "Frequency Hz" и ось y "Pitch dB".

Переверните ось y, собирая ось с помощью ax = gca

Затем привяжите к нему свойство направления y с помощью: ax. YDir = 'reverse

Теперь код для второго примерно такой же, но без легенды и графиков точечных диаграмм с переменными из левого и правого тестов.

После всего этого добавьте функцию паузы примерно на 10 секунд, чтобы пользователь мог просмотреть свои результаты.

Шаг 6: Добавьте небольшое сообщение с благодарностью, если хотите

Добавьте небольшое сообщение с благодарностью, если хотите!
Добавьте небольшое сообщение с благодарностью, если хотите!

Это просто для удовольствия, если вы хотите, но добавьте еще imread (), imshow () и uiwait (msgbox ()) в знак благодарности и прощания! Кроме этого, не забудьте указать clf; закрыть все; clc; чтобы все закрыть. Хорошая работа, вы сделали это!

Рекомендуемые: