İçindekiler:

MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır: 6 Adım
MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır: 6 Adım

Video: MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır: 6 Adım

Video: MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır: 6 Adım
Video: İdeal İşitme Cihazı Uygulama Süreçleri 2024, Temmuz
Anonim
MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır?
MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır?

YASAL UYARI: Testimiz tıbbi bir teşhis DEĞİLDİR ve bu şekilde kullanılmamalıdır. İşitmeyi doğru bir şekilde ölçmek için lütfen bir tıp uzmanına görünün.

Grubumuz zaten sahip olduğumuz malzemeleri kullanarak bir işitme testi yaptı. Testimiz yalnızca yetişkinler ve gençlerin kullanımına yöneliktir, çünkü küçük çocukların işitme duyusu çeşitli aralıklardadır ve yalnızca bir profesyonel tarafından ölçülmelidir.

Bu proje, BME MATLAB sınıfımızda çalışırken ve sinüs dalgalarının yaptığı seslerle oynarken ilham aldı. Farklı perdelerde bir ses çalmak için sinüs dalgasının nasıl değiştirilebileceğiyle ilgilendik.

Bu proje için ihtiyacımız olan tek şey MATLAB R2018b çalıştıran bir bilgisayar ve bir çift kulaklıktı. Programı daha komik hale getirmek için orijinal bir karakter olan Frances'i maskot olarak ekledik.

Adım 1: Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun

Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun
Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun
Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun
Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun

Bu kodun ilk kısmı, işitme testini yapmaya devam etmek için yeterince yaşlı olup olmadığına karar veren bir kullanıcı girişi yapmaktır. Bunu neden maskotumuz Frances'in aptalca resimlerini de ekleyerek yapmıyorsunuz? Bunu yapmak için, verilen zip dosyasını indirin ve ardından kodun içine çekilebilecek bir dosyaya çıkarın. Bunu kullanarak çizimlerle dolu dosyayı toplu olarak yüklemeye devam edin:

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

Çizimlerin mesaj kutularını ve büyük resimlerini sunmak için Frances'i size göstermenin bu eğlenceli yöntemini kullandık. Seçtiğiniz bir resmi şu formatta okumanız yeterlidir: değişken = imread('nameofpicture.jpg');

Ardından imshow(variable) kullanarak göstermeye devam edin; daha sonra çalıştırdığınızda MatLab'ınızda bir şekil olarak görünecektir!

Sonraki, kod boyunca kullanılan mesaj kutularıdır. uiwait(), uiwait için seçilen fonksiyon bitene kadar kodun durdurulduğu bir fonksiyondur. Bu seçilen işlev msgbox('message', 'title', 'icon')!

Yukarıdaki msgbox() biçimini takip ettiğiniz sürece Frances'in söylediği mesajları değiştirmekte özgürsünüz. Frances resimlerini kullanmak istiyorsanız, 'simge'yi 'özel' olarak etiketleyin ve buna virgül ve seçtiğiniz resmin imreadin değişkeni ile devam edin! Ayrıca önceden ayarlanmış 'simge' türlerini de kullanabilirsiniz. şöyle görünmelidir:

merhaba = imread('Normal.jpg'); % uploadedimshow(hi) dosyasındaki resmi okur; uiwait(msgbox('Merhaba, işitme testimizi seçtiğiniz için teşekkür ederiz! Ben Frances ve' bugün testinizde size yardımcı olacak!', 'Hoş Geldiniz!', 'özel', merhaba));

Ardından, kullanıcının yaşını soran bir girdi oluşturun!

UserAge = input('Bu teste başlamadan önce, kaç yaşındasınız (yıl)? (ör. 32, 56, …)\n', 's');

NOT: Rakamlar tuhafsa ve çok fazlaysa, kodunuz çalışırken önceki rakamları kaldırmak için tümünü kapat'ı kullanın.

Ardından bir anahtar durum yapısı oluşturun! Kullanıcı girişinin dizgede olduğunu ve bunu sayısal bir değere dönüştürmeniz gerektiğini unutmayın. Bu yüzden str2double(UserAge) kullanın. Her vakanın 4 ila 6 veya 18 ila 40 gibi bir yaş aralığı olmalıdır. değişkenin durumlardan biri için doğru olduğunu doğrulamak için num2cell(array) işlevini şu şekilde kullanın:

switch str2double(UserAge) % değişkeni bir dizgeden sayısal bir değere değiştirir case num2cell(0:3)

fransa = imread('Yumurta.jpg');

imshow(fransa);

uiwait(msgbox('Sen bir fetüsün! Frances, işitme testini bunun yerine bir doktorla yapman gerektiğini düşünüyor!', 'Test Reddedildi!', 'özel', frances));

dönüş

Kullanıcının koda devam etmesini önlemek için önceki gruplar döndürülmelidir.

Vaka yapısını sonlandırmayı ve tüm rakamları kapatmayı unutmayın.

2. Adım: Sesi Kullanıcı İçin Test Edin

Kullanıcı için Sesi Test Etme
Kullanıcı için Sesi Test Etme

Bu segment, katılımcının cihazındaki sesinin ne çok düşük ne de çok yüksek olmasını sağlamak için vardır.

Kullanıcıya bazı uyarılar vermek için bir mesaj kutusu açılır ve sesle devam etmeden önce kullanıcıdan onay bekler: uiwait(msgbox('Test başlamadan önce, sesinizin ses seviyesinden emin olmak için bir ses testi yapmak istiyoruz). doğru! Hazır mı?', 'Bekle!', 'yardım'));

Genliği 1 ve örnek hızı 1000 Hz olan bir sinüs dalgası oynatılır: T = [0:1/SampleRate:2]; y = 1*sin(2*pi*200*T); ses(y, SampleRate);

Daha sonra kullanıcıya, kullanıcı tarafından girilen yanıtla bir soru sorulur: Q = input('Sesi duyabiliyor musunuz? [y/n] n', 's');

Sonra bir süre Q == 'n' olduğunda aranır, eğer doğruysa ses tekrar eder ve cevap 'n'den 'y'ye değişene kadar kullanıcıya tekrar sorar: while Q == 'n' if strcmp(Q, 'n') disp('Bilgisayarınızın sesini yükseltin.'); bekle_ses; duraklat(2); Q = input('Sesi şimdi duyabiliyor musunuz? [y/n] n', 's'); son son

Ardından, kodun asıl inceleme kısmına geçmeden önce bir bekleme süresi vardır.

Adım 3: Sağ Kulak İçin Odyometri Testi Yapın

Sağ Kulak İçin Odyometri Testi Yapın
Sağ Kulak İçin Odyometri Testi Yapın

Bu kodda, her bir kulak için değişen frekans ve hacimlerde 6 yineleme için bir döngü çalışacaktır. Test etmek istediğiniz kulağa bağlı olarak, Out değişkeninde bir satırda ses ve diğerinde sıfırlar bulunur.

İlk önce, kullanıcının duyduğu sesin frekanslarını ve genliğini kaydetmek için iki boş çizgi vektörü yaparsınız.

Bu kısım, çalınan frekansları ve genliği rastgele ayarlamak isterseniz, çalmak istediğiniz birçok ses için indekslenmiş bir for döngüsündedir.

F frekanstır: r = (rand*10000); Fs = 250 + r; (rand işlevi, rastgele oluşturulmuş bir frekans yaratmaktır) t, aşağıdakiler tarafından belirlenen belirli bir süre miktarıdır: t = linspace(0, Fs*2, Fs*2); s sinüs dalgasıdır: s = sin(2*pi*t*1000); (bu, ses işlevi için rastgele bir genlik/dB değeri oluşturmak için w rastgele değişkeni ile çarpılabilir: w = rand;)

Sağ kulak için çıktı: Out = [zeros(size(t)); s]';

Çıkışlar şu kod aracılığıyla oynatılır: ses(Out, Fs)

Bir sonraki adım, kullanıcının sesi duyup duymadığına bakılmaksızın, kod kayıtları ile bir kullanıcı arayüzü oluşturmaktır.

Önce bir şekil yaparsınız ve şeklin görüneceği konumu belirlersiniz: gcbf = şekil('pos', [30 800 350 150]);

***Sizde buton görünmüyorsa şeklin konumu yukarıdaki dizide görüldüğü gibi bilgisayarınız için yanlış konumlandırılmış olabilir. Bunu çözmek için 30 ve 800 değerlerini istediğiniz konuma getirin. Örneğin, [0 0 350 150]'ye sahip olmak, monitörün sol alt kısmındaki gui düğmesini ortaya çıkaracaktır.***

Kullanıcı sesi duyduğunda kayıt yapmak için bir geçiş düğmesi yapılır ve konum ve ekran özelleştirilebilir: tb = uicontrol('Stil', 'togglebutton', 'String', 'Bir ses duyduğunuzda düğmeye basın', ' tag', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Bu özel kod, devam eden koda sahiptir ve düğmeye basıldığında boş vektörler bir değer ekler.

Ardından butonun yanıtını almak için bir bekleme fonksiyonu oluşturun ve basıldığında butonun içindeki kodu etkinleştirin: h = randi([4, 7]); uiwait(gcbf, h); (Katılımcıların hile yapmamaları ve yanıt vermek için gereken saniye sayısını belirlememeleri için rastgele h değişkenini yaptık.)

Döngü tamamlandıktan sonra, frekans çıkış değişkenini (freq_right) Hz cinsinden tutun, böylece onu kendi haline bırakın. Ardından dB_right değişkenini aşağıdaki denklemi kullanarak amperden desibele dönüştürün: dB_right = mag2db(amp_right)*(-1);

Ardından işlevi ekleyin: tümünü kapatın. bu, ortaya çıkabilecek gereksiz rakamlardan çıkacaktır.

Kullanıcıya ayar yapması ve sol kulağa hazırlanması için zaman tanımak için yaklaşık 10 saniyelik bir duraklama işlevi ekleyin.

Adım 4: Sol Kulak İçin Aynı Kodu Oluşturun

Sol Kulak İçin Aynı Kodu Oluşturun
Sol Kulak İçin Aynı Kodu Oluşturun

Sol kulağı test eden bir sonraki segmenti yapmak için sağ kulak için kullanılan kodu tekrarlayın. Tek fark, sesin hangi çıkış kanalından geleceğini değiştirmektir. Bunu yapmak için, Out değişkeni için dizi değerlerinin sırasını çevirin. Şöyle görünmelidir:

Çıkış = [s; sıfırlar(boyut(t))]';

Bunu yaparak, sağ kanaldan değil, sol kanaldan ses çıkacaktır!

Adım 5: Verileri Karşılaştırmak için Yan Yana Bir Şekil Yapın

Verileri Karşılaştırmak için Yan Yana Şekil Yapın
Verileri Karşılaştırmak için Yan Yana Şekil Yapın
Verileri Karşılaştırmak için Yan Yana Şekil Yapın
Verileri Karşılaştırmak için Yan Yana Şekil Yapın

Şimdi verileri göstermek için bir grafik yapın! Tek bir şekle iki grafik koyuyorsun, bunu yap!

şekil(1);alt grafik(1, 2, 1); ***diğeri için alt nokta(1, 2, 2)

Her alt nokta için, bu yamaları belirli renkler ve koordinatlarla ekleyin. Bunlar, işitme kaybının ne kadar büyük olduğuna bağlı olarak grafiğin dışına çıkar. Şöyle:

yama([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); %yellowhold on % Alt grafik şimdi aşağıdaki yamaları ve dağılım grafiklerini içerecek

metin(3173, 8, 'Normal');

yama([250 8000 8000 250], [40 40 25 25], [0 0.75 0.25]); % Yeşil

text(3577, 33, 'Hafif');

yama([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % camgöbeği

text(2870, 48, 'Orta');

yama([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % Mavi

text(1739, 62, 'Orta Şiddetli');

yama([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % Mor

text(3142, 80, 'Şiddetli');

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

metin(3200, 103, 'Derin')

Ardından sol ve sağ dağılım grafiklerini ekleyin! Sizin için genel bir ulusal ortalama sağlayabiliriz! Buraya:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x değeri, sol earNat_dBL = [10 3 10 15 10 15]; % y-değeri

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

Nat_dBR = [10 5 10 15 10 15];

Dağılım grafikleri sol ve sağ noktaları ayırt etmelidir. Haçlar ve daireler yapabilirsin!

NL = dağılım(Nat_FreqL, Nat_dBL, 'bx'); % mavi çapraz noktaları çizerNR = scatter(Nat_FreqR, Nat_dBR, 'ro'); % kırmızı daireler çizer

Ulusal grafik için belirli değişkenlere atayarak bir lejand yapın: legend([NL NR], {'title1', 'title2'});

x sınırınızı 250 ila 8000 Hz arasında ve y sınırınızı -10 ila 120 dB arasında ayarlayın. Dikey kenelerinizi ytics() ile değiştirmeyi unutmayın

x ekseninizi "Frekans Hz" ve y ekseninizi "Pitch dB" olarak etiketleyin.

Ekseni ax = gca ile toplayarak y eksenini ters çevirin

Ardından y yönünün özelliğini şu şekilde bağlayın: ax. YDir = 'reverse

Şimdi ikincisi için kod yaklaşık olarak aynıdır, ancak açıklama olmadan ve sol ve sağ testlerdeki değişkenlerle dağılım grafiklerini grafik haline getirmeden.

Tüm bunlardan sonra, kullanıcının sonuçlarına bakabilmesi için yaklaşık 10 saniyelik bir duraklama işlevi ekleyin.

Adım 6: İsterseniz Küçük Bir Teşekkür Mesajı Ekleyin

İsterseniz Küçük Bir Teşekkür Mesajı Ekleyin!
İsterseniz Küçük Bir Teşekkür Mesajı Ekleyin!

Bu sadece eğlence amaçlıdır, ancak bir teşekkür ve veda için başka bir imread(), imshow() ve uiwait(msgbox()) ekleyin! Bunun dışında clf koymayı unutmayın; hepsini kapat; clc; her şeyi kapatmak için. İyi iş çıkardın!

Önerilen: