Mündəricat:

MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar: 6 addım
MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar: 6 addım

Video: MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar: 6 addım

Video: MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar: 6 addım
Video: 智利挪威三文鱼北京新发地案板投毒?美军耳机的秘密窗式冷气机循环病毒 Chilean Norwegian salmon spread virus? AC window catch the virus. 2024, Iyul
Anonim
MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar
MATLAB istifadə edərək böyüklər üçün eşitmə testini necə etmək olar

DİQQƏT: Testimiz tibbi diaqnostika DEYİL və bu kimi istifadə edilməməlidir. Eşitməni dəqiq ölçmək üçün bir həkimə müraciət edin.

Əlimizdə olan materiallardan istifadə edərək qrupumuz eşitmə testi etdi. Testimiz böyüklər və yeniyetmələr üçün nəzərdə tutulmuşdur, çünki kiçik uşaqların eşitmə qabiliyyəti müxtəlif diapazonlarda olur və yalnız bir mütəxəssis tərəfindən ölçülməlidir.

Bu layihə BME MATLAB sinifimizdə işləyərkən və sinus dalğalarının yaratdığı səslərlə oynayarkən ilham aldı. Sinus dalğasının fərqli meydançalarda səs çıxarmaq üçün necə dəyişdirilə biləcəyi ilə maraqlandıq.

Bu layihə üçün bizə MATLAB R2018b işləyən bir kompüter və bir cüt qulaqlıq lazım idi. Proqramı daha yumorlu etmək üçün maskot olaraq orijinal bir personaj Frances'i daxil etdik.

Addım 1: İstifadəçinin Yaşını Təhlil etmək üçün İstifadəçi Girişi yaradın

İstifadəçinin Yaşını Təhlil etmək üçün İstifadəçi Girişi yaradın
İstifadəçinin Yaşını Təhlil etmək üçün İstifadəçi Girişi yaradın
İstifadəçinin Yaşını Təhlil etmək üçün İstifadəçi Girişi yaradın
İstifadəçinin Yaşını Təhlil etmək üçün İstifadəçi Girişi yaradın

Bu kodun birinci hissəsi, eşitmə testinə davam edəcək yaşda olub -olmadıqlarına qərar verən bir istifadəçi girişi etməkdir. Niyə maskotumuz Francesin axmaq şəkillərini əlavə edərək bunu etməyəsən? Bunu etmək üçün daxil olan zip faylını yükləyin və sonra koda çəkilə biləcək bir fayla çıxarın. Bunu istifadə edərək rəsmlərlə dolu faylı toplu yükləməyə davam edin:

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

Mesaj qutularını və rəsmlərin böyük şəkillərini təqdim etmək üçün Frances'i sizə göstərmək üçün bu əyləncəli üsuldan istifadə etdik. Sadəcə formatla seçdiyiniz bir şəkli oxuyun: dəyişən = imread ('nameofpicture.jpg');

Sonra imshow (dəyişən) istifadə edərək göstərməyə davam edin; çalıştırdığınızda MatLab -da bir rəqəm olaraq görünəcək!

Sonrakı kod boyunca istifadə olunan mesaj qutularıdır. uiwait (), kodun uiwait üçün seçilmiş funksiya bitənə qədər dayandırıldığı bir funksiyadır. Bu seçilmiş funksiya msgbox ('mesaj', 'başlıq', 'simge')!

Yuxarıdakı msgbox () formatına riayət etdiyiniz müddətcə Francesin söylədiyi mesajları dəyişdirməkdən çekinmeyin. Frances şəkillərindən istifadə etmək istəyirsinizsə, 'simvolu' xüsusi 'olaraq qeyd edin və seçdiyiniz şəklin imreadinin dəyişicisi ilə vergüllə davam edin! Əvvəlcədən təyin edilmiş 'simge' növlərindən də istifadə edə bilərsiniz. belə görünməlidir:

salam = imread ('Regular.jpg'); % şəkli uploadedimshow faylından oxuyur (salam); uiwait (msgbox ('Salam və eşitmə testimizi seçdiyiniz üçün təşəkkür edirik! Bu Francesdir və bu gün testinizdə sizə kömək edəcək!', 'Xoş gəldiniz!', 'xüsusi', salam));

Sonra istifadəçinin yaşını belə soruşan bir giriş yaradın!

UserAge = input ('Bu testə başlamazdan əvvəl neçə yaşınız var? (Məsələn, 32, 56,…) n', 's');

Qeyd: rəqəmlər qəribədirsə və çoxdursa, kodunuz işləyərkən əvvəlki rəqəmləri silmək üçün hamısını bağlayın

Sonra bir keçid qutusu quruluşu yaradın! İstifadəçi girişinin simli olduğunu unutmayın və bunu ədədi dəyərə çevirməlisiniz. Buna görə str2double (UserAge) istifadə edin. Hər bir halda 4 ilə 6 və ya 18 ilə 40 arasında bir yaş aralığına sahib olmaq lazımdır. Vəziyyətlərdən birinin doğru olduğunu təsdiqləyən dəyişənin olması üçün num2cell (massiv) kimi istifadə edin:

keçid str2double (UserAge) % dəyişən bir sətirdən sayısal dəyər halına çevrilir num2cell (0: 3)

fransalar = imread ('Yumurta.jpg');

imshow (Fransa);

uiwait (msgbox ('Sən bir dölüsən! Frances düşünür ki, eşitmə testini həkimlə əvəz etməlisən!', 'Test Rədd edildi!', 'xüsusi', fransa));

qayıt

İstifadəçinin kodu davam etdirməməsi üçün əvvəlki qruplar geri qaytarılmalıdır.

Dava quruluşunu bitirməyi və bütün rəqəmləri bağlamağı unutmayın.

Addım 2: Səsləri İstifadəçi üçün yoxlayın

İstifadəçi üçün Səsi Test edin
İstifadəçi üçün Səsi Test edin

Bu seqment, iştirakçının cihazındakı səsin nə çox sakit, nə də çox yüksək olmasını təmin etmək üçün mövcuddur.

İstifadəçiyə bəzi xəbərdarlıqlar vermək üçün bir mesaj qutusu açılır və səslə davam etməzdən əvvəl istifadəçidən təsdiqini gözləyir: uiwait (msgbox ('Test başlamazdan əvvəl səs səviyyənizi yoxlamaq üçün bir səs testi etmək istərdik. düzdü! Hazırmı? ',' Dayan! ',' kömək '));

Sinus dalğası 1 amplituda və 1000 Hz nümunə sürəti ilə çalınır: T = [0: 1/SampleRate: 2]; y = 1*günah (2*pi*200*T); səs (y, SampleRate);

İstifadəçiyə daha sonra istifadəçi tərəfindən verilən bir cavab verilir: Q = giriş ('Səsi eşidə bilirsinizmi? [Y/n] n', 's');

Q == 'n', doğru olarsa, səs təkrarlanır və cavab 'n' dən 'y' ə dəyişənə qədər istifadəçidən yenidən soruşur: Q == 'n' isə strcmp (Q, 'n') disp ('Kompüterinizin səsini artırın.'); gözləmə_səsi; fasilə (2); Q = giriş ('Səsi indi eşidirsən? [Y/n] n', 's'); sonu son

Kodun həqiqi imtahan hissəsinə keçməzdən əvvəl gözləmə anı var.

Addım 3: Sağ Qulaq üçün Audiometriya Testi edin

Sağ Qulaq üçün Audiometriya Testi edin
Sağ Qulaq üçün Audiometriya Testi edin

Bu kodda, hər bir qulaq üçün fərqli tezliklərdə və həcmlərdə 6 təkrarlama üçün bir döngə işləyəcək. Test etmək istədiyiniz qulaqdan asılı olaraq, Out dəyişəninin bir cərgədə səsi, digərində isə sıfırlar olacaq.

Əvvəlcə istifadəçinin eşitdiyi səs tezliklərini və amplitüdünü qeyd etmək üçün iki boş xətt vektoru düzəldin.

