Բովանդակություն:

Ինչպես կատարել մեծահասակների լսողության թեստ MATLAB- ի միջոցով. 6 քայլ
Ինչպես կատարել մեծահասակների լսողության թեստ MATLAB- ի միջոցով. 6 քայլ

Video: Ինչպես կատարել մեծահասակների լսողության թեստ MATLAB- ի միջոցով. 6 քայլ

Video: Ինչպես կատարել մեծահասակների լսողության թեստ MATLAB- ի միջոցով. 6 քայլ
Video: ԳՈՒՆԱՅԻՆ ԹԵՍՏ, ՈՐԸ ԿԱՍԻ ՔՈ ՀՈԳԵՎՈՐ ՏԱՐԻՔԸ 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 է («հաղորդագրություն», «վերնագիր», «պատկերակ»):

Դուք կարող եք ազատորեն փոխել հաղորդագրությունները, որոնք ասում է Ֆրենսիսը, եթե հետևեք վերը նշված msgbox () ձևաչափին: Եթե ցանկանում եք օգտագործել Ֆրենսիսի նկարները, «պատկերակը» նշեք որպես «սովորույթ» և շարունակեք դա ստորակետով և ձեր ընտրած նկարի ընթերցվածի փոփոխականով: Կարող եք նաև օգտագործել նախանշված «պատկերակի» տեսակները: այն պետք է ունենա այս տեսքը.

hi = imread ('Regular.jpg'); % կարդում է պատկերը վերբեռնված ֆայլից ցուցադրում (բարև); uiwait (msgbox («Բարև և շնորհակալություն մեր լսողության թեստը ընտրելու համար! Սա Ֆրենսիսն է, և նա այսօր կօգնի ձեզ ձեր թեստում»), «Բարի գալուստ», «սովորական», բարև));

Հաջորդը ստեղծեք մուտքագրում, որը նման է օգտագործողի տարիքին:

UserAge = մուտքագրում («Մինչև այս թեստը սկսելը, քանի՞ տարեկան եք (տարի) (օրինակ ՝ 32, 56,…) n ',' s ');

NOTԱՆՈԹՈԹՅՈՆ. Եթե թվերը տարօրինակ են և շատ են, օգտագործեք փակել բոլորը, որպեսզի ձեր կոդն աշխատելիս հեռացնեք ավելի վաղ թվերը

Այնուհետեւ ստեղծեք անջատիչի գործի կառուցվածքը: Հիշեք, որ օգտագործողի մուտքագրումը տողում է, և դուք պետք է այն վերածեք թվային արժեքի: Այսպիսով, օգտագործեք str2double (UserAge): Յուրաքանչյուր դեպք պետք է ունենա տարիքային միջակայք, ինչպիսիք են 4 -ից 6 -ը կամ 18 -ից 40 -ը: գործերից մեկի դեպքում որպես ճշմարիտ հաստատելու համար փոփոխականը պետք է օգտագործի num2cell (զանգված), այսպես.

switch str2double (UserAge) % -ը փոփոխում է տողը տողից թվային արժեքի դեպքում num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (ֆրենսիս);

uiwait (msgbox («Դուք պտուղ եք. Ֆրենսիսը կարծում է, որ ձեր լսողության թեստը պետք է կատարեք բժշկի մոտ», «Test Denied!», «custom», frances));

վերադարձ

Նախկին խմբերը պետք է վերադարձվեն, որպեսզի օգտագործողը չկարողանա շարունակել ծածկագիրը:

Հիշեք, որ ավարտեք գործի կառուցվածքը և փակեք բոլոր թվերը:

Քայլ 2: Փորձարկեք ձայնը օգտվողի համար

Փորձարկեք ձայնը օգտվողի համար
Փորձարկեք ձայնը օգտվողի համար

Այս հատվածը գոյություն ունի `ապահովելու համար, որ մասնակցի ձայնն իրենց սարքում ոչ շատ հանգիստ է, ոչ էլ շատ բարձր:

Օգտվողին ինչ -որ նախազգուշացում տալու համար հայտնվում է հաղորդագրության տուփ, որը սպասում է օգտվողի հաստատմանը ՝ ձայնը շարունակելուց առաջ: ճիշտ է: Պատրա՞ստ եք »,« Սպասիր »,« օգնություն »));

Սինուսային ալիք է հնչում 1 ամպլիտուդով և 1000 Հց ընտրանքի արագությամբ ՝ T = [0: 1/SampleRate: 2]; y = 1*մեղք (2*pi*200*T); ձայն (y, SampleRate);

Այնուհետև օգտվողին տրվում է հարց ՝ օգտագործողի մուտքագրված պատասխանով. Q = մուտքագրում («Կարո՞ղ եք լսել ձայնը: [y/n] n ',' s ');

Այնուհետև որոշ ժամանակ փնտրում ենք, երբ Q == 'n', եթե ճշմարիտ է, ապա ձայնը կրկնում է և նորից հարցնում օգտվողին, մինչև պատասխանը 'n' -ից դառնա 'y': մինչդեռ Q == 'n' եթե strcmp (Q, 'n') disp ('Ավելի բարձրացրեք ձեր համակարգչի ձայնը'); սպասման_ձայն; դադար (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 = մեղք (2*pi*t*1000); (սա կարելի է բազմապատկել w պատահական փոփոխականով `ձայնային գործառույթի համար պատահական ամպլիտուդ/դԲ արժեք ստեղծելու համար. w = rand;)

Աջ ականջի ելքը հետևյալն է ՝ Out = [զրո (չափ (t)); s] ';

Ելքները նվագարկվում են կոդի միջոցով `ձայն (դուրս, Fs)

Հաջորդ քայլն այն է, որ օգտագործողի ինտերֆեյսը կազմվի կոդի գրառումների հետ `օգտվողը լսել է ձայնը, թե ոչ:

Սկզբում դուք կազմեք գործիչ և որոշեք այն դիրքը, որում հայտնվելու է պատկերը. Gcbf = գործիչ ('pos', [30 800 350 150]);

*** Եթե կոճակը ձեզ չի երևում, գործչի դիրքը, ինչպես ցույց է տրված վերևի զանգվածում, կարող է սխալ տեղադրվել ձեր համակարգչի համար: Սա լուծելու համար փոխեք 30 և 800 արժեքները ՝ ցանկացած դիրքի, որը ցանկանում եք: Օրինակ, [0 0 350 150] ունենալը կբացահայտի մոնիտորի ներքևի ձախ մասում գտնվող gui կոճակը: ***

Փոփոխական կոճակը ստեղծվում է ձայնագրելու համար, երբ օգտվողը լսում է ձայնը, և դիրքն ու ցուցադրումը կարող են հարմարեցվել. պիտակ ',' togglebutton1 ',' Պաշտոն ', [30 60 300 40],' Հետադարձ պատասխան ',' 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 փոփոխականի զանգվածների արժեքների կարգը: Այն պետք է ունենա այս տեսքը.

Դուրս = [վ; զրոներ (չափ (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-value, ձախ ականջNat_dBL = [10 3 10 15 10 15 15]; % y- արժեք

Nat_FreqR = [250 500 1000 2000 4000 8000]; % աջ ականջ

Nat_dBR = [10 5 10 15 10 15];

Theրված գծապատկերները պետք է տարբերեն ձախ և աջ կետերը: Դուք կարող եք խաչեր և շրջանակներ կատարել:

NL = ցրել (Nat_FreqL, Nat_dBL, 'bx'); % գծապատկերներ կապույտ խաչի միավորներ NR = ցրում (Nat_FreqR, Nat_dBR, 'ro'); % պատկերում է կարմիր շրջանակներ

Ստեղծեք լեգենդ ազգային գրաֆիկի համար `այն վերագրելով որոշակի փոփոխականների. Լեգենդ ([NL NR], {'title1', 'title2'});

Սահմանեք ձեր x սահմանաչափը 250 -ից մինչև 8000 Հց, իսկ ձեր y սահմանը `-10 -ից մինչև 120 դԲ: Հիշեք, որ ձեր ուղղահայաց տիզերը փոխեք իտիկներով ()

Պիտակավորեք ձեր x առանցքը «Հաճախականություն Hz» և ձեր y առանցքը ՝ «Pitch dB»:

Հակադարձեք y առանցքը ՝ առանցքը հավաքելով ax = gca

Այնուհետև y ուղղության հատկությունը կապեք դրանով ՝ ax. YDir = 'հակառակ

Այժմ երկրորդի ծածկագիրը մոտավորապես նույնն է, բայց առանց լեգենդի և ձախ և աջ թեստերի փոփոխականներով գծապատկերների գծագրում:

Այս ամենից հետո ավելացրեք մոտ 10 վայրկյան դադար, որպեսզի օգտվողը կարողանա նայել դրանց արդյունքներին:

Քայլ 6. Եթե ցանկանում եք, ավելացրեք մի փոքր շնորհակալական հաղորդագրություն:

Ավելացրեք մի փոքր շնորհակալական հաղորդագրություն, եթե ցանկանում եք
Ավելացրեք մի փոքր շնորհակալական հաղորդագրություն, եթե ցանկանում եք

Սա պարզապես զվարճանքի համար է, եթե ցանկանում եք, բայց շնորհակալության և հրաժեշտի համար ավելացնել մեկ այլ imread (), imshow () և uiwait (msgbox ()): Բացի այդ, հիշեք, որ տեղադրեք clf; փակել բոլորը; clc; ամեն ինչ փակելու համար: Լավ աշխատանք, դու դա արեցիր:

Խորհուրդ ենք տալիս: