Obsah:

Ako urobiť test sluchu pre dospelých pomocou MATLABu: 6 krokov
Ako urobiť test sluchu pre dospelých pomocou MATLABu: 6 krokov

Video: Ako urobiť test sluchu pre dospelých pomocou MATLABu: 6 krokov

Video: Ako urobiť test sluchu pre dospelých pomocou MATLABu: 6 krokov
Video: Часть 1. Аудиокнига Чарльза Диккенса «Повесть о двух городах» (книга 01, главы 01–06) 2024, Júl
Anonim
Ako urobiť test sluchu pre dospelých pomocou MATLABu
Ako urobiť test sluchu pre dospelých pomocou MATLABu

UPOZORNENIE: Náš test NIE je lekárskou diagnostikou a nemal by sa používať ako taký. Ak chcete presne zmerať sluch, navštívte lekára.

Naša skupina s použitím materiálov, ktoré sme už mali, urobila test sluchu. Náš test je len pre dospelých a dospievajúcich, pretože sluch malých detí má rôzne rozsahy a mal by ho merať iba profesionál.

Tento projekt bol inšpirovaný prácou v našej triede BME MATLAB a hraním so zvukmi vydávanými sínusovými vlnami. Zaujímalo nás, ako je možné zmeniť sínusovú vlnu tak, aby prehrávala zvuk na rôznych výškach.

Na tento projekt sme potrebovali iba počítač so systémom MATLAB R2018b a pár slúchadiel do uší. Pôvodnú postavu Frances sme zaradili ako maskota, aby bol program vtipnejší.

Krok 1: Vytvorte vstup používateľa na analýzu veku používateľa

Vytvorte vstup používateľa na analýzu veku používateľa
Vytvorte vstup používateľa na analýzu veku používateľa
Vytvorte vstup používateľa na analýzu veku používateľa
Vytvorte vstup používateľa na analýzu veku používateľa

Prvou časťou tohto kódu je zadať používateľovi vstup, v ktorom sa rozhodne, či sú dostatočne starí na to, aby mohli vykonať test sluchu. Prečo to neurobiť aj pridaním hlúpych obrázkov našej maskotky Frances? Ak to chcete urobiť, stiahnite si zahrnutý súbor zip a potom ho rozbaľte do súboru, ktorý je možné stiahnuť do kódu. Pokračujte v hromadnom nahrávaní súboru plného výkresov pomocou tohto:

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

Aby sme vám mohli predstaviť schránky so správami a veľké obrázky kresieb, použili sme túto zábavnú metódu, ako vám ukázať Frances. Jednoducho načítajte obrázok podľa vlastného výberu vo formáte: variable = imread ('nameofpicture.jpg');

Potom pokračujte v zobrazovaní pomocou imshow (premenná); potom sa zobrazí ako figúrka vo vašom MatLabe, keď ho spustíte!

Ďalej sú polia so správami, ktoré sa používajú v celom kóde. uiwait () je funkcia, pri ktorej sa kód zastaví, kým sa nedokončí funkcia, ktorá je zvolená pre uiwait. Táto zvolená funkcia je msgbox („správa“, „názov“, „ikona“)!

Správy, ktoré hovorí Frances, môžete bez obáv zmeniť, pokiaľ budete postupovať podľa vyššie uvedeného formátu msgbox (). Ak chcete použiť obrázky Frances, označte „ikonu“ako „vlastnú“a pokračujte v tom čiarkou a premennou hrubého textu, ktorý ste si vybrali! Môžete tiež použiť prednastavené typy ikon. malo by to vyzerať takto:

hi = imread ('Regular.jpg'); % prečíta obrázok zo súboru uploadedimshow (ahoj); uiwait (msgbox („Dobrý deň, ďakujeme, že ste si vybrali náš test sluchu! Toto je Frances a dnes vám s testom pomôže!“, „Vitajte!“, „na mieru“, ahoj));

Potom vytvorte vstup, ktorý sa pýta na vek používateľa takto!

UserAge = vstup („Koľko rokov (rokov) pred spustením tohto testu máte? (Napr. 32, 56, …) n ',' s ');

POZNÁMKA: Ak sú obrázky podivné a je ich príliš veľa, pomocou príkazu close all odstráňte predchádzajúce údaje pri spustení kódu.

Potom vytvorte štruktúru rozvádzača! Nezabudnite, že vstup používateľa je v reťazci a musíte ho previesť na číselnú hodnotu. Použite teda str2double (UserAge). Každý prípad by mal mať vekový rozsah, napríklad 4 až 6 alebo 18 až 40. Aby premenná na overenie ako pravdivá v jednom z prípadov použila num2cell (pole) takto:

prepnúť str2double (UserAge) % zmení premennú z reťazca na číselnú hodnotu prípad num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Ste plod! Frances si myslí, že by ste si namiesto toho mali urobiť vyšetrenie sluchu u lekára!', 'Test odmietnutý!', 'zvyk', frances));

vrátiť sa

Predchádzajúce skupiny by mali byť vrátené, aby sa zabránilo užívateľovi pokračovať v kóde.

Nezabudnite ukončiť štruktúru prípadu a zavrieť všetky obrázky.

Krok 2: Otestujte zvuk pre používateľa

Otestujte zvuk pre používateľa
Otestujte zvuk pre používateľa

Tento segment existuje s cieľom zaistiť, aby zvuk účastníka na jeho zariadení nebol príliš tichý ani príliš hlasný.

Aby používateľ dostal nejaké varovanie, objaví sa okno so správou a čaká na potvrdenie od používateľa, než bude pokračovať so zvukom: uiwait (msgbox („Pred začatím testu by sme chceli urobiť zvukový test, aby sme sa uistili, že máte hlasitosť je to správne! Ste pripravení? ',' Počkajte! ',' pomoc '));

Hrá sa sínusová vlna s amplitúdou 1 a vzorkovacou frekvenciou 1 000 Hz: T = [0: 1/SampleRate: 2]; y = 1*hriech (2*pi*200*T); zvuk (y, SampleRate);

Používateľovi sa potom položí otázka s odpoveďou, ktorú zadal užívateľ: Q = vstup ('Počujete zvuk? [Y/n] n', 's');

Potom sa chvíľu hľadá, kedy Q == 'n', ak je pravdivé, zvuk sa opakuje a pýta sa používateľa znova, kým sa odpoveď nezmení z 'n' na 'y': zatiaľ čo Q == 'n' ak strcmp (Q, 'n') disp ('Zvýšte hlasitosť počítača.'); wait_sound; pauza (2); Q = vstup ('Počúvate teraz zvuk? [Y/n] n', 's'); koniec koniec

Potom nasleduje chvíľa čakania, kým sa prenesiete do skutočnej časti kódu na preskúmanie.

Krok 3: Vykonajte test audiometrie pre pravé ucho

Vykonajte test audiometrie pre pravé ucho
Vykonajte test audiometrie pre pravé ucho

V tomto kóde pobeží slučka 6 iterácií s rôznymi frekvenciami a objemami pre každé jednotlivé ucho. V závislosti od ucha, ktoré chcete testovať, bude mať premenná Out zvuk v jednom rade a nuly v druhom.

Najprv urobíte dva prázdne riadkové vektory na zaznamenanie frekvencií a amplitúdy zvuku, ktoré používateľ počuje.

Táto časť je v indexovanej slučke pre mnoho zvukov, ktoré chcete hrať, ak chcete randomizovať prehrávané frekvencie a amplitúdu.

F je frekvencia: r = (rand*10 000); Fs = 250 + r; (funkcia rand má vytvárať náhodne generovanú frekvenciu) t je určitý časový priebeh, ktorý určíte podľa: t = linspace (0, Fs*2, Fs*2); s je sínusová vlna: s = sin (2*pi*t*1000); (toto je možné vynásobiť náhodnou premennou w, aby sa vytvorila náhodná hodnota amplitúdy/dB pre zvukovú funkciu: w = rand;)

Výstup pre pravé ucho je: Out = [nuly (veľkosť (t)); s] ';

Výstupy sa prehrávajú pomocou kódu: zvuk (výstup, Fs)

Ďalším krokom je vytvorenie používateľského rozhrania s kódovými záznamami bez ohľadu na to, či používateľ zvuk počul alebo nie.

Najprv urobíte figúrku a určíte polohu, v ktorej sa bude zobrazovať: gcbf = postava ('pos', [30 800 350 150]);

*** Ak sa vám tlačidlo nezobrazí, poloha obrázku, ako ukazuje pole vyššie, môže byť pre váš počítač umiestnená nesprávne. Ak to chcete vyriešiť, zmeňte 30 a 800 hodnôt na ľubovoľnú pozíciu. Napríklad, keď [0 0 350 150] vyvolá tlačidlo gui v ľavej spodnej časti monitora. ***

Prepínacie tlačidlo slúži na nahrávanie, keď používateľ počuje zvuk, a polohu a zobrazenie je možné prispôsobiť: tb = uicontrol („Štýl“, „prepínač“, „Reťazec“, „Keď počujete zvuk, stlačte tlačidlo“, „ tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Tento konkrétny kód má pokračovanie kódu a prázdne vektory pridávajú hodnotu, ak je tlačidlo stlačené.

Potom vytvorte čakaciu funkciu na prijatie odozvy tlačidla a aktivujte kód v tlačidle po stlačení: h = randi ([4, 7]); uiwait (gcbf, h); (Urobili sme náhodnú premennú h, aby účastníci nemohli podvádzať a určiť počet sekúnd potrebných na odpoveď.)

Po dokončení slučky ponechajte výstupnú premennú frekvencie (freq_right) v Hz, takže ju nechajte na pokoji. Potom premente dB_right premennú z ampérov na decibely pomocou rovnice: dB_right = mag2db (amp_right)*(-1);

Potom pridajte funkciu: zatvorte všetky. tým sa zbavíte všetkých nepotrebných figúrok, ktoré sa mohli objaviť.

Pridajte funkciu pauzy, približne 10 sekúnd, aby mal používateľ k dispozícii čas na úpravu a prípravu na ľavé ucho.

Krok 4: Vytvorte rovnaký kód pre ľavé ucho

Vytvorte rovnaký kód pre ľavé ucho
Vytvorte rovnaký kód pre ľavé ucho

Zopakujte kód použitý pre pravé ucho, aby ste urobili ďalší segment, ktorý testuje ľavé ucho. Jediným rozdielom je zmena výstupného kanála, z ktorého bude zvuk pochádzať. Za týmto účelom otočte poradie hodnôt polí pre premennú Out. Malo by to vyzerať takto:

Out = [s; nuly (veľkosť (t))] ';

Ak tak urobíte, nevyjde žiadny zvuk z pravého kanála, ale z ľavého kanála!

Krok 5: Vytvorte obrázok vedľa seba na porovnanie údajov

Na porovnanie údajov vytvorte obrázok vedľa seba
Na porovnanie údajov vytvorte obrázok vedľa seba
Na porovnanie údajov vytvorte obrázok vedľa seba
Na porovnanie údajov vytvorte obrázok vedľa seba

Teraz vytvorte graf na zobrazenie údajov! Vkladáte dva grafy do jedného obrázku, tak to urobte!

obrázok (1); podkres (1, 2, 1); *** subplot (1, 2, 2) pre ten druhý

Pre každý subplot pridajte tieto záplaty so špecifickými farbami a súradnicami. Tieto časti sú oddelené od grafu v závislosti od toho, aký veľký je stupeň straty sluchu. Ako:

náplasť ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Subplot teraz bude obsahovať nasledujúce záplaty a scatterploty

text (3173, 8, 'normálny');

náplasť ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % zelená

text (3577, 33, 'mierny');

náplasť ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % tyrkysový

text (2870, 48, 'Mierny');

náplasť ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % Modrá

text (1739, 62, 'Stredne ťažký');

náplasť ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % Fialová

text (3142, 80, 'Vážny');

náplasť ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % červená

text (3200, 103, 'Hlboký')

Potom pridajte rozptylové grafy vľavo a vpravo! Môžeme vám poskytnúť všeobecný národný priemer! Tu:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-hodnota, ľavé uchoNat_dBL = [10 3 10 15 10 15]; % hodnota y

Nat_FreqR = [250 500 1000 2000 4000 8000]; % pravé ucho

Nat_dBR = [10 5 10 15 10 15];

Rozptylové grafy by mali rozoznať ľavý a pravý bod. Môžete robiť kríže a kruhy!

NL = rozptyl (Nat_FreqL, Nat_dBL, 'bx'); % vykresľuje modré krížové bodyNR = rozptyl (Nat_FreqR, Nat_dBR, 'ro'); % vykresľuje červené kruhy

Vytvorte legendu pre národný graf priradením ku konkrétnym premenným: legenda ([NL NR], {'title1', 'title2'});

Nastavte limit x z 250 na 8 000 Hz a limit y z -10 na 120 dB. Nezabudnite zmeniť svoje zvislé kliešte na yticks ()

Označte svoju os x „Frekvencia Hz“a os y „Rozstup dB“.

Prevráťte os y zhromaždením osi s ax = gca

Potom k nemu väzte vlastnosť smeru y pomocou: ax. YDir = 'reverz

Teraz je kód pre druhý zhruba rovnaký, ale bez legendy a vykresľuje bodové grafy s premennými z ľavého a pravého testu.

Po tom všetkom pridajte funkciu pauzy na asi 10 sekúnd, aby sa používateľ mohol pozrieť na svoje výsledky.

Krok 6: Ak chcete, pridajte malú poďakovanie

Ak chcete, pridajte malú ďakovnú správu!
Ak chcete, pridajte malú ďakovnú správu!

Je to len zábava, ak chcete, ale na poďakovanie a rozlúčku pridajte ešte jeden súbor imread (), imshow () a uiwait (msgbox ()) Okrem toho nezabudnite vložiť clf; zavrieť všetky; clc; aby sa všetko uzavrelo. Dobrá práca, zvládli ste to!

Odporúča: