Spisu treści:

Jak wykonać test słuchu dla dorosłych za pomocą MATLAB: 6 kroków
Jak wykonać test słuchu dla dorosłych za pomocą MATLAB: 6 kroków

Wideo: Jak wykonać test słuchu dla dorosłych za pomocą MATLAB: 6 kroków

Wideo: Jak wykonać test słuchu dla dorosłych za pomocą MATLAB: 6 kroków
Wideo: Mózg perfekcyjny 2024, Czerwiec
Anonim
Jak wykonać test słuchu dla dorosłych za pomocą MATLAB
Jak wykonać test słuchu dla dorosłych za pomocą MATLAB

OŚWIADCZENIE: Nasz test NIE jest diagnostyką medyczną i nie powinien być jako taki używany. Aby dokładnie zmierzyć słuch, skontaktuj się z lekarzem.

Korzystając z materiałów, które już posiadaliśmy, nasza grupa wykonała badanie słuchu. Nasz test jest przeznaczony tylko dla dorosłych i nastolatków, ponieważ słuch małych dzieci ma różne zakresy i powinien być mierzony tylko przez profesjonalistę.

Inspiracją do tego projektu była praca w naszej klasie BME MATLAB i zabawa dźwiękami wytwarzanymi przez fale sinusoidalne. Interesowało nas, w jaki sposób można zmienić falę sinusoidalną, aby odtwarzać dźwięk o różnych wysokościach.

Wszystko, czego potrzebowaliśmy do tego projektu, to komputer z systemem MATLAB R2018b i parę wkładek dousznych. Dodaliśmy oryginalną postać, Frances, jako maskotkę, aby program był bardziej humorystyczny.

Krok 1: Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika

Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika
Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika
Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika
Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika

Pierwszą częścią tego kodu jest wprowadzenie danych wejściowych przez użytkownika, które zadecydują, czy są na tyle dorośli, aby przystąpić do wykonania badania słuchu. Dlaczego by tego nie zrobić, dodając głupie zdjęcia naszej maskotki, Frances? Aby to zrobić, pobierz dołączony plik zip, a następnie rozpakuj go do pliku, który można wciągnąć do kodu. Przejdź do zbiorczego przesyłania pliku pełnego rysunków, korzystając z tego:

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

Aby zaprezentować skrzynki wiadomości i duże obrazy rysunków, użyliśmy tej zabawnej metody pokazania Ci Frances. Po prostu odczytaj wybrany obraz w formacie: zmienna = imread('nazwaobrazu.jpg');

Następnie przejdź do pokazania go za pomocą imshow(variable); po uruchomieniu pojawi się jako figura w twoim MatLabie!

Dalej są okna wiadomości, które są używane w całym kodzie. uiwait() to funkcja, w której kod jest zatrzymywany do momentu zakończenia funkcji wybranej dla uiwait. Ta wybrana funkcja to msgbox('wiadomość', 'tytuł', 'ikona')!

Możesz swobodnie zmieniać komunikaty, które mówi Frances, o ile stosujesz się do powyższego formatu msgbox(). Jeśli chcesz użyć zdjęć Frances, oznacz „ikonę” jako „niestandardową” i poprzedź to przecinkiem i zmienną imread wybranego zdjęcia! Możesz także użyć wstępnie ustawionych typów „ikon”. To powinno wyglądać tak:

hi = imread('Zwykły.jpg'); % odczytuje obrazek z pliku uploadedimshow(hi); uiwait(msgbox('Witam i dziękujemy za wybranie naszego testu słuchu! Tu Frances i on będzie Ci dzisiaj pomagał w Twoim teście!', 'Witamy!', 'niestandardowy', cześć));

Następnie utwórz dane wejściowe, które pytają o wiek użytkownika w ten sposób!

UserAge = input('Ile masz lat, zanim zaczniemy ten test? (np. 32, 56, …)\n', 's');

UWAGA: jeśli liczby są dziwne i jest ich zbyt wiele, użyj close all, aby usunąć wcześniejsze liczby podczas działania kodu

Następnie utwórz strukturę obudowy przełącznika! Pamiętaj, że dane wejściowe użytkownika są ciągiem i musisz je przekonwertować na wartość liczbową. Więc użyj str2double(UserAge). Każdy przypadek powinien mieć przedział wiekowy, taki jak 4 do 6 lub 18 do 40. Aby zmienna do zweryfikowania jako prawdziwa dla jednego z przypadków, użyj num2cell(array) w następujący sposób:

switch str2double(UserAge) % zmienia zmienną z ciągu na wartość liczbową case num2cell(0:3)

frances = imread('Jajko.jpg');

imshow(francja);

uiwait(msgbox('Jesteś płodem! Frances uważa, że zamiast tego powinieneś zrobić badanie słuchu u lekarza!', 'Odmowa badania!', 'niestandardowy', frances));

powrót

Wcześniejsze grupy należy zwrócić, aby uniemożliwić użytkownikowi wykonanie kodu.

Pamiętaj, aby zakończyć strukturę sprawy i zamknąć wszystkie cyfry.

Krok 2: Przetestuj dźwięk dla użytkownika

Przetestuj dźwięk dla użytkownika
Przetestuj dźwięk dla użytkownika

Ten segment ma zapewnić, że dźwięk uczestnika na jego urządzeniu nie jest ani zbyt cichy, ani zbyt głośny.

Aby dać użytkownikowi ostrzeżenie, pojawia się okno komunikatu i czeka na potwierdzenie od użytkownika, zanim przejdzie dalej z dźwiękiem: uiwait(msgbox('Przed rozpoczęciem testu chcielibyśmy wykonać test dźwięku, aby upewnić się, że głośność ma rację Gotowy?”, „Trzymaj się!”, „Pomoc”));

Fala sinusoidalna jest odtwarzana z amplitudą 1 i częstotliwością próbkowania 1000 Hz: T = [0:1/SampleRate:2]; y = 1*sin(2*pi*200*T); dźwięk(y, częstotliwość próbkowania);

Następnie użytkownikowi zadawane jest pytanie z odpowiedzią wprowadzoną przez użytkownika: Q = input('Słyszysz dźwięk? [y/n] n', 's');

Następnie przez chwilę poszukaj, kiedy Q == 'n', jeśli prawda, dźwięk powtarza się i pyta użytkownika ponownie, dopóki odpowiedź nie zmieni się z 'n' na 'y': while Q == 'n' if strcmp(Q, 'n') disp('Zwiększ głośność komputera.'); dźwięk_czekania; pauza(2); Q = input('Czy teraz słyszysz dźwięk? [y/n] n', 's'); koniec koniec

Następuje chwila oczekiwania przed przejściem do właściwej części kodu, w której jest on sprawdzany.

Krok 3: Wykonaj badanie audiometryczne dla prawego ucha

Wykonaj badanie audiometryczne dla prawego ucha
Wykonaj badanie audiometryczne dla prawego ucha

W tym kodzie pętla będzie działać przez 6 iteracji z różnymi częstotliwościami i głośnością dla każdego indywidualnego ucha. W zależności od ucha, które chcesz przetestować, zmienna Out będzie miała dźwięk w jednym rzędzie, a zera w drugim.

Najpierw tworzysz dwa puste wektory liniowe, aby zarejestrować częstotliwości i amplitudę dźwięku, który słyszy użytkownik.

Ta część znajduje się w indeksowanej pętli for dla dowolnej liczby dźwięków, które chcesz odtworzyć, jeśli chcesz losowo odtwarzać odtwarzane częstotliwości i amplitudę.

F to częstotliwość: r = (rand*10000); Fs = 250 + r; (funkcją rand jest utworzenie losowo generowanej częstotliwości) t to pewien upływ czasu określony przez: t = linspace(0, Fs*2, Fs*2); s jest sinusoidą: s = sin(2*pi*t*1000); (można to pomnożyć przez zmienną losową w, aby utworzyć losową wartość amplitudy/dB dla funkcji dźwięku: w = rand;)

Dane wyjściowe dla prawego ucha to: Out = [zeros(size(t)); s]';

Wyjścia są odtwarzane przez kod: dźwięk (Out, Fs)

Następnym krokiem jest utworzenie interfejsu użytkownika z kodem, który rejestruje, czy użytkownik słyszał dźwięk, czy nie.

Najpierw tworzysz figurę i określasz pozycję, w której będzie się ona pojawiać: gcbf = figure('pos', [30 800 350 150]);

***Jeżeli przycisk nie jest wyświetlany, pozycja figury, jak pokazano w powyższej tablicy, może być ustawiona niewłaściwie dla Twojego komputera. Aby rozwiązać ten problem, zmień wartości 30 i 800 na dowolną pożądaną pozycję. Na przykład posiadanie [0 0 350 150] spowoduje pojawienie się przycisku gui w lewym dolnym rogu monitora.***

Przycisk przełączania służy do rejestrowania, gdy użytkownik słyszy dźwięk, a położenie i wyświetlanie można dostosować: tb = uicontrol('Styl', 'togglebutton', 'String', 'Naciśnij przycisk, gdy usłyszysz dźwięk', ' tag', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); Ten konkretny kod ma wznawianie kodu, a puste wektory dodają wartość po naciśnięciu przycisku.

Następnie utwórz funkcję oczekiwania, aby pobrać odpowiedź przycisku i aktywować kod w przycisku po naciśnięciu: h = randi([4, 7]); uiwait(gcbf, h); (zrobiliśmy zmienną losową h, aby uczestnicy nie mogli oszukiwać i określić liczby sekund potrzebnych na odpowiedź.)

Po zakończeniu pętli zachowaj zmienną wyjściową częstotliwości (freq_right) w Hz, więc zostaw to w spokoju. Następnie przekonwertuj zmienną dB_right ze amperów na decybele za pomocą równania: dB_right = mag2db(amp_right)*(-1);

Następnie dodaj funkcję: zamknij wszystko. to wyjdzie z wszelkich niepotrzebnych liczb, które mogły się pojawić.

Dodaj funkcję pauzy, około 10 sekund, aby dać użytkownikowi czas na dostosowanie się i przygotowanie do lewego ucha.

Krok 4: Utwórz ten sam kod dla lewego ucha

Utwórz ten sam kod dla lewego ucha
Utwórz ten sam kod dla lewego ucha

Powtórz kod dla prawego ucha, aby utworzyć następny segment, który testuje lewe ucho. Jedyną różnicą jest zmiana kanału wyjściowego, z którego będzie pochodził dźwięk. Aby to zrobić, odwróć kolejność wartości tablicy dla zmiennej Out. To powinno wyglądać tak:

Out = [s; zera(rozmiar(t))]';

Dzięki temu dźwięk nie będzie wydobywał się z prawego kanału, ale z lewego!

Krok 5: Zrób rysunek obok siebie, aby porównać dane

Zrób rysunek obok siebie, aby porównać dane
Zrób rysunek obok siebie, aby porównać dane
Zrób rysunek obok siebie, aby porównać dane
Zrób rysunek obok siebie, aby porównać dane

Teraz zrób wykres, aby pokazać dane! Umieszczasz dwa wykresy na jednej figurze, więc zrób to!

rysunek(1);wykres podrzędny(1, 2, 1); ***wykres podrzędny (1, 2, 2) dla drugiego wykresu

Do każdej podrzędnej fabuły dodaj te łaty z określonymi kolorami i współrzędnymi. Te sekcje poza wykresem zależą od stopnia ubytku słuchu. Tak jak:

łatka ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); %yellowhold na % Na wykresie podrzędnym będą teraz znajdować się następujące łatki i wykresy rozrzutu

tekst(3173, 8, 'Normalny');

łatka ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % Zielony

tekst(3577, 33, „Łagodny”);

łatka ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % cyjan

text(2870, 48, 'Umiarkowany');

łatka ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % niebieski

text(1739, 62, „Umiarkowanie ciężkie”);

łatka ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % purpurowy

tekst(3142, 80, 'Ciężkie');

łatka ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % czerwony

text(3200, 103, 'Głęboki')

Następnie dodaj lewy i prawy wykres punktowy! Możemy podać dla Ciebie ogólną średnią krajową! Tutaj:

Nat_CzęstL = [250 500 1000 2000 4000 8000]; % wartość x, lewy earNat_dBL = [10 3 10 15 10 15]; % wartości y

Nat_Częst R = [250 500 1000 2000 4000 8000]; % prawe ucho

Nat_dBR = [10 5 10 15 10 15];

Wykresy punktowe powinny rozróżniać lewy i prawy punkt. Możesz robić krzyże i koła!

NL = rozproszenie(Nat_FreqL, Nat_dBL, 'bx'); % wykreśla niebieskie punkty krzyżoweNR = scatter(Nat_FreqR, Nat_dBR, 'ro'); % wykreśla czerwone kółka

Utwórz legendę dla wykresu narodowego, przypisując go do określonych zmiennych: legend([NL NR], {'title1', 'title2'});

Ustaw swój limit x od 250 do 8000 Hz i limit y od -10 do 120 dB. Pamiętaj, aby zmienić pionowe tiki za pomocą yticks()

Oznacz swoją oś x „Częstotliwość Hz” i oś y „Pitch dB”.

Odwróć oś y, gromadząc oś z ax = gca

Następnie powiąż z nim właściwość kierunku y za pomocą: ax. YDir = 'reverse

Teraz kod dla drugiego jest mniej więcej taki sam, ale bez legendy i wykresu wykresów rozrzutu ze zmiennymi z lewego i prawego testu.

Po tym wszystkim dodaj funkcję pauzy na około 10 sekund, aby użytkownik mógł spojrzeć na ich wyniki.

Krok 6: Dodaj małą wiadomość z podziękowaniem, jeśli chcesz

Dodaj małą wiadomość z podziękowaniem, jeśli chcesz!
Dodaj małą wiadomość z podziękowaniem, jeśli chcesz!

To tylko dla zabawy, jeśli chcesz, ale dodaj kolejne imread(), imshow() i uiwait(msgbox()) na podziękowania i pożegnanie! Poza tym pamiętaj, aby umieścić clf; zamknij wszystko; kl; aby wszystko zamknąć. Dobra robota, że to zrobiłeś!

Zalecana: