Spisu treści:
- Krok 1: Utwórz dane wejściowe użytkownika, aby przeanalizować wiek użytkownika
- Krok 2: Przetestuj dźwięk dla użytkownika
- Krok 3: Wykonaj badanie audiometryczne dla prawego ucha
- Krok 4: Utwórz ten sam kod dla lewego ucha
- Krok 5: Zrób rysunek obok siebie, aby porównać dane
- Krok 6: Dodaj małą wiadomość z podziękowaniem, jeśli chcesz
Wideo: Jak wykonać test słuchu dla dorosłych za pomocą MATLAB: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
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
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
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
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
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
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:
Hack do oświetlenia pokoju dla osób z upośledzeniem słuchu: 7 kroków (ze zdjęciami)
Sygnalizacja świetlna dzwonka do drzwi z upośledzeniem słuchu: Problem: mój tata jest zarejestrowany jako niesłyszący, a moja mama ma wadę słuchu, przez co często mają trudności ze słyszeniem dzwonka do drzwi. To może być problem wielu innych. Kupili migający dzwonek do drzwi, aby pomóc im w t
Jak wykonać obwód wyzwalacza drutu za pomocą tranzystora BC547: 8 kroków
Jak zrobić obwód wyzwalacza drutu za pomocą tranzystora BC547: Cześć przyjacielu, Dzisiaj zamierzam wykonać obwód obwodu wyzwalacza drutu za pomocą tranzystora BC547. Jeśli ktoś przetnie przewód, automatycznie zaświeci się czerwona dioda LED i brzęczyk wyda dźwięk
Jak wykonać obwód migacza LED za pomocą tranzystora BD139: 7 kroków
Jak zrobić obwód migacza LED za pomocą tranzystora BD139: Cześć przyjacielu, Dzisiaj mam zamiar wykonać obwód migacza LED za pomocą tranzystora BD139. Zacznijmy
Jak wykonać obwód wyzwalacza drutu za pomocą Z44N MOSFET: 7 kroków
Jak wykonać obwód wyzwalacza drutu za pomocą Z44N MOSFET: Cześć przyjacielu, dzisiaj zamierzam wykonać prosty obwód wyzwalacza drutu. Jeśli ktoś przetnie przewód to brzęczyk wyda dźwięk. Dzisiaj zrobię ten projekt używając IRFZ44N MOSFET. Zaczynajmy
Jak wykonać obwód regulatora napięcia za pomocą tranzystora 13003: 6 kroków
Jak wykonać obwód kontrolera napięcia przy użyciu tranzystora 13003: Cześć przyjacielu, dzisiaj mam zamiar wykonać obwód kontrolera napięcia, który zapewni zasilanie o zmiennym napięciu wyjściowym. Kiedy wykonujemy projekty elektroniczne, potrzebujemy różnych napięć do obsługi obwodu. Zrobię to