Tartalomjegyzék:

Felnőtt hallásvizsgálat készítése a MATLAB segítségével: 6 lépés
Felnőtt hallásvizsgálat készítése a MATLAB segítségével: 6 lépés

Videó: Felnőtt hallásvizsgálat készítése a MATLAB segítségével: 6 lépés

Videó: Felnőtt hallásvizsgálat készítése a MATLAB segítségével: 6 lépés
Videó: Random Sims 4 (MONTÁZS) #1 (MAGYAR ASMR) 2024, November
Anonim
Hogyan készítsünk felnőtt hallásvizsgálatot a MATLAB segítségével
Hogyan készítsünk felnőtt hallásvizsgálatot a MATLAB segítségével

NYILATKOZAT: Tesztünk NEM orvosi diagnosztika, ezért nem szabad használni. A hallás pontos méréséhez forduljon orvoshoz.

A már meglévő anyagok felhasználásával csoportunk hallásvizsgálatot végzett. A teszt csak felnőttek és tizenévesek számára készült, mivel a kisgyermekek hallása különböző tartományokban fordul elő, és csak szakembernek kell mérnie.

Ezt a projektet a BME MATLAB osztályunkban dolgozva és a szinuszhullámok hangjaival játszva inspiráltuk. Arra voltunk kíváncsiak, hogy a szinuszhullámokat hogyan lehet megváltoztatni úgy, hogy a hangok különböző hangszíneken szólaljanak meg.

Ehhez a projekthez csak egy számítógépre volt szükségünk, amelyen MATLAB R2018b fut, és egy pár fülhallgatóra. A program humorosabbá tétele érdekében egy eredeti karaktert, Frances -t szerepeltettünk kabalájaként.

1. lépés: Hozzon létre felhasználói bemenetet a felhasználó életkorának elemzéséhez

Hozzon létre egy felhasználói adatot a felhasználó életkorának elemzéséhez
Hozzon létre egy felhasználói adatot a felhasználó életkorának elemzéséhez
Hozzon létre egy felhasználói adatot a felhasználó életkorának elemzéséhez
Hozzon létre egy felhasználói adatot a felhasználó életkorának elemzéséhez

Ennek a kódnak az első része egy felhasználói bevitel, amely eldönti, hogy elég idősek -e a hallásvizsgálat elvégzéséhez. Miért ne tehetné meg, ha ostoba képeket is hozzáadna kabalánkról, Francesről? Ehhez töltse le a mellékelt zip fájlt, majd bontsa ki a kódba húzható fájlba. Folytassa a rajzokkal teli fájl kötegelt feltöltésével az alábbi módon:

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

Az üzenetdobozok és a rajzok nagy képeinek bemutatása érdekében ezt a szórakoztató módszert használtuk Frances bemutatására. Egyszerűen imread egy választott képet a következő formátumban: variable = imread ('nameofpicture.jpg');

Ezután mutassa tovább az imshow (változó) használatával; ezután a MatLab alakjaként fog megjelenni, amikor futtatod!

Következnek az üzenetmezők, amelyeket a kódban használnak. Az uiwait () egy olyan funkció, amelyben a kódot leállítják, amíg az uiwait számára kiválasztott művelet befejeződik. Ez a választott funkció az msgbox ('üzenet', 'cím', 'ikon')!

Nyugodtan megváltoztathatja Frances által közölt üzeneteket, amíg követi a fenti msgbox () formátumot. Ha Frances képeket szeretne használni, címkézze az „ikont” „egyéni” címkével, és folytassa ezt vesszővel és a kiválasztott kép imread változójával! Használhatja az előre beállított „ikon” típusokat is. így kell kinéznie:

szia = imread ('Regular.jpg'); % beolvassa a képet a feltöltött fájlból (show); uiwait (msgbox ('Helló, és köszönjük, hogy hallásvizsgálatunkat választotta! Ez Frances, és ma segíteni fog a tesztelésben!', 'Üdvözöljük!', 'egyéni', szia));

Ezután hozzon létre egy bemenetet, amely így kérdezi a felhasználó életkorát!

UserAge = input ('Mielőtt elkezdenénk ezt a tesztet, hány éves (év) vagy? (Pl. 32, 56,…) n', 's');

MEGJEGYZÉS: ha a számok furcsák, és túl sok van, használja a Bezárás mindent, hogy eltávolítsa a korábbi számokat a kód futása közben

Ezután hozzon létre kapcsoló tok szerkezetet! Ne feledje, hogy a felhasználói bevitel karakterláncban van, és ezt számszerű értékre kell konvertálnia. Tehát használja az str2double -t (UserAge). Minden esetnek korosztályának kell lennie, például 4–6 vagy 18–40. Ahhoz, hogy a változó igaz legyen az esetek egyikében, használja a num2cell (tömb) parancsot, például:

kapcsoló str2double (UserAge) % a változót karakterláncból numerikus értékre változtatja, esetszám num2cell (0: 3)

frances = imread ('Tojás.jpg');

imshow (frances);

uiwait (msgbox ('Ön magzat! Frances úgy gondolja, hogy a hallásvizsgálatát inkább orvosnál kell elvégeztetni!', 'Teszt megtagadva!', 'custom', frances));

Visszatérés

A korábbi csoportokat vissza kell küldeni, hogy a felhasználó ne lépjen tovább a kóddal.

Ne felejtse el befejezni a tok szerkezetét, és zárja be az összes számot.

2. lépés: Tesztelje a hangot a felhasználó számára

Tesztelje a hangot a felhasználó számára
Tesztelje a hangot a felhasználó számára

Ez a szegmens annak biztosítására szolgál, hogy a résztvevő hangja ne legyen túl halk és se túl hangos.

Hogy figyelmeztessük a felhasználót, egy üzenetablak jelenik meg, és várja a felhasználó megerősítését, mielőtt folytatja a hanggal: uiwait (msgbox ('A teszt megkezdése előtt szeretnénk egy hangtesztet végezni, hogy megbizonyosodjunk a hangerőről igaza van! Kész? ',' Várj! ',' help '));

Szinuszhullámot játszik le 1 amplitúdóval és 1000 Hz mintavételi frekvenciával: T = [0: 1/SampleRate: 2]; y = 1*sin (2*pi*200*T); hang (y, SampleRate);

A felhasználó ekkor feltesz egy kérdést, amelyet a felhasználó válaszol: Q = input ('Hallod a hangot? [Y/n] n', 's');

Aztán egy ideig keresni kell, hogy mikor Q == 'n', ha igaz, akkor a hang megismétlődik, és újra megkérdezi a felhasználót, amíg a válasz 'n' -ről 'y' -ra nem változik: míg Q == 'n', ha strcmp (Q, 'n') disp ('Hangosítsa a számítógép hangerejét.'); wait_sound; szünet (2); Q = input ('Hallod a hangot? [Y/n] n', 's'); vége vége

Ezután várni kell egy pillanatra, mielőtt továbbviszi a kód tényleges vizsgálati részét.

3. lépés: Végezze el a jobb fül audiometriai vizsgálatát

Végezze el a jobb fül audiometriai vizsgálatát
Végezze el a jobb fül audiometriai vizsgálatát

Ebben a kódban egy ciklus 6 iterációra fut, különböző gyakorisággal és hangerővel minden fülre. A tesztelni kívánt fültől függően az Out változó hangja az egyik sorban, a nulla pedig a másikban lesz.

Először készítsen két üres sorvektorot, hogy rögzítse a felhasználó által hallott hang frekvenciáit és amplitúdóját.

Ez a rész ciklusban van indexelve, bármennyi hangot is szeretne lejátszani, ha véletlenszerűen szeretné kiválasztani a lejátszott frekvenciákat és amplitúdót.

F a gyakoriság: r = (rand*10000); Fs = 250 + r; (a rand függvény véletlenszerűen generált frekvencia létrehozása) t egy bizonyos előrehaladott idő, amelyet a következők határozzák meg: t = linspace (0, Fs*2, Fs*2); s a szinuszhullám: s = sin (2*pi*t*1000); (ezt meg lehet szorozni a w véletlenszerű változóval, hogy véletlenszerű amplitúdó/dB értéket kapjunk a hangfunkcióhoz: w = rand;)

A jobb fül kimenete: Out = [nullák (méret (t))); s] ';

A kimenetek a következő kódon keresztül játszhatók le: hang (Out, Fs)

A következő lépés egy felhasználói felület létrehozása a kódrekordokkal, hallotta -e a hangot a felhasználó vagy sem.

Először készítsen egy ábrát, és határozza meg, hogy az ábra milyen pozícióban jelenik meg: gcbf = ábra ('pos', [30 800 350 150]);

*** Ha a gomb nem jelenik meg az Ön számára, akkor az ábra helyzete, amint azt a fenti tömb mutatja, rosszul helyezkedhet el a számítógép számára. Ennek megoldásához módosítsa a 30 és 800 értékeket a kívánt pozícióra. Például a [0 0 350 150] megadásával megjelenik a gui gomb a monitor bal alsó sarkában. ***

Egy váltógombbal rögzítheti, amikor a felhasználó hallja a hangot, és a pozíció és a megjelenítés testreszabható: tb = uicontrol ('Stílus', 'togglebutton', 'String', 'Nyomja meg a gombot, ha hangot hall'), tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Visszahívás ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Ennek a kódnak a kódja folytatódik, és az üres vektorok értéket adnak hozzá, ha megnyomja a gombot.

Ezután hozzon létre egy várakozási funkciót a gomb válaszának felvételéhez, és aktiválja a kódot a gombban, amikor megnyomja: h = randi ([4, 7]); uiwait (gcbf, h); (a h véletlenszerű változót végeztük, így a résztvevők nem tudtak csalni, és nem tudták meghatározni a válaszadáshoz szükséges másodpercek számát.)

Miután a ciklus befejeződött, tartsa a frekvencia kimeneti változót (freq_right) Hz -ben, így hagyja békén. Ezután konvertálja a dB_right változót erősítőkből decibelbe az alábbi egyenlettel: dB_right = mag2db (amp_right)*(-1);

Ezután adja hozzá a függvényt: zárjon be mindent. ez kikerül az esetlegesen felbukkanó felesleges számok közül.

Adjon hozzá egy körülbelül 10 másodperces szüneteltetési funkciót, hogy legyen ideje a felhasználónak beállítani és felkészülni a bal fülre.

4. lépés: Hozza létre ugyanazt a kódot a bal fül számára

Hozza létre ugyanazt a kódot a bal fül számára
Hozza létre ugyanazt a kódot a bal fül számára

Ismételje meg a jobb fülhöz használt kódot, hogy elkészítse a következő szegmenst, amely a bal fülét teszteli. Az egyetlen különbség az, hogy megváltozik, hogy melyik kimeneti csatornáról jön a hang. Ehhez fordítsa meg az Out változó tömb értékeinek sorrendjét. Ennek így kell kinéznie:

Kimenet = [s; nullák (méret (t))]”;

Ezzel nem a jobb csatornából, hanem a bal csatornából jön ki hang!

5. lépés: Készítsen egymás melletti ábrát az adatok összehasonlításához

Készítsen egymás melletti ábrát az adatok összehasonlításához
Készítsen egymás melletti ábrát az adatok összehasonlításához
Készítsen egymás melletti ábrát az adatok összehasonlításához
Készítsen egymás melletti ábrát az adatok összehasonlításához

Most készíts grafikont az adatok megjelenítésére! Két grafikont helyez egyetlen figurába, ezért tegye ezt!

ábra (1); részterület (1, 2, 1); *** alterület (1, 2, 2) a másikhoz

Minden egyes részterülethez adja hozzá ezeket a foltokat meghatározott színekkel és koordinátákkal. Ezek a szakaszok a grafikonon vannak, attól függően, hogy mekkora a halláskárosodás mértéke. Például így:

tapasz ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold on % Az alterület most a következő javításokat és szórványokat fogja tartalmazni

szöveg (3173, 8, 'Normál');

tapasz ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % zöld

szöveg (3577, 33, 'Enyhe');

tapasz ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % cián

szöveg (2870, 48, 'Mérsékelt');

tapasz ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % kék

szöveg (1739, 62, 'Mérsékelten súlyos');

tapasz ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % lila

szöveg (3142, 80, 'Súlyos');

tapasz ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % piros

szöveg (3200, 103, 'mély')

Ezután adja hozzá a bal és jobb szórási parcellákat! Általános országos átlagot tudunk biztosítani Önnek! Itt:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-érték, bal fülNat_dBL = [10 3 10 15 10 15]; % y-érték

Nat_FreqR = [250 500 1000 2000 4000 8000]; % jobb ful

Nat_dBR = [10 5 10 15 10 15];

A szórási ábráknak meg kell határozniuk a bal és a jobb pontot. Csinálhat kereszteket és köröket!

NL = szórás (Nat_FreqL, Nat_dBL, 'bx'); % kék keresztpontokat ábrázolNR = szórás (Nat_FreqR, Nat_dBR, 'ro'); % piros köröket ábrázol

Készítsen egy legendát a nemzeti gráfhoz, hozzárendelve azt bizonyos változókhoz: legenda ([NL NR], {'title1', 'title2'});

Állítsa be az x korlátot 250 és 8000 Hz között, az y korlátot pedig -10 és 120 dB között. Ne felejtse el megváltoztatni a függőleges kullancsokat az yticks ( segítségével

Címkézze az x tengelyét "Frequency Hz", az y tengelyét pedig "Pitch dB" címkével.

Fordítsa meg az y tengelyt úgy, hogy összegyűjti a tengelyt ax = gca -val

Ezután kösse hozzá az y irány tulajdonságát: ax. YDir = 'reverse

Most a második kódja nagyjából ugyanaz, de a jelmagyarázat nélkül, és a scatterplotokat a bal és jobb teszt változóival ábrázolva.

Mindezek után adjon hozzá egy szünet funkciót körülbelül 10 másodpercig, hogy a felhasználó megtekinthesse az eredményeket.

6. lépés: Ha szeretne, adjon hozzá egy kis köszönő üzenetet

Írj egy kis köszönő üzenetet, ha szeretnéd!
Írj egy kis köszönő üzenetet, ha szeretnéd!

Ez csak szórakozásból szolgál, ha szeretné, de adjon hozzá még egy imread (), imshow () és uiwait (msgbox ()) köszönetet és búcsút! Ettől eltekintve ne felejtse el feltenni a clf; minden bezárása; clc; hogy mindent lezárjon. Jó munkát csináltál!

Ajánlott: