Სარჩევი:

როგორ გააკეთოთ მოზრდილთა სმენის ტესტი 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';

იმისათვის, რომ წარმოგიდგინოთ შეტყობინებების ყუთები და ნახატების დიდი სურათები, ჩვენ გამოვიყენეთ ეს სახალისო მეთოდი ფრანცისას ჩვენებისათვის. უბრალოდ ამოიღეთ თქვენი არჩევანის სურათი ფორმატით: ცვლადი = imread ('nameofpicture.jpg');

შემდეგ გააგრძელეთ მისი ჩვენება imshow (ცვლადი) გამოყენებით; ის გამოჩნდება როგორც ფიგურა თქვენს MatLab– ში, როდესაც გაუშვებთ მას!

შემდეგი არის შეტყობინებების ყუთები, რომლებიც გამოიყენება მთელ კოდში. uiwait () არის ფუნქცია, რომელშიც კოდი შეჩერდება მანამ, სანამ უივეიტისთვის არჩეული ფუნქცია არ დასრულდება. ეს არჩეული ფუნქციაა msgbox ('შეტყობინება', 'სათაური', 'ხატი')!

შეგიძლიათ თავისუფლად შეცვალოთ შეტყობინებები, რომელსაც ფრენსის ამბობს, სანამ დაიცავთ msgbox () ფორმატს ზემოთ. თუ გსურთ გამოიყენოთ ფრენსისის სურათები, დაასახელეთ "ხატი" როგორც "ჩვეულება" და გააგრძელეთ ეს მძიმით და თქვენს მიერ არჩეული სურათის წაკითხვის ცვლადით! თქვენ ასევე შეგიძლიათ გამოიყენოთ წინასწარ განსაზღვრული 'ხატის' ტიპები. ასე უნდა გამოიყურებოდეს:

hi = imread ('Regular.jpg'); % კითხულობს სურათს ატვირთული ფაილიდან ჩვენება (გამარჯობა); uiwait (msgbox ("გამარჯობა და მადლობა ჩვენი სმენის ტესტის არჩევისთვის! ეს არის ფრენსის და ის დაგეხმარება დღეს შენს გამოცდაში!", "მოგესალმებით!", "საბაჟო", გამარჯობა));

შემდეგი შექმენით შეყვანა, რომელიც მომხმარებლის ასაკს ჰკითხავს ასე!

UserAge = შეყვანა ('სანამ ამ ტესტს დავიწყებდით, რამდენი წლის ხართ? (მაგალითად, 32, 56,…) n', 's');

შენიშვნა: თუ ფიგურები უცნაურია და ძალიან ბევრია, გამოიყენეთ დახურული ყველა, რათა ამოიღოთ ადრინდელი ფიგურები, როდესაც კოდი მუშაობს

შემდეგ შექმენით გადართვის საქმის სტრუქტურა! გახსოვდეთ, რომ მომხმარებლის შეყვანა არის სტრიქონში და თქვენ უნდა გადააკეთოთ ის რიცხვით მნიშვნელობად. ამიტომ გამოიყენეთ str2double (UserAge). თითოეულ შემთხვევას უნდა ჰქონდეს ასაკობრივი დიაპაზონი, როგორიცაა 4 -დან 6 -მდე ან 18 -დან 40 წლამდე. ცვლადი რომ იყოს ჭეშმარიტი ერთ -ერთ შემთხვევაში, გამოიყენეთ num2cell (მასივი), როგორიცაა:

გადართვა str2double (UserAge) % ცვლის ცვლადს სტრიქონიდან რიცხვითი მნიშვნელობის შემთხვევაში num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (ფრენსის);

uiwait (msgbox ("თქვენ ხართ ნაყოფი! ფრენსის ფიქრობს, რომ თქვენ უნდა გაიაროთ სმენის ტესტი ექიმთან!", "ტესტი უარყო!", "ჩვეულება", ფრენსი));

დაბრუნების

ადრინდელი ჯგუფები უნდა დაბრუნდეს იმისათვის, რომ ხელი შეუშალოს მომხმარებელს კოდის გაგრძელებაში.

დაიმახსოვრეთ საქმის სტრუქტურის დასრულება და ყველა ფიგურის დახურვა.

ნაბიჯი 2: შეამოწმეთ აუდიო მომხმარებლისთვის

შეამოწმეთ აუდიო მომხმარებლისთვის
შეამოწმეთ აუდიო მომხმარებლისთვის

ეს სეგმენტი არსებობს იმის უზრუნველსაყოფად, რომ მონაწილის ხმა მათ მოწყობილობაზე არ იყოს არც ძალიან მშვიდი და არც ძალიან ხმამაღალი.

მომხმარებლის გაფრთხილების მიზნით, გამოჩნდება შეტყობინების ყუთი და ელოდება მომხმარებლისგან დადასტურებას, სანამ გააგრძელებს ხმას: uiwait (msgbox ('ტესტის დაწყებამდე, ჩვენ გვსურს ჩავატაროთ აუდიო ტესტი, რომ დავრწმუნდეთ თქვენს მოცულობაში სწორია! მზად ხარ? ',' მოითმინე! ',' დახმარება '));

სინუსური ტალღა უკრავს 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; (რანდის ფუნქცია არის შემთხვევით გენერირებული სიხშირის შექმნა) 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 ღილაკს. ***

გადამრთველი ღილაკი იწერება, როდესაც მომხმარებელი ისმენს ხმას, ხოლო პოზიცია და ეკრანი შეიძლება მორგებული იყოს: tb = uicontrol ('სტილი', 'togglebutton', 'სიმებიანი', 'ხმის გაგონებისას დააჭირეთ ღილაკს', ' tag ',' togglebutton1 ',' თანამდებობა ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); ამ კონკრეტულ კოდს აქვს კოდის რეზიუმე და ცარიელი ვექტორები დაამატებენ მნიშვნელობას ღილაკზე დაჭერის შემთხვევაში.

შემდეგ შექმენით ლოდინის ფუნქცია ღილაკის პასუხის მისაღებად და ღილაკზე დაჭერისას გააქტიურეთ კოდი: h = randi ([4, 7]); უივაიტი (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 15];

გაფანტულ ნაკვეთებს უნდა განასხვავონ მარცხენა და მარჯვენა წერტილები. თქვენ შეგიძლიათ გააკეთოთ ჯვრები და წრეები!

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 ღერძი "ნაბიჯი dB".

შებრუნება y ღერძი ღერძის შეგროვებით ax = gca

შემდეგ შეაერთეთ y მიმართულების თვისება: ax. YDir = 'უკუ

ახლა მეორის კოდი დაახლოებით იგივეა, მაგრამ ლეგენდის გარეშე და განვიხილავთ გაფანტულ წერტილებს მარცხენა და მარჯვენა ტესტების ცვლადებით.

ყოველივე ამის შემდეგ, დაამატეთ პაუზის ფუნქცია დაახლოებით 10 წამის განმავლობაში, რათა მომხმარებელს შეეძლოს მათი შედეგების ნახვა.

ნაბიჯი 6: დაამატეთ მცირე მადლობის შეტყობინება, თუ გსურთ

დაამატეთ მცირე მადლობის შეტყობინება, თუ გნებავთ!
დაამატეთ მცირე მადლობის შეტყობინება, თუ გნებავთ!

ეს მხოლოდ გასართობად არის თუ გინდათ, მაგრამ დაამატეთ კიდევ ერთი imread (), imshow () და uiwait (msgbox ()) მადლობისა და გამოსამშვიდობებლად! გარდა ამისა, გახსოვდეთ clf; დახურე ყველა; clc; რომ დაიხუროს ყველაფერი. კარგია, რომ გააკეთე!

გირჩევთ: