Мазмуну:

MATLAB аркылуу чоң кишилердин угуу тестин кантип жасаса болот: 6 кадам
MATLAB аркылуу чоң кишилердин угуу тестин кантип жасаса болот: 6 кадам

Video: MATLAB аркылуу чоң кишилердин угуу тестин кантип жасаса болот: 6 кадам

Video: MATLAB аркылуу чоң кишилердин угуу тестин кантип жасаса болот: 6 кадам
Video: What programming language to learn in 2023? Ranking, Comparison, Applications / Best Language 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';

Билдирүү кутучаларын жана чиймелердин чоң сүрөттөрүн көрсөтүү үчүн, биз Francesти көрсөтүүнүн бул кызыктуу ыкмасын колдондук. Жөн эле формат менен өзүңүз тандаган сүрөттү окуп чыгыңыз: variable = imread ('nameofpicture.jpg');

Андан кийин imshow (өзгөрмө) аркылуу көрсөтүүнү улантыңыз; ал сиз иштеткенде ал MatLabыңызда фигура катары көрүнөт!

Кийинки код боюнча колдонулган билдирүү кутучалары. uiwait () - бул код, uiwait үчүн тандалган фукция аяктаганга чейин токтотулган функция. Бул тандалган функция msgbox ('билдирүү', 'аталышы', 'сөлөкөтү')!

Сиз жогорудагы msgbox () форматын ээрчип жүргөнүңүздө, Фрэнсис айткан билдирүүлөрдү өзгөртө аласыз. Эгерде сиз Фрэнсистин сүрөттөрүн колдонууну кааласаңыз, "сөлөкөтүн" "бажы" деп белгилеп, үтүр менен жана сиз тандаган сүрөттүн сүрөтүнүн өзгөрмөсү менен улантыңыз! Сиз ошондой эле алдын ала коюлган "сөлөкөт" түрлөрүн колдоно аласыз. ал мындай көрүнүшү керек:

салам = imread ('Regular.jpg'); % жүктөлгөнshow файлынан сүрөттү окуйт (салам); uiwait (msgbox ('Саламатсызбы жана угуу тестибизди тандаганыңыз үчүн рахмат! Бул Фрэнсис жана ал бүгүн сизге тест менен жардам берет!', 'Кош келиңиз!', 'салт', салам));

Кийинки, колдонуучунун жашын сураган киргизүүнү түзүңүз!

UserAge = input ('Бул тестти баштоодон мурун, сиз канча жаштасыз? (Мис. 32, 56,…) n', 's');

ЭСКЕРТҮҮ: эгер цифралар кызык болсо жана өтө көп болсо, кодуңуз иштеп жатканда мурунку цифраларды алып салуу үчүн жабууну колдонуңуз.

Андан кийин алмаштыруучу корпустун структурасын түзүңүз! Колдонуучунун киргизүүсү сапта экенин жана аны сандык мааниге айлантуу керектигин унутпаңыз. Ошентип, str2double (UserAge) колдонуңуз. Ар бир иштин 4төн 6га чейин же 18ден 40ка чейинки курактары болууга тийиш. Мындай учурларда num2cell (массивди) колдонгон учурлардын бири үчүн туура экенин текшерүү үчүн өзгөрмөнү алуу үчүн:

которуу str2double (UserAge) % өзгөрмөлөрдү саптан num2cell сандарына алмаштырат (0: 3)

француздар = imread ('Egg.jpg');

imshow (француздар);

uiwait (msgbox ('Сиз түйүлдүксүз! Фрэнсис угуунун тестин дарыгердин ордуна жасашыңыз керек деп ойлойт!', 'Тест четке кагылды!', 'салт', француз));

кайтуу

Колдонуучунун кодду улантуусун алдын алуу үчүн мурунку топтор кайтарылышы керек.

Иштин структурасын бүтүрүүнү жана бардык фигураларды жабууну унутпаңыз.

2 -кадам: Колдонуучу үчүн аудиону текшериңиз

Колдонуучу үчүн аудиону текшериңиз
Колдонуучу үчүн аудиону текшериңиз

Бул сегмент катышуучунун түзмөгүндөгү үнү өтө тынч же өтө катуу болбошун камсыз кылуу үчүн бар.

Колдонуучуга кандайдыр бир эскертүү берүү үчүн билдирүү кутусу калкып чыгат жана үн менен улантуудан мурун колдонуучудан ырастоону күтөт: uiwait (msgbox ('Сыноо баштала электе, биз үнүңүздү текшерүү үчүн аудио тестти өткөргүбүз келет) туурабы! Даярбы? ',' Тура тур! ',' жардам ')));

Синус толкуну 1 амплитудасы жана 1000 Гц үлгү ылдамдыгы менен ойнотулат: 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 туш келди чоңдугуна көбөйтүлүшү мүмкүн: w = rand;)

Оң кулактын чыгышы: Out = [нөлдөр (size (t)); s] ';

Чыгаруулар код аркылуу ойнотулат: үн (Out, Fs)

Кийинки кадам - бул колдонуучу үндү уккан -укпаганын код жазуулары менен колдонуучунун интерфейсин түзүү.

Алгач сиз фигура жасап, фигура пайда боло турган позицияны аныктайсыз: gcbf = Figure ('pos', [30 800 350 150]);

*** Эгерде баскыч сиз үчүн көрүнбөсө, фигуранын орду, жогорудагы массивде көрсөтүлгөндөй, сиздин компьютериңиз үчүн туура эмес жайгашышы мүмкүн. Муну чечүү үчүн 30 жана 800 маанилерин каалаган позицияңызга өзгөртүңүз. Мисалы, [0 0 350 150] болгондо, монитордун ылдыйкы сол жагындагы gui баскычы пайда болот. ***

Колдонуучу үндү укканда жаздыруу үчүн которуштуруу баскычы жасалат жана позицияны жана дисплейди жөнгө салса болот: tb = uicontrol ('Style', 'togglebutton', 'String', 'Үндү укканда баскычты басыңыз', ' тег ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; жабуу (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) кошумча план

Ар бир субплот үчүн бул тактарды белгилүү түстөр жана координаттар менен кошуңуз. Бул бөлүм угуунун жоготуу даражасына жараша графиктен өчүрүлгөн. Ушундай:

жамаачы

текст (3173, 8, 'Кадимки');

жамаачы

текст (3577, 33, "Жумшак");

жамаачы

текст (2870, 48, "Орточо");

жамаачы

текст (1739, 62, "Орточо оор");

жамаачы

текст (3142, 80, "Оор");

жамаачы

текст (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'); % кызыл тегерекчелерди сызат

Улуттук графикти белгилүү өзгөрмөлөргө ыйгаруу менен легенда жасаңыз: легенда ([NL NR], {'title1', 'title2'});

250дөн 8000 Гцке чейин х чегиңизди жана 10 чекиттен 120 дБга чейин у чегиңизди коюңуз. Yticks () менен тик кенелериңизди өзгөртүүнү унутпаңыз.

X огуңузду "Frequency Hz" жана y огуңузду "Pitch dB" деп белгилеңиз.

Ax = gca менен огун чогултуу менен y огун тескери буруңуз

Андан кийин y багытынын касиетин ага байлаңыз: ax. YDir = 'артка

Эми экинчисинин коду болжол менен бирдей, бирок легендасыз жана чачырандыларды сол жана оң сыноолордун өзгөрмөлөрү менен сүрөттөө.

Мунун баарынан кийин, колдонуучу алардын жыйынтыгын көрө алышы үчүн 10 секундга жакын тыныгуу функциясын кошуңуз.

6 -кадам: Кааласаңыз, бир аз рахмат билдирүүсүн кошуңуз

Кааласаңыз, бир аз рахмат билдирүүсүн кошуңуз!
Кааласаңыз, бир аз рахмат билдирүүсүн кошуңуз!

Кааласаңыз, бул ырахат үчүн, бирок рахмат жана коштошуу үчүн башка imread (), imshow () жана uiwait (msgbox ()) кошуңуз! Андан башка, clf коюуну унутпаңыз; баарын жап; clc; баарын жабуу үчүн. Жакшы иш кылдыңыз!

Сунушталууда: