Mục lục:

Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB: 6 bước
Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB: 6 bước

Video: Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB: 6 bước

Video: Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB: 6 bước
Video: Bài Kiểm Tra Thính Giác Thú Vị: Bạn Có Phải Là Siêu Nhân? 2024, Tháng mười hai
Anonim
Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB
Cách thực hiện một bài kiểm tra thính giác dành cho người lớn bằng MATLAB

KHUYẾN CÁO: Xét nghiệm của chúng tôi KHÔNG phải là một chẩn đoán y tế và không nên được sử dụng như vậy. Để đo chính xác thính lực, vui lòng đến gặp chuyên gia y tế.

Sử dụng các tài liệu đã có, nhóm chúng tôi thực hiện một bài kiểm tra thính giác. Thử nghiệm của chúng tôi chỉ dành cho người lớn và thanh thiếu niên vì thính giác của trẻ nhỏ có nhiều phạm vi khác nhau và chỉ nên được đo bởi một chuyên gia.

Dự án này được truyền cảm hứng khi làm việc trong lớp BME MATLAB của chúng tôi và chơi với âm thanh do sóng sin tạo ra. Chúng tôi quan tâm đến cách một sóng sin có thể được thay đổi để phát âm thanh ở các cao độ khác nhau.

Tất cả những gì chúng tôi cần cho dự án này là một máy tính chạy MATLAB R2018b và một cặp tai nghe. Chúng tôi đã đưa một nhân vật ban đầu, Frances, làm linh vật để làm cho chương trình trở nên hài hước hơn.

Bước 1: Tạo thông tin đầu vào của người dùng để phân tích độ tuổi của người dùng

Tạo thông tin đầu vào của người dùng để phân tích độ tuổi của người dùng
Tạo thông tin đầu vào của người dùng để phân tích độ tuổi của người dùng
Tạo thông tin đầu vào của người dùng để phân tích độ tuổi của người dùng
Tạo thông tin đầu vào của người dùng để phân tích độ tuổi của người dùng

Phần đầu tiên của mã này là để người dùng nhập vào để quyết định xem họ có đủ tuổi để tiến hành kiểm tra thính giác hay không. Tại sao không làm điều đó bằng cách thêm vào những bức ảnh ngớ ngẩn về linh vật của chúng ta, Frances? Để làm như vậy, hãy tải xuống tệp zip được bao gồm và sau đó giải nén nó thành một tệp có thể được kéo lên thành mã. Tiến hành tải lên hàng loạt tệp đầy đủ các bản vẽ bằng cách sử dụng:

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

Để giới thiệu các hộp thông báo và hình ảnh lớn của bản vẽ, chúng tôi đã sử dụng phương pháp thú vị này để hiển thị Frances cho bạn. Chỉ cần đọc một hình ảnh bạn chọn với định dạng: variable = imread ('nameofpicture.jpg');

Sau đó tiến hành hiển thị nó bằng cách sử dụng imshow (biến); sau đó nó sẽ hiển thị dưới dạng một hình trong MatLab của bạn khi bạn chạy nó!

Tiếp theo là các hộp thông báo được sử dụng trong toàn bộ mã. uiwait () là một hàm trong đó mã bị tạm dừng cho đến khi quá trình kết thúc được chọn cho uiwait kết thúc. Chức năng được chọn này là msgbox ('tin nhắn', 'tiêu đề', 'biểu tượng')!

Bạn có thể thoải mái thay đổi thông điệp mà Frances nói, miễn là bạn làm theo định dạng msgbox () ở trên. Nếu bạn muốn sử dụng ảnh của Frances, hãy gắn nhãn 'biểu tượng' là 'tùy chỉnh' và tiếp tục điều đó bằng dấu phẩy và biến số của ảnh bạn đã chọn! Bạn cũng có thể sử dụng các loại 'biểu tượng' đặt trước. Nó sẽ giống như thế này:

hi = imread ('Regular.jpg'); % đọc hình ảnh từ tệp đã tải lênimshow (hi); uiwait (msgbox ("Xin chào và cảm ơn bạn đã chọn bài kiểm tra thính lực của chúng tôi! Đây là Frances và anh ấy sẽ giúp bạn làm bài kiểm tra hôm nay!", "Chào mừng!", "custom", chào));

Tiếp theo, tạo một đầu vào hỏi tuổi của người dùng như vậy!

UserAge = input ('Trước khi chúng tôi bắt đầu bài kiểm tra này, bạn bao nhiêu tuổi (ví dụ: 32, 56,…) n', 's');

LƯU Ý: nếu các số liệu kỳ lạ và có quá nhiều, hãy sử dụng đóng tất cả để xóa các số liệu trước đó khi mã của bạn chạy

Sau đó, tạo một cấu trúc trường hợp chuyển đổi! Hãy nhớ rằng đầu vào của người dùng ở dạng chuỗi và bạn cần chuyển đổi dữ liệu đó thành giá trị số. Vì vậy, hãy sử dụng str2double (UserAge). Mỗi trường hợp phải có một phạm vi tuổi như 4 đến 6 hoặc 18 đến 40. để có biến để xác minh là đúng đối với một trong các trường hợp, hãy sử dụng num2cell (mảng) như sau:

switch str2double (UserAge)% thay đổi biến từ một chuỗi thành một giá trị số trường hợp num2cell (0: 3)

frances = imread ('Egg.jpg');

imshow (khung);

uiwait (msgbox ('Bạn là một bào thai! Frances nghĩ bạn nên kiểm tra thính lực với bác sĩ để thay thế!', 'Kiểm tra Bị từ chối!', 'custom', frances));

trở lại

Các nhóm trước đó phải được trả lại để ngăn người dùng tiếp tục với mã.

Hãy nhớ kết thúc cấu trúc trường hợp và đóng tất cả các số liệu.

Bước 2: Kiểm tra âm thanh cho người dùng

Kiểm tra âm thanh cho người dùng
Kiểm tra âm thanh cho người dùng

Phân đoạn này tồn tại để đảm bảo rằng âm thanh của người tham gia trên thiết bị của họ không quá yên tĩnh cũng không quá lớn.

Để cung cấp cho người dùng một số cảnh báo, một hộp thông báo bật lên và chờ xác nhận từ người dùng trước khi tiếp tục với âm thanh: uiwait (msgbox ('Trước khi kiểm tra bắt đầu, chúng tôi muốn thực hiện kiểm tra âm thanh để đảm bảo âm lượng của bạn là đúng! Sẵn sàng chưa? ',' Cố lên! ',' trợ giúp '));

Một sóng hình sin được phát với biên độ 1 và tốc độ mẫu 1000 Hz: T = [0: 1 / SampleRate: 2]; y = 1 * sin (2 * pi * 200 * T); âm thanh (y, SampleRate);

Sau đó, người dùng được hỏi một câu hỏi với câu trả lời do người dùng nhập: Q = input ('Bạn có nghe thấy âm thanh không? [Y / n] n', 's');

Sau đó, có một thời gian tìm kiếm khi Q == 'n', nếu đúng thì âm thanh sẽ lặp lại và hỏi lại người dùng cho đến khi câu trả lời thay đổi từ 'n' thành 'y': while Q == 'n' if strcmp (Q, 'n') disp ('Bật âm lượng máy tính của bạn to hơn.'); chờ_mặt; tạm dừng (2); Q = input ('Bạn có thể nghe thấy âm thanh bây giờ không? [Y / n] n', 's'); kết thúc cuối cùng

Sau đó là một chút thời gian chờ đợi trước khi thực hiện phần kiểm tra thực tế của mã.

Bước 3: Thực hiện kiểm tra thính lực cho tai phải

Thực hiện kiểm tra thính lực cho tai phải
Thực hiện kiểm tra thính lực cho tai phải

Trong đoạn mã này, một vòng lặp sẽ chạy trong 6 lần lặp với tần số và âm lượng khác nhau cho từng tai cá nhân. Tùy thuộc vào tai bạn muốn kiểm tra, biến Out sẽ có âm thanh ở một hàng và số không ở một hàng khác.

Đầu tiên, bạn tạo hai vectơ dòng trống để ghi lại tần số và biên độ của âm thanh mà người dùng nghe thấy.

Phần này nằm trong vòng lặp for được lập chỉ mục cho tuy nhiên nhiều âm thanh bạn muốn phát nếu bạn muốn ngẫu nhiên hóa các tần số được phát và biên độ.

F là tần số: r = (rand * 10000); Fs = 250 + r; (hàm rand là tạo tần số được tạo ngẫu nhiên) t là khoảng thời gian nhất định được xác định theo: t = linspace (0, Fs * 2, Fs * 2); s là sóng hình sin: s = sin (2 * pi * t * 1000); (giá trị này có thể được nhân với biến ngẫu nhiên w để tạo ra giá trị biên độ / dB ngẫu nhiên cho hàm âm thanh: w = rand;)

Đầu ra cho tai phải là: Out = [zeros (size (t)); NS]';

Các đầu ra được phát thông qua mã: âm thanh (Out, Fs)

Bước tiếp theo là tạo giao diện người dùng với mã ghi lại liệu người dùng có nghe thấy âm thanh hay không.

Đầu tiên, bạn tạo một hình và xác định vị trí mà hình sẽ xuất hiện: gcbf = figure ('pos', [30 800 350 150]);

*** Nếu nút không xuất hiện cho bạn, vị trí của hình, như được hiển thị trong mảng ở trên, có thể được định vị sai đối với máy tính của bạn. Để giải quyết vấn đề này, hãy thay đổi giá trị 30 và 800 thành bất kỳ vị trí nào bạn muốn. Ví dụ: có [0 0 350 150] sẽ xuất hiện nút gui ở dưới cùng bên trái của màn hình. ***

Nút chuyển đổi được tạo ra để ghi lại khi người dùng nghe thấy âm thanh và có thể tùy chỉnh vị trí và hiển thị: tb = uicontrol ('Kiểu', 'nút chuyển đổi', 'Chuỗi', 'Nhấn nút khi bạn nghe thấy âm thanh', ' tag ',' togglebutton1 ',' Position ', [30 60 300 40],' Callback ',' uiresume (gcbf); freq_right = [freq_right, F]; amp_right = [amp_right, w]; close (gcbf); '); Mã cụ thể này có phần tiếp tục mã và các vectơ trống sẽ thêm giá trị nếu nút được nhấn.

Sau đó, tạo một hàm chờ để nhận phản hồi của nút và kích hoạt mã trong nút khi được nhấn: h = randi ([4, 7]); uiwait (gcbf, h); (chúng tôi đã thực hiện biến ngẫu nhiên h để người tham gia không thể gian lận và xác định số giây cần thiết để trả lời.)

Sau khi kết thúc vòng lặp, hãy giữ nguyên biến tần số đầu ra (freq_right) bằng Hz nên để nguyên. Sau đó chuyển đổi biến dB_right từ amps sang decibel bằng cách sử dụng phương trình: dB_right = mag2db (amp_right) * (- 1);

Sau đó thêm chức năng: đóng tất cả. điều này sẽ thoát ra khỏi bất kỳ số liệu không cần thiết nào có thể đã xuất hiện.

Thêm chức năng tạm dừng, khoảng 10 giây, để người dùng có thời gian điều chỉnh và chuẩn bị cho tai trái.

Bước 4: Tạo cùng một mã cho tai trái

Tạo cùng một mã cho tai trái
Tạo cùng một mã cho tai trái

Lặp lại mã được sử dụng cho tai phải để thực hiện phân đoạn tiếp theo kiểm tra tai trái. Sự khác biệt duy nhất là thay đổi kênh đầu ra mà âm thanh sẽ đến. Để thực hiện việc này, hãy lật thứ tự của các giá trị mảng cho biến Out. Nó sẽ giống như thế này:

Hết = [s; số không (kích thước (t))] ';

Làm như vậy, sẽ không có âm thanh nào phát ra từ kênh bên phải mà thay vào đó là kênh bên trái!

Bước 5: Tạo một hình song song để so sánh dữ liệu

Tạo một hình song song để so sánh dữ liệu
Tạo một hình song song để so sánh dữ liệu
Tạo một hình song song để so sánh dữ liệu
Tạo một hình song song để so sánh dữ liệu

Bây giờ hãy tạo một biểu đồ để hiển thị dữ liệu! Bạn đang đặt hai biểu đồ thành một hình duy nhất, vì vậy hãy làm điều này!

hình (1); subplot (1, 2, 1); *** subplot (1, 2, 2) cho cái còn lại

Đối với mỗi ô con, hãy thêm các mảng này với các màu và tọa độ cụ thể. Phần này nằm ngoài biểu đồ tùy thuộc vào mức độ mất thính lực của nó. Như vậy:

bản vá ([250 8000 8000 250], [25 25 -10 -10], [1,00, 0,89, 0,29]); % yellowhold trên% Biểu đồ con bây giờ sẽ giữ các bản vá và biểu đồ phân tán sau

text (3173, 8, 'Bình thường');

bản vá ([250 8000 8000 250], [40 40 25 25], [0 0,75 0,25]); % màu xanh lá

text (3577, 33, 'Nhẹ');

bản vá ([250 8000 8000 250], [55 55 40 40], [0,16, 0,87, 0,87]); % lục lam

text (2870, 48, 'Trung bình');

bản vá ([250 8000 8000 250], [70 70 55 55], [0,22, 0,36, 0,94]); % màu xanh dương

văn bản (1739, 62, 'Vừa nghiêm trọng');

bản vá ([250 8000 8000 250], [90 90 70 70], [0,78, 0,24, 0,78]); % màu tía

văn bản (3142, 80, 'Nghiêm trọng');

bản vá ([250 8000 8000 250], [120 120 90 90], [0,96, 0,24, 0,24]); % màu đỏ

text (3200, 103, 'Sâu sắc')

Sau đó, thêm các ô phân tán bên trái và bên phải! Chúng tôi có thể cung cấp mức trung bình chung trên toàn quốc cho bạn! Ở đây:

Nat_FreqL = [250 500 1000 2000 4000 8000]; % x-value, left earNat_dBL = [10 3 10 15 10 15]; % y-value

Nat_FreqR = [250 500 1000 2000 4000 8000]; % tai phải

Nat_dBR = [10 5 10 15 10 15];

Các biểu đồ phân tán nên phân biệt các điểm bên trái và bên phải. Bạn có thể làm dấu thập và vòng tròn!

NL = scatter (Nat_FreqL, Nat_dBL, 'bx'); % biểu thị các điểm chéo màu xanh lamNR = scatter (Nat_FreqR, Nat_dBR, 'ro'); % ô vòng tròn màu đỏ

Tạo chú giải cho biểu đồ quốc gia bằng cách gán nó cho các biến cụ thể: chú giải ([NL NR], {'title1', 'title2'});

Đặt giới hạn x của bạn từ 250 đến 8000 Hz và giới hạn y của bạn từ -10 đến 120 dB. Hãy nhớ thay đổi dấu tích dọc của bạn bằng dấu que ()

Gắn nhãn trục x của bạn là "Tần số Hz" và trục y của bạn là "Pitch dB".

Đảo ngược trục y bằng cách tập hợp trục với ax = gca

Sau đó ràng buộc thuộc tính của hướng y với nó bằng: ax. YDir = 'ngược lại

Bây giờ mã cho phần thứ hai cũng giống như vậy nhưng không có chú giải và vẽ biểu đồ phân tán với các biến từ các bài kiểm tra bên trái và bên phải.

Sau tất cả những điều này, hãy thêm chức năng tạm dừng trong khoảng 10 giây để người dùng có thể xem kết quả của họ.

Bước 6: Thêm một chút tin nhắn cảm ơn nếu bạn muốn

Thêm một chút tin nhắn cảm ơn nếu bạn muốn!
Thêm một chút tin nhắn cảm ơn nếu bạn muốn!

Điều này chỉ mang tính chất giải trí nếu bạn muốn nhưng hãy thêm một imread (), imshow () và uiwait (msgbox ()) để cảm ơn và tạm biệt! Ngoài ra, hãy nhớ đặt clf; đóng tất cả; clc; để đóng mọi thứ. Bạn đã làm tốt công việc đó!

Đề xuất: