สารบัญ:
- ขั้นตอนที่ 1: สร้างอินพุตของผู้ใช้เพื่อวิเคราะห์อายุของผู้ใช้
- ขั้นตอนที่ 2: ทดสอบเสียงสำหรับผู้ใช้
- ขั้นตอนที่ 3: ทำการทดสอบ Audiometry สำหรับหูข้างขวา
- ขั้นตอนที่ 4: สร้างรหัสเดียวกันสำหรับหูข้างซ้าย
- ขั้นตอนที่ 5: สร้างภาพเคียงข้างกันเพื่อเปรียบเทียบข้อมูล
- ขั้นตอนที่ 6: เพิ่มข้อความขอบคุณเล็กน้อยหากคุณต้องการ
วีดีโอ: วิธีทำการทดสอบการได้ยินของผู้ใหญ่โดยใช้ MATLAB: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
การปฏิเสธความรับผิด: การทดสอบของเราไม่ใช่การวินิจฉัยทางการแพทย์ และไม่ควรใช้เช่นนี้ หากต้องการวัดการได้ยินอย่างแม่นยำ โปรดพบแพทย์ผู้เชี่ยวชาญ
กลุ่มของเราทำการทดสอบการได้ยินโดยใช้วัสดุที่เรามีอยู่แล้ว การทดสอบของเรามีไว้สำหรับผู้ใหญ่และวัยรุ่นเท่านั้น เพราะการได้ยินของเด็กเล็กมีหลากหลายช่วง และควรวัดโดยผู้เชี่ยวชาญเท่านั้น
โปรเจ็กต์นี้ได้รับแรงบันดาลใจขณะทำงานในคลาส BME MATLAB และเล่นกับเสียงที่เกิดจากคลื่นไซน์ เราสนใจวิธีที่จะเปลี่ยนคลื่นไซน์ให้เล่นเสียงในระดับเสียงต่างๆ
ทั้งหมดที่เราต้องการสำหรับโครงการนี้คือคอมพิวเตอร์ที่ใช้ MATLAB R2018b และเอียร์บัดหนึ่งคู่ เราได้รวมตัวละครดั้งเดิมอย่าง Frances ไว้เป็นมาสคอตเพื่อทำให้รายการมีอารมณ์ขันมากขึ้น
ขั้นตอนที่ 1: สร้างอินพุตของผู้ใช้เพื่อวิเคราะห์อายุของผู้ใช้
ส่วนแรกของรหัสนี้คือการป้อนข้อมูลโดยผู้ใช้ซึ่งจะตัดสินใจว่าพวกเขาอายุมากพอที่จะดำเนินการทดสอบการได้ยินหรือไม่ ทำไมไม่เพิ่มรูปภาพโง่ๆ ของมาสคอตของเรา ฟรานเซสล่ะ? ในการทำเช่นนั้น ให้ดาวน์โหลดไฟล์ zip ที่รวมไว้ จากนั้นแตกไฟล์เป็นไฟล์ที่สามารถดึงขึ้นมาในโค้ดได้ ดำเนินการอัปโหลดไฟล์แบบกลุ่มโดยใช้สิ่งนี้:
Dir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings';GetDir = 'C:\Users\phoeb\OneDrive\Documents\MATLAB\Frances Drawings\*.jpg';
เพื่อนำเสนอกล่องข้อความและรูปภาพขนาดใหญ่ของภาพวาด เราใช้วิธีสนุกๆ นี้ในการแสดง Frances ให้คุณดู เพียงอิมเมจรูปภาพที่คุณเลือกด้วยรูปแบบ: variable = imread('nameofpicture.jpg');
จากนั้นดำเนินการแสดงโดยใช้ imshow(ตัวแปร); จากนั้นจะปรากฏเป็นตัวเลขใน MatLab ของคุณเมื่อคุณเรียกใช้!
ถัดมาเป็นกล่องข้อความที่ใช้ตลอดทั้งโค้ด uiwait() เป็นฟังก์ชันที่โค้ดหยุดทำงานจนกว่าฟังก์ชันที่เลือกสำหรับ uiwait จะเสร็จสิ้น ฟังก์ชันที่เลือกนี้คือ msgbox('message', 'title', 'icon')!
คุณสามารถเปลี่ยนข้อความที่ฟรานเซสพูดได้ตามสบายตราบเท่าที่คุณทำตามรูปแบบ msgbox() ด้านบน หากคุณต้องการใช้รูปภาพของ Frances ให้ติดป้ายกำกับ 'ไอคอน' เป็น 'กำหนดเอง' และดำเนินการด้วยเครื่องหมายจุลภาคและตัวแปรของอิมเมจของรูปภาพที่คุณเลือก! คุณยังสามารถใช้ประเภท 'ไอคอน' ที่ตั้งไว้ล่วงหน้าได้เช่นกัน ควรมีลักษณะดังนี้:
สวัสดี = imread('Regular.jpg'); % อ่านรูปภาพจากไฟล์ uploadedimshow(hi); uiwait(msgbox('สวัสดีและขอขอบคุณที่เลือกการทดสอบการได้ยินของเรา นี่คือ Frances และเขาจะช่วยคุณในการทดสอบในวันนี้!', 'ยินดีต้อนรับ!', 'กำหนดเอง', สวัสดี));
ถัดไปสร้างอินพุตที่ถามอายุของผู้ใช้เช่นนั้น!
UserAge = input('ก่อนที่เราจะเริ่มต้นการทดสอบนี้ คุณอายุเท่าไหร่ (ปี) (เช่น 32, 56, …)\n', 's');
หมายเหตุ: หากตัวเลขนั้นแปลกและมีจำนวนมากเกินไป ให้ใช้ close all เพื่อลบตัวเลขก่อนหน้าในขณะที่โค้ดของคุณทำงาน
จากนั้นสร้างโครงสร้างเคสสวิตช์! จำไว้ว่าอินพุตของผู้ใช้เป็นสตริง และคุณต้องแปลงค่านั้นเป็นค่าตัวเลข ดังนั้นให้ใช้ str2double(UserAge) แต่ละกรณีควรมีช่วงอายุเช่น 4 ถึง 6 หรือ 18 ถึง 40 เพื่อให้ตัวแปรตรวจสอบว่าเป็นจริงสำหรับกรณีใดกรณีหนึ่งให้ใช้ num2cell(array) ดังนี้:
switch str2double(UserAge) % เปลี่ยนตัวแปรจากสตริงเป็นค่าตัวเลข case num2cell(0:3)
ฟรานเซส = imread('Egg.jpg');
imshow(ฟรานซ์);
uiwait(msgbox('You are a fetus! Frances คิดว่าคุณควรทำการทดสอบการได้ยินกับแพทย์แทน!', 'Test Denied!', 'custom', frances));
กลับ
ควรส่งคืนกลุ่มก่อนหน้านี้เพื่อป้องกันไม่ให้ผู้ใช้ดำเนินการกับรหัส
อย่าลืมปิดโครงสร้างเคสและปิดตัวเลขทั้งหมด
ขั้นตอนที่ 2: ทดสอบเสียงสำหรับผู้ใช้
ส่วนนี้มีอยู่เพื่อให้แน่ใจว่าเสียงของผู้เข้าร่วมบนอุปกรณ์ของตนไม่ดังเกินไปหรือดังเกินไป
เพื่อให้ผู้ใช้มีกล่องข้อความปรากฏขึ้นและรอการยืนยันจากผู้ใช้ก่อนที่จะดำเนินการต่อด้วยเสียง: uiwait(msgbox('ก่อนการทดสอบเริ่มต้น เราต้องการทดสอบเสียงเพื่อให้แน่ใจว่าระดับเสียงของคุณ ถูกต้องไหม พร้อมหรือยัง', 'เดี๋ยวก่อน!', 'ช่วยเหลือ'));
คลื่นไซน์เล่นด้วยแอมพลิจูด 1 และอัตราการสุ่มตัวอย่าง 1,000 Hz: T = [0:1/SampleRate:2]; y = 1*บาป(2*pi*200*T); เสียง (y, SampleRate);
จากนั้นผู้ใช้จะถูกถามคำถามโดยป้อนคำตอบโดยผู้ใช้: Q = input('คุณได้ยินเสียงหรือไม่ [y/n] n', 's');
จากนั้นจะมีเวลามองหาเมื่อ Q == 'n' หากเป็นจริงเสียงจะทำซ้ำและถามผู้ใช้อีกครั้งจนกว่าคำตอบจะเปลี่ยนจาก 'n' เป็น 'y': while Q == 'n' if strcmp(Q, 'n') disp('ปรับระดับเสียงของคอมพิวเตอร์ให้ดังขึ้น'); รอ_เสียง; หยุดชั่วคราว(2); Q = input('คุณได้ยินเสียงตอนนี้หรือไม่ [y/n] n', 's'); ปลาย ปลาย
จากนั้นรอสักครู่ก่อนที่จะดำเนินการตรวจสอบส่วนที่แท้จริงของรหัส
ขั้นตอนที่ 3: ทำการทดสอบ Audiometry สำหรับหูข้างขวา
ในโค้ดนี้ ลูปจะทำงานซ้ำ 6 ครั้งโดยมีความถี่และระดับเสียงต่างกันสำหรับหูแต่ละข้าง ขึ้นอยู่กับหูที่คุณต้องการทดสอบ ตัวแปร Out จะมีเสียงในแถวหนึ่งและศูนย์ในอีกแถวหนึ่ง
ขั้นแรก คุณสร้างเวกเตอร์บรรทัดว่างสองเส้นเพื่อบันทึกความถี่และแอมพลิจูดของเสียงที่ผู้ใช้ได้ยิน
ส่วนนี้อยู่ในดัชนีสำหรับการวนซ้ำสำหรับเสียงที่คุณต้องการเล่นหากคุณต้องการสุ่มความถี่ที่เล่นและแอมพลิจูด
F คือความถี่: r = (rand*10000); Fs = 250 + r; (ฟังก์ชัน rand คือการสร้างความถี่ที่สร้างขึ้นแบบสุ่ม) t คือระยะเวลาที่กำหนดซึ่งกำหนดโดย: t = linspace(0, Fs*2, Fs*2); s คือคลื่นไซน์: s = sin(2*pi*t*1000); (สามารถคูณด้วยตัวแปรสุ่ม w เพื่อสร้างค่าแอมพลิจูด/เดซิเบลแบบสุ่มสำหรับฟังก์ชันเสียง: w = rand;)
เอาต์พุตสำหรับหูข้างขวาคือ: Out = [zeros(size(t)); NS]';
เอาต์พุตจะเล่นผ่านรหัส: เสียง (ออก, Fs)
ขั้นตอนต่อไปคือการสร้างส่วนต่อประสานกับผู้ใช้ด้วยรหัสที่บันทึกว่าผู้ใช้ได้ยินเสียงหรือไม่
ขั้นแรกคุณต้องสร้างร่างและกำหนดตำแหน่งที่ร่างนั้นจะปรากฏขึ้น: gcbf = figure('pos', [30 800 350 150]);
***หากปุ่มไม่ปรากฏขึ้นสำหรับคุณ ตำแหน่งของรูปดังที่แสดงในอาร์เรย์ด้านบนอาจอยู่ในตำแหน่งที่ไม่ถูกต้องสำหรับคอมพิวเตอร์ของคุณ ในการแก้ปัญหานี้ ให้เปลี่ยนค่า 30 และ 800 เป็นตำแหน่งใดก็ได้ที่คุณต้องการ ตัวอย่างเช่น การมี [0 0 350 150] จะสร้างปุ่ม gui ที่ด้านล่างซ้ายของจอภาพ***
ปุ่มสลับถูกสร้างขึ้นมาเพื่อบันทึกเมื่อผู้ใช้ได้ยินเสียง และตำแหน่งและการแสดงผลสามารถปรับแต่งได้: tb = uicontrol('Style', 'togglebutton', 'String', 'Pres the button when you hear a sound', ' แท็ก', 'togglebutton1', 'Position', [30 60 300 40], 'Callback', 'uiresume(gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close(gcbf);'); รหัสเฉพาะนี้มีรหัสดำเนินการต่อและเวกเตอร์ว่างจะเพิ่มค่าหากกดปุ่ม
จากนั้นสร้างฟังก์ชั่นรอเพื่อรับการตอบสนองของปุ่มและเปิดใช้งานรหัสในปุ่มเมื่อกด: h = randi([4, 7]); uiwait(gcbf, ชั่วโมง); (เราทำตัวแปรสุ่ม h เพื่อให้ผู้เข้าร่วมไม่สามารถโกงและกำหนดจำนวนวินาทีที่จำเป็นในการตอบสนองได้)
หลังจากวนซ้ำเสร็จแล้ว ให้เก็บตัวแปรเอาท์พุตความถี่ (freq_right) เป็น Hz เอาไว้ จากนั้นแปลงตัวแปร dB_right จากแอมป์เป็นเดซิเบลโดยใช้สมการ: dB_right = mag2db(amp_right)*(-1);
จากนั้นเพิ่มฟังก์ชัน: ปิดทั้งหมด สิ่งนี้จะออกจากตัวเลขที่ไม่จำเป็นที่อาจปรากฏขึ้น
เพิ่มฟังก์ชันหยุดชั่วคราวประมาณ 10 วินาที เพื่อให้ผู้ใช้มีเวลาในการปรับและเตรียมพร้อมสำหรับหูข้างซ้าย
ขั้นตอนที่ 4: สร้างรหัสเดียวกันสำหรับหูข้างซ้าย
ทำซ้ำรหัสที่ใช้สำหรับหูข้างขวาเพื่อสร้างส่วนถัดไปที่ทดสอบหูซ้าย ความแตกต่างเพียงอย่างเดียวคือการเปลี่ยนช่องสัญญาณเอาต์พุตที่เสียงจะมาจาก เมื่อต้องการทำสิ่งนี้ ให้พลิกลำดับของค่าอาร์เรย์สำหรับตัวแปร Out ควรมีลักษณะดังนี้:
ออก = [s; ศูนย์(ขนาด(t))]';
โดยการทำเช่นนี้จะไม่มีเสียงออกจากช่องสัญญาณขวา แต่ช่องซ้ายแทน!
ขั้นตอนที่ 5: สร้างภาพเคียงข้างกันเพื่อเปรียบเทียบข้อมูล
ตอนนี้สร้างกราฟเพื่อแสดงข้อมูล! คุณกำลังใส่กราฟสองกราฟเป็นตัวเลขเดียว ทำเช่นนี้!
รูปที่(1);แผนย่อย(1, 2, 1); *** แผนย่อย (1, 2, 2) สำหรับอีกอันหนึ่ง
สำหรับแต่ละแผนย่อย ให้เพิ่มแพทช์เหล่านี้ด้วยสีและพิกัดเฉพาะ ส่วนเหล่านี้ปิดกราฟขึ้นอยู่กับระดับการสูญเสียการได้ยินมากน้อยเพียงใด ชอบดังนั้น:
แพทช์([250 8000 8000 250], [25 25 -10 -10], [1.00, 0.89, 0.29]); %yellowhold บน % แผนย่อยจะเก็บแพทช์และ scatterplots ต่อไปนี้
ข้อความ(3173, 8, 'ปกติ');
แพทช์([250 8000 8000 250], [40 40 25 25], [0 0.75 0.25]); % เขียว
ข้อความ(3577, 33, 'ไม่รุนแรง');
แพทช์([250 8000 8000 250], [55 55 40 40], [0.16, 0.87, 0.87]); % สีฟ้า
ข้อความ (2870, 48, 'ปานกลาง');
แพทช์([250 8000 8000 250], [70 70 55 55], [0.22, 0.36, 0.94]); % สีฟ้า
text(1739, 62, 'ปานกลาง');
แพทช์([250 8000 8000 250], [90 90 70 70], [0.78, 0.24, 0.78]); % สีม่วง
ข้อความ(3142, 80, 'รุนแรง');
แพทช์([250 8000 8000 250], [120 120 90 90], [0.96, 0.24, 0.24]); % สีแดง
ข้อความ(3200, 103, 'ลึกซึ้ง')
จากนั้นเพิ่มแปลงกระจายซ้ายและขวา! เราสามารถให้ค่าเฉลี่ยระดับประเทศสำหรับคุณ! ที่นี่:
Nat_FreqL = [250 500 1000 2000 4000 8000]; % ค่า x, earNat_dBL ซ้าย = [10 3 10 15 10 15]; % ค่า y
Nat_FreqR = [250 500 1000 2000 4000 8000]; % หูขวา
Nat_dBR = [10 5 10 15 10 15];
แปลงกระจายควรแยกแยะจุดซ้ายและขวา คุณสามารถทำไม้กางเขนและวงกลมได้!
NL = กระจาย (Nat_FreqL, Nat_dBL, 'bx'); % แปลงจุดกากบาทสีน้ำเงินNR = กระจาย (Nat_FreqR, Nat_dBR, 'ro'); % แปลงวงกลมสีแดง
สร้างคำอธิบายแผนภูมิสำหรับกราฟระดับประเทศโดยกำหนดให้กับตัวแปรเฉพาะ: legend([NL NR], {'title1', 'title2'});
ตั้งค่าขีดจำกัด x ของคุณจาก 250 ถึง 8000 Hz และขีดจำกัด y ของคุณตั้งแต่ -10 ถึง 120 dB อย่าลืมเปลี่ยนขีดแนวตั้งของคุณด้วย yticks()
ติดป้ายกำกับแกน x ของคุณว่า "ความถี่ Hz" และแกน y ของคุณเป็น "ระดับเสียง dB"
ย้อนกลับแกน y โดยรวบรวมแกนด้วย ax = gca
จากนั้นผูกคุณสมบัติของทิศทาง y กับมันด้วย: ax. YDir = 'reverse
ตอนนี้รหัสสำหรับวินาทีนั้นใกล้เคียงกัน แต่ไม่มีคำอธิบายและสร้างกราฟให้กับ scatterplot ด้วยตัวแปรจากการทดสอบด้านซ้ายและขวา
หลังจากทั้งหมดนี้ เพิ่มฟังก์ชันหยุดชั่วคราวประมาณ 10 วินาที เพื่อให้ผู้ใช้ดูผลลัพธ์ได้
ขั้นตอนที่ 6: เพิ่มข้อความขอบคุณเล็กน้อยหากคุณต้องการ
นี่เป็นเพียงเพื่อความสนุกถ้าคุณต้องการ แต่เพิ่มอีก imread(), imshow() และ uiwait(msgbox()) เพื่อขอบคุณและลาก่อน! นอกจากนั้น อย่าลืมใส่ clf; ปิดทั้งหมด; ซีแอลซี; เพื่อที่จะปิดทุกอย่าง ทำได้ดีมาก คุณทำได้!
แนะนำ:
การแบ่งส่วน MatLab Lung: 5 ขั้นตอน
การแบ่งส่วน MatLab Lung: โดย: Phuc Lam, Paul Yeung, Eric Reyes ------------------------------ ------------------------------------- การยอมรับว่าข้อผิดพลาดในการแบ่งส่วนปอดจะทำให้เกิดข้อมูลเท็จเกี่ยวกับการระบุตัวตน ของพื้นที่โรคและสามารถ
MATLAB การตรวจจับใบหน้าอย่างง่าย: 4 ขั้นตอน
MATLAB Easy Face Detection: จุดประสงค์หลักของคำแนะนำนี้คือเพื่อแสดงให้เห็นว่าการประมวลผลภาพจะง่ายเพียงใด ด้วยความช่วยเหลือของ MATLABFace การตรวจจับและติดตามเป็นสาขาการวิจัยที่สำคัญและกระตือรือร้น นั่นคือเหตุผลที่ฉันจะอธิบาย จะทำได้อย่างไร
วิธีเขียนโค้ดและเผยแพร่ Matlab 2016b เป็น Word (คู่มือสำหรับผู้เริ่มต้น): 4 ขั้นตอน
How to Code and Publish Matlab 2016b to Word (Beginners Guide): Matlab เป็นโปรแกรมภาษาประสิทธิภาพสูงที่ใช้ในการคำนวณผลลัพธ์ทางเทคนิค มีความสามารถในการรวมภาพ การคำนวณ และการเขียนโปรแกรมในลักษณะที่เป็นมิตรต่อผู้ใช้ ด้วยโปรแกรมนี้ ผู้ใช้สามารถเผยแพร่ปัญหาและแนวทางแก้ไข
การควบคุม Raspberry Pi โดยใช้ Matlab: 5 ขั้นตอน
การควบคุม Raspberry Pi โดยใช้ Matlab: เฮ้ บทช่วยสอนนี้เกี่ยวกับการควบคุม Raspberry Pi ที่ไม่มีหัวของคุณโดยใช้ Matlab คุณอาจต้องติดตั้ง matlab เป็นเวอร์ชันล่าสุดเพื่อรองรับบอร์ด raspberry pi ที่ใหม่กว่า
ROS Robotic Controller ที่ใช้ Matlab: 9 ขั้นตอน
ROS Robotic Controller ที่ใช้ Matlab: ตั้งแต่ฉันยังเป็นเด็ก ฉันใฝ่ฝันที่จะเป็น Iron Man และยังคงทำเช่นนั้น Iron Man เป็นหนึ่งในตัวละครเหล่านั้นซึ่งเป็นไปได้อย่างสมจริง และเพียงแค่ทำให้ฉันปรารถนาที่จะเป็น Iron Man สักวันหนึ่ง แม้ว่าผู้คนจะหัวเราะเยาะฉันหรือบอกว่ามันเป็นไปไม่ได้