Bu hissə, ifa olunan tezlikləri və amplitudu təsadüfi etmək istəsəniz oynamaq istədiyiniz bir çox səs üçün loop üçün indekslənmişdir.

F tezlikdir: r = (rand*10000); Fs = 250 + r; (rand funksiyası təsadüfi olaraq yaradılan bir tezlik yaratmaqdır) t müəyyən edilmiş müddətdir: t = linspace (0, Fs*2, Fs*2); s sinus dalğasıdır: s = sin (2*pi*t*1000); (bu səs funksiyası üçün təsadüfi bir amplituda/dB dəyəri yaratmaq üçün təsadüfi dəyişən w ilə vurula bilər: w = rand;)

Sağ qulağın çıxışı: Out = [sıfır (ölçüsü (t)); s] ';

Çıxışlar kod vasitəsilə çalınır: səs (Çıxış, Fs)

Növbəti addım, istifadəçinin səsi eşidib eşitməməsini kod qeydləri ilə birlikdə istifadəçi interfeysi etməkdir.

Əvvəlcə bir rəqəm düzəldin və rəqəmin görünəcəyi mövqeyi təyin edin: gcbf = rəqəm ('pos', [30 800 350 150]);

*** Düymə sizin üçün görünmürsə, rəqəmin mövqeyi, yuxarıdakı serialda göstərildiyi kimi, kompüteriniz üçün səhv yerləşdirilə bilər. Bunu həll etmək üçün 30 və 800 dəyərlərini istədiyiniz mövqeyə dəyişdirin. Məsələn, [0 0 350 150] sahib olmaq monitorun sol alt hissəsindəki gui düyməsini açacaq. ***

İstifadəçi səsi eşidəndə qeyd etmək üçün bir keçid düyməsi hazırlanır və mövqe və ekran fərdiləşdirilə bilər: tb = uicontrol ('Style', 'togglebutton', 'String', 'Bir səs eşitdiyiniz zaman düyməni basın', ' tag ',' togglebutton1 ',' Mövqe ', [30 60 300 40],' Geri Çağırış ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; yaxın (gcbf); '); Bu xüsusi kodun kod davamı var və düyməyə basıldığı təqdirdə boş vektorlar bir dəyər əlavə edir.

Sonra düyməni cavablandırmaq üçün gözləmə funksiyası yaradın və düyməyə basıldıqda kodu aktivləşdirin: h = randi ([4, 7]); uiwait (gcbf, h); (h təsadüfi dəyişənini etdik, beləliklə iştirakçılar aldadıb cavab vermək üçün lazım olan saniyə sayını təyin edə bilmədilər.)

Döngü bitdikdən sonra, tezlik çıxışı dəyişənini (freq_right) Hz olaraq saxlayın, buna görə də onu tək buraxın. Sonra dB_right dəyişənini ampsdən desibelə bərabərlikdən istifadə edərək çevirin: dB_right = mag2db (amp_right)*(-1);

Sonra funksiyanı əlavə edin: hamısını bağlayın. bu ortaya çıxmış ola biləcək lazımsız rəqəmlərdən çıxacaq.

İstifadəçinin sol qulağa uyğunlaşması və hazırlaşması üçün vaxt vermək üçün təxminən 10 saniyəlik fasilə funksiyası əlavə edin.

Addım 4: Sol Qulaq üçün Eyni Kod yaradın

Sol qulaq üçün eyni kodu yaradın
Sol qulaq üçün eyni kodu yaradın

Sol qulağı sınayan növbəti seqmenti etmək üçün sağ qulağın kodunu təkrarlayın. Yeganə fərq, səsin hansı çıxış kanalından çıxacağını dəyişdirməkdir. Bunu etmək üçün, Out dəyişəninin sıra dəyərlərinin sırasını çevirin. Bu belə görünməlidir:

Çıxış = [s; sıfır (ölçüsü (t))] ';

Bunu etməklə, sağ kanaldan başqa sol kanaldan heç bir səs çıxmayacaq!

Addım 5: Məlumatları müqayisə etmək üçün Yan-yana Şəkil yaradın

Məlumatları müqayisə etmək üçün Yan-yana Şəkil yaradın
Məlumatları müqayisə etmək üçün Yan-yana Şəkil yaradın
Məlumatları müqayisə etmək üçün Yan-yana Şəkil yaradın
Məlumatları müqayisə etmək üçün Yan-yana Şəkil yaradın

İndi məlumatları göstərmək üçün bir qrafik qurun! Bir qrafikə iki qrafik qoyursunuz, bunu edin!

rəqəm (1); alt plan (1, 2, 1); *** digəri üçün alt plan (1, 2, 2)

Hər bir alt sahə üçün bu rəngləri xüsusi koordinatlarla əlavə edin. Bu hissələr eşitmə itkisinin nə qədər böyük olduğuna görə qrafikdən kənarlaşdırılır. Eynilə:

yamaq ([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); Sarı sarğı Alt sahə indi aşağıdakı yamaları və səpələnmə nöqtələrini saxlayacaq

mətn (3173, 8, 'Normal');

yamaq ([250 8000 8000 250], [40 40 25 25], [0 0.75 0.25]); % yaşıl

mətn (3577, 33, 'Yüngül');

yamaq ([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % mavi

mətn (2870, 48, 'Orta');

yamaq ([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % mavi

mətn (1739, 62, 'Orta dərəcədə Ağır');

yamaq ([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % bənövşəyi

mətn (3142, 80, 'Şiddətli');

yamaq ([250 8000 8000 250], [120 120 90 90], [0.96, 0.24, 0.24]); % qırmızı

mətn (3200, 103, 'Dərin')

Sonra sol və sağ səpələnmə sahələrini əlavə edin! Sizin üçün ümumi bir milli ortalamanı təmin edə bilərik! Burada:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-dəyəri, sol earNat_dBL = [10 3 10 15 10 15]; % y dəyəri

Nat_FreqR = [250 500 1000 2000 4000 8000]; % sağ qulaq

Nat_dBR = [10 5 10 15 10 15];

Səpələnmə planları sol və sağ nöqtələri ayırd etməlidir. Xaçlar və dairələr edə bilərsiniz!

NL = səpələnmə (Nat_FreqL, Nat_dBL, 'bx'); % çarpaz mavi nöqtələrNR = səpələnmə (Nat_FreqR, Nat_dBR, 'ro'); % qırmızı dairələr qurur

Xüsusi dəyişənlərə təyin edərək milli qrafik üçün bir əfsanə yaradın: əfsanə ([NL NR], {'title1', 'title2'});

X limitinizi 250 ilə 8000 Hz arasında və y limitinizi -10 ilə 120 dB arasında təyin edin. Şaquli gənələrinizi yticks () ilə dəyişdirməyi unutmayın

X oxunuzu "Frekans Hz" və y oxunuzu "Pitch dB" olaraq etiketləyin.

Ax = gca ilə oxu toplayaraq y oxunu tərsinə çevirin

Sonra y istiqamətinin xüsusiyyətini ona bağlayın: ax. YDir = 'tərs

İndi ikincinin kodu təxminən eynidir, ancaq əfsanə olmadan və səpələnmə nöqtələrini sol və sağdakı dəyişənlərlə qrafikləşdirmək.

Bütün bunlardan sonra istifadəçinin nəticələrinə baxa bilməsi üçün təxminən 10 saniyə fasilə funksiyası əlavə edin.

Addım 6: İstəsəniz Biraz Təşəkkür Mesajı əlavə edin

İstəyirsinizsə Biraz Təşəkkür Mesajı əlavə edin!
İstəyirsinizsə Biraz Təşəkkür Mesajı əlavə edin!

İstəyirsinizsə, ancaq təşəkkür və vida üçün başqa bir imread (), imshow () və uiwait (msgbox ()) əlavə etmək istəsəniz bu əyləncə üçündür! Bundan başqa clf qoymağı unutmayın; hamısını bağlamaq; clc; hər şeyi bağlamaq üçün. Yaxşı iş gördün!

Tövsiyə: