Talaan ng mga Nilalaman:

Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB: 6 Mga Hakbang
Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB: 6 Mga Hakbang

Video: Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB: 6 Mga Hakbang

Video: Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB: 6 Mga Hakbang
Video: 100 ENGLISH IDIOMS na Ginagamit ng mga Native English Speaker Araw-araw 2024, Hulyo
Anonim
Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB
Paano Gumawa ng isang Pagsubok sa Pagdinig ng Matanda Gamit ang MATLAB

DISCLAIMER: Ang aming pagsubok ay HINDI isang medikal na diagnostic at hindi dapat gamitin tulad nito. Upang tumpak na masukat ang pagdinig, mangyaring magpatingin sa isang medikal na propesyonal.

Gamit ang mga materyales na mayroon na kami, ang aming grupo ay gumawa ng isang pagsubok sa pandinig. Ang aming pagsubok ay para lamang sa paggamit ng may sapat na gulang at tinedyer sapagkat ang pandinig ng mga bata ay dumating sa iba't ibang mga saklaw at dapat na sukatin lamang ng isang propesyonal.

Ang proyektong ito ay binigyang inspirasyon habang nagtatrabaho sa aming klase ng BME MATLAB at nagpe-play ng mga tunog na ginawa ng mga alon ng sine. Interesado kami sa mga paraan na maaaring mabago ang isang alon ng sine upang magpatugtog ng tunog sa iba't ibang mga pitch.

Ang kailangan lang namin para sa proyektong ito ay isang computer na nagpapatakbo ng MATLAB R2018b at isang pares ng earbuds. Nagsama kami ng isang orihinal na character, Frances, bilang isang maskot upang gawing mas nakakatawa ang programa.

Hakbang 1: Lumikha ng Input ng Gumagamit upang Suriin ang Edad ng Gumagamit

Lumikha ng Input ng Gumagamit upang Suriin ang Edad ng Gumagamit
Lumikha ng Input ng Gumagamit upang Suriin ang Edad ng Gumagamit
Lumikha ng Input ng Gumagamit upang Suriin ang Edad ng Gumagamit
Lumikha ng Input ng Gumagamit upang Suriin ang Edad ng Gumagamit

Ang unang bahagi sa code na ito ay upang gumawa ng isang input ng gumagamit kung saan magpapasya kung sila ay sapat na upang matuloy upang gawin ang pagsubok sa pagdinig. Bakit hindi mo ito gawin sa pamamagitan ng pagdaragdag sa mga nakakalokong larawan ng aming maskot na si Frances? Upang magawa ito, i-download ang zip file na kasama at pagkatapos ay i-extract ito sa isang file na maaaring hilahin sa code. Magpatuloy sa pag-upload ng batch ng file na puno ng mga guhit sa pamamagitan ng paggamit nito:

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

Upang maipakita ang mga kahon ng mensahe at malalaking larawan ng mga guhit, ginamit namin ang nakakatuwang pamamaraang ito ng pagpapakita sa iyo ng Frances. I-imread lamang ang isang imahe na iyong pinili kasama ang format: variable = imread ('nameofpicture.jpg');

Pagkatapos ay magpatuloy upang ipakita ito sa pamamagitan ng paggamit ng imshow (variable); lalabas ito bilang isang figure sa iyong MatLab kapag pinatakbo mo ito!

Susunod ang mga kahon ng mensahe na ginagamit sa buong code. Ang uiwait () ay isang pagpapaandar kung saan ang code ay nahinto hanggang ang fuction na napili para sa uiwait ay tapos na. Ang piniling pagpapaandar na ito ay msgbox ('mensahe', 'pamagat', 'icon')!

Maaari mong huwag mag-atubiling baguhin ang mga mensahe na sinabi ni Frances hangga't sinusunod mo ang format na msgbox () sa itaas. Kung nais mong gamitin ang mga larawan ng Frances, lagyan ng label ang 'icon' bilang 'pasadyang' at magpatuloy sa isang kuwit at variable ng imread ng larawang pinili mo! Maaari mo ring gamitin ang mga preset na uri ng 'icon' pati na rin. dapat ganito ang hitsura:

hi = imread ('Regular.jpg'); Binabasa ni% ang imahe mula sa file na nai-uploadimshow (hi); uiwait (msgbox ('Kumusta at salamat sa pagpili ng aming pagsubok sa pandinig! Ito ang Frances at tutulungan ka niya ngayon sa iyong pagsubok!', 'Maligayang pagdating!', 'pasadyang', hi));

Susunod na lumikha ng isang input na nagtatanong sa edad ng gumagamit na tulad nito!

UserAge = input ('Bago namin simulan ang pagsubok na ito, ilang taon ka na (taon)? (Hal. 32, 56,…) n', 's');

TANDAAN: kung ang mga numero ay kakaiba at maraming, gamitin ang lahat nang malapit upang maalis ang mga naunang numero habang tumatakbo ang iyong code

Pagkatapos ay lumikha ng isang istraktura ng switch case! Tandaan na ang input ng gumagamit ay nasa string at kailangan mong i-convert iyon sa isang numerong halaga. Kaya gumamit ng str2double (UserAge). Ang bawat kaso ay dapat magkaroon ng isang saklaw ng mga edad tulad ng 4 hanggang 6 o 18 hanggang 40. upang magkaroon ng variable upang mapatunayan na totoo para sa isa sa mga kaso na gumagamit ng num2cell (array) tulad nito:

lumipat str2double (UserAge)% nagbabago variable mula sa isang string sa isang numerong halaga kaso num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (frances);

uiwait (msgbox ('Ikaw ay isang fetus! Sa palagay ni Frances ay dapat mong gawin ang iyong pagsubok sa pandinig sa isang doktor sa halip!', 'Pagsubok na Tinanggihan!', 'pasadyang', mga pransya));

bumalik ka

Ang naunang mga pangkat ay dapat ibalik upang maiwasan ang gumagamit na magpatuloy sa code.

Tandaan na wakasan ang istraktura ng kaso at isara ang lahat ng mga numero.

Hakbang 2: Subukan ang Audio para sa Gumagamit

Subukan ang Audio para sa Gumagamit
Subukan ang Audio para sa Gumagamit

Umiiral ang segment na ito upang matiyak na ang tunog ng kalahok sa kanilang aparato ay hindi masyadong tahimik o masyadong malakas.

Upang mabigyan ang gumagamit ng ilang babala isang kahon ng mensahe ay lalabas at naghihintay para sa kumpirmasyon mula sa gumagamit bago magpatuloy na may tunog: uiwait (msgbox ('Bago magsimula ang pagsubok, nais naming gumawa ng isang pagsubok sa audio upang matiyak na ang iyong dami ay tama! Handa na? ',' Hold on! ',' help '));

Ang isang alon ng sine ay pinatugtog na may amplitude na 1 at ang rate ng sample na 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * kasalanan (2 * pi * 200 * T); tunog (y, SampleRate);

Pagkatapos ay tinanong ang gumagamit ng isang katanungan na may isang naka-input na tugon ng gumagamit: Q = input ('Naririnig mo ba ang tunog? [Y / n] n', 's');

Pagkatapos ay mayroong pansamantalang hanapin kung kailan Q == 'n', kung totoo kung gayon ang tunog ay umuulit at tinanong muli ang gumagamit hanggang sa ang sagot ay nagbago mula sa 'n' hanggang 'y': habang ang Q == 'n' kung strcmp (Q, 'n') disp ('Palakasin ang dami ng iyong computer.'); wait_sound; i-pause (2); Q = input ('Naririnig mo ba ang tunog ngayon? [Y / n] n', 's'); pagtatapos ng wakas

Mayroong pagkatapos ng isang sandali ng paghihintay bago dalhin sa aktwal na bahagi ng pagsusuri ng code.

Hakbang 3: Gawin ang Audiometry Test para sa Tamang Tainga

Gawin ang Audiometry Test para sa Tamang Tainga
Gawin ang Audiometry Test para sa Tamang Tainga

Sa code na ito, tatakbo ang isang loop para sa 6 na pag-ulit na may iba't ibang mga frequency at volume para sa bawat indibidwal na tainga. Nakasalalay sa tainga na nais mong subukan, ang variable na Out ay magkakaroon ng tunog sa isang hilera at mga zero sa isa pa.

Una kang gumawa ng dalawang walang laman na mga vector na linya upang maitala ang mga frequency at malawak ng tunog na naririnig ng gumagamit.

Ang bahaging ito ay nasa isang na-index para sa loop para sa maraming mga tunog na nais mong i-play kung nais mong i-randomize ang mga frequency na nilalaro at ang amplitude.

Ang F ay ang dalas: r = (rand * 10000); Fs = 250 + r; (ang rand function ay upang lumikha ng isang random na nabuo dalas) t ay isang tiyak na dami ng oras na umuunlad matukoy ng: t = linspace (0, Fs * 2, Fs * 2); s ay ang sine alon: s = sin (2 * pi * t * 1000); (maaari itong i-multiply ng random variable w upang lumikha ng isang random na amplitude / dB na halaga para sa tunog function: w = rand;)

Ang output para sa kanang tainga ay: Out = [zero (laki (t)); s] ';

Ang mga output ay nilalaro sa pamamagitan ng code: tunog (Out, Fs)

Ang susunod na hakbang ay upang gumawa ng isang interface ng gumagamit kasama ang mga tala ng code kung narinig ng gumagamit ang tunog o hindi.

Una kang gumawa ng isang figure at matukoy ang posisyon kung saan lilitaw ang figure: gcbf = figure ('pos', [30 800 350 150]);

*** Kung ang pindutan ay hindi lilitaw para sa iyo, ang posisyon ng figure, tulad ng ipinakita ng array sa itaas, ay maaaring nakaposisyon nang mali para sa iyong computer. Upang malutas ito, baguhin ang mga halagang 30 at 800 sa alinmang posisyon na nais mo. Halimbawa, ang pagkakaroon ng [0 0 350 150] ay magbubuga ng pindutan ng gui sa kaliwang ibabang bahagi ng monitor. ***

Ginagawa ang isang togglebutton upang maitala kapag naririnig ng gumagamit ang tunog, at maaaring ipasadya ang posisyon at display: tb = uicontrol ('Style', 'togglebutton', 'String', 'Pindutin ang pindutan kapag nakarinig ka ng tunog', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Ang partikular na code na ito ay may resume ng code at ang mga walang laman na vector ay nagdaragdag ng isang halaga kung pinindot ang pindutan.

Pagkatapos ay lumikha ng isang function ng paghihintay upang makuha ang tugon ng pindutan at buhayin ang code sa pindutan kapag pinindot: h = randi ([4, 7]); uiwait (gcbf, h); (Ginawa namin ang random variable h kaya't ang mga kalahok ay hindi maaaring mandaya at matukoy ang bilang ng mga segundo na kinakailangan upang tumugon.)

Matapos ang loop ay natapos, panatilihin ang variable ng output output (freq_right) sa Hz kaya iwanang mag-isa. Pagkatapos ay i-convert ang variable ng dB_right mula sa mga amp sa mga decibel sa pamamagitan ng paggamit ng equation: dB_ Right = mag2db (amp_ Right) * (- 1);

Pagkatapos idagdag ang pagpapaandar: isara ang lahat. lalabas ito sa anumang hindi kinakailangang mga pigura na maaaring lumitaw.

Magdagdag ng isang pag-andar ng pag-pause, mga 10 segundo, upang magbigay ng oras para sa gumagamit na ayusin at maghanda para sa kaliwang tainga.

Hakbang 4: Lumikha ng Parehong Code para sa Kaliwang Tainga

Lumikha ng Parehong Code para sa Kaliwang Tainga
Lumikha ng Parehong Code para sa Kaliwang Tainga

Ulitin ang code para sa ginamit para sa kanang tainga upang gawin ang susunod na segment na sumusubok sa kaliwang tainga. Ang pagkakaiba lamang ay ang pagbabago kung aling output channel ang tunog ay magmumula. Upang gawin ito, i-flip ang pagkakasunud-sunod ng mga halaga ng array para sa variable na Out. Dapat ganito ang hitsura:

Lumabas = [s; mga zero (laki (t))] ';

Sa paggawa nito, walang tunog ang lalabas sa tamang channel ngunit sa halip ang kaliwang channel!

Hakbang 5: Gumawa ng isang Side-By-Side Figure upang Ihambing ang Data

Gumawa ng isang Side-By-Side Figure upang Ihambing ang Data
Gumawa ng isang Side-By-Side Figure upang Ihambing ang Data
Gumawa ng isang Side-By-Side Figure upang Ihambing ang Data
Gumawa ng isang Side-By-Side Figure upang Ihambing ang Data

Ngayon gumawa ng isang graph upang ipakita ang data! Naglalagay ka ng dalawang mga graphic sa isang solong figure kaya gawin ito!

figure (1); subplot (1, 2, 1); *** subplot (1, 2, 2) para sa isa pa

Para sa bawat subplot, idagdag sa mga patch na ito na may mga tukoy na kulay at coordinate. Ang seksyong ito ay wala sa grap depende sa kung gaano ito kalaki sa antas ng pagkawala ng pandinig. Tulad nito:

patch ([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); % dilaw sa% Ang subplot ay hahawak sa mga sumusunod na patch at dispersplot

teksto (3173, 8, 'Normal');

patch ([250 8000 8000 250], [40 40 25 25], [0 0.75 0.25]); % berde

teksto (3577, 33, 'Banayad');

patch ([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % cyan

teksto (2870, 48, 'Katamtaman');

patch ([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % bughaw

teksto (1739, 62, 'Katamtamang Malubhang');

patch ([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % lila

teksto (3142, 80, 'Malubha');

patch ([250 8000 8000 250], [120 120 90 90], [0.96, 0.24, 0.24]); % pula

teksto (3200, 103, 'Malalim')

Pagkatapos ay idagdag ang kaliwa at kanang mga kalat ng kalat! Maaari kaming magbigay ng isang pangkalahatang average ng pambansang para sa iyo! Dito:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-halaga, kaliwang taingaNat_dBL = [10 3 10 15 10 15]; % y-halaga

Nat_FreqR = [250 500 1000 2000 4000 8000]; % kanang tenga

Nat_dBR = [10 5 10 15 10 15];

Dapat na makilala ng mga nakakalat na plot ang kaliwa at kanang mga puntos. Maaari kang gumawa ng mga krus at bilog!

NL = magkalat (Nat_FreqL, Nat_dBL, 'bx'); % plots blue cross pointNR = nagkalat (Nat_FreqR, Nat_dBR, 'ro'); % mga plot ng pulang bilog

Gumawa ng isang alamat para sa pambansang grap sa pamamagitan ng pagtatalaga nito sa mga tukoy na variable: alamat ([NL NR], {'title1', 'title2'});

Itakda ang iyong x limit mula 250 hanggang 8000 Hz at ang iyong limitasyon mula -10 hanggang 120 dB. Tandaan na baguhin ang iyong mga patayong ticks gamit ang mga ytick ()

Lagyan ng label ang iyong x axis na "Frequency Hz" at ang iyong axis na "Pitch dB".

Baligtarin ang axis ng y sa pamamagitan ng pagtipon ng axis gamit ang ax = gca

Pagkatapos ay itali ang pag-aari ng direksyon ng y dito gamit ang: ax. YDir = 'reverse

Ngayon ang code para sa pangalawa ay halos pareho ngunit walang alamat at graphing ang mga dispersplot na may mga variable mula sa kaliwa at kanang mga pagsubok.

Matapos ang lahat ng ito, magdagdag ng pag-andar ng pause para sa halos 10 segundo upang ang gumagamit ay maaaring tumingin sa kanilang mga resulta.

Hakbang 6: Magdagdag ng isang Maliit na Mensahe ng Salamat Kung Gusto mo

Magdagdag ng isang maliit na Mensahe ng Salamat Kung Gusto mo!
Magdagdag ng isang maliit na Mensahe ng Salamat Kung Gusto mo!

Ito ay para lamang sa kasiyahan kung nais mo ngunit magdagdag ng isa pang imread (), imshow () at uiwait (msgbox ()) para sa isang pasasalamat at paalam! Maliban dito, tandaan na maglagay ng clf; isara ang lahat; clc; upang maisara ang lahat. Magandang trabaho nagawa mo ito!

Inirerekumendang: