Tartalomjegyzék:
- 1. lépés: Hozzon létre felhasználói bemenetet a felhasználó életkorának elemzéséhez
- 2. lépés: Tesztelje a hangot a felhasználó számára
- 3. lépés: Végezze el a jobb fül audiometriai vizsgálatát
- 4. lépés: Hozza létre ugyanazt a kódot a bal fül számára
- 5. lépés: Készítsen egymás melletti ábrát az adatok összehasonlításához
- 6. lépés: Ha szeretne, adjon hozzá egy kis köszönő üzenetet
Videó: Felnőtt hallásvizsgálat készítése a MATLAB segítségével: 6 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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
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
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
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
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
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
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:
Távoli aktiválású sprinkler készítése PiFace és Ubidots segítségével: 13 lépés
Távoli aktiválású öntözőgép építése PiFace és Ubidots segítségével: Ez egy remek példa, amely megtanítja Önt, hogyan kell a Raspberry Pi, a PiFace és az Ubidots használatával öntözni kertjét messziről. A telefon segítségével távolról vezérelhet egy elektro-szelepet, amellyel öntözheti növényeit bármely helyről
Garmin térképek készítése az Openstreetmap segítségével: 4 lépés
Garmin térképek készítése az Openstreetmap segítségével: Szeretek túrázni, de nem szoktam térképeket olvasni. Ezért vettem magamnak egy garmin GPSMAP64 GPS -t. A térképek kihívásában tanítottam egy útmutatót arról, hogyan készítsek térképeket egy Garmin GPS -hez, ez egy nagyon jól megírt utasítás, és elgondolkodtatott, hogy írjam meg
Óra készítése az M5stick C segítségével Arduino IDE - használatával RTC valós idejű óra az M5stack M5stick-C-vel: 4 lépés
Óra készítése az M5stick C segítségével Arduino IDE | használatával RTC valós idejű óra az M5stack M5stick-C-vel: Sziasztok srácok, ebben az utasításban megtanuljuk, hogyan készítsünk órát az m5stick m5stick fejlesztőpaneljével az Arduino IDE segítségével. Így az m5stick megjeleníti a dátumot, az időt és az amp; a hónap hete a kijelzőn
Radar készítése Arduino segítségével - Arduino projekt: 4 lépés
Radar készítése Arduino segítségével | Arduino projekt: Ebben a cikkben megtanítom, hogyan készíthet egyszerű radart az arduino segítségével. Tekintse meg a teljes videó bemutatót itt: Kattintson rám
Pt.2 Bluetooth -adapter készítése (kompatibilis hangszóró készítése): 16 lépés
Pt.2 Bluetooth -adapter készítése (kompatibilis hangszóró készítése): Ebben az oktatóanyagban megmutatom, hogyan használhatom Bluetooth -adapteremet egy régi hangszóró Bluetooth -kompatibilissé tételéhez.*Ha még nem olvasta el az első utasítást a " egy Bluetooth adapter " Javaslom, hogy ezt tegye, mielőtt folytatja. C