Theo dõi nhịp thở bằng phương pháp học sâu (Luận văn thạc sĩ)

83 160 2
Theo dõi nhịp thở bằng phương pháp học sâu (Luận văn thạc sĩ)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Theo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâuTheo dõi nhịp thở bằng phương pháp học sâu

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG - VŨ VĂN HUY THEO DÕI NHỊP THỞ BẰNG PHƯƠNG PHÁP HỌC SÂU LUẬN VĂN THẠC SỸ KỸ THUẬT (Theo định hướng ứng dụng) HÀ NỘI - 2019 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG - VŨ VĂN HUY THEO DÕI NHỊP THỞ BẰNG PHƯƠNG PHÁP HỌC SÂU CHUYÊN NGÀNH : KHOA HỌC MÁY TÍNH MÃ SỐ : 8.48.01.01 LUẬN VĂN THẠC SỸ KỸ THUẬT (Theo định hướng ứng dụng) NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS PHẠM VĂN CƯỜNG HÀ NỘI – 2019 LỜI CAM ĐOAN Luận văn thành trình học tập nghiên cứu em giúp đỡ, khuyến khích q thầy sau hai năm theo học chương trình đào tạo Thạc sỹ, chuyên ngành Khoa học máy tính trường Học viện Cơng nghệ Bưu Viễn thơng Em xin cam đoan cơng trình nghiên cứu riêng Nội dung luận văn có tham khảo sử dụng số thông tin, tài liệu từ nguồn sách, tạp chí liệt kê danh mục tài liệu tham khảo trích dẫn hợp pháp Tác giả (Ký ghi rõ họ tên) Vũ Văn Huy LỜI CẢM ƠN Sau thời gian dài học tập nghiên cứu, cuối em hoàn thành luận văn tốt nghiệp này, dịp tốt để em bày tỏ lịng biết ơn sâu sắc đến người Em xin gửi lời cảm ơn sâu sắc đến thầy Phạm Văn Cường, tận hình hướng dẫn, định hướng cho em suốt thời gian thực đề tài Thầy cho em lời khuyên quý báu giúp em hoàn thành tốt luận văn Em xin cảm ơn Khoa Sau Đại học, Khoa Công Nghệ Thơng Tin – Học viện Cơng nghệ Bưu Viễn thông, cảm ơn thầy cô khoa tận tình giảng dạy, truyền đạt cho em kiến thức quý báu năm học vừa qua, giúp cho em có tảng kiến thức vững để thực luận văn nghiên cứu học tập sau Cuối cùng, xin gửi lời cảm ơn đến tất bạn bè, anh, chị, người giúp đỡ, khích lệ phê bình, góp ý, giúp tơi hồn thành khóa luận cách tốt Hà Nội, tháng 02 năm 2019 Vũ Văn Huy i MỤC LỤC DANH MỤC KÝ HIỆU, CHỮ VIẾT TẮT iii DANH MỤC BẢNG BIỂU iv DANH MỤC HÌNH VẼ, SƠ ĐỒ v MỞ ĐẦU .1 Chương TỔNG QUAN 1.1 Đặt vấn đề 1.2 Tổng quan vấn đề theo dõi sức khỏe nhịp thở 1.2.1 Tổng quan 1.2.2 Bài toán theo dõi nhịp thở dựa vào liệu âm 1.3 Một số nghiên cứu liên quan .9 1.3.1 Phát âm hô hấp dựa trích chọn đặc trưng 1.3.2 Phân loại giai đoạn giấc ngủ dựa nhịp thở 16 1.3.3 Đánh giá 21 1.4 Kết chương 22 Chương KỸ THUẬT HỌC SÂU CHO BÀI TOÁN THEO DÕI NHỊP THỞ .23 2.1 Tổng quan Học sâu .23 2.1.1 Mối quan hệ trí tuệ nhân tạo, học máy học sâu 23 2.1.2 Sự phát triển Học sâu .26 2.1.3 Ứng dụng Học sâu .30 2.2 Long short term memory 31 2.2.1 Mạng nơ-ron Hồi quy .31 2.2.2 Mạng nơ-ron LSTM 33 2.3 Áp dụng LSTM cho toán theo dõi nhịp thở 35 2.3.1 Các bước nhận dạng nhịp thở 36 2.3.2 Thu thập liệu nhịp thở 37 2.3.3 Lọc tín hiệu nhiễu 40 2.3.4 Trích chọn frame chứa liệu nhịp thở 43 ii 2.3.5 Chuẩn hóa liệu 44 2.3.6 Tạo LSTM Model 46 2.4 Kết chương 51 Chương THỰC NGHIỆM, ĐÁNH GIÁ KẾT QUẢ VÀ XÂY DỰNG ỨNG DỤNG ĐẾM NHỊP THỞ 52 3.1 Thử nghiệm .52 3.1.1 Độ đo đánh giá 52 3.1.2 Bộ liệu thử nghiệm 55 3.1.3 Kết thực nghiệm 56 3.2 Đánh giá 57 3.3 Xây dựng ứng dụng đếm nhịp thở 58 3.3.1 Mơ hình triển khai hệ thống .58 3.3.2 Xây dựng ứng dụng đếm nhịp thở 59 KẾT LUẬN .63 TÀI LIỆU THAM KHẢO 65 PHỤ LỤC 68 iii DANH MỤC KÝ HIỆU, CHỮ VIẾT TẮT Từ viết tắt Tiế ng Viêṭ Tiế ng Anh DL Học sâu Deep Learning ML Học máy Machine Learning AI Trí tuệ nhân tạo Artificial Intelligence TH1 Trường hợp TH2 Trường hợp TH3 Trường hợp TH4 Trường hợp (+) Nhãn liệu nhịp thở (-) Nhãn liệu không nhịp thở STT iv DANH MỤC BẢNG BIỂU Bảng 1-1: Một mẫu liệu PFT ý nghĩa đại lượng [6] Bảng 1-2: Nhịp thở qua giai đoạn giấc ngủ [19] 19 Bảng 1-3: Nhiệt độ thể qua giai đoạn giấc ngủ [20] 19 Bảng 2-1: So sánh kết thử nghiệm lấy mẫu liệu âm 38 Bảng 2-2: Thông số kỹ thuật micro không dây FM XXD-18 39 Bảng 2-3: Các phương trình xử lý nhiễu lọc Kalman 42 Bảng 2-4: Thời gian tạo model phụ thuộc vào độ dài lấy mẫu liệu .45 Bảng 3-1: Ma trận nhầm lẫn phân loại lớp đối tượng .52 Bảng 3-2: Kết thử nghiệm 56 Bảng 3-3: Cấu hình phần cứng sử dụng thực nghiệm .60 Bảng 3-4: Yêu cầu phần mềm cài đặt để chạy ứng dụng 60 Bảng 3-5: Kết thử nghiệm ứng dụng đếm nhịp thở 604 v DANH MỤC HÌNH VẼ, SƠ ĐỒ Hình 1-1: Một đoạn liệu thở chứa nhịp hít vào nhịp thở Hình 1-2: Một đoạn liệu thở liên tục Hình 1-3: Quá trình training (trên - dưới) trình phân loại (trái - phải) 11 Hình 1-4: Trích chọn window liệu từ file [8] 13 Hình 1-5: Sơ đồ hệ thống phân loại giai đoạn giấc ngủ 20 Hình 2-1: Mối quan hệ trí tuệ nhân tạo, học máy học sâu 23 Hình 2-2: Điểm khác biệt học máy học sâu 25 Hình 2-3: Lịch sử Deep Learning .26 Hình 2-4: LeNet-5 cho tốn nhận diện chữ số viết tay .28 Hình 2-5: Một đoạn mạng nơ-ron hồi quy 32 Hình 2-6: Chuỗi mạng nơ-ron hồi quy 32 Hình 2-7: Một chuỗi mạng LSTM với module bao gồm tầng tương tác 33 Hình 2-8: Sơ đồ hệ thống nhận dạng nhịp thở 36 Hình 2-9: Bộ micro không dây FM XXD-18 39 Hình 2-10: Mơ hình hoạt động chung lọc 41 Hình 2-11: Áp dụng lọc Kalman 43 Hình 2-12: Giao diện làm việc phần mềm xử lý âm Audacity 2.1.0 44 Hình 2-13: Cấu trúc thư viện Keras .47 Hình 2-14: Hai thành phần tham gia xây dựng Model 48 Hình 3-1: Độ đo AUC .54 vi Hình 3-2: Chỉ số Precision, Recall, F-measure qua liệu thử nghiệm .57 Hình 3-3: Mơ hình triển khai hệ thống .58 Hình 3-4: Chương trình đếm nhịp thở theo thời gian thực .61 Hình 3-5: Raspberry Pi 64 59 Phần mềm hệ thống theo dõi kết đếm nhịp thở theo thời gian thực thơng báo kết lên hình Giao diện sử dụng cho phép bấm nút để bắt đầu q trình đếm nhịp thở xóa liệu vừa đếm thử để bắt đầu lại từ đầu 3.3.2 Xây dựng ứng dụng đếm nhịp thở a Thách thức việc xử lý thời gian thực Có số thách thức gặp phải trong phải triển khai xử lý liệu theo thời gian thực Nói chung, việc phải xử lý tín hiệu liên tục theo thời gian thực xử lý cách chia tín hiệu thành nhiều phần Mỗi phần gọi cửa sổ (window) Thách thức đến từ việc định độ dài window, phụ thuộc vào khoảng thời gian cần thiết để thuật tốn phát xác đâu nhịp thở độ dài đệm (bộ đệm chứa liệu tạm thời, nơi chương trình đọc giá trị từ tín hiệu analog) Chiều dài đệm thường phụ thuộc vào cấu hình xử lý máy tính hệ thống Nếu thời lượng ghi đệm nhỏ mức cần thiết để phát nhịp thở, khả bị số nhịp thở trình theo dõi cao Thách thức đến từ việc kết hợp window liệu lại với để frame liệu hoàn chỉnh Frame mức đơn vị tối thiểu dùng để kết luận liệu có phải nhịp thở hay không Giả sử liệu nhịp thở dài giây, độ dài khung liệu window tối đa lưu trữ khoảng thời gian giây Như để có frame hoàn chỉnh cần phải ghép nối liệu từ window liên tiếp Vấn đề thực thách thách việc phải xử lý thời gian thực, vậy, luận văn xin đề xuất phương pháp sử dụng bất thường mẫu liệu để bắt đầu trình lấy mẫu liệu âm thực sự, để từ phải xử lý frame liệu nghi nghờ liệu âm thở 60 Các giải pháp tiên tiến hơn, cần áp dụng nhiều kỹ thuật xử lý tín hiệu đồng thời đáp ứng mức độ xử lý thời gian thực, xin trình bày làm rõ nghiên cứu sau b Yêu cầu đáp ứng hệ thống Để hoàn tất việc xây dựng chạy thử ứng dụng, luận văn có sử dụng máy tính để bàn với cấu hình phần cứng sau: Bảng 3-3: Cấu hình phần cứng sử dụng thực nghiệm CPU AMD Ryzen 2200G 3.5 GHz RAM 8G DDR4 OS Linux Mint 19 Cinnamon 64bit Một cấu đề cập hoàn toàn đáp ứng yêu cầu mặt thu nhận xử lý tín hiệu, tính tốn thuật tốn đếm số lượng nhịp thở Ngoài ra, mặt yêu cầu đáp ứng phần mềm, cần có đủ yếu tố sau: Bảng 3-4: Yêu cầu phần mềm cài đặt để chạy ứng dụng Java Phiên 1.8 Python Phiên 2.7 Tensorflow Phiên r1.11 Keras Phiên 2.2.4 c Kết chạy thử nghiệm chương trình Chương trình với hai giao diện, giao diện cho phép bắt đầu đếm nhịp thở thống kết nhịp thở, với giao diện lại thể chuỗi liệu nhịp thở theo thời gian thực 61 Hình 3-4: Chương trình đếm nhịp thở theo thời gian thực Bấm nút Start để bắt đầu đếm nhịp thở, đếm xong cần reset lại thời gian bấm nút Stop để xóa liệu cũ chuẩn bị đếm liệu Ứng dụng chạy thử nghiệm đối tượng với nhiều lần thử nghiệm khác bảng tổng kết trình chạy thử nghiệm Bảng 3-5: Kết thử nghiệm ứng dụng đếm nhịp thở theo thời gian thực STT Thời gian đo Số nhịp thở thực tế Số nhịp thở đo Lần 1 phút 16 25 Lần phút 18 24 Lần phút 36 54 Lần phút 35 51 Lần phút 35 55 Như vậy, từ trình thử nghiệm ứng dụng đếm nhịp thở, thấy tỉ lệ xác ứng dụng cịn thấp Điều giải thích q trình thu nhận xử lý âm theo thời gian thực chưa tốt, việc phát điểm bất thường liệu âm để bắt đầu cắt frame liệu đem so sánh kết luận 62 nhịp thở chưa xác Chỉ cần biến động thu nhận liệu tiếng bước chân mạnh, tiếng đồ vật rơi,… làm sai lệch q trình phát bất thường cắt chuỗi liệu Vấn đền cần phải xử lý phương pháp tiên tiến để đem lại hiệu cao cho ứng dụng đếm nhịp thở 63 KẾT LUẬN Trên sở tìm hiểu tốn theo dõi nhịp thở lý thuyết học sâu phương pháp học sâu LSTM, luận văn đạt số kết sau: - Giới thiệu tổng quan vấn đề theo dõi sức khỏe thông qua theo dõi nhịp thở Bài toán theo dõi nhịp thở phân loại các toán toán theo dõi nhịp thở dựa âm - Tìm hiểu số nghiên cứu liên quan đến theo dõi hô hấp cách sử dụng cảm biến âm sử dụng thuật toán học máy: toán phát âm hơ hấp dựa trích chọn đặc trưng, toán phân loại giai đoạn giấc ngủ dựa nhịp thở - Tìm hiểu học sâu, kỹ thuật LSTM, kỹ thuật lọc Kalman - Trình bày phương pháp áp dụng kỹ thuật LSTM cho toán theo dõi nhịp thở - Tiến hành lấy mẫu liệu trường hợp bình thường trường hợp đặc biệt (mơi trường có tiếng ồn, người theo dõi vừa trải qua vận động mạnh) Tách mẫu liệu Audacity, chuẩn hóa liệu gán nhãn chuẩn bị cho training thử nghiệm đo tỉ lệ xác - Xây dựng ứng dụng đếm nhịp thở theo thời gian thực Bên cạnh kết đạt hạn chế cần phải khác phục: - Tỉ lệ nhận dạng chưa cao, trường hợp tốt 90.2% trung bình trường hợp liệu 84.5% - Số liệu chưa đủ nhiều đa dạng, ngun nhân dẫn đến tỉ lệ xác chưa cao - Xử lý liệu lớn chưa tốt ảnh hưởng đến thời gian tạo model LSTM, tốc độ xử lý theo thời gian thực ứng dụng đếm nhịp thở 64 Qua kết hạn chế hệ thống cho thấy việc tiến theo dõi nhịp thở đòi hỏi trình nghiên cứu thực lâu dài Trong phạm vi đề tài, luận văn thực phát đâu nhịp thở đâu nhịp thở, để xây dựng hệ thống nhận dạng mạnh hơn, tổng quát phải cần thêm nhiều thời gian Hướng phát triển trước mắt cần phải tập trung cải thiện độ xác thời gian tính tốn hệ thống Hướng phát triển xa đề tài quan tâm đến xu hướng công nghệ ngày dần tiến tới thiết bị nhỏ gọn có tính di động, kết đề tài làm sở cho việc xây dựng thiết bị nhỏ gọn nhận dạng tự động Lấy ví dụ thiết bị có tên “Raspberry pi” [28], thực chất máy tinh thu nhỏ chạy tảng hệ điều hành Linux, phần cứng máy sử dụng hệ thống System on Chip cấu hình thấp hồn tồn đáp ứng nhiều nhu cầu thiết bị di động Hình 3-5: Raspberry Pi Raspberry pi lắp ghép thêm thiết bị ngoại vi cảm biến âm thanh, kết nối mạng… cho thiết bị Như hồn tồn tạo thiết bị di động để theo dõi nhịp thở, ứng dụng phát bất thường nhịp thở… Một nhược điểm hiệu thiết bị khơng cao cải thiện cách đưa mã nguồn C++ để đáp ứng vấn đề đáp ứng thời gian thực thiết bị 65 TÀI LIỆU THAM KHẢO Tài liệu Tiếng Việt [25] Nguyễn Văn Hân, Bộ lọc Kalman mở rộng (Extended Kalman Filter), 2012 [27] N N Điệp, "Các độ đo hay dùng cho toán phân loại," December 2015 Tài liệu Tiếng Anh [1] Paul S.Monks and Kerry A.Wills, Breath Analysis, Education in Chemistry, July 2010 [2] Divya S Avalur, Human Breath Detection using a Microphone, Faculty of mathematics and natural sciences, 2013 [3] Laura Boccanfuso and Jason M O’Kane, Remote Measurement of Breath Analysis in Real-time Using a High Precision, Single point, Infrared Temperature Sensor, 4th IEEE RAS & EMBS Internation Conference, 2012 [4] Ivac Bozic, Djordje Klisic, Andrej Savic, "Detection of Breath Phases," vol 6, no 3, pp 389-398, December 2009 [5] PETER A FLACH, peter.flach@bristol.ac.uk, Kluwer Academic Publishers Manufactured in The Netherlands Naive Bayesian Classification of Structured Data, University of Bristol, 2004, pp 233-269 [7] JEREMY D JOHNSON, A Stepwise Approach to the Interpretation of Pulmonary Function Tests, Tripler Army Medical Center, Honolulu, Hawaii: Madigan Army Medical Center, Fort Lewis, Washington Am Fam Physician, 2014 Mar, pp 359-366 66 [8] Morten Grønnesby, Juan Carlos Aviles Solis, Einar Holsbø, Hasse Melbye, Lars Ailo Bongo, Feature Extraction for Machine Learning Based Crackle Detection in Lung Sounds from a Health Survey, Department of Medical Biology [9] D Chamberlain, J Mofor, R Fletcher, and R Kodgule, "Mobile stethoscope and signal processing algorithms for pulmonary screening and diagnostics," IEEE Global Humanitarian Technology Conference (GHTC), 2015, pp 385-392 [10] A F Members, "ESC Guidelines for the diagnosis and treatment of acute and chronic heart failure 2012," vol 33, Eur Heart J, Jul 2012, pp 17871847 [11] Metlay JP, Kapoor WN, and Fine MJ, "Does this patient have communityacquired pneumonia?: Diagnosing pneumonia by history and physical examination," vol 287, JAMA, Nov 1997, pp 1440-1445 [13] S Butterworth, "On the Theory of Filter Amplifiers," Wirel Eng, 1930 [14] V Vapnik, Estimation of Dependences Based on Empirical Data: Springer Series in Statistics, Secaucus, NJ, USA: Springer-Verlag New York, Inc., 1982 [15] B Dasarathy, Nearest Neighbor (NN) Norms: nn pattern classification techniques, IEEE Computer Society Press, 1991 [16] Y Freund and R E Schapire, A Decision-Theoretic Generalization of OnLine Learning and an Application to Boosting, vol 55, J Comput Syst Sci, 1997, pp 119-139 [19] John Orem, Andrew T Lovering, Witali Dunin-Barkowski and Edward H.Vidruk, Tonic Activity in the Respiratory System in Wakefulness NREM and REM Sleep, vol 25, Journal of sleep, 2002 67 [20] K H Shelley, A A Awad, R G Stout, and D G Silverman, The use of joint time frequency analysis to quantify the effect of ventilation on the pulse oximeter waveform, vol 20, J Clin Monitor Comp, 2006, pp 81-87 [21] Baoyu Jing, Huiting Liu, Mingxing Liu , "Deep Modeling of Longitudinal Medical Data," Submission and Formatting Instructions for ICML 2017, 2017 [22] Sepp Hochreiter and Jurgen Schmidhuber, "Long Short-term Memory," vol 9, no 8, pp 1735-1780, 1997 [29] Baiying Lei, Shah Atiqur Rahmanb, and Insu Song, Content-based Classification of Breath Sound with Enhanced Features, Singapore: James Cook University Australia, School of Business/IT Trang Web [12] http://www.who.int/mediacentre/factsheets/fs315/en/ [Accessed 05 Aug 2016] [17] http://en.wikipedia.org/wiki/Sleep [18] http://en.wikipedia.org/wiki/Polysomnography [23] https://github.com/keras-team/keras/releases [Accessed June 2018] [24] https://machinelearningmastery.com/handle-long-sequences-long-shortterm-memory-recurrent-neural-networks [26] http://commons.apache.org/proper/commons-math/javadocs/api3.6/org/apache/commons/math3/filter/KalmanFilter.html [Accessed Aug 2018] [28] https://www.raspberrypi.org/help/videos/#what-is-a-raspberry-pi 68 PHỤ LỤC Dưới phụ lục code module sử dụng luận văn, bao gồm: - Thu thập liệu từ micro lưu lại thành file - Đọc liệu từ micro xuất mảng liệu chiều - Huấn luyện liệu tạo LSTM model - Sử dụng LSTM model để dự đoán nhãn liệu Thu thập liệu từ Micro lưu vào file âm wav import javax.sound.sampled.*; import java.io.*; public class JavaSoundRecorder { // record duration, in milliseconds static final long RECORD_TIME = 60000; // minute // path of the wav file File wavFile = new File("E:/Samples/RecordAudio.wav"); // format of audio file AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE; // the line from which audio data is captured TargetDataLine line; // Defines an audio format AudioFormat getAudioFormat() { float sampleRate = 8000; int sampleSizeInBits = 8; int channels = 1; boolean signed = true; boolean bigEndian = true; AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); return format; } // Captures the sound and record into a WAV file void start() { try { AudioFormat format = getAudioFormat(); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); // checks if system supports the data line 69 if (!AudioSystem.isLineSupported(info)) { System.out.println("Line not supported"); System.exit(0); } line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start();// start capturing System.out.println("Start capturing "); AudioInputStream ais = new AudioInputStream(line); System.out.println("Start recording "); AudioSystem.write(ais, fileType, wavFile); } catch (LineUnavailableException ex) { ex.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } } //Closes the target data line to finish capturing and recording void finish() { line.stop(); line.close(); } public static void main(String[] args) { final JavaSoundRecorder recorder = new JavaSoundRecorder(); //creates a new thread that waits for a specified of time Thread stopper = new Thread(new Runnable() { public void run() { try { Thread.sleep(RECORD_TIME); } catch (InterruptedException ex) { ex.printStackTrace(); } recorder.finish(); } }); stopper.start(); recorder.start(); } } 70 Đọc liệu từ Micro xuất mảng chiều import javax.sound.sampled.*; //global variables public AudioFormat format; public DataLine.Info targetInfo; public DataLine.Info sourceInfo; public TargetDataLine targetLine; public SourceDataLine sourceLine; public byte[] targetData; public int numBytesRead; //function convert byte[] to float[] public static float[] bytesToFloat(byte[] audioBytes, AudioFormat format){ float[] result = null; if (format.getSampleSizeInBits() == 16) { int samplesLength = audioBytes.length / 2; result = new float[samplesLength]; if (format.isBigEndian()) { for (int i = 0; i < samplesLength; ++i) { byte MSB = audioBytes[i * 2]; byte LSB = audioBytes[i * + 1]; result[i] = MSB

Ngày đăng: 13/03/2019, 22:22

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan