Съдържание:

Как да направите тест за слуха на възрастни с помощта на MATLAB: 6 стъпки
Как да направите тест за слуха на възрастни с помощта на MATLAB: 6 стъпки

Видео: Как да направите тест за слуха на възрастни с помощта на MATLAB: 6 стъпки

Видео: Как да направите тест за слуха на възрастни с помощта на MATLAB: 6 стъпки
Видео: "Ил-2 Штурмовик" нового поколения - "Битва за Сталинград" и "Битва за Москву" #13 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 (променлива); след това той ще се покаже като фигура във вашия MatLab, когато го стартирате!

Следват полетата за съобщения, които се използват в целия код. uiwait () е функция, при която кодът се спира, докато функцията, избрана за uiwait, приключи. Тази избрана функция е msgbox ('message', 'title', 'icon')!

Можете да се чувствате свободни да промените съобщенията, които Франсис казва, стига да следвате формата msgbox () по -горе. Ако искате да използвате снимките на Frances, маркирайте „icon“като „custom“и продължете със запетая и променливата на imread на избраната от вас картина! Можете също да използвате предварително зададените типове „икони“. трябва да изглежда така:

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

След това създайте вход, който пита възрастта на потребителя така!

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

ЗАБЕЛЕЖКА: ако цифрите са странни и има твърде много, използвайте close all, за да премахнете по -ранните цифри, докато кодът ви работи

След това създайте структура на превключвател! Не забравяйте, че потребителският вход е в низ и трябва да го преобразувате в числова стойност. Затова използвайте str2double (UserAge). Всеки случай трябва да има диапазон от възрасти като 4 до 6 или 18 до 40. за да има променливата за потвърждаване като вярна за един от случаите използвайте num2cell (масив) по следния начин:

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

frances = imread ('Egg.jpg');

имишоу (Франция);

uiway

връщане

По -ранните групи трябва да бъдат върнати, за да се попречи на потребителя да продължи с кода.

Не забравяйте да приключите структурата на кутията и да затворите всички фигури.

Стъпка 2: Тествайте аудио за потребителя

Тествайте аудиото за потребителя
Тествайте аудиото за потребителя

Този сегмент съществува, за да се гарантира, че звукът на участника на неговото устройство не е нито твърде тих, нито твърде силен.

За да предупредите потребителя, се появява кутия със съобщение и изчаква потвърждение от потребителя, преди да продължи със звука: uiwait (msgbox ('Преди да започне тестът, бихме искали да направим аудио тест, за да се уверим, че силата на звука ви прав ли е! Готов? ',' Изчакай! ',' помощ '));

Възпроизвежда се синусова вълна с амплитуда 1 и честота на дискретизация 1000 Hz: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); звук (y, SampleRate);

След това на потребителя се задава въпрос с отговор, въведен от потребителя: Q = вход („Чувате ли звука? [Y/n] n ',' s ');

След това има време за търсене, когато Q == 'n', ако е вярно, тогава звукът се повтаря и пита потребителя отново, докато отговорът не се промени от 'n' на 'y': докато Q == 'n', ако strcmp (Q, 'n') disp ('Увеличете силата на звука на компютъра си.'); wait_sound; пауза (2); Q = вход ('Чувате ли звука сега? [Y/n] n', 's'); край край

След това има момент на изчакване, преди да се пристъпи към действителната изпитна част на кода.

Стъпка 3: Направете тест за аудиометрия за дясното ухо

Направете тест за аудиометрия за дясното ухо
Направете тест за аудиометрия за дясното ухо

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

Първо правите два празни вектора, за да запишете честотите и амплитудата на звука, които потребителят чува.

Тази част е в индексиран цикъл за колкото и звуци да искате да възпроизведете, ако искате да произволно излъчвате честотите и амплитудата.

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

Изходът за дясното ухо е: Out = [нули (размер (t)); с]';

Изходите се възпроизвеждат чрез кода: звук (Out, Fs)

Следващата стъпка е да създадете потребителски интерфейс с кодови записи независимо дали потребителят е чул звука или не.

Първо правите фигура и определяте позицията, в която фигурата ще се появи: gcbf = figure ('pos', [30 800 350 150]);

*** Ако бутонът не се появи за вас, позицията на фигурата, както е показано от масива по -горе, може да бъде неправилно позиционирана за вашия компютър. За да разрешите това, променете стойностите 30 и 800 на желаната позиция. Например, ако [0 0 350 150] ще породи бутона gui в долния ляв ъгъл на монитора. ***

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

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

След като цикълът приключи, запазете честотната изходна променлива (freq_right) в Hz, така че я оставете на мира. След това преобразувайте променливата dB_right от усилватели в децибели, като използвате уравнението: dB_right = mag2db (amp_right)*(-1);

След това добавете функцията: затвори всички. това ще излезе от всички ненужни цифри, които може да са се появили.

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

Стъпка 4: Създайте същия код за лявото ухо

Създайте същия код за лявото ухо
Създайте същия код за лявото ухо

Повторете кода, използван за дясното ухо, за да направите следващия сегмент, който тества лявото ухо. Единствената разлика е промяната от кой изходен канал ще дойде звукът. За да направите това, обърнете реда на стойностите на масива за променливата 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 on % Подсхемата вече ще съдържа следните кръпки и разпръснати графики

текст (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-стойност, ляво ухоNat_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'); % начертава червени кръгове

Направете легенда за националната графика, като я присвоите на конкретни променливи: легенда ([NL NR], {'title1', 'title2'});

Задайте своя лимит x от 250 до 8000 Hz и вашия y граница от -10 до 120 dB. Не забравяйте да промените вертикалните си отметки с yticks ()

Поставете етикет на вашата ос x „Честота Hz“и оста на y „Наклон dB“.

Обърнете оста y, като съберете оста с ax = gca

След това свържете свойството на посоката y с него с: ax. YDir = 'reverse

Сега кодът за втория е приблизително същият, но без легендата и графиката на скатерните графики с променливите от левия и десния тест.

След всичко това добавете функция за пауза за около 10 секунди, така че потребителят да може да разгледа резултатите си.

Стъпка 6: Добавете малко благодарствено съобщение, ако желаете

Добавете малко благодарствено съобщение, ако желаете!
Добавете малко благодарствено съобщение, ако желаете!

Това е само за забавление, ако искате, но добавете друг imread (), imshow () и uiwait (msgbox ()) за благодарност и сбогом! Освен това, не забравяйте да поставите clf; затвори всички; clc; за да затворите всичко. Браво, свършихте го!

Препоръчано: