İçindekiler:
- Adım 1: Kullanıcının Yaşını Analiz Etmek İçin Bir Kullanıcı Girişi Oluşturun
- 2. Adım: Sesi Kullanıcı İçin Test Edin
- Adım 3: Sağ Kulak İçin Odyometri Testi Yapın
- Adım 4: Sol Kulak İçin Aynı Kodu Oluşturun
- Adım 5: Verileri Karşılaştırmak için Yan Yana Bir Şekil Yapın
- Adım 6: İsterseniz Küçük Bir Teşekkür Mesajı Ekleyin
Video: MATLAB Kullanarak Yetişkin İşitme Testi Nasıl Yapılır: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
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
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 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
Ş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
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:
Kendin Yap -- Arduino Uno Kullanarak Akıllı Telefonla Kontrol Edilebilen Örümcek Robot Nasıl Yapılır: 6 Adım
Kendin Yap || Arduino Uno Kullanarak Akıllı Telefonla Kontrol Edilebilen Örümcek Robot Nasıl Yapılır: Örümcek robotu yaparken robotik hakkında pek çok şey öğrenilebilir. Robot yapmak gibi eğlenceli olduğu kadar zordur. Bu videomuzda sizlere akıllı telefonumuzu kullanarak çalıştırabileceğimiz Örümcek robotu (Androi
ATMEGA328P(Arduino) Kendin Yap Kullanarak Buzzer Testi: 3 Adım
ATMEGA328P(Arduino) Kendin Yap Kullanarak Quiz Buzzer: Quiz yarışmalarının sesli uyarı turunda, soru tüm takımlara açıktır. Cevabı bilen kişi önce zile basar ve ardından soruyu yanıtlar. Bazen iki veya daha fazla oyuncu zile neredeyse aynı anda basar ve bu çok
Arduino UNO Kullanarak Drone Nasıl Yapılır - Mikrodenetleyici Kullanarak Quadcopter Yapma: 8 Adım (Resimlerle)
Arduino UNO Kullanarak Drone Nasıl Yapılır | Mikrodenetleyici Kullanarak Quadcopter Yapın: GirişYoutube Kanalımı Ziyaret EdinBir Drone, satın alınması çok pahalı bir alettir(ürün). Bu yazıda tartışacağım, bunu nasıl ucuza yapabilirim? Ve böyle ucuz fiyata nasıl kendin yapabilirsin… Peki Hindistan'da tüm malzemeler (motorlar, ESC'ler
Z-testi Kullanarak İstatistiksel Önemi Belirleme: 10 Adım
Z-testi Kullanarak İstatistiksel Önemi Belirleme: Genel Bakış:Amaç: Bu talimatta, bir sosyal hizmet problemiyle ilgili olarak iki değişken arasında istatistiksel bir anlamlılık olup olmadığını nasıl belirleyeceğinizi öğreneceksiniz. Bu önemi belirlemek için bir Z testi kullanacaksınız. Süre: 10-15 dakika
Bir Gitar Hoparlör Kutusu Nasıl Yapılır veya Stereonuz İçin İki Adet Nasıl Yapılır: 17 Adım (Resimlerle)
Bir Gitar Hoparlör Kutusu Nasıl Yapılır veya Stereonuz için İki Adet Yapın.: Yaptığım tüp amfi ile birlikte yeni bir gitar hoparlörü istedim. Hoparlör dükkânımda kalacak, bu yüzden çok özel bir şey olmasına gerek yok. Tolex kaplama çok kolay zarar görebilir, bu yüzden hafif bir kumdan sonra dışarıdaki siyahı püskürttüm