Mundarija:

MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak: 6 qadam
MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak: 6 qadam

Video: MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak: 6 qadam

Video: MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak: 6 qadam
Video: Musiqiy ritmni ixtiyoriy anglab olish 2024, Noyabr
Anonim
MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak
MATLAB yordamida kattalar eshitish testini qanday o'tkazish kerak

Ogohlantirishlar: Bizning testimiz tibbiy tashxis emas va bunday ishlatilmasligi kerak. Eshitishni aniq o'lchash uchun tibbiy mutaxassisga murojaat qiling.

Bizda mavjud bo'lgan materiallardan foydalanib, bizning guruh eshitish testini o'tkazdi. Bizning testimiz kattalar va o'smirlar uchun mo'ljallangan, chunki yosh bolalarning eshitish qobiliyati har xil bo'ladi va faqat professional tomonidan o'lchanishi kerak.

Bu loyiha bizning BME MATLAB sinfimizda ishlayotganda va sinus to'lqinlari chiqargan tovushlar bilan o'ynaganda ilhomlangan. Biz sinus to'lqinni turli xil maydonlarda ovoz chiqarish uchun qanday o'zgartirish mumkinligi bilan qiziqdik.

Bu loyiha uchun bizga faqat MATLAB R2018b ishlaydigan kompyuter va quloqchinlar kerak edi. Biz dasturni kulgili qilish uchun maskot sifatida Frenseni o'ziga xos personajini kiritdik.

1 -qadam: Foydalanuvchining yoshini tahlil qilish uchun foydalanuvchi yozuvini yarating

Foydalanuvchining yoshini tahlil qilish uchun foydalanuvchi yozuvini yarating
Foydalanuvchining yoshini tahlil qilish uchun foydalanuvchi yozuvini yarating
Foydalanuvchining yoshini tahlil qilish uchun foydalanuvchi yozuvini yarating
Foydalanuvchining yoshini tahlil qilish uchun foydalanuvchi yozuvini yarating

Ushbu kodning birinchi qismi - bu foydalanuvchilarning eshitish testini o'tkazish uchun etarlimi yoki yo'qligini aniqlaydigan kirish kiritish. Nega buni bizning maskotimiz Fransisning bema'ni rasmlarini qo'shib qilmasligingiz kerak? Buni amalga oshirish uchun zip faylini yuklab oling va keyin uni kodga tortib olinadigan faylga chiqarib oling. Faylni chizmalar bilan to'la -to'kis yuklashga o'ting:

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

Xabar qutilari va chizmalarning katta rasmlarini taqdim etish uchun biz sizga Frensisni ko'rsatishning qiziqarli usulini qo'lladik. O'zingiz xohlagan rasmni quyidagi formatda o'qing: o'zgaruvchi = imread ('nameofpicture.jpg');

Keyin imshow (o'zgaruvchi) yordamida ko'rsatishni davom eting; u ishga tushirilganda MatLab -da raqam sifatida namoyon bo'ladi!

Keyingi - kod davomida ishlatiladigan xabarlar qutilari. uiwait () - bu funktsiya, uiwait uchun tanlangan funktsiya tugagunga qadar to'xtatiladi. Bu tanlangan funktsiya msgbox ('xabar', 'sarlavha', 'belgi')!

Agar siz yuqoridagi msgbox () formatiga amal qilsangiz, Frensis aytadigan xabarlarni o'zgartirishingiz mumkin. Agar siz Frances rasmlaridan foydalanmoqchi bo'lsangiz, "ikonka" belgisini "odatiy" deb belgilang va siz tanlagan rasmning imread o'zgaruvchisi bilan vergul va davom ettiring! Oldindan o'rnatilgan "ikonka" turlarini ham ishlatishingiz mumkin. u shunday ko'rinishi kerak:

salom = imread ('Regular.jpg'); % yuklanganimshow faylidagi rasmni o'qiydi (salom); uiwait (msgbox ('Salom va eshitish testimizni tanlaganingiz uchun tashakkur! Bu Frensis va u bugun sizning testingizda sizga yordam beradi!', 'Xush kelibsiz!', 'odat', salom));

Keyin foydalanuvchining yoshini so'raydigan kirishni yarating!

UserAge = input ('Bu testni boshlashdan oldin, siz necha yoshdasiz (masalan, 32, 56,…) n', 's');

QAYD: agar raqamlar g'alati bo'lsa va juda ko'p bo'lsa, sizning kodingiz ishga tushganda oldingi raqamlarni olib tashlash uchun hammasini yopish tugmachasini ishlating.

Keyin kommutator korpusining tuzilishini yarating! Shuni esda tutingki, foydalanuvchi kiritish satrda va siz uni raqamli qiymatga aylantirishingiz kerak. Shunday qilib, str2double (UserAge) dan foydalaning. Har bir holatda 4 dan 6 gacha yoki 18 dan 40 gacha bo'lgan yosh oralig'i bo'lishi kerak. O'zgaruvchini haqiqiyligini tekshirish uchun num2cell (massiv) dan foydalaning:

o'tish str2double (UserAge) % o'zgaruvchini mag'lubiyatdan raqamli qiymatga o'zgartiradi num2cell (0: 3)

fransuzlar = imread ('Egg.jpg');

imshow (fransuzlar);

uiwait (msgbox ('Siz homilasiz! Frensis sizning eshitish testingizni shifokor bilan o'tkazishingiz kerak deb o'ylaydi!', 'Test rad etildi!', 'odat', fransuz));

qaytish

Foydalanuvchining kodni ishlatishiga yo'l qo'ymaslik uchun oldingi guruhlar qaytarilishi kerak.

Ish tuzilishini tugatishni va barcha raqamlarni yopishni unutmang.

2 -qadam: Ovozni foydalanuvchi uchun tekshiring

Ovozni foydalanuvchi uchun sinab ko'ring
Ovozni foydalanuvchi uchun sinab ko'ring

Bu segment ishtirokchining o'z qurilmasidagi ovozi na jim va na baland ovozda bo'lishini ta'minlash uchun mavjud.

Foydalanuvchiga ogohlantirish berish uchun xabar qutisi paydo bo'ladi va ovozni davom ettirishdan oldin foydalanuvchidan tasdiqni kutadi: uiwait (msgbox ("Sinov boshlanishidan oldin, biz" ovoz balandligiga ishonch hosil qilish uchun "audio test" o'tkazmoqchimiz). to'g'ri! Tayyormi? ',' Kutib tur! ',' yordam '));

Sinus to'lqin 1 amplitudasi va 1000 Gts namuna tezligi bilan o'ynaladi: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); ovoz (y, SampleRate);

Keyin foydalanuvchiga foydalanuvchi kiritgan javob bilan savol beriladi: Q = kirish ('Ovozni eshitasizmi? [Y/n] n', 's');

Q == 'n', agar rost bo'lsa, ovoz takrorlanadi va javob 'n' dan 'y' ga o'zgarguncha foydalanuvchidan yana so'raydi: Q == 'n' bo'lsa strcmp (Q, 'n') disp ('Kompyuteringiz ovozini balandroq qiling.'); kutish_sound; pauza (2); Q = kiritish ('Siz hozir ovozni eshitayapsizmi? [Y/n] n', 's'); oxiri oxiri

Kodning haqiqiy tekshiruv qismiga o'tishdan oldin kutish kerak.

3 -qadam: O'ng quloq uchun audiometriya testini o'tkazing

O'ng quloq uchun audiometriya testini o'tkazing
O'ng quloq uchun audiometriya testini o'tkazing

Ushbu kodda, har bir quloq uchun turli chastotalar va tovushlar bilan 6 ta takrorlash uchun pastadir ishlaydi. Siz tekshirmoqchi bo'lgan quloqqa qarab, Out o'zgaruvchisi bir qatorda tovush, ikkinchisida nol bo'ladi.

Birinchidan, foydalanuvchi eshitadigan tovush chastotalari va amplitudasini yozib olish uchun ikkita bo'sh chiziqli vektor yaratasiz.

Agar siz chastotalar va amplitudani tasodifiy tanlashni xohlasangiz, siz eshitmoqchi bo'lgan tovushlar soni uchun indekslangan.

F - chastota: r = (rand*10000); Fs = 250 + r; (rand funktsiyasi tasodifiy hosil qilingan chastotani yaratishdir) t ma'lum vaqt davom etadi: t = linspace (0, Fs*2, Fs*2); s - sinus to'lqin: s = sin (2*pi*t*1000); (bu tovush funktsiyasi uchun tasodifiy amplituda/dB qiymatini yaratish uchun w tasodifiy o'zgaruvchiga ko'paytirilishi mumkin: w = rand;)

O'ng quloq uchun chiqish: Out = [nol (o'lcham (t)); s] ';

Chiqish kod orqali eshitiladi: ovoz (Out, Fs)

Keyingi qadam, foydalanuvchi ovozni eshitgan yoki eshitmaganligini kodli yozuvlar bilan foydalanuvchi interfeysini yaratishdir.

Avval siz raqam yasaysiz va bu rasm paydo bo'ladigan joyni aniqlaysiz: gcbf = raqam ('pos', [30 800 350 150]);

*** Agar tugma siz uchun ko'rinmasa, yuqoridagi qator ko'rsatganidek, rasmning joylashuvi kompyuteringiz uchun noto'g'ri joylashtirilgan bo'lishi mumkin. Buni hal qilish uchun 30 va 800 qiymatlarini xohlagan pozitsiyasiga o'zgartiring. Masalan, [0 0 350 150] bo'lsa, monitorning chap pastki qismidagi gui tugmasi paydo bo'ladi. ***

Foydalanuvchi ovozni eshitganda yozib olish uchun tugmachani bosadi va joylashuv va displeyni sozlash mumkin: tb = uicontrol ('Style', 'togglebutton', 'String', 'Ovoz eshitilganda tugmani bosing', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; yopish (gcbf); '); Ushbu kodda rezyume kodi mavjud va tugma bosilsa bo'sh vektorlar qiymat qo'shadi.

Keyin tugmachaning javobini qabul qilish uchun kutish funktsiyasini yarating va tugma bosilganda kodni faollashtiring: h = randi ([4, 7]); uiwait (gcbf, h); (biz h tasodifiy o'zgaruvchini qildik, shuning uchun ishtirokchilar aldashga va javob berish uchun zarur bo'lgan soniyalar sonini aniqlay olmaydilar.)

Loop tugagandan so'ng, chastotali chiqish o'zgaruvchisini (freq_right) Hz da saqlang, shuning uchun uni yolg'iz qoldiring. Keyin dB_right o'zgaruvchisini amperdan desibelga quyidagi tenglama yordamida aylantiring: dB_right = mag2db (amp_right)*(-1);

Keyin funktsiyani qo'shing: barchasini yoping. bu paydo bo'lishi mumkin bo'lgan keraksiz raqamlardan chiqib ketadi.

Foydalanuvchiga chap quloqni sozlash va tayyorlash uchun vaqt berish uchun taxminan 10 soniya pauza funksiyasini qo'shing.

4 -qadam: Chap quloq uchun bir xil kodni yarating

Chap quloq uchun bir xil kodni yarating
Chap quloq uchun bir xil kodni yarating

Chap quloqni tekshiradigan keyingi segmentni yaratish uchun o'ng quloq uchun ishlatilgan kodni takrorlang. Yagona farq - ovoz qaysi chiqish kanalidan chiqishini o'zgartirish. Buning uchun Out o'zgaruvchisining massiv qiymatlari tartibini aylantiring. Bu shunday ko'rinishi kerak:

Chiqish = [s; nol (o'lcham (t))] ';

Shunday qilib, o'ng kanaldan, chap kanaldan boshqa ovoz chiqmaydi!

5-qadam: Ma'lumotlarni solishtirish uchun yonma-yon rasm yarating

Ma'lumotlarni solishtirish uchun yonma-yon rasm yarating
Ma'lumotlarni solishtirish uchun yonma-yon rasm yarating
Ma'lumotlarni solishtirish uchun yonma-yon rasm yarating
Ma'lumotlarni solishtirish uchun yonma-yon rasm yarating

Endi ma'lumotlarni ko'rsatish uchun grafik tuzing! Siz ikkita grafikni bitta rasmga joylashtiryapsiz, shunday qiling!

rasm (1); kichik reja (1, 2, 1); *** ikkinchisining pastki qismi (1, 2, 2)

Har bir kichik uchastka uchun, bu ranglarni va koordinatalarni aniqlang. Bu bo'lim eshitish qobiliyatining qanchalik katta bo'lishiga bog'liq. Xuddi shunday:

yamoq ([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); % yellowhold on % Subplotda endi quyidagi yamaqlar va tarqatish joylari bo'ladi

matn (3173, 8, "Oddiy");

yamoq ([250 8000 8000 250], [40 40 25 25], [0 0.75 0.25]); % yashil

matn (3577, 33, "Yumshoq");

yamoq ([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % ko'k

matn (2870, 48, "O'rtacha");

yamoq ([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % ko'k

matn (1739, 62, "O'rtacha og'ir");

yamoq ([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % siyohrang

matn (3142, 80, "Og'ir");

yamoq ([250 8000 8000 250], [120 120 90 90], [0.96, 0.24, 0.24]); % qizil

matn (3200, 103, "chuqur")

Keyin chap va o'ngga tarqalish uchastkalarini qo'shing! Biz siz uchun umumiy milliy o'rtacha ko'rsatkichni taqdim eta olamiz! Bu yerda:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-qiymati, chap earNat_dBL = [10 3 10 15 10 15]; % y-qiymati

Nat_FreqR = [250 500 1000 2000 4000 8000]; % o'ng quloq

Nat_dBR = [10 5 10 15 10 15];

Tarqatish rejalari chap va o'ng nuqtalarni ajratib ko'rsatishi kerak. Siz xoch va doiralar qilishingiz mumkin edi!

NL = tarqatish (Nat_FreqL, Nat_dBL, 'bx'); % chiziqlar ko'k kesish nuqtalariNR = tarqatish (Nat_FreqR, Nat_dBR, 'ro'); % qizil doiralarni chizadi

Milliy grafikni ma'lum o'zgaruvchilarga belgilab afsona yarating: afsona ([NL NR], {'title1', 'title2'});

X chegarangizni 250 dan 8000 Gts gacha va y chegarangizni -10 dan 120 dB gacha sozlang. Vertikal shomilingizni yticks () bilan o'zgartirishni unutmang.

X o'qini "Hz chastotasi" va y o'qini "Pitch dB" deb belgilang.

Ax o'qini ax = gca bilan yig'ib, y o'qini teskari aylantiring

Keyin y yo'nalishi xususiyatini unga bog'lang: ax. YDir = 'teskari

Endi ikkinchisining kodi taxminan bir xil, lekin afsonasiz va tarqatish nuqtalarini chap va o'ngdagi o'zgaruvchilar bilan chizish.

Bularning barchasidan so'ng, foydalanuvchi o'z natijalarini ko'rishi uchun taxminan 10 soniya pauza funksiyasini qo'shing.

6 -qadam: Agar xohlasangiz, sizga bir oz rahmat xabarini qo'shing

Agar xohlasangiz, kichik rahmat xabarini qo'shing!
Agar xohlasangiz, kichik rahmat xabarini qo'shing!

Agar xohlasangiz, rahmat va xayrlashish uchun boshqa imread (), imshow () va uiwait (msgbox ()) qo'shsangiz, bu faqat o'yin -kulgi uchun! Bundan tashqari, clf qo'yishni unutmang; hammasini yopish; clc; hamma narsani yopish uchun. Yaxshi ish qildingiz!

Tavsiya: