Download as pdf or txt
Download as pdf or txt
You are on page 1of 70

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

Nguyễn Xuân Nam

ỨNG DỤNG HỌC SÂU PHÂN TÍCH


TÍN HIỆU ĐIỀU KHIỂN TỰ ĐỘNG
SỬ DỤNG ÂM THANH

LUẬN VĂN THẠC SĨ KHOA HỌC

Hà Nội - 2024
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

Nguyễn Xuân Nam

ỨNG DỤNG HỌC SÂU PHÂN TÍCH


TÍN HIỆU ĐIỀU KHIỂN TỰ ĐỘNG
SỬ DỤNG ÂM THANH

Chuyên ngành: Vật lý vô tuyến và điện tử


Mã số: 8440130.03

LUẬN VĂN THẠC SĨ KHOA HỌC

NGƯỜI HƯỚNG DẪN KHOA HỌC:


TS. Phạm Tiến Lâm
TS. Phạm Văn Thành

Hà Nội - 2024
Lời cảm ơn

Để hoàn thành bài luận văn này, đầu tiên tôi xin gửi lời cảm ơn đến quý thầy,
cô đang giảng dạy tại Trường Đại học Khoa học Tự nhiên nói chung và Khoa Vật
lý nói riêng. Đặc biệt, nếu không có sự hướng dẫn, chỉ bảo tận tình, chu đáo của
thầy Phạm Tiến Lâm và thầy Phạm Văn Thành thì tôi khó có thể hoàn thành bài
luận văn này. Tôi xin gửi lời cảm ơn sâu sắc đến thầy, người đã dạy dỗ, chỉ bảo và
cung cấp cho tôi những tài liệu khoa học chuẩn xác nhất để em có những tri thức
đúng đắn.
Tôi xin chân thành cảm ơn Quỹ Phát triển khoa học và công nghệ Quốc gia
(NAFOSTED) đã tạo điều kiện và hỗ trợ cho tôi trong thời gian nghiên cứu, học
tập thạc sĩ thông qua đề tài mã số 103.99-2020.33
Nhân đây, tôi cũng xin gửi lời cảm ơn đến bạn bè, những người đã giúp đỡ, động
viên, cổ vũ giúp em vượt qua những khó khăn trong nghiên cứu.
Trong quá trình thực hiện luận văn, tôi đã cố gắng hết sức để tránh những sai
sót và thiếu sót. Tuy nhiên, do kiến thức còn hạn chế, luận văn có thể chưa đạt
được sự hoàn thiện như mong muốn. Tôi rất trân trọng những ý kiến đóng góp và
góp ý của quý thầy cô để hoàn thiện hơn nữa luận văn này.
Tôi xin chân thành cảm ơn!

Hà Nội, tháng 01 năm 2024


Học viên
Nguyễn Xuân Nam
Mục lục

DANH SÁCH HÌNH VẼ

DANH SÁCH CÁC TỪ VIẾT TẮT

MỞ ĐẦU 1

CHƯƠNG 1 - CƠ SỞ LÝ THUYẾT 4

1.1 Âm thanh . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Tín hiệu âm thanh . . . . . . . . . . . . . . . . . 5
1.2 Trích chọn đặc trưng của âm thanh . . . . . . . . . . . . 6
1.2.1 Đặc trưng của âm thanh . . . . . . . . . . . . . . 6
1.2.2 Các đặc trưng âm thanh trong miền thời gian . . . . . 7
1.2.3 Các đặc trưng âm thanh trong miền tần số . . . . . . 8
1.2.4 Đặc trưng âm thanh MFCC . . . . . . . . . . . . . 11
1.3 Học sâu (Deep learning) . . . . . . . . . . . . . . . . . 17
1.3.1 Định nghĩa . . . . . . . . . . . . . . . . . . . . 17
1.3.2 Ưu điểm của phương pháp học sâu . . . . . . . . . . 18
1.3.3 Một số thuật toán nhân dạng và phân loại âm thanh . . 18
1.3.4 Mạng neural tích chập . . . . . . . . . . . . . . . 19
1.3.5 Mạng neural đệ quy . . . . . . . . . . . . . . . . 22
1.3.6 Mạng đệ quy LSTM . . . . . . . . . . . . . . . . 22
1.4 Các độ đo đánh giá mô hình . . . . . . . . . . . . . . . 23
1.4.1 Confusion Matrix . . . . . . . . . . . . . . . . . 24
1.4.2 Accuracy score (Độ chính xác) . . . . . . . . . . . . 24
1.4.3 Precision và Recall . . . . . . . . . . . . . . . . . 25

CHƯƠNG 2 - NGHIÊN CỨU THỰC NGHIỆM 26

2.1 Bài toán thực nghiệm . . . . . . . . . . . . . . . . . . 27


2.1.1 Lưu đồ thuật toán và xây dựng hệ thống . . . . . . . 27
MỤC LỤC MỤC LỤC

2.2 Phần cứng hệ thống . . . . . . . . . . . . . . . . . . 28


2.2.1 Raspberry Pi . . . . . . . . . . . . . . . . . . . 28
2.2.2 Module L298N . . . . . . . . . . . . . . . . . . 30
2.2.3 Motor DC . . . . . . . . . . . . . . . . . . . . 31
2.3 Dữ liệu thực nghiệm . . . . . . . . . . . . . . . . . . 32
2.3.1 Thu thập và tiền xử lý dữ liệu . . . . . . . . . . . . 32
2.3.2 Trích chọn đặc trưng với MFCC . . . . . . . . . . . 33
2.3.3 Huấn luyện mô hình học sâu . . . . . . . . . . . . 33
2.4 Hệ thống điều khiển xe robot . . . . . . . . . . . . . . 37
2.4.1 Hệ thống ghi âm và chuyển đổi . . . . . . . . . . . 37
2.4.2 Phương thức kết nối Socket . . . . . . . . . . . . . 37
2.4.3 Hệ thống điều khiển xe robot . . . . . . . . . . . . 38

CHƯƠNG 3 - KẾT QUẢ VÀ NHẬN XÉT 40

3.1 Kết quả trích chọn đặc trưng. . . . . . . . . . . . . . . 41


3.1.1 Tín hiệu âm thanh “Lên” . . . . . . . . . . . . . . 41
3.1.2 Tín hiệu âm thanh “Xuống” . . . . . . . . . . . . . 42
3.1.3 Tín hiệu âm thanh “Trái” . . . . . . . . . . . . . . 43
3.1.4 Tín hiệu âm thanh “Phải” . . . . . . . . . . . . . . 44
3.1.5 Tổng hợp đặc trưng MFCC . . . . . . . . . . . . . 45
3.1.6 Nhận xét . . . . . . . . . . . . . . . . . . . . . 45
3.2 Kết quả đánh giá mô hình . . . . . . . . . . . . . . . . 45
3.2.1 Đánh giá với Accuracy . . . . . . . . . . . . . . . 45
3.2.2 Đánh giá với Precision và Recall . . . . . . . . . . . 47
3.3 Kết quả hệ thống phần cứng . . . . . . . . . . . . . . . 48
3.4 Kết quả kết nối . . . . . . . . . . . . . . . . . . . . 49
3.5 Kết quả thực tế . . . . . . . . . . . . . . . . . . . . 49
3.6 Nhận xét chung . . . . . . . . . . . . . . . . . . . . 50

KẾT LUẬN 51

TÀI LIỆU THAM KHẢO

PHỤ LỤC A

PHỤ LỤC B
Danh sách hình vẽ

1.1 Âm thanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Chuyển đổi âm thanh từ tín hiệu liên tục sang tín hiệu số . . . . . . . 6
1.3 Tín hiệu âm thanh “Lên” theo miền thời gian . . . . . . . . . . . . . 7
1.4 Tín hiệu âm thanh là sự kết hợp của các sóng hình sin và cosin . . . 8
1.5 Tín hiệu âm thanh “Lên” theo miền tần số . . . . . . . . . . . . . . . 9
1.6 Ảnh phổ của tín hiệu âm thanh “Lên” . . . . . . . . . . . . . . . . . . 11
1.7 Quy trình xử lý của phương pháp MFCC . . . . . . . . . . . . . . . . 11
1.8 Số hóa dữ liệu âm thanh với tần số lấy mẫu xác định . . . . . . . . . 12
1.9 Pre-emphasis một đoạn âm thanh . . . . . . . . . . . . . . . . . . . . 12
1.10 Các khung dữ liệu được xếp chồng lên nhau . . . . . . . . . . . . . . 13
1.11 Các loại cửa sổ phổ biến . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.12 Tín hiệu âm thanh khi chập với các loại cửa sổ khác nhau . . . . . . 13
1.13 Ảnh phổ của tín hiệu âm thanh lên . . . . . . . . . . . . . . . . . . . 14
1.14 Bộ lọc thông dải Mel . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.15 Ảnh phổ Mel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.16 Quy trình tính Cepstrum . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.17 Các kiểu dữ liệu phi cấu trúc phổ biến. . . . . . . . . . . . . . . . . . 18
1.18 Luồng xử lý của mạng CNN . . . . . . . . . . . . . . . . . . . . . . . 19
1.19 Dữ liệu đầu vào và đầu ra của một lớp tích chập . . . . . . . . . . . . 20
1.20 Lớp tích chập hoạt động với bước nhảy là 2 . . . . . . . . . . . . . . 20
1.21 Valid và Same Padding . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.22 Các hàm kích hoạt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.23 Hàm ReLU6 và LeakyReLU . . . . . . . . . . . . . . . . . . . . . . . 22
1.24 Luồng xử lý của RNN . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.25 Luồng xử lý của LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.26 Confusion Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.1 Nguyên lý hoạt động của hệ thống . . . . . . . . . . . . . . . . . . . 27


2.2 Lưu đồ thuật toán hoạt động của hệ thống . . . . . . . . . . . . . . . 27
2.3 Bo mạch đơn Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 Module L298N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5 Động cơ motor DC 3-6V . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6 Các tệp âm thanh xử lý được chia vào các thư mục riêng . . . . . . . 32
2.7 Các đặc trưng được lưu vào tệp JSON . . . . . . . . . . . . . . . . . 33
2.8 Mô hình mạng CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.9 Mô hình mạng LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.10 Mô hình mạng Hybrid . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.11 Mô hình kết nối Socket . . . . . . . . . . . . . . . . . . . . . . . . . . 38
DANH SÁCH HÌNH VẼ DANH SÁCH HÌNH VẼ

2.12 Kết nối động cơ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.1 Ảnh phổ của tín hiệu “Lên” . . . . . . . . . . . . . . . . . . . . . . . 41


3.2 Ảnh phổ Mel của tín hiệu “Lên” . . . . . . . . . . . . . . . . . . . . . 41
3.3 Đặc trưng MFCC của tín hiệu “Lên” . . . . . . . . . . . . . . . . . . 41
3.4 Ảnh phổ của tín hiệu “Xuống” . . . . . . . . . . . . . . . . . . . . . . 42
3.5 Ảnh phổ Mel của tín hiệu “Xuống” . . . . . . . . . . . . . . . . . . . 42
3.6 Đặc trưng MFCC của tín hiệu “Xuống” . . . . . . . . . . . . . . . . . 42
3.7 Ảnh phổ của tín hiệu “Trái” . . . . . . . . . . . . . . . . . . . . . . . 43
3.8 Ảnh phổ Mel của tín hiệu “Trái” . . . . . . . . . . . . . . . . . . . . . 43
3.9 Đặc trưng MFCC của tín hiệu “Trái” . . . . . . . . . . . . . . . . . . 43
3.10 Ảnh phổ của tín hiệu “Phải” . . . . . . . . . . . . . . . . . . . . . . . 44
3.11 Ảnh phổ Mel của tín hiệu “Phải” . . . . . . . . . . . . . . . . . . . . 44
3.12 Đặc trưng MFCC của tín hiệu “Phải” . . . . . . . . . . . . . . . . . . 44
3.13 Các đặc trưng được lưu lại . . . . . . . . . . . . . . . . . . . . . . . . 45
3.14 Accuracy và Loss của các mô hình với LR=0.001 . . . . . . . . . . . 46
3.15 Accuracy và Loss của các mô hình với LR=0.0001 . . . . . . . . . . . 46
3.16 Hệ thống phần cứng . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.17 Kết quả hoạt động trên hai thiết bị . . . . . . . . . . . . . . . . . . . 49
Danh sách các từ viết tắt

ADC Analog-to-Digital Conversion


MFCC Mel-Frequency Cepstral Coefficients
RMS Root Mean Square
STFT Short-time Fourier transform
ZCR Zero-crossing rate
NLP Natural language processing
AI Artificial intelligencel
CNN Convolutional Neural Networks
RNN Recurrent Neural Networks
LSTM Long Short-term Memory
GRU Gated Recurrent Unit
DFT Discrete Fourier Transform
ROC Receiver Operating Characteristic
VSTi Virtual Studio Technology Instruments
LR Learning Rates
GUI Graphical user interface
Mở đầu

Lý do chọn đề tài
Trong thời đại hiện nay, sự tích hợp của các thiết bị điện tử vào cuộc sống hàng
ngày của con người đã trở nên vô cùng phổ biến. Để đảm bảo sự tiện lợi và khả
năng sử dụng dễ dàng cho người dùng, các thiết bị này được chế tạo với hệ thống
điều khiển đa dạng từ cơ bản đến phức tạp. Một loạt các phương pháp điều khiển
đã được áp dụng trong việc tương tác với các thiết bị điện tử, bao gồm:

ˆ Điều khiển bằng tay: Điều khiển thiết bị bằng cách sử dụng các cử chỉ hoặc
thiết bị tay như remote, bàn phím, hoặc chuột. Ưu điểm của phương pháp này
là quen thuộc và dễ sử dụng cho nhiều người, tuy nhiên có thể gây bất tiện
khi cần phải mang theo thiết bị điều khiển riêng, đặc biệt khi có nhiều thiết
bị cần điều khiển.

ˆ Điều khiển bằng giọng nói: Sử dụng giọng nói để điều khiển thiết bị hoặc hệ
thống. Tiện lợi và tự nhiên hơn trong việc tương tác với thiết bị, có khả năng
hỗ trợ người dùng có khuyết tật. Ngược lại đôi khi thiết bị có thể nhận diện
không chính xác các lệnh hoặc bị ảnh hưởng bởi tiếng ồn xung quanh.

ˆ Điều khiển bằng cảm biến: Sử dụng cảm biến để phát hiện và phản ứng với
các tín hiệu từ người dùng hoặc môi trường xung quanh. Ưu điểm: Tạo ra trải
nghiệm tương tác tự động, không cần sự can thiệp trực tiếp từ người dùng.
Nhược điểm: Có thể gây nhầm lẫn hoặc không chính xác trong việc nhận diện
tín hiệu, đặc biệt khi môi trường xung quanh thay đổi.

ˆ Điều khiển bằng hệ thống thông minh: Sử dụng trí tuệ nhân tạo và hệ thống
thông minh để tự động điều khiển thiết bị dựa trên dữ liệu và học máy. Ưu
điểm: Cung cấp trải nghiệm tùy chỉnh, học hỏi và tự động hóa cao,có khả
năng thích ứng và cải thiện theo thời gian. Nhược điểm: Đòi hỏi cơ sở hạ tầng
công nghệ tốt, có thể phức tạp và đắt đỏ để triển khai và duy trì, đôi khi có
thể gây lo ngại về quyền riêng tư.

Trong những năm gần đây, lĩnh vực học máy đã trải qua sự tăng trưởng theo
cấp số nhân, với các ứng dụng trong các lĩnh vực đa dạng như chăm sóc sức khỏe,
tài chính và tự động hóa. Bên cạnh đó, khi số lượng thiết bị IoT tăng vọt, nhu cầu
ra quyết định thông minh, cục bộ cũng tăng theo. Các cách tiếp cận dựa trên đám
mây truyền thống đối với AI có thể bị giới hạn bởi các yếu tố như độ trễ, băng
thông và mối quan tâm về quyền riêng tư. Ngược lại, TinyAI hỗ trợ trí thông minh
trên thiết bị, cho phép ra quyết định nhanh hơn, hiệu quả hơn mà không cần liên
lạc liên tục với đám mây.

1
Mở đầu

Sự tiến bộ của TinyAI không chỉ giảm kích thước của mô hình mà còn tăng
cường hiệu suất tính toán, giúp việc nhận dạng và xử lý giọng nói trở nên nhanh
chóng và hiệu quả hơn. Việc tích hợp TinyAI vào các thiết bị như điện thoại di
động, thiết bị gia đình thông minh hoặc các sản phẩm cá nhân đã mở ra cánh cửa
cho việc sử dụng giọng nói như một phương pháp điều khiển hàng đầu.
Điều này không chỉ mang lại trải nghiệm tương tác tự nhiên hơn cho người dùng
mà còn tạo ra môi trường linh hoạt cho việc sử dụng công nghệ trong nhiều ngữ
cảnh khác nhau, từ việc điều khiển thiết bị đơn giản đến tương tác phức tạp hơn với
hệ thống thông minh. Sự tiến bộ của TinyAI đã cung cấp nền tảng mạnh mẽ cho
việc triển khai các ứng dụng điều khiển bằng giọng nói, đánh dấu một bước nhảy
vọt trong sự hòa nhập giữa con người và công nghệ thông qua giao tiếp giọng nói
tự nhiên và hiệu quả.

Mục tiêu nghiên cứu


Mục tiêu của luận văn là khám phá khả năng áp dụng các mô hình học sâu để
phân tích và diễn giải các đặc trưng của tín hiệu âm thanh trong hệ thống điều
khiển tự động. Nghiên cứu sẽ tập trung vào việc xác định khả năng của các phương
pháp học sâu trong việc nhận diện, phân loại và đánh giá các đặc trưng tín hiệu âm
thanh có liên quan đến điều khiển tự động, nhằm tạo ra các mô hình dự đoán và
điều chỉnh chính xác cho quá trình điều khiển. Bằng cách này, mục tiêu cuối cùng
là cung cấp những công cụ phân tích tiên tiến, giúp tối ưu hóa hoạt động của hệ
thống điều khiển tự động thông qua việc áp dụng học sâu vào việc xử lý tín hiệu
âm thanh.

Phương pháp nghiên cứu


Trong nghiên cứu này, chúng tôi thực hiện phân tích các tín hiệu âm thanh với
mục tiêu là có thể điều khiển một thiết bị điện tử, ở đây là một xe robot với các
lệnh đơn giản như “Lên”, “Xuống”, “Trái”, “Phải”.

ˆ Dữ liệu đầu vào: Các tệp âm thanh, tệp ghi âm trong khuôn dạng .wav được
thu thập từ giọng nói của nhiều người với môi trường bên ngoài khác nhau.

ˆ Kết quả đầu ra: Thực hiện phân tích các tín hiệu âm thanh bằng cách sử dụng
các kỹ thuật trích chọn đặc trưng, nhận dạng và phân loại để từ đó chuyển
đổi từ tín hiệu âm thanh sang văn bản, hỗ trợ điều khiển thiết bị điện tử.

Đầu tiên, chúng tôi thu thập dữ liệu tín hiệu âm thanh từ môi trường thực tế
bên ngoài. Dữ liệu này được tiền xử lý để loại bỏ nhiễu và chuẩn hóa trước khi đưa
vào mô hình học sâu. Sau đó, chúng tôi tiến hành trích chọn đặc trưng của các tín
hiệu âm thanh. Tiếp theo, chúng tôi huấn luyện mô hình sử dụng dữ liệu đã dược
trích chọn và gán nhãn để mô hình có thể học và nhận diện các mẫu âm thanh
tương ứng với các tình huống điều khiển cụ thể. Quá trình huấn luyện này cần sự
tinh chỉnh của các siêu tham số để tối ưu hóa hiệu suất của mô hình.
Sau khi hoàn thành quá trình huấn luyện, chúng tôi đánh giá hiệu suất của mô
hình thông qua các thước đo đánh giá như độ chính xác, độ nhạy, độ đặc hiệu. Đồng

2
Mở đầu

thời, chúng tôi cũng thực hiện việc áp dụng mô hình đã huấn luyện vào các tình
huống thực tế để kiểm tra và xác nhận tính khả dụng và hiệu quả của nó trong ứng
dụng thực tế.

Phạm vi nghiên cứu


Đối tượng và phạm vi nghiên cứu của đề tài bao gồm:

ˆ Các khái niệm cơ bản về âm thanh, âm thanh số và tín hiệu âm thanh.

ˆ Các đặc trưng của âm thanh theo miền thời gian và miền tần số.

ˆ Các kỹ thuật trích chọn đặc trưng của tín hiệu âm thanh, các thuật toán xây
dựng mạng neural học sâu để nhận dạng và phân loại tín hiệu âm thanh.

Cấu trúc luận văn


Ngoài phần mở đầu, mục lục, danh mục các hình vẽ, bảng biểu, các ký tự viết
tắt cùng các tài liệu tham khảo, phần nội dung của luận văn gồm 3 chương:

ˆ Chương 1: Trình bày các kiến thức cơ bản về tín hiệu âm thanh và học sâu.

ˆ Chương 2: Mô tả chi tiết quá trình xây dựng mô hình điều khiển xe robot,
bao gồm các bước thu thập dữ liệu, tiền xử lý dữ liệu, xây dựng và huấn luyện
mô hình học sâu, và kết nối mô hình với xe robot.

ˆ Chương 3: Kết quả và nhận xét.

Phần kết luận tóm tắt các kết quả chính thu được và đề xuất các hướng nghiên
cứu mới có thể phát triển tiếp của đề tài.

3
Chương 1

Cơ sở lý thuyết

4
Chương 1: Cơ sở lý thuyết

1.1 Âm thanh
1.1.1 Định nghĩa
Âm thanh là các dao động cơ học của các phân tử, nguyên tử hay các hạt làm
nên vật chất và lan truyền trong vật chất như các sóng. Âm thanh, giống như nhiều
sóng, được đặc trưng bởi tần số, bước sóng, chu kỳ, biên độ và vận tốc lan truyền. [2]

1
Hình 1.1: Âm thanh

Đối với thính giác của người, âm thanh nghe được thường dao động trong dải
tần số từ khoảng 16 Hz đến khoảng 20 000 Hz. Tuy nhiên âm thanh cũng có thể
được định nghĩa rộng hơn, tuỳ vào ứng dụng, bao gồm các tần số cao hơn hay thấp
hơn tần số mà tai người có thể nghe thấy, không chỉ lan truyền trong không khí mà
còn truyền trong bất cứ vật liệu nào. Cả tiếng ồn và âm nhạc đều là các âm thanh.
Trong việc truyền tín hiệu bằng âm thanh, tiếng ồn là các dao động ngẫu nhiên
không mang tín hiệu.

1.1.2 Tín hiệu âm thanh


Âm thanh là một dạng tín hiệu mang tính liên tục, đặt ra thách thức khi chúng
ta muốn biểu diễn và xử lý trên máy tính, một hệ thống làm việc với các giá trị
số rời rạc. Để vượt qua rào cản này và tận dụng các ưu điểm của xử lý số, chúng
ta cần chuyển đổi tín hiệu âm thanh sang dạng số. Các tập tin âm thanh phổ biến
như MP3, WAV không chỉ đơn thuần là các định dạng dữ liệu mà chúng ta thường
gặp trên máy tính và thiết bị di động, mà còn là biểu diễn số hóa của các tín hiệu
1
https://www.freepik.com

5
Chương 1: Cơ sở lý thuyết

âm thanh, giúp thuận tiện trong việc lưu trữ, truyền tải và xử lý các thông tin âm
thanh.

2
Hình 1.2: Chuyển đổi âm thanh từ tín hiệu liên tục sang tín hiệu số

Quá trình chuyển đổi tín hiệu từ dạng liên tục sang dạng số được gọi là quá trình
Analog-to-Digital Conversion (ADC). Đây là quá trình chuyển đổi dữ liệu thường
được sử dụng trong nhiều thiết bị điện tử hiện đại.

1.2 Trích chọn đặc trưng của âm thanh


1.2.1 Đặc trưng của âm thanh
Các đặc trưng âm thanh là mô tả về âm thanh hoặc tín hiệu âm thanh có thể
được đưa vào các mô hình thống kê hoặc học máy để xây dựng các hệ thống âm
thanh thông minh. Các ứng dụng âm thanh sử dụng các đặc trưng như vậy bao gồm
phân loại âm thanh, nhận dạng tiếng nói, gắn thẻ âm nhạc tự động, phân đoạn và
phân tách nguồn âm thanh, làm sạch nhiễu âm thanh, truy xuất thông tin âm nhạc
và nhiều ứng dụng khác.
Các đặc trưng khác nhau ghi lại các khía cạnh khác nhau của âm thanh. Ở trong
nghiên cứu này, ta tập trung vào các đặc trưng âm thanh trong miền tín hiệu. Bao
gồm:

ˆ Miền thời gian: Đây là những đặc trưng được trích xuất từ dạng sóng của
âm thanh gốc. Ví dụ: Năng lượng, năng lượng Root Mean Square(RMS) và tỷ
lệ vượt qua 0.

ˆ Miền tần số: Những đặc trưng này tập trung vào các thành phần tần số của
tín hiệu âm thanh. Tín hiệu thường được chuyển đổi từ miền thời gian sang
miền tần số bằng cách sử dụng biến đổi Fourier. Ví dụ: Tỷ lệ năng lượng dải
tần, trọng tâm phổ, và lưu lượng phổ.
2
https://dewesoft.com/blog/what-is-adc-converter

6
Chương 1: Cơ sở lý thuyết

1.2.2 Các đặc trưng âm thanh trong miền thời gian


Biểu diễn tín hiệu âm thanh trong miền thời gian hoặc miền thời gian - biên độ,
đại diện cho kỹ thuật biểu diễn cơ bản nhất, trong đó tín hiệu được thể hiện thông
qua sự biến đổi của biên độ theo thời gian [3].
Hình 1.3 minh họa một ví dụ về biểu diễn âm thanh trong miền thời gian - biên
độ. Trạng thái im lặng (câm) được biểu diễn dưới dạng giá trị 0. Giá trị của tín hiệu
âm thanh có thể âm hoặc dương, phụ thuộc vào áp suất âm thanh có cao hơn hay
thấp hơn so với áp suất cân bằng trong trạng thái im lặng. Đoạn âm thanh trong
hình đã được mã hóa với độ phân giải 16 bit, với tốc độ lấy mẫu là 16000Hz, và
được chuẩn hóa để biên độ nằm trong khoảng từ -1.0 đến 1.0.

Hình 1.3: Tín hiệu âm thanh “Lên” theo miền thời gian

a) Năng lượng
Năng lượng của một tín hiệu âm thanh là tổng cường độ của tín hiệu đó theo
miền thời gian [2]. Được cho bởi công thức:
X
E(x) = |x(N )|2
N

trong đó, E là năng lượng của đoạn âm thanh, x(N ) là giá trị biên độ của mẫu thứ
N.

b) Root Mean Square Energy


Root Mean Square Energy (RMSE) là một chỉ số thống kê dùng để đo mức độ
năng lượng hoặc công suất tổng cộng chứa trong một tín hiệu âm thanh trong một
khoảng thời gian [3]. Công thức toán học để tính RMSE của một chuỗi tín hiệu âm
thanh x với N mẫu là:
s
1 X
RM SE(x) = |x(N )|2
N N

c) Zero Crossing Rate


Zero Crossing Rate (ZCR) chỉ ra tần số thay đổi của dấu biên độ tín hiệu. Nói
cách khác, nó chỉ ra tần số trung bình của tín hiệu [4]. Công thức tính ZCR được

7
Chương 1: Cơ sở lý thuyết

biểu diễn như sau:


X |sgn[x(N )] − sgn[x(N − 1)]|
ZCR =
N
2N

trong đó, sgn[x(N )] là dấu x(N ) và có giá trị là 1 nếu x(N ) nhận giá trị dương, giá
trị là -1 nếu x(N ) nhận giá trị âm.

1.2.3 Các đặc trưng âm thanh trong miền tần số


Các đặc trưng âm thanh trong miền tần số được suy diễn từ phổ âm thanh của
tín hiệu âm thanh. Phổ âm thanh hiển thị các tần số khác nhau có trong âm thanh.
Hầu hết các âm thanh được tạo thành từ một hỗn hợp rung động phức tạp [1]. Hình
1.4 bên dưới biểu diễn tín hiệu âm thanh 3 được tọa thành từ hỗn hợp hai tín hiệu
1 và 2.

3
Hình 1.4: Tín hiệu âm thanh là sự kết hợp của các sóng hình sin và cosin

Biểu diễn miền thời gian không chỉ ra được các thành phần tần số và phân bổ
tần số của tín hiệu âm thanh. Biểu diễn miền tần số được suy diễn từ biểu diễn miền
thời gian bằng biến đổi Fourier. Biến đổi Fourier tách tín hiệu thành cách thành
phần tần số riêng lẻ. Trong miền tần số, tín hiệu được biểu diễn bởi biến độ biến
đổi theo tần số, chỉ ra tổng năng lượng tại các tần số khác nhau. Biểu diễn miền
tần số của tín hiệu âm thanh được gọi là phổ của tín hiệu âm thanh.
Hình 1.5 là phổ của tín hiệu âm thanh. Xuất phát từ phổ tín hiệu, ta có thể dễ
dàng nhận ra ra phân bổ năng lượng theo dải tần số. Ta sử dụng biến đổi Fourier
rời rạc (Discrete Fourier Transform - DFT) để suy diễn ra phổ tín hiệu:
N
X −1
X(k) = x(n)ejn ωk
N =0

trong đó, ωk = 2πk


N
, x(n) là tín hiệu rời rạc với N mẫu, k là DFT bin.
Nếu tần số lấy mẫu tín hiệu là fs Hz thì tần số fk của bin k sẽ là:
ωk k
fk = fs = fs
2π N
3
https://www.shutterstock.com

8
Chương 1: Cơ sở lý thuyết

Nếu x(n) có giới hạn thời gian là N thì nó có thể khôi phục hoàn toàn IDFT của
N mẫu tần số như sau:
N −1
1 X
x(n) = X(k)ejnωk
N k=0

Các giá trị DFT và IDFT được tính toán hiệu quả bằng thuật toán biến đổi
Fourier nhanh (Fast Fourier Transform - FFT).

Hình 1.5: Tín hiệu âm thanh “Lên” theo miền tần số

Như đã nói ở trên, DFT làm việc với tín hiệu rời rạc có giới hạn độ dài N. Tuy
nhiên, trong thực tế, rất nhiều tín hiệu trong khoảng thời gian dài, rất khó để tính
toán với N lớn. Để giải quyết vấn đề này, người ta sử dụng STFT (Short-time Fourier
Transform). Trong đó, tín hiệu và độ dài lớn được chia thành các khối gọi là khung
dữ liệu (frame) và DFT áp dụng cho từng khung. Khung được hình thành bằng cách
nhân tín hiệu gốc với hàm cửa sổ (windowing). Thông thường độ dài khung khoảng
10 đến 20ms [8].

a) Băng thông (Bandwidth)


Băng thông của tín hiệu âm thanh là dải tần số của tín hiệu âm thanh đó. Tín
hiệu nhạc thường có băng thông cao hơn tín hiệu tiếng nói. Để tính băng thông
người ta lấy chênh lệch tần số giữa tần số cao nhất với tần số thấp nhất của các
thành phần phổ khác không. Trong một số trường hợp, “nonzero” được xác định
khoảng 3dB trên mức câm [1].
Băng thông quan trọng trong việc xác định chất lượng âm thanh và cũng ảnh
hưởng đến cách mà thông tin âm thanh được truyển tải và xử lý trong các hệ thống
âm thanh.

b) Phân bổ năng lượng


Phân bổ năng lượng của dữ liệu âm thanh là cách mà năng lượng được phân
phối trên các tần số khác nhau trong tín hiệu âm thanh. Thông thường, phân bổ
năng lượng được biểu thị dưới dạng biểu đồ và đồ thị, thể hiện mức độ đóng góp của
mỗi tần số đến tổng năng lượng của tín hiệu. Đặc trưng này rất có ích trong việc
phân loại và nhân dạng âm thanh vì câu lệnh hay tín hiệu khác nhau sẽ có những
dải tần số khác nhau [1].

9
Chương 1: Cơ sở lý thuyết

Việc tính toán năng lượng dải tần số cao và tần số thấp là cần thiết. Ví dụ tần
số tín hiệu tiếng nói ít khi vượt qua 7kHz. Do vậy, ta có thể chia toàn bộ phổ theo
đường ngang 7kHz: nửa dưới thuộc tần số thấp và nửa trên thuộc tần số cao. Tổng
năng lượng của tệp âm thanh được tính bằng tổng năng lượng của mỗi mẫu trong
tệp đó.

c) Điều hòa (Harmonicity)


Đặc trưng thứ ba trong miền tần số của âm thanh là điều hòa. Điều hòa của âm
thanh liên quan đến tính chất của âm thanh khi các tần số là các bội số của một
tần số cơ bản nào đó. Cụ thể, khi một âm thanh có tính điều hòa cao, có nghĩa là
âm thanh này chứa đáng kể các thành phần tần số là các bội số nguyên của tần số
cơ bản. Các thành phần tần số này được gọi là harmonics, và chúng tạo nên cấu
trúc âm thanh có âm điệu và âm sắc phong phú [1].
Một ví dụ rõ ràng về âm thành điều hòa cao là tiếng hát của con người hoặc
âm nhạc được chơi trên các nhạc cụ cổ điển. Trong các trường hợp này, các tần số
xuất hiện trong giọng hát hoặc âm nhạc là các bội số nguyên của tần số cơ bản tọa
nên âm điệu dễ nhận diện. Ví dụ, phổ âm thanh của nốt G4 trên tiếng sáo có dải
tần số cao độ (pitch) như sau: 400Hz, 800Hz, 1200Hz, 1600Hz,... Ta có thể dễ dàng
nhận thấy f0 = 400Hz là tần số cơ bản của âm thanh. Các thành phần có tần số
nf được gọi là điều hòa của nốt nhạc.Tuy nhiên đối với các âm thanh không điều
hòa, tần số các bước không phải là các bội số nguyên của các tần số cơ bản, dẫn
đến âm thanh có cấu trúc tần số phức tạp và không có âm điệu dễ nhận diện.
Điều hòa là một thuộc tính quan trọng trong việc phân tích và xử lý tín hiệu âm
thanh, đặc biệt là trong các ứng dụng như nhận diện giọng nói hay nghiên cứu âm
thanh.

d) Cao độ (Pitch)
Đặc trưng thứ tư của miền tần số trong dữ liệu âm thanh là cao độ. Cao độ của
âm thanh là thuộc tính mà người nghe cảm nhận các tần số của một âm thanh. Nó
liên quan đến cảm giác về sự “cao thấp” của âm thanh [1].

ˆ Cao độ thấp: Âm thanh có tần số thấp tạo ra cảm giác của một cao độ thấp,
thường được miêu tả như “âm thanh trầm” hoặc “âm thanh thấp”.

ˆ Cao độ cao: Âm thanh có tần số cao tạo ra cảm giác của một cao độ cao,
thường được miêu tả như “âm thanh bổng” hoặc “âm thanh cao”.

Tần số càng cao thì cao độ càng cao và bước sóng càng ngắn. Cao độ là đặc
trưng chủ quan, nó có quan hệ nhưng không tương đương với tần số cơ bản. Tuy
nhiên, trong thực tế, chúng ta sử dụng các tần số cơ bản để xấp xỉ cao độ.

e) Ảnh phổ (Spectrogram)

Ảnh phổ của âm thanh là một biểu đồ hai chiều mà trên trục hoành thể hiện
thời gian và trục tung thể hiện tần số. Màu sắc hoặc cường độ của các điểm ảnh
trên biểu đồ đại diện cho mức năng lượng của âm thanh tại một thời điểm và tần
số cụ thể [1].

10
Chương 1: Cơ sở lý thuyết

Thông quả ảnh phổ, có thể hiểu được cách năng lượng của âm thanh được phân
phối trên các tần số và thay đổi theo thời gian. Điều này cho phép phân tích và biểu
đồ hóa các yếu tố âm thanh như cao độ, độ lớn và các tần số cơ bản.
Hình 1.6 chỉ ra ảnh phổ của một tín hiệu âm thanh. Ảnh phổ mô tả rõ ràng các
quan hệ giữa thời gian, tần số và biên độ.

Hình 1.6: Ảnh phổ của tín hiệu âm thanh “Lên”

1.2.4 Đặc trưng âm thanh MFCC


Giới thiệu
MFCC là một phương pháp để trích xuất các đặc trưng âm thanh thường được
sử dụng trong các mô hình nhận dạng giọng nói hay phân loại giọng nói. MFCC
cho ra kết quả là các hệ số cepstral từ bộ lọc Mel trên phổ lấy được từ các file âm
thanh chứa giọng nói. Quá trình trích chọn đặc trưng MFCC như sau [5] [6]:

4
Hình 1.7: Quy trình xử lý của phương pháp MFCC

11
Chương 1: Cơ sở lý thuyết

Bước 1: A/D Conversion


Do âm thanh là dạng tín hiệu liên tục, ta cần lấy mẫu tại các khoảng thời gian
cách đều nhau với một tần số lấy mẫu xác định (sample rate) để chuyển từ dạng tín
hiệu liên tục về dạng rời rạc. VD: sample_rate = 8000 → trong 1s lấy 8000 giá trị.

4
Hình 1.8: Số hóa dữ liệu âm thanh với tần số lấy mẫu xác định

Tai người nghe được âm thanh trong khoảng 16Hz → 20.000Hz. Theo định lý
lấy mẫu Nyquist–Shannon: Với một tín hiệu có các tần số thành phần ≤ fm , để đảm
bảo việc lấy mẫu không làm mất mát thông tin, tần số lấy mẫu fs phải đảm bảo fs
≥ 2fm .
Vậy để đảm bảo việc lấy mẫu không làm mất mát thông tin, tần số lấy mẫu fs
= 44100Hz. Tuy nhiên trong nhiều trường hợp, người ta chỉ cần lấy fs = 8000Hz
hoặc fs = 16000Hz.

Bước 2: Pre-emphasis
Do đặc điểm cấu tạo thanh quản và các bộ phận phát âm nên tiếng nói có đặc
điểm: các âm ở tần số thấp có mức năng lượng cao và các âm ở tần số cao lại có
mức năng lượng khá thấp. Trong khi đó, các tần số cao này vẫn chứa nhiều thông
tin về âm vị. Vì vậy chúng ta cần 1 bước pre-emphasis để kích thích các tín hiệu ở
tần số cao.

4
Hình 1.9: Pre-emphasis một đoạn âm thanh

Bước 3: Cửa sổ hóa (Windowing)


Thay vì biến đổi Fourier trên cả đoạn âm thanh dài, ta trượt 1 cửa sổ dọc theo
tín hiệu để lấy ra các khung rồi mới áp dụng biến đổi Fourier rời rạc (Discrete
4
https://jonathan-hui.medium.com
4
https://jonathan-hui.medium.com

12
Chương 1: Cơ sở lý thuyết

Fourier Transform - DFT) trên từng khung này. Tốc độ nói của con người trung
bình khoảng 3, 4 từ mỗi giây, mỗi từ khoảng 3-4 âm, mỗi âm chia thành 3-4 phần,
như vậy 1 giây âm thanh được chia thành 36 - 40 phần, ta chọn độ rộng mỗi khung
khoảng 20 - 25ms là đủ rộng để bao 1 phần âm thanh. Các khung được xếp chồng
lên nhau khoảng 10ms để có thể thu lại sự thay đổi về nội dung.

4
Hình 1.10: Các khung dữ liệu được xếp chồng lên nhau

Tuy nhiên, việc cắt khung sẽ làm các giá trị ở 2 biên của khung bị giảm đột
ngột về giá trị 0, điều đó sẽ dẫn tới hiện tượng: khi DFT sang miền tần số sẽ có rất
nhiều nhiễu ở tần số cao. Để khắc phục điều này, ta cần làm mượt bằng cách nhân
khung dữ liệu với một vài loại cửa sổ. Có một vài loại cửa sổ phổ biến là Hamming
window, Hanning window... có tác dụng làm giá trị biên khung giảm xuống từ từ.

4
Hình 1.11: Các loại cửa sổ phổ biến
Hình 1.12: Tín hiệu âm thanh khi chập
với các loại cửa sổ khác nhau 4

Hình 1.12 sẽ cho ta thấy rõ được tác dụng của các sửa sổ này. Trong các hình
nhỏ, hình 1 là khung được cắt ra từ âm thanh gốc, âm thanh gốc là sự kết hợp của
hai sóng của hình 2. Nếu cắt trực tiếp, tín hiệu miền tần số tương ứng là hình 3, ta
có thể thấy tín hiệu này chứa rất nhiều nhiễu. Nếu áp dụng các cửa sổ như Hanning,
Hamming, Blackman, tín hiệu miền tần số thu được mượt hơn và tương ứng sóng
gốc ở hình 2.
4
https://jonathan-hui.medium.com

13
Chương 1: Cơ sở lý thuyết

Bước 4: Biến đổi Fourier rời rạc


Trên từng khung, ta áp dụng DFT - Discrete Fourier Transform theo công thức
dưới đây:
N −1
X 2π
X[k] = x[n]exp(−j kn)
n=0
N

Mỗi khung ta thu được một danh sách các giá trị độ lớn tương ứng với từng tần
số từ 0 → N. Áp dụng trên tất cả các khung, ta đã thu được 1 ảnh phổ như hình
dưới đây. Trục x là trục thời gian, trục y thể hiện dải tần số từ 0 → 10000Hz, giá
trị biên độ tại từng tần số được thể hiện bằng màu sắc. Qua quan sát ảnh phổ này,
ta nhận thấy các tại các tần số thấp thường có biên độ cao và ngược lại.

Hình 1.13: Ảnh phổ của tín hiệu âm thanh lên

Tuy nhiên trong nhiều bài toán, đặc biệt là trong bài toán nhận dạng giọng nói,
ảnh phổ không phải là sự lựa chọn hoàn hảo. Vì vậy ta cần thêm vài bước tính toán
để có thể thu được dạng MFCC, tốt hơn, phổ biến hơn, hiệu quả hơn ảnh phổ.

Bước 5: Bộ lọc Mel


Chúng ta đều biết cách cảm nhận của tai người là phi tuyến tính, không giống
các thiết bị đo. Tai người cảm nhận tốt ở các tần số thấp, kém nhạy cảm với các
tần số cao. Vì vậy, ta cần một cơ chế để máy tính có thể xử lý âm thanh tương tự
như vậy.
Bộ lọc Mel được thiết kế dựa trên nguyên lý về cách con người cảm nhận và xử
lý âm thanh trong một phạm vi tần số cụ thể. Đặc điểm quan trọng của bộ lọc Mel
là nó tập trung vào các khoảng tần số quan trọng mà con người cảm nhận tốt hơn,
thay vì phân chia tần số theo cách đều nhau. Quá trình tạo ra bộ lọc Mel thường
bắt đầu bằng việc chuyển đổi từ tần số Hertz sang đơn vị Mel bằng công thức:
f
M el(f ) = 2595 · log10 (1 + )
700
Trong đó, f là tần số trong đơn vị Hertz và M el(f ) là tần số tương ứng trong đơn
vị Mel.

14
Chương 1: Cơ sở lý thuyết

4
Hình 1.14: Bộ lọc thông dải Mel

Hình 1.15: Ảnh phổ Mel

Sau đó, ta bình phương các giá trị trong ảnh phổ thu được DFT power spectrum.
Sau đó, ta áp dụng một tập các bộ lọc thông dải Mel trên từng khoảng tần số. Giá
trị đầu ra của từng bộ lọc là năng lượng dải tần số mà bộ lọc đó bao phủ được.
Ta thu được Mel-scale power spectrum. Ngoài ra, các bộ lọc dùng cho dải tần thấp
thường hẹp hơn các bộ lọc dùng cho dải tần cao.

Bước 6: Cepstrum

Bước 6.1: Log


Bộ lọc Mel trả về phổ công suất của âm thanh, hay còn gọi là phổ năng lượng.
Thực tế rằng con người kém nhạy cảm trong sự thay đổi năng lượng ở các tần số cao,
nhạy cảm hơn ở tần số thấp. Vì vậy ta sẽ tính log trên Mel-scale power spectrum.
Điều này còn giúp giảm các biến thể âm thanh không đáng kể để nhận dạng giọng
nói.
4
https://jonathan-hui.medium.com

15
Chương 1: Cơ sở lý thuyết

Bước 6.2: Biến đổi ngược Fourier rời rạc


Bước tiếp theo của việc trích chọn đặc trưng MFCC là áp dụng biến đổi ngược
Fourier rời rạc (Inverse Dicrete Fourier Transform - IDFT) với đầu vào là các hệ số
phổ mel của bước trước, từ đó ta sẽ thu được ở đầu ra là các hệ số cepstrum. Như
đã mô tả ở phần trước, giọng nói của chúng ta có tần số F0 - tần số cơ bản và các
formant F1, F2, F3 ... Tần số F0 này đặc trưng cho cao độ giọng nói ở từng người.
Tuy nhiên, thông tin về cao độ không giúp ích trong bài toán nhận dạng giọng nói,
nên ta cần tìm cách để loại thông tin về F0 đi, giúp các mô hình nhận dạng không
bị phụ thuộc vào cao độ giọng từng người.

4
Hình 1.16: Quy trình tính Cepstrum

Trong hình 1.15, tín hiệu chúng ta thu được là đồ thị 3, nhưng thông tin quan
trọng chúng ta cần là phần 2 và thông tin cần loại bỏ là phần 1. Để loại bỏ đi thông
tin về F0, ta áp dụng IDFT về miền thời gian, từ đó ta thu được Cepstrum. Khi
đó, với Cepstrum thu được, phần thông tin liên quan tới F0 và phần thông tin liên
quan tới F1, F2, F3 ... nằm tách biệt nhau như 2 phần khoanh tròn trong hình 4.
Ta chỉ cần lấy thông tin trong đoạn đầu của cepstrum (phần được khoanh tròn to
trong hình 4). Để tính MFCC, ta chỉ cần lấy 12 giá trị đầu tiên. Như vậy sau bước
này, ta thu được 12 đặc trưng Cepstral.

Bước 6.3: Trích xuất MFCC


Sau bước trên, từ mỗi khung ta đã trích xuất ra được 12 đặc trưng Cepstral làm
12 đặc trưng đầu tiên của MFCC. Đặc trưng thứ 13 là năng lượng của khung đó,
tính theo công thức:
Xt2
Energy = x2 [t]
t=t1

Trong nhận dạng tiếng nói, thông tin về bối cảnh và sự thay đổi rất quan trọng.
VD tại những điểm mở đầu hoặc kết thúc ở nhiều phụ âm, sự thay đổi này rất rõ
rệt, có thể nhận dạng các âm vị dựa vào sự thay đổi này. 13 hệ số tiếp theo chính
là đạo hàm bậc 1 (theo thời gian) của 13 đặc trưng đầu tiên. Nó chứa thông tin về
sự thay đổi từ khung thứ t đến khung t + 1, được tính bằng công thức:
c(t + 1) − c(t − 1)
d(t) =
2
trong đó d(t) là đặc trưng delta của khung t, c(t + 1) và c(t − 1) là các đặc trưng
phổ của khung ngay sau và trước khung t.

16
Chương 1: Cơ sở lý thuyết

Tương tự như vậy, 13 giá trị cuối của MFCC là sự thay đổi của d(t) theo thời
gian - đạo hàm của d(t), đồng thời là đạo bậc 2 của c(t), được tính bằng công thức:
d(t + 1) − d(t − 1)
b(t) =
2
Vậy, từ 12 đặc trưng cepstral và đặc trưng năng lượng thứ 13, ta đạo hàm 2
lần và thu được 39 đặc trưng. Đây chính là đặc trưng MFCC. Sự khác biệt chính
giữa 13 và 39 đặc trưng MFCC thường nằm ở mức độ chi tiết của thông tin biểu
diễn. Việc sử dụng 39 đặc trưng MFCC thường cung cấp thông tin đa dạng hơn về
tín hiệu âm thanh, trong khi 13 đặc trưng MFCC thường được sử dụng trong các
trường hợp cần giảm chiều dữ liệu hoặc tài nguyên tính toán.

1.3 Học sâu (Deep learning)


Sau quá trình trích chọn đặc trưng âm thanh, bước tiếp theo là giai đoạn huấn
luyện, nơi mà máy tính được dạy để nhận biết và học từ những đặc trưng độc đáo
của mỗi âm thanh. Qua quá trình này, chúng ta tạo ra cơ sở cho việc xây dựng một
hệ thống nhận diện giọng nói, cho phép máy tính phân biệt và xử lý các âm thanh
khác nhau.
Quá trình huấn luyện không chỉ đòi hỏi máy tính phải hiểu và nhận biết các
đặc trưng âm thanh mà còn yêu cầu phải tinh chỉnh các tham số và mô hình để cải
thiện khả năng phân loại và nhận diện. Bằng cách tiếp cận từng đặc trưng và mẫu
âm thanh, máy tính học hỏi cách phân biệt giữa các âm thanh riêng biệt, xác định
những đặc điểm quan trọng và xây dựng một cơ sở dữ liệu để từ đó có thể nhận
diện và phản ứng đáp ứng với các âm thanh tương ứng.
Tuy nhiên, trong quá trình huấn luyện truyền thống, sự khó khăn thường xuất
hiện khi cần xử lý một lượng lớn dữ liệu và tối ưu hóa các mô hình truyền thống
để phù hợp với sự đa dạng và phức tạp của âm thanh. Đây chính là lúc mà học sâu
trở nên quan trọng.

1.3.1 Định nghĩa


Học sâu là một tập con của các phương pháp học máy, dựa trên các mạng neural
nhân tạo với việc học biểu diễn. Tính từ “sâu” trong học sâu liên quan đến việc sử
dụng nhiều lớp trong mạng neural. Các phương pháp sử dụng có thể là học có giám
sát, học bán giám sát hoặc học không giám sát. Dưới đây là cách thức hoạt động
của một mạng học sâu:

ˆ Học sâu hoạt động bằng cách khám phá các cấu trúc phức tạp trong dữ liệu
mà chúng trải nghiệm. Cụ thể là xây dựng các mô hình tính toán bao gồm
nhiều lớp xử lý, mạng có thể tạo ra nhiều mức trừu tượng để biểu diễn dữ liệu.

ˆ Ví dụ, một mô hình học sâu được gọi là mạng neural phức hợp có thể được
đào tạo bằng cách sử dụng số lượng lớn (hàng triệu) hình ảnh, chẳng hạn như
những hình ảnh có chứa mèo. Mạng neural này sẽ học hỏi từ các điểm ảnh có
trong hình ảnh mà nó thu được. Nó có thể phân loại các nhóm điểm ảnh đại
diện cho các đặc điểm của mèo, với các nhóm đặc điểm như móng vuốt, tai và
mắt cho biết sự hiện diện của mèo trong hình ảnh.

17
Chương 1: Cơ sở lý thuyết

ˆ Đối với nhiều tác vụ, chẳng hạn như thị giác máy tính, nhận dạng giọng nói
hay xử lý ngôn ngữ tự nhiên, dịch máy và robot, hiệu suất của các hệ thống
học sâu vượt xa so với các hệ thống học máy truyền thống.

ˆ Cũng bởi những khả năng vượt trội, việc xây dựng các hệ thống học sâu yêu
cầu nhiều hơn so với các hệ thống học máy thông thường. Trong mô hình học
sâu có hàng nghìn siêu tham số (hyperparameter) cần được điều chỉnh để mô
hình có được hiệu quả cao và áp dụng vào những bài toán thực tế.

1.3.2 Ưu điểm của phương pháp học sâu


Tương thích tốt với kiểu dữ liệu phi cấu trúc: Ưu điểm lớn nhất của học
sâu là khả năng hoạt động tốt với dữ liệu phi cấu trúc. Điều này đặc biệt phù hợp
khi phần lớn dữ liệu kinh doanh hiện nay đều không có cấu trúc. Hình ảnh, văn bản
và giọng nói được cho là những định dạng dữ liệu phổ biến nhất được các doanh
nghiệp sử dụng.

5
Hình 1.17: Các kiểu dữ liệu phi cấu trúc phổ biến.

Tự động hóa các tính năng: Một trong những lợi thế khi sử dụng học sâu là
khả năng tự động hóa các tính năng, các thuật toán học sâu có thể tự tạo ra các
tính năng mới từ một số lượng hạn chế ngay trong dữ liệu đào tạo mà không cần
con người can thiệp. Điều này đồng nghĩa với việc học sâu có thể thực hiện những
nhiệm vụ phức tạp đòi hỏi yêu cầu kỹ thuật cao với các tính năng mở rộng.
Khả năng tự học tốt hơn: Các lớp mạng neural trong học sâu cho phép mô
hình trở nên hiệu quả hơn, thực hiện được các tính năng phức tạp, tác vụ tính toán
chuyên sâu. Điều này cũng giúp cho mô hình có thể thực hiện đồng thời nhiều hoạt
động phức tạp. Học sâu thể hiện sự vượt trội hơn, đặc biệt trong các nhiệm vụ nhận
thức máy, còn được gọi là khả năng hiểu được các dữ liệu đầu vào như: hình ảnh,
âm thanh và video giống như con người, liên quan đến các bộ dữ liệu phi cấu trúc.

1.3.3 Một số thuật toán nhân dạng và phân loại âm thanh


Tín hiệu âm thanh là một lĩnh vực quan trọng trong học sâu, và có nhiều thuật
toán phức tạp và đa dạng được phát triển để xử lý và hiểu tín hiệu âm thanh. Dưới
đây, chúng ta sẽ xem xét một số thuật toán học sâu phổ biến và quan trọng trong
xử lý âm thanh:

ˆ Mạng neural tích chập (Convolutional Neural Networks - CNN):


CNN ban đầu được phát triển cho xử lý hình ảnh, nhưng chúng cũng được
5
https://www.techtarget.com/searchbusinessanalytics/definition/unstructured-data

18
Chương 1: Cơ sở lý thuyết

áp dụng thành công trong xử lý âm thanh. CNN có khả năng trích xuất đặc
trưng từ tín hiệu âm thanh bằng cách sử dụng các lớp tích chập, giúp nhận
dạng mẫu âm thanh và phát hiện cạnh.

ˆ Mạng neural đệ quy (Recurrent Neural Networks - RNN): RNN là


mạng neural có khả năng xử lý dãy thời gian, thường được sử dụng trong việc
xử lý giọng nói. Long Short-Term Memory (LSTM) và Gated Recurrent Unit
(GRU) là biến thể phổ biến của RNN.

ˆ Deep Speech: Deep Speech là một kiến trúc học sâu đặc biệt được phát triển
để nhận dạng giọng nói. Nó sử dụng LSTM hoặc GRU để biểu diễn âm thanh
và thường cung cấp hiệu suất rất cao trong các nhiệm vụ nhận dạng giọng
nói.

ˆ Cơ chế Attention: Cơ chế attention đang được sử dụng rộng rãi trong các
kiến trúc xử lý âm thanh, đặc biệt là trong các mô hình dựa trên Transformers.
Nó giúp mô hình tập trung vào các phần quan trọng của tín hiệu âm thanh.

1.3.4 Mạng neural tích chập


a) Giới thiệu
Mô hình mạng neural tích chập (CNN) là một trong những mô hình được sử
dụng chủ yếu để giải quyết các bài toán nhận dạng và phân loại hình ảnh. Tuy nhiên
với sự phát triển của các phương pháp trích chọn đặc trưng âm thanh, mô hình CNN
cũng có thể sử dụng trong các bài toàn nhận dạng và phân loại âm thanh.
Mô hình CNN huấn luyện và kiểm tra, mỗi dữ liệu đầu vào sẽ được chuyển qua
một loạt các lớp tích chập với các bộ lọc nhân (Kernals), tổng hợp lại các lớp được
kết nối đầy đủ (Full Connected) và áp dụng hàm kích hoạt (Activation function) để
phân loại đối tượng. [9]

6
Hình 1.18: Luồng xử lý của mạng CNN

b) Lớp tích chập


Lớp tích chập (Convolution Layer) là lớp đầu tiên để trích xuất các tính năng
từ dữ liệu đầu vào. Tích chập duy trì mối quan hệ giữa các phần tử thông qua các
đặc trưng âm thanh bằng cách sử dụng các bộ lọc nhân nhỏ trượt qua dữ liệu âm
thanh đầu vào. Mỗi phép tích chập áp dụng một bộ lọc nhân lên một phần của dữ
liệu âm thanh để trích xuất thông tin đặc trưng từ âm thanh đó.
6
https://towardsdatascience.com/basics-of-the-classic-cnn-a3dce1225add

19
Chương 1: Cơ sở lý thuyết

7
Hình 1.19: Dữ liệu đầu vào và đầu ra của một lớp tích chập

c) Bước nhảy
Bước nhảy (Stride) là số phần tử thay đổi trên ma trận đầu vào. Khi bước nhảy
là 1 thì ta di chuyển các nhân 1 phần tử. Khi bước nhảy là 2 thì ta di chuyển các
bộ lọc nhân đi 2 phần tử và tiếp tục như vậy.

8
Hình 1.20: Lớp tích chập hoạt động với bước nhảy là 2

d) Đường viền
Đường viền (Padding) là một tham số quan trọng được sử dụng để kiểm soát
kích thước của đầu ra sau khi áp dụng lớp tích chập. Có hai loại đường viền chính:

ˆ Valid Padding: Không có đường viền được thêm vào xung quanh biểu diễn đầu
vào trước khi áp dụng phép tích chập. Trong trường hợp bộ lọc nhân không
phù hợp với dữ liệu đầu vào, phép tích chập sẽ loại bỏ một số phần tử ở sát
bên phải.

ˆ Same Padding: Same padding thêm các giá trị đường viền (thường là giá trị
0) vào xung quanh biểu diễn đầu vào trước khi tích hợp phép tích chập. Same
padding thường được sử dụng khi bạn muốn duy trì kích thước của đầu ra sao
cho nó giống với đầu vào.
7
https://towardsdatascience.com/beginners-guide-to-understanding-convolutional-neural-
networks-ae9ed58bb17d
8
https://medium.com/@RaghavPrabhu/understanding-of-convolutional-neural-network-cnn-
deep-learning-99760835f148

20
Chương 1: Cơ sở lý thuyết

Hình 1.21: Valid và Same Padding

e) Hàm kích hoạt

Trong một mạng neural nhân tạo,


hàm kích hoạt (activation function) đóng
vai trò là thành phần phi tuyến tại đầu
ra của các neural. Một số hàm kích hoạt
phổ biến trong mạng tích chập: hàm Sig-
moid, hàm Tanh, hàm ReLu, ...
Hàm ReLU được sử dụng phổ biến
trong các tầng tích chập và tầng kết nối
đầy đủ, có dạng:
f (x) = max(0, x) Hình 1.22: Các hàm kích hoạt 9

ˆ Ưu điểm:

– Tính đơn giản của ReLU giúp tăng tốc quá trình huấn luyện.
– ReLU không bị chặn như hàm Sigmoid hay Tanh nên sẽ không có hiện
tượng vanishing gradient.

ˆ Nhược điểm:

– Nếu input nhỏ hơn 0 thì ouput của ReLU sẽ bằng 0 (dying relu) dẫn đến
hiện tượng mạng neural không hoạt động và không học được gì hoặc học
rất chậm.
– ReLu do không bị chặn trên nên có thể gây ra hiện tượng exploding
gradient, gradient của mạng neural trở nên quá lớn, đôi khi đạt đến giá
trị vô cùng, làm cho quá trình đào tạo mạng trở nên không ổn định và
thậm chí không thể thực hiện được.

Vì những nhược điểm trên, người ta đã phát triển thêm những hàm khác dựa
trên ReLU:
9
https://medium.com/@shrutijadon/survey-on-activation-functions-for-deep-learning-
9689331ba092

21
Chương 1: Cơ sở lý thuyết

ˆ Hàm ReLU6: ReLu6 đã giới hạn bên trên của hàm ReLU là 6 đối với input
lớn hơn 6. Công thức hàm ReLu6 như sau:

f (x) = min(max(0, x), 6)

ˆ Hàm LeakyReLU: LeakyReLU khăc phục nhược điểm dying relu bằng cách sử
dụng một siêu tham số α. Công thức hàm LeakyReLU như sau:

f (x) = max(αx, x)

Hình 1.23: Hàm ReLU6 và LeakyReLU

1.3.5 Mạng neural đệ quy


Mô hình mạng neural đệ quy được thiết kế để xử lý dãy dữ liệu theo dạng chuỗi
thời gian. Đặc điểm quan trọng của mạng RNN là khả năng duy trì trạng thái bên
trong mạng và chia sẻ trạng thái đó qua các bước thời gian khác nhau. Điều này
cho phép xử lý dữ liệu bằng cách giữ lại thông tin từ các bước trước đó và sử dụng
nó để ảnh hưởng đến các bước sau này. [10]

10
Hình 1.24: Luồng xử lý của RNN

1.3.6 Mạng đệ quy LSTM


Mạng RNN thường không hiệu quả trong việc xử lý các chuỗi dài hạn trong dữ
liệu chuỗi vì vật mạng đệ quy Long Short-term memory được xây dựng để có thể
xử lý vấn đề này. Mạng LSTM được thiết kế để lọc đi những thông tin không cần
thiết và một kiến trúc có thể nhớ dài hạn hơn. [11]
10
https://dominhhai.github.io/vi/2017/10/what-is-rnn/

22
Chương 1: Cơ sở lý thuyết

11
Hình 1.25: Luồng xử lý của LSTM

ˆ Input gate i: Cổng vào giúp quyết định bao nhiêu lượng thông tin đầu vào sẽ
ảnh hưởng đến trạng thái mới. Quyết định bằng cách nào, thông qua đặc điểm
của hàm sigmoid (đầu ra nằm trong khoảng [0, 1]), như vậy khi một vector
thông tin đi qua đây, nếu nhân với 0, vector sẽ bị triệt tiêu hoàn toàn. Nếu
nhân với 1, hầu hết thông tin sẽ được giữ lại.

ˆ Forget gate f : Cổng quên là cổng quyết định sẽ bỏ đi bao nhiêu lượng thông
tin đến từ trạng thái trước đó.

ˆ Output gate o: Cổng ra là cổng điều chỉnh lượng thông tin có thể ra ngoài
yt và lượng thông tin truyền tới trạng thái tiếp theo.

ˆ Tiếp theo, g thực chất cũng chỉ là một trạng thái ẩn được tính dựa trên đầu
vào hiện tại xt và trạng thái trước ht−1 . Tính hoàn toàn tương tự như input
gate, chỉ thay vì dùng sigmoid, ta dùng tanh. Kết hợp hai điều này lại để cập
nhật trạng thái mới.

ˆ Cuối cùng, ta có ct là bộ nhớ trong của LSTM. Nhìn vào công thức, có thể
thấy nó là tổng hợp của bộ nhớ trước ct−1 đã được lọc qua cổng quên f , cộng
với trạng thái ẩn g đã được lọc bởi cổng vào i. Cell state sẽ mang thông tin
nào quan trọng truyền đi xa hơn và sẽ được dùng khi cần. Đây chính là long
term memory.

ˆ Sau khi có ct , ta sẽ đưa nó qua cổng ra để lọc thông tin một lần nữa, thu được
trạng thái mới ht .

1.4 Các độ đo đánh giá mô hình


Khi xây dựng một mô hình Machine Learning, chúng ta cần một phép đánh giá
để xem mô hình sử dụng có hiệu quả không và để so sánh khả năng giữa các mô
hình phân loại. Hiệu năng của một mô hình thường được đánh giá dựa trên tập dữ
liệu kiểm thử (test data). Cụ thể, giả sử đầu ra của mô hình khi đầu vào là tập kiểm
thử được mô tả bởi vector y_pred - là vector dự đoán đầu ra với mỗi phần tử là
class được dự đoán của một điểm dữ liệu trong tập kiểm thử. Ta cần so sánh giữa
vector dự đoán y_pred này với vector class thật của dữ liệu, được mô tả bởi vector
y_true.
11
https://oi.readthedocs.io/en/latest/dl/dl_coursera/sm/lstm.html

23
Chương 1: Cơ sở lý thuyết

Có rất nhiều cách đánh giá một mô hình phân lớp. Tuỳ vào những bài toán khác
nhau mà chúng ta sử dụng các phương pháp khác nhau. Các phương pháp thường
được sử dụng là: Accuracy score, Precision, Recall, ROC curve và Area Under the
Curve, F1 score,...

1.4.1 Confusion Matrix


Confusion matrix là một công cụ được sử dụng để đánh giá hiệu suất của một
mô hình phân loại. Nó thường được sử dụng để so sánh dự đoán của một mô hình
với thực tế. Confusion matrix bao gồm các phần chính sau:

ˆ True Positive (TP): Số lượng các trường hợp được dự đoán đúng là positive.

ˆ True Negative (TN): Số lượng các trường hợp được dự đoán đúng là negative.

ˆ False Positive (FP): Số lượng các trường hợp được dự đoán là positive nhưng
thực tế là negative.

ˆ False Negative (FN): Số lượng các trường hợp được dự đoán là negative nhưng
thực tế là positive.

12
Hình 1.26: Confusion Matrix

1.4.2 Accuracy score (Độ chính xác)


Cách đơn giản và hay được sử dụng nhất là Accuracy score (độ chính xác). Ta
chỉ cần tính tỉ lệ giữa số dự đoán đúng và tổng số dữ liệu cần dự đoán trong tập dữ
liệu kiểm thử. Accuracy score được tính theo công thức sau:
TP + TN
Accuracy =
TP + FP + FN + TN

trong đó, n là số mẫu nhận dạng đúng và N là tổng số mẫu cần nhận dạng. Từ đó,
ta có thể thấy, mô hình có Accuracy score càng cao thì càng tốt vì sẽ nhận dạng
chính xác nhiều nhất.
12
https://medium.com/@cngnguyn_82011/deep-learning-với-tensorflow-2-0-992e42a84049

24
Chương 1: Cơ sở lý thuyết

1.4.3 Precision và Recall


Cách tính sử dụng Accuracy score ở trên chỉ cho chúng ta biết được bao nhiêu
phần trăm lượng dữ liệu được phân loại đúng mà không chỉ ra được cụ thể mỗi loại
được phân loại như thế nào, lớp nào được phân loại đúng nhiều nhất, và dữ liệu
thuộc lớp nào thường bị phân loại nhầm vào lớp khác. Ta có thể tính toán các giá
trị Precison và Recall để giải quyết vấn đề trên. Hai đại lượng này được tính theo
công thức sau:

TP TP
P recision = Recall =
TP + FP TP + FN
Precision cao đồng nghĩa với việc độ chính xác của các điểm tìm được là cao.
Recall cao đồng nghĩa với việc True Positive Rate cao, tức tỉ lệ bỏ sót các điểm thực
sự positive là thấp.

25
Chương 2

Nghiên cứu thực nghiệm

26
Chương 2: Nghiên cứu thực nghiệm

2.1 Bài toán thực nghiệm


2.1.1 Lưu đồ thuật toán và xây dựng hệ thống
a) Nguyên lý hoạt động

Hình 2.1: Nguyên lý hoạt động của hệ thống

Hệ thống sẽ được chia làm 2 khối khi sử dụng:

ˆ Khối 1: Máy tính hoặc thiết bị điều khiển của người dùng. Người dùng ra lệnh
bằng giọng nói, câu lệnh sẽ được thiết bị thu âm và xử lý. Kết quả đầu ra là
chuỗi văn bản tương ứng với câu lệnh.

ˆ Khối 2: Raspberry nhận tín hiệu thông qua giao tiếp socket và mạng internet
để thực hiện các thao tác điều khiển.

b) Lưu đồ thuật toán hệ thống


Hệ thống hoạt động theo lưu đồ sau:

Hình 2.2: Lưu đồ thuật toán hoạt động của hệ thống

27
Chương 2: Nghiên cứu thực nghiệm

Sau các bước thu thập, tiền xử lý, trích xuất đặc trưng của dữ liệu cũng như
chọn được mô hình học sâu phù hợp với nghiên cứu, hệ thống sẽ hoạt động với 7
bước sau:

ˆ Bước 1: Khởi động hệ thống bao gồm: Máy tính hoặc thiết bị điều khiển của
người dùng và xe robot.

ˆ Bước 2: Thực hiện việc kết nối giữa thiết bị điều khiển và xe thông qua giao
tiếp socket và mạng internet.

ˆ Bước 3: Người dùng ra lệnh bằng giọng nói thông qua giao diện người dùng
GUI của thiết bị điều khiển.

ˆ Bước 4: Máy tính hoặc thiết bị điều khiển xử lý giọng nói và chuyển đổi thành
văn bản.

ˆ Bước 5: Máy tính hoặc thiết bị điều khiển gửi chuỗi văn bản đến xe robot
thông qua giao tiếp socket và mạng internet.

ˆ Bước 6: Chương trình trên xe robot điều khiển động cơ tương ứng với câu lệnh
được gửi đến.

2.2 Phần cứng hệ thống


Các thiết bị phần cứng trong nghiên cứu này bao gồm các thành phần sau:

ˆ Bo mạch đơn Raspberry Pi: Đóng vai trò như một máy tính để nhận tín hiệu
điều khiển xe robot.

ˆ Module điều khiển motor L298N: Sử dụng để điều khiển các động cơ của xe
robot thực hiện việc di chuyển (tiến, lùi, rẽ trái, rẽ phải).

ˆ Motor DC 3-6V: Động cơ của xe robot.

2.2.1 Raspberry Pi
a) Giới thiệu
Raspberry Pi là một dòng vi xử lý mạnh mẽ và thiết bị máy tính nhỏ gọn có kích
thước gần bằng một thẻ tín dụng. Nó được phát triển bởi Raspberry Pi Foundation
với mục đích giúp người dùng tiếp cận công nghệ và học tập về lập trình, điện tử
ngay từ những giai đoạn ban đầu.
Raspberry Pi chủ yếu là một bo mạch tích hợp CPU, RAM, cổng kết nối và các
cổng I/O, cung cấp môi trường phát triển linh hoạt để người dùng có thể thực hiện
nhiều dự án khác nhau.

28
Chương 2: Nghiên cứu thực nghiệm

13
Hình 2.3: Bo mạch đơn Raspberry Pi

b) Ưu điểm & nhược điểm


ˆ Ưu điểm:

– Kích thước nhỏ gọn: Raspberry Pi có kích thước gần bằng một thẻ tín
dụng, dễ dàng để lắp đặt và tích hợp vào nhiều dự án.
– Giá cả phải chăng: Raspberry Pi là một lựa chọn phổ biến cho người
dùng muốn tiếp cận công nghệ với chi phí thấp.
– Hỗ trợ đa hệ điều hành: Raspberry Pi có thể chạy nhiều hệ điều hành
khác nhau, từ các phiên bản tùy chỉnh của Linux đến Windows 10 IoT.
– Cộng đồng lớn và hỗ trợ mạnh mẽ: Cộng đồng người dùng năng động và
diễn đàn để hỗ trợ người dùng mới.

ˆ Nhược điểm:

– Hiệu suất có hạn: Raspberry Pi có hạn chế về hiệu suất xử lý và bộ nhớ,


không phù hợp cho các ứng dụng đòi hỏi sức mạnh tính toán cao.
– Khả năng xử lý đa nhiệm: Đối với công việc yêu cầu xử lý đa nhiệm nặng,
Raspberry Pi có thể gặp hạn chế và chậm hơn so với các máy tính mạnh
mẽ hơn.
– Giới hạn của cổng kết nối: Mặc dù có nhiều cổng kết nối, nhưng Raspberry
Pi có thể gặp hạn chế với số lượng cổng và tốc độ truyền dữ liệu so với
máy tính cỡ lớn.

Nhờ những ưu điểm tuyệt vời, Raspberry Pi vẫn là một công cụ rất mạnh mẽ và
linh hoạt cho nhiều ứng dụng. Đặc biệt là trong việc học tập, thử nghiệm và phát
triển các dự án điện tử và IoT.
13
https://fptshop.com.vn/tin-tuc/danh-gia/raspberry-pi-172935

29
Chương 2: Nghiên cứu thực nghiệm

2.2.2 Module L298N


a) Giới thiệu
Module L298N là một loại mạch cầu H điều khiển động cơ, được sử dụng rộng
rãi trong các ứng dụng điều khiển động cơ DC. Nó là một thành phần điện tử phổ
biến và hữu ích trong việc điều khiển động cơ và motor DC hai chiều.

14
Hình 2.4: Module L298N

Cầu H là một kiến trúc điều khiển cho phép đảo ngược hướng chuyển động của
động cơ DC bằng cách điều chỉnh dòng điện thông qua nó. Module L298N thường
đi kèm với hai cầu H độc lập, cho phép điều khiển độc lập hai động cơ DC hoặc một
động cơ có hai cực (ví dụ như động cơ servo).

b) Ưu điểm & nhược điểm


ˆ Ưu điểm:

– Điều khiển động cơ hai chiều: L298N cho phép điều khiển động cơ DC
theo cả hai hướng, cho phép chuyển động tiến và lùi.
– Cấp dòng lớn: Nó có khả năng cấp dòng lên đến 2A cho mỗi đường điều
khiển, giúp điều khiển đa dạng loại động cơ DC.
– Dễ sử dụng: L298N có giao diện điều khiển đơn giản, dễ lắp đặt.

ˆ Nhược điểm:

– Mất năng lượng: Do cấu trúc của cầu H, L298N có thể tiêu tốn một lượng
năng lượng khá lớn, gây ra sự lãng phí năng lượng trong quá trình điều
khiển.
– Kích thước và trọng lượng: So với các phương pháp điều khiển động cơ
khác như driver đa chức năng, L298N có thể lớn và nặng hơn, không phù
hợp cho các ứng dụng yêu cầu kích thước nhỏ gọn.

Bỏ qua một số nhược điểm, L298N là một giải pháp điều khiển động cơ DC phổ
biến và được sử dụng rộng rãi trong nhiều ứng dụng điện tử, đặc biệt là trong các
dự án mà không yêu cầu hiệu suất cao.
14
https://hshop.vn/products/mach-dieu-khien-dong-co-dc-l298

30
Chương 2: Nghiên cứu thực nghiệm

2.2.3 Motor DC
a) Giới thiệu
Motor DC là một loại động cơ hoạt động từ nguồn điện xoay chiều. Đây thường
là một loại động cơ nhỏ, thường được sử dụng trong các dự án điện tử như robot
nhỏ, mô hình, hoặc các thiết bị cần động cơ để thực hiện các chuyển động cơ bản.
Loại động cơ sử dụng trong nghiên cứu này có có điện áp hoạt động từ 3V đến
6V. Điều này làm cho nó trở nên phù hợp với nhiều ứng dụng cần động cơ nhỏ, yếu
và tiết kiệm năng lượng.

15
Hình 2.5: Động cơ motor DC 3-6V

b) Ưu điểm & nhược điểm


ˆ Ưu điểm:

– Đơn giản và dễ sử dụng: Motor DC 3-6V thường có cấu trúc đơn giản,
dễ lắp đặt và sử dụng.
– Điều chỉnh tốc độ dễ dàng: Có thể điều chỉnh tốc độ quay của motor DC
thông qua việc thay đổi điện áp đưa vào.
– Kích thước nhỏ gọn: Loại motor này thường nhỏ gọn, phù hợp với các
ứng dụng yêu cầu không gian nhỏ.
– Hiệu suất tốt ở mức điện áp thấp: Motor này có khả năng hoạt động tốt
ở mức điện áp thấp, từ 3-6V, giúp tiết kiệm năng lượng.

ˆ Nhược điểm:

– Không có hệ thống điều khiển tích hợp: Motor DC 3-6V thường cần sử
dụng thêm các linh kiện khác để điều khiển tốc độ, hướng di chuyển hoặc
các chức năng khác.
– Không giữ tốc độ ổn định: Tốc độ quay của motor có thể bị ảnh hưởng
bởi nhiều yếu tố như tải trọng, điện áp đưa vào, và ma sát.

Mặc dù có một vài nhược điểm, tuy nhiên motor DC 3-6V vẫn là lựa chọn phổ
biến và hữu ích trong nhiều ứng dụng. Điều này đặc biệt đúng khi cần một giải
pháp linh hoạt, dễ sử dụng và không yêu cầu quá nhiều công suất. Nhưng ưu điểm
của motor này giúp nó phù hợp cho nhiều dự án điện tử, robo, và các ứng dụng nhỏ
khác.
15
https://www.amazon.com/Electric-Magnetic-Gearbox-Plastic-Yeeco/dp/B07DQGX369

31
Chương 2: Nghiên cứu thực nghiệm

2.3 Dữ liệu thực nghiệm


2.3.1 Thu thập và tiền xử lý dữ liệu
Trong nghiên cứu này, ta sẽ xem xét việc xây dựng một mô hình học sâu để điều
khiển một xe robot thông qua bốn câu lệnh đơn giản: “Lên”, “Xuống”, “Trái”, “Phải”.
Tập dữ liệu bao gồm các mẫu thu âm của bốn lệnh điều khiển này. Để đảm bảo tính
khách quan, các file audio được thu âm từ nhiều người khác nhau, và trong điều
kiện môi trường bên ngoài khác nhau, tạo thành tổng cộng 100 mẫu dữ liệu cho mỗi
lệnh, và tổng cộng 400 mẫu dữ liệu sẽ được sử dụng để huấn luyện và đánh giá mô
hình.
Trước khi có thể trích chọn các đặc trưng từ các mẫu dữ liệu, ta cần thực hiện
các bước tiền xử lý để đảm bảo rằng dữ liệu đều có cùng một định dạng và các
thông số chung. Cụ thể, các thông số cần được chuẩn hóa gồm:

ˆ Tần số lấy mẫu (sample_rate): Đảm bảo rằng tất cả các tệp WAV đều sử
dụng cùng một tần số lấy mẫu là 16 kHz.

ˆ Độ bit: Tất cả các tệp WAV có cùng độ bit là 16-bit.

ˆ Kênh âm thanh: Các tệp âm thanh phải là đơn kênh (mono), và đảm bảo rằng
tất cả các tệp WAV có cùng số lượng kênh.

ˆ Độ dài: Mỗi tệp có độ dài 1 giây, ta có thể thêm khoảng lặng để đảm bảo độ
dài của tất cả các tệp âm thanh là như nhau.

Hình 2.6: Các tệp âm thanh xử lý được chia vào các thư mục riêng

32
Chương 2: Nghiên cứu thực nghiệm

2.3.2 Trích chọn đặc trưng với MFCC


Sau quá trình chuẩn hóa dữ liệu, ta tiến hành trích chọn các đặc trưng sử dụng
phương pháp MFCC. Như đã được đề cập trước đó, với bài toán nghiên cứu có số
lượng nhãn cần phân loại ít (4 nhãn), tôi quyết định chỉ trích chọn 13 đặc trưng
MFCC từ tín hiệu âm thanh. Quyết định này nhằm mục đích giảm chiều dữ liệu và
tối ưu hóa tài nguyên tính toán, đồng thời vẫn giữ được thông tin quan trọng cần
thiết cho quá trình phân loại và nhận diện.
Ta sử dụng thư viện librosa với phương thức librosa.feature.mfcc để có thể trích
chọn các đặc trưng bằng phương pháp MFCC. Các tham số đầu vào bao gồm:

ˆ signal: Tín hiệu đầu vào, ở đây là


1 khung.
ˆ sample_rate: Tần số lấy mẫu
của khung audio chung. Trong ng-
hiên cứu này ta lấy sample_rate =
16000.
ˆ n_mfcc: Số lượng hệ số MFCC
được trích chọn từ tín hiệu âm
thanh (mặc định là 13).
ˆ n_fft: Chiều dài cửa sổ FFT (mặc
định là 2048) được sử dụng để
chuyển đổi tín hiệu âm thanh từ
miền thời gian sang miền tần số.
ˆ hop_length: Khoảng cách giữa
Hình 2.7: Các đặc trưng được lưu vào tệp
các khung trong quá trình biến đổi
JSON
Fourier (mặc định là 512).

Ta khởi tạo một hàm với đầu vào là đường dẫn tới nơi chứa dữ liệu âm thanh
và kết quả đầu ra là các đặc trưng được trích chọn lưu vào một tệp đuôi json (Xem
phụ lục A) như trên hình 2.7. Sau khi đã trích chọn được các đặc trưng từ tập dữ
liệu ban đầu, phần tiếp theo ta sẽ tiến hành thử nghiệm với các mô hình học sâu
khác nhau để có thể tìm ra mô hình hiệu quả nhất cho bài toán.

2.3.3 Huấn luyện mô hình học sâu


Ở phần này, ta thực hiện xây dựng các mô hình học sâu khác nhau để tiến hành
huấn luyện với các đặc trưng đã trích chọn từ phần trước.

33
Chương 2: Nghiên cứu thực nghiệm

a) Mô hình 1: Mô hình CNN


Mô hình mạng CNN được khai báo sử dụng keras.Sequential(), một phương thức
giúp thêm các lớp mạng neural theo tuần tự. Cụ thể, mô hình được xây dựng với
các lớp sau (Xem phụ lục A):

ˆ Hai lớp đầu tiên là lớp tích chập


(convolutional layer) với hàm kích
hoạt ReLU. Kích thước của đầu vào
phụ thuộc vào dữ liệu và đã được
xác định trước đó.

ˆ Đầu ra của mô hình được làm phẳng


(Flatten) để chuẩn bị cho lớp fully
connected (dense layer) tiếp theo.

ˆ Lớp Dense có hàm kích hoạt ReLU


và tiếp theo là một lớp dropout được
sử dụng để ngăn chặn việc quá mức
hóa và cải thiện khả năng tổng quát
hóa của mô hình.

ˆ Cuối cùng, lớp đầu ra có 4 đơn vị


(dự đoán cho 4 lớp) với hàm kích
hoạt softmax, được sử dụng để tính
xác suất cho mỗi lớp. Hình 2.8: Mô hình mạng CNN

34
Chương 2: Nghiên cứu thực nghiệm

b) Mô hình 2: Mô hình LSTM


Mô hình mạng LSTM được khai báo sử dụng keras.Sequential(), một phương
thức giúp thêm các lớp mạng neural theo tuần tự. Cụ thể, mô hình được xây dựng
với các lớp sau (Xem phụ lục A):

ˆ Đâu tiên là hai lớp LSTM, đây


là những lớp thích hợp cho việc
xử lý chuỗi dữ liệu. Tham số
input_shape được sử dụng để
chỉ định kích thước đầu vào của
mô hình. Ở lớp thứ nhất re-
turn_sequences=True được sử
dụng để trả về toàn bộ chuỗi đầu
ra từ lớp LSTM thay vì chỉ trả về
đầu ra cuối cùng. Trong khi đó, lớp
LSTM thứ hai chỉ trả về kết quả đầu
ra.

ˆ Lớp kết nối đầy đủ (fully connected)


với hàm kích hoạt ReLU.

ˆ Lớp dropout được sử dụng để ngăn


chặn việc quá mức hóa và cải thiện
khả năng tổng quát hóa của mô
hình.

ˆ Lớp kết nối đầy đủ với 4 đơn vị


và hàm kích hoạt softmax, được sử
dụng để tính xác suất cho mỗi lớp. Hình 2.9: Mô hình mạng LSTM

35
Chương 2: Nghiên cứu thực nghiệm

c) Mô hình 3: Mô hình Hybrid


Trong mô hình này, chúng tôi đã phát triển một mô hình tích hợp, kết hợp cả hai
kiến trúc mô hình trước đó. Mô hình được xây dựng bằng cách kết hợp ba nhánh,
mỗi nhánh sử dụng các lớp Convolutional 2D với các kernel có kích thước và số
lượng bộ lọc khác nhau. Sau đó, các đầu ra của các nhánh này được hợp nhất thông
qua lớp Concatenate(). Cụ thể, mô hình bao gồm các lớp sau đây (Xem phụ lục A):

ˆ Nhánh 1, 2, 3: Sử dụng lớp


Conv2D với hàm kích hoạt là ’re-
lu’, padding là ’same’.

ˆ Ghép các nhánh lại với nhau:


Sử dụng lớp Concatenate() để kết
hợp đầu ra của ba nhánh thành
một tensor duy nhất.

ˆ LSTM layer (model_lstm):


Sử dụng lớp TimeDistribu-
ted(Flatten()) để chuyển đổi đầu
ra của lớp Concatenate() thành
dạng phù hợp cho LSTM. Sử
dụng lớp LSTM với cài đặt re-
turn_sequences=True.

ˆ Lớp dropout được sử dụng để


ngăn chặn việc quá mức hóa và
cải thiện khả năng tổng quát hóa
của mô hình.

ˆ Output layer (output): Sử


dụng lớp Dense với 4 nơ-ron
(tương ứng với số lớp đầu ra) và
hàm kích hoạt ’softmax’. Hình 2.10: Mô hình mạng Hybrid

36
Chương 2: Nghiên cứu thực nghiệm

2.4 Hệ thống điều khiển xe robot


2.4.1 Hệ thống ghi âm và chuyển đổi
Để thiết lập một hệ thống ghi âm và chuyển đổi tín hiệu âm thành dạng văn
bản, ta khai báo và xây dựng các hàm để thực hiện những nhiệm vụ này. (Xem phụ
lục B).

ˆ Hàm split_audio: Hàm này có nhiệm vụ chia một tệp âm thanh thành các
đoạn nhỏ dựa trên yếu tố khoảng lặng giữa các đoạn âm thanh.

ˆ Hàm edit_chunk: Không thể đảm bảo rằng các đoạn âm thanh được cắt ra
sẽ có độ dài chính xác là 1 giây, đủ để trích xuất các đặc trưng. Do đó, ta sử
dụng hàm này để tự động thêm một khoảng thời gian im lặng vào cuối của
mỗi đoạn âm thanh. Điều này đảm bảo rằng mỗi đoạn âm thanh có độ dài
chính xác 1 giây mà không ảnh hưởng đến kết quả dự đoán của mô hình trong
quá trình trích xuất đặc trưng.

ˆ Hàm process_input: Hàm này được dùng để trích xuất các đặc trưng MFCC
của các tệp âm thanh vừa được xử lý trước đó.

ˆ Hàm speech_to_text: Sau khi tiến hành xử lý tín hiệu âm thanh đầu
vào, ta sử dụng hàm này để thực hiện quá trình chuyển đổi âm thanh thành
văn bản. Biến length, là kết quả trả về từ hàm split_audio, được sử dụng
để xác định số lượng đoạn âm thanh cần được xử lý. Điều này giúp hàm
speech_to_text biết được tổng số đoạn âm thanh mà nó cần xử lý. Kết quả
trả về là chuỗi văn bản sau khi đã xử lý tất cả các đoạn âm thanh.

ˆ Hàm delete_files_in_directory: Ta tạo thêm một hàm mới để tự động


xóa các tệp âm thanh sau khi chương trình đã hoàn tất xử lý tất cả các đoạn
âm thanh. Việc này giúp tiết kiệm không gian bộ nhớ của thiết bị và tránh
trường hợp dữ liệu từ câu lệnh trước ảnh hưởng đến dữ liệu của câu lệnh sau
(trong trường hợp độ dài các câu lệnh khác nhau).

ˆ Tải mô hình phân loại: Sử dụng thư viện Keras để tải một mô hình đã được
lưu trữ từ đường dẫn đã chỉ định và gán nó cho biến reconstructed_model.

ˆ Thu âm, xử lý và kết nối socket: Ta cũng cần tạo ra một giao diện người
dùng (GUI), cho phép người dùng thu âm câu lệnh. Sau khi thu âm thành
công, chương trình sẽ gọi các hàm đã được khởi tạo từ trước, chuyển đổi âm
thanh thành văn bản và truyền đến bộ xử lý của xe robot thông qua kết nối
socket.

2.4.2 Phương thức kết nối Socket


Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ
liệu trên internet. Giữa hai chương trình chạy trên mạng cần có một liên kết giao
tiếp hai chiều để kết nối với nhau. Điểm cuối của liên kết này được gọi là socket.

37
Chương 2: Nghiên cứu thực nghiệm

16
Hình 2.11: Mô hình kết nối Socket

ˆ Trước tiên ta tạo ra một máy chủ (server) bằng cách mở một socket - Socket()

ˆ Sau đó ta sẽ liên kết nó với một máy khách (client) và một cổng (port) - Bind()

ˆ Tiếp theo server sẽ bắt đầu kết nối đến port đó - Listen()

ˆ Yêu cầu kết nối từ client được gửi tới server - Connect()

ˆ Bây giờ cả hai đều có thể gửi và nhận tin tại thời điểm đó - Read()/Write()

ˆ Cuối cùng khi hoàn thành server và client tiến hành ngắt kết nối - Close()

Trong nghiên cứu này, ta sử dụng kết nối socket để truyền câu lệnh đã được xử
lý từ thiết bị máy tính đến bo điều khiển Raspberry.

2.4.3 Hệ thống điều khiển xe robot


a) Chương trình điều khiển
Ta cũng cần phát triển hai chương trình để điều khiển hệ thống của xe robot
(Xem phụ lục B). Trong đó:

ˆ Chương trình 1: Sử dụng các chân GPIO trên Raspberry Pi để điều khiển
động cơ của xe robot.

ˆ Chương trình 2: Nhận dữ liệu thông qua kết nối socket để điều khiển hướng
di chuyển của xe robot.
16
https://topdev.vn/blog/socket-la-gi-websocket-la-gi/

38
Chương 2: Nghiên cứu thực nghiệm

b) Điều khiển động cơ với GPIO


Ta kết nối các thiết bị phần cứng bao gồm: Bo mạch Raspberry Pi, module
L298N và các motor DC để tạo thành một xe robot đơn giản giống như hình dưới
đây:

17
Hình 2.12: Kết nối động cơ

Ta cần khai báo 6 chân GPIO được sử dụng để điều khiển xe robot, trong đó:

ˆ Bốn chân GPIO để điều khiển các mức điện áp để bánh xe xoay thuận chiều
hoặc ngược chiều kim đồng hồ. Điều này giúp xe robot có thể di chuyển tiến
lên hoặc lùi xuống.

ˆ Hai chân GPIO để điều khiển tốc độ của các bánh xe, giúp xe có thể di chuyển
trái phải.

17
https://pivietnam.com.vn/huong-dan-cach-dieu-khien-xe-mo-hinh-co-ban-voi-raspberry-pi-
pivietnam-com-vn.html

39
Chương 3

Kết quả và nhận xét

40
Chương 3: Kết quả và nhận xét

3.1 Kết quả trích chọn đặc trưng


Mỗi tệp âm thanh được áp dụng quy trình biểu diễn trong ảnh phổ và ảnh phổ
Mel. Sau đó, ta thực hiện quá trình trích xuất đặc trưng MFCC cho mỗi tệp âm
thanh để tạo ra các biểu diễn số học hữu ích.

3.1.1 Tín hiệu âm thanh “Lên”


Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Lên”:

Hình 3.1: Ảnh phổ của tín hiệu “Lên”

Hình 3.2: Ảnh phổ Mel của tín hiệu “Lên”

Hình 3.3: Đặc trưng MFCC của tín hiệu “Lên”

41
Chương 3: Kết quả và nhận xét

3.1.2 Tín hiệu âm thanh “Xuống”


Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Xuống”:

Hình 3.4: Ảnh phổ của tín hiệu “Xuống”

Hình 3.5: Ảnh phổ Mel của tín hiệu “Xuống”

Hình 3.6: Đặc trưng MFCC của tín hiệu “Xuống”

42
Chương 3: Kết quả và nhận xét

3.1.3 Tín hiệu âm thanh “Trái”


Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Trái”:

Hình 3.7: Ảnh phổ của tín hiệu “Trái”

Hình 3.8: Ảnh phổ Mel của tín hiệu “Trái”

Hình 3.9: Đặc trưng MFCC của tín hiệu “Trái”

43
Chương 3: Kết quả và nhận xét

3.1.4 Tín hiệu âm thanh “Phải”


Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Phải”:

Hình 3.10: Ảnh phổ của tín hiệu “Phải”

Hình 3.11: Ảnh phổ Mel của tín hiệu “Phải”

Hình 3.12: Đặc trưng MFCC của tín hiệu “Phải”

44
Chương 3: Kết quả và nhận xét

3.1.5 Tổng hợp đặc trưng MFCC


Ta trích xuất các đặc trưng của 400 tệp âm thanh từ bộ dữ liệu và lưu các đặc
trưng MFCC vào một tập tin json. Tập tin này sẽ được dùng để huấn luyện các mô
hình sau này.

Hình 3.13: Các đặc trưng được lưu lại

3.1.6 Nhận xét


Từ ảnh phổ, quan sát bằng mắt thường có thể phát hiện sự khác nhau trong
việc phân bổ tần số của các tín hiệu điều khiển khác nhau. Tuy nhiên, để đạt được
độ chính xác cao trong mô hình hóa, việc sử dụng các đặc trưng MFCC thu được
từ quá trình trích chọn đặc trưng là cần thiết.

3.2 Kết quả đánh giá mô hình


3.2.1 Đánh giá với Accuracy
Với bộ dữ liệu âm thanh 400 mẫu ta thực hiện việc chia tập dữ liệu thành hai
phần, trong đó 20% của bộ dữ liệu sử dụng để kiểm tra và 80% được dùng để huấn
luyện. Áp dụng các mô hình đã xây dựng trong chương trước với các Learning Rates
(LR), ta thu được kết quả như sau:

Mô hình Accuracy (LR = 0.001) Accuracy (LR = 0.0001)


CNN 0.8250 0.8750
LSTM 0.9250 0.9375
Hybird 0.9475 0.9625

Bảng 3.1: Accuracy của các mô hình với LR khác nhau

45
Chương 3: Kết quả và nhận xét

Mô hình CNN Mô hình LSTM

Mô hình Hybrid

Hình 3.14: Accuracy và Loss của các mô hình với LR=0.001

Mô hình CNN Mô hình LSTM

Mô hình Hybrid

Hình 3.15: Accuracy và Loss của các mô hình với LR=0.0001

46
Chương 3: Kết quả và nhận xét

Nhận xét

ˆ So sánh giữa các mô hình với LR = 0.001:

– Mô hình Hybrid có độ chính xác (Accuracy) cao nhất (0.9475), theo sau
là mô hình LSTM (0.925550), và cuối cùng là mô hình CNN (0.8250).
– Tính đến chỉ số Loss, mô hình Hybrid có giá trị thấp nhất (0.2478), theo
sau là mô hình LSTM (0.2591), và mô hình CNN có giá trị cao nhất
(0.2823).

ˆ So sánh giữa các mô hình với LR = 0.0001:

– Tính đến độ chính xác, thứ tự vẫn giữ nguyên: Hybird (0.9625), LSTM
(0.9375) và CNN (0.8750).
– Tính đến chỉ số Loss, mô hình Hybird vẫn có giá trị thấp nhất (0.2053),
theo sau là LSTM (0.2328), và mô hình CNN có giá trị cao nhất (0.2647).

ˆ Có thể thấy rằng giảm LR từ 0.001 xuống 0.0001 đã cải thiện độ chính xác và
giảm giá trị Loss của tất cả các mô hình.

ˆ Mô hình Hybird thường có hiệu suất tốt hơn so với mô hình đơn lẻ (CNN hoặc
LSTM) ở cả hai giá trị LR.

3.2.2 Đánh giá với Precision và Recall


Để dễ dàng theo dõi và phân tích kết quả của mô hình, ta áp dụng một Confusion
Matrix để đánh giá hiệu suất phân loại, từ đó ta có thể dễ dang tính toán được các
chỉ Precision và Recall của các mô hình khác nhau. Bảng dưới đây trình bày các chỉ
số Precision và Recall của ba mô hình khác nhau: CNN, LSTM, và Hybrid.

Mô hình Precision Recall Mô hình Precision Recall


CNN 0.8250 0.8250 CNN 0.8750 0.8750
LSTM 0.9283 0.9250 LSTM 0.9458 0.9375
Hybird 0.9475 0.9375 Hybird 0.9625 0.9625

Bảng 3.2: Precision và Recall của các mô Bảng 3.3: Precision và Recall của các mô
hình với LR = 0.001 hình với LR = 0.0001

Nhận xét

ˆ Đối với Precision (độ chính xác), mô hình Hybrid có kết quả tốt nhất với giá
trị lần lượt là 0.9475 và 0.9625. Tiếp theo là LSTM với giá trị 0.9283 và 0.9458.
CNN có giá trị Precision thấp nhất là 0.8250 và 0.8750. Điều này cho thấy mô
hình Hybrid có khả năng phân loại chính xác cao hơn so với hai mô hình khác.

ˆ Về Recall (độ nhớ), mô hình Hybrid cũng đạt được kết quả tốt nhất với giá
trị là 0.9375 và 09625. Tiếp theo là LSTM với giá trị 0.9250 và 0.9375. CNN
có giá trị Recall là 0.8250 và 0.8750 tương ứng. Kết quả này cho thấy mô hình
Hybrid không chỉ có khả năng phân loại chính xác mà còn có khả năng bao
quát, nhớ lại các mẫu dữ liệu tốt hơn so với các mô hình còn lại.

47
Chương 3: Kết quả và nhận xét

Tổng quan, mô hình Hybrid có hiệu suất cao nhất cả về độ chính xác và độ nhớ
trong việc phân loại dữ liệu. LSTM đứng ở vị trí thứ hai trong cả hai chỉ số, trong
khi CNN có hiệu suất thấp nhất trong bảng. Tuy nhiên, đối với các bài toán thực
tế, để có thể hiểu rõ hơn về hiệu suất của mỗi mô hình, chúng ta cần xem xét kết
quả từ nhiều góc độ khác nhau và kết hợp với các chỉ số khác để có cái nhìn toàn
diện về hiệu suất của mô hình.

3.3 Kết quả hệ thống phần cứng


Ta thiết lập hệ thống phần cứng như đã trình bày ở mục 2.4.3 thu được kết quả
như sau:

Hình 3.16: Hệ thống phần cứng

48
Chương 3: Kết quả và nhận xét

Hệ thống bao gồm:

ˆ Thành phần 1: Nguồn 12V - 2A được sử dụng để cấp nguồn cho 4 motor DC
3-6V và module L298N.

ˆ Thành phần 2: Module L298N được sử dụng để thay đổi tốc độ và chiều quay
của bánh xe.

ˆ Thành phần 3,4,5,6: Motor DC 3-6V.

ˆ Thành phần 7: Bo mạch Raspberry được kết nối với module L298N để điều
khiển các động cơ.

ˆ Thành phần 8: Nguồn 5V - 2A được sử dụng để cấp nguồn cho bo mạch.

3.4 Kết quả kết nối


Tiến hành chạy đồng thời hai chương trình thu âm, gửi dữ liệu và chương trình
nhận dữ liệu thông qua socket. Dưới đây là hình ảnh minh họa kết quả khi chạy
trên hai thiết bị khác nhau. Màn hình máy tính thứ 2 hiển thị thông tin tín hiệu
mà bộ xử lý Rasphberry của xe robot nhận được.

Hình 3.17: Kết quả hoạt động trên hai thiết bị

3.5 Kết quả thực tế


Kết quả thực tế của hệ thống được thể hiện qua video trong đường dẫn sau:

ˆ https://drive.google.com/file/d/11b4lwMeoq329lyWYXWpnNy1ROzNczhhh/
view?usp=sharing

49
Chương 3: Kết quả và nhận xét

3.6 Nhận xét chung


Từ quá trình huấn luyện và kết quả thu được, ta có những nhận xét sau:

ˆ Mô hình học sâu

– Tốc độ huấn luyện: Do bộ dữ liệu hiện tại có kích thước nhỏ và số lượng
nhãn cần phân biệt không đặc biệt lớn, mô hình được huấn luyện một
cách nhanh chóng, phù hợp cho mục đích nghiên cứu.
– Chất lượng mô hình: Mô hình Hybrid thể hiện độ chính xác cao, đáp ứng
tốt yêu cầu của bài toán là phân loại các câu lệnh điều khiển khác nhau.
– Tuy nhiên, trong những bài toán cần phân loại nhiều nhãn hơn, đòi hỏi
sự cần thiết của một bộ dữ liệu lớn hơn và sự áp dụng các phương pháp
tăng cường dữ liệu để cải thiện hiệu suất của mô hình.

ˆ Phương thức kết nối

– Độ trễ gửi tin: Hệ thống gần như không trải qua độ trễ đáng kể do dung
lượng thông tin truyền đi nhỏ.

ˆ Phần cứng hệ thống:

– Bo mạch Raspberry xử lý tốt các câu lệnh được gửi xuống để điều khiển
xe. Tuy nhiên, trong trường hợp bài toán yêu cầu cần tích hợp mô hình
vào bo mạch, ta cần sử dụng nhưng bo mạch có cấu hình cao hơn.
– Xe robot di chuyển đúng hướng theo các câu lệnh khác nhau. Tuy nhiên
do động cơ không có sẵn chức năng xoay bánh nên việc rẽ trái rẽ phải
còn gặp nhiều khó khăn. Trong những bài toán thực tế cần độ chính xác
cao trong việc di chuyển, ta có thể cân nhắc sử dụng các motor khác có
nhiều chứ năng hơn

50
Kết luận

Thông qua nghiên cứu này, tôi đã thành công trong việc phát triển một hệ thống
điều khiển xe robot thông qua giọng nói. Trong đó, hệ thống bao gồm những thành
phần quan trọng sau:

ˆ Mô hình học sâu: Được áp dụng để phân loại các câu lệnh khác nhau dựa
trên giọng điều khiển của người sử dụng. Mô hình ổn định, tốc độ xử lý nhanh,
và đạt được độ chính xác cao.

ˆ Phương thức truyền tin: Hệ thống được thiết kế để sử dụng giao tiếp socket,
nhằm truyền các chuỗi văn bản đến bộ xử lý trên xe robot với độ trễ thấp.

Trong tương lai, hệ thống trên hoàn toàn có thể xây dựng thêm những cải tiến
khác như:

ˆ Tăng cường độ chính xác: Nâng cao mô hình Speech-to-Text để có độ chính


xác cao hơn, đặc biệt là trong việc hiểu và chuyển đổi các từ ngữ và giọng địa
phương.

ˆ Xử lý hiệu năng: Tối ưu hóa thuật toán và cấu trúc mô hình để giảm độ trễ
và tăng hiệu suất, đồng thời đảm bảo tính ổn định trong môi trường thời gian
thực.

ˆ Hỗ trợ nhiều ngôn ngữ: Mở rộng hệ thống để hỗ trợ nhiều ngôn ngữ khác
nhau, tạo ra một giao diện đa ngôn ngữ cho người sử dụng để điều khiển xe
robot.

ˆ Điều chỉnh tương thích nguồn âm thanh: Cải thiện khả năng xử lý và
chuyển đổi giọng từ các nguồn âm thanh khác nhau, bao gồm cả âm thanh
trong điều kiện nhiễu loạn hoặc môi trường ồn ào.

ˆ Xử lý lệnh phức tạp: Mở rộng khả năng của mô hình để hiểu và xử lý các
lệnh phức tạp, ví dụ như chuỗi lệnh hoặc chỉ đạo chi tiết.

ˆ Học từ dữ liệu thực tế: Sử dụng dữ liệu thực tế từ môi trường thực tế của
xe robot để huấn luyện mô hình, giúp cải thiện khả năng đối mặt với các tình
huống thực tế.

ˆ Bảo mật và riêng tư: Tăng cường các biện pháp bảo mật và quyền riêng tư
để đảm bảo an toàn và sự yên tâm khi sử dụng hệ thống.

51
Tài liệu tham khảo

Tài liệu tiếng Việt


[1] Phạm Văn Sự, Trương Xuân Thành (2014), “Giáo trình xử lý tiếng nói”, Học
viện công nghệ Bưu chính Viễn thông.

Tài liệu tiếng Anh


[2] J. T. Geiger, M. Hofmann, B. Schuller and G. Rigoll (2013), “Gait-based per-
son identification by spectral, cepstral and energy-related audio features”, 2013
IEEE International Conference on Acoustics, Speech and Signal Processing, pp.
458 - 462.

[3] Paulo Hubert, Rebecca Killick, Alexandra Chung and Linilson R Padovese
(2019), “A Bayesian binary algorithm for root mean squared-based acoustic
signal segmentation”, The Journal of the Acoustical Society of America, 146(3),
1799 - 1807.

[4] F. Gouyon, F. Pachet and O. Delerue (2000), “On the Use of Zero-Crossing
Rate for an Application of Classification of Percussive Sounds”, Proceedings of
the COST G-6 Conference on Digital Audio Effects (DAFX-00), Vol 5.

[5] Wei Han; Cheong-Fat Chan; Chiu-Sing Choy; Kong-Pang Pun (2006), “An effi-
cient MFCC extraction method in speech recognition”, 2006 IEEE International
Symposium on Circuits and Systems (ISCAS).

[6] Shikha Gupta, Jafreezal Jaafar, Wan Fatimah wan Ahmad and Arpit Bansal
(2013), “Feature Extraction Using MFCC”, Signal & Image Processing : An
International Journal (SIPIJ), 4(4), pp. 101 - 108.

[7] D. Sundararajan (2001), The Discrete Fourier Transform: Theory, Algorithms


and Applications, World Scientific.

[8] M. Portnoff (1980), “Time-frequency representation of digital signals and sys-


tems based on short-time Fourier analysis”, IEEE Transactions on Acoustics,
Speech, and Signal Processing, 28(1), pp. 55 -69.

[9] F. Demir, D. A. Abdullah, A. Sengur (2020), “A New Deep CNN Model for
Environmental Sound Classification”, IEEE Access, 8, pp. 66529-66537.
[10] C. Thomae, A. Dominik (2016) “Using deep gated RNN with a convolutio-
nal front end for end-to-end classification of heart sound”, 2016 Computing in
Cardiology Conference (CinC 2016), Vancouver, BC, Canada, pp. 625-628.

[11] I. Lezhenin, N. Bogach and E. Pyshkin (2019) “Urban Sound Classification


using Long Short-Term Memory Neural Network”,2019 Federated Conference
on Computer Science and Information Systems (FedCSIS), Leipzig, Germany,
2019, pp. 57-60.
Phụ lục A

Chương trình trích xuất đặc trưng với MFCC


Khai báo đường dẫn

1 DATASET_PATH = "sound - robot"


2 JSON_PATH = "model_robot/data_sound.json"
3 SAMPLE_RATE = 16000
4 TRACK_DURATION = 1 # measured in seconds
5 SAMPLES_PER_TRACK = SAMPLE_RATE * TRACK_DURATION

Khởi tạo hàm trích xuất đặc trưng

1 def save_mfcc(dataset_path, json_path, num_mfcc=13, n_fft=2048,


hop_length=512):
2
3 data = {
4 "mapping": [],
5 "labels": [],
6 "mfcc": []
7 }
8
9 samples_per_segment = int(SAMPLES_PER_TRACK)
10 num_mfcc_vectors_per_segment = math.ceil(samples_per_segment /
hop_length)
11
12 for i, (dirpath, dirnames, filenames) in enumerate(os.walk(
dataset_path)):
13 if dirpath is not dataset_path:
14 semantic_label = dirpath.split("/")[-1]
15 data["mapping"].append(semantic_label)
16 print("\nProcessing: {}".format(semantic_label))
17
18 for f in filenames:
19 file_path = os.path.join(dirpath, f)
20 signal, sample_rate = librosa.load(file_path, sr=SAMPLE_RATE)
21
22 mfcc = librosa.feature.mfcc(signal, sample_rate, n_mfcc=
num_mfcc, n_fft=n_fft, hop_length=hop_length)
23 mfcc = mfcc.T
24
Phụ lục A

25 if len(mfcc) == num_mfcc_vectors_per_segment:
26 data["mfcc"].append(mfcc.tolist())
27 data["labels"].append(i-1)
28 print("{}".format(file_path))
29
30 with open(json_path, "w") as fp:
31 json.dump(data, fp, indent=4)

Trích xuất đặc trưng

1 save_mfcc(DATASET_PATH, JSON_PATH)

Nhập và phân chia tập dữ liệu


Khởi tạo hàm nhập dữ liệu

1 DATA_PATH = "model_robot/data_sound.json"
2
3 def load_data(data_path):
4 with open(data_path, "r") as f:
5 data = json.load(f)
6
7 X = np.array(data["mfcc"])
8 y = np.array(data["labels"])
9
10 print("Data succesfully loaded!")
11 return X, y

Phân chia tập dữ liệu

1 X, y = load_data(DATA_PATH)
2
3 # create train, validation and test split
4 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size
=0.2)
5 X_train, X_validation, y_train, y_validation = train_test_split(
X_train, y_train, test_size=0.2)
6
7 # add an axis to input sets
8 X_train = X_train[..., np.newaxis]
9 X_validation = X_validation[..., np.newaxis]
10 X_test = X_test[..., np.newaxis]
Phụ lục A

Huấn luyện mô hình học sâu


Mô hình CNN

1 model_cnn = keras.Sequential()
2 model_cnn.add(keras.layers.Conv2D(8,(2,2),activation=’relu’,
input_shape=input_shape))
3 model_cnn.add(keras.layers.Conv2D(16,(3,3),activation=’relu’))
4 model_cnn.add(keras.layers.Flatten())
5 model_cnn.add(keras.layers.Dense(64,activation=’relu’))
6 model_cnn.add(keras.layers.Dropout(0.3))
7 model_cnn.add(keras.layers.Dense(4,activation=’softmax’))
Lưu ý: Đoạn lệnh tham khảo, chỉnh sửa tham số để phù hợp với mô hình.

Mô hình LSTM

1 model_cnn = keras.Sequential()
2
3 model_cnn.add(keras.layers.LSTM(128, input_shape=input_shape,
return_sequences=True))
4 model_cnn.add(keras.layers.LSTM(64))
5 model_cnn.add(keras.layers.Dense(16, activation=’relu’))
6 model_cnn.add(keras.layers.Dropout(0.3))
7 model_cnn.add(keras.layers.Dense(4, activation=’softmax’))
Lưu ý: Đoạn lệnh tham khảo, chỉnh sửa tham số để phù hợp với mô hình.

Mô hình Hybrid

1 model_cnn1 = Conv2D(8, (2, 2), activation=’relu’, padding=’same’)(


input_shape)
2 model_cnn1 = Conv2D(16, (2, 2), activation=’relu’, padding=’same’)(
input_shape)
3
4 model_cnn2 = Conv2D(8, (3, 3), activation=’relu’, padding=’same’)(
input_shape)
5 model_cnn2 = Conv2D(16, (3, 3), activation=’relu’, padding=’same’)(
input_shape)
6
7 model_cnn3 = Conv2D(8, (5, 5), activation=’relu’, padding=’same’)(
input_shape)
8 model_cnn3 = Conv2D(16, (5, 5), activation=’relu’, padding=’same’)(
input_shape)
9
10 model_cnn_con = Concatenate()([model_cnn1, model_cnn2, model_cnn3])
11
12 FC1 = Dense(256, activation=’relu’)(model_cnn_con)
13 FC2 = Dropout(0.3)(FC1)
14 FC2 = Dense(128, activation=’relu’)(FC2)
Phụ lục A

15
16 model_lstm = TimeDistributed(Flatten())(FC2)
17 model_lstm = LSTM(64, return_sequences=True)(model_lstm)
18 att_out=attention()(model_lstm)
19
20 output = Dense(4, activation= ’softmax’)(att_out)
21
22 model_cnn = Model(inputs= [input_shape], outputs= output)
Lưu ý: Đoạn lệnh tham khảo, chỉnh sửa tham số để phù hợp với mô hình.
Phụ lục B

Hệ thống ghi âm và chuyển đổi


Hàm split_audio

1 def split_audio(wav_file):
2 file_path= r’G:\Python\Lenh_dieu_khien\Audio_Mic\Audio_Split’
3
4 sound_file = AudioSegment.from_wav(file_path + wav_file)
5 audio_chunks = split_on_silence(sound_file, min_silence_len=100,
silence_thresh=-70)
6 length = 0
7
8 for i, chunk in enumerate(audio_chunks):
9 out_file = file_path + "\chunk{0}.wav".format(i)
10 chunk.export(out_file, format="wav")
11 length += 1
12
13 return int(length)

Hàm edit_chunk

1 def edit_chunk(length):
2 start_time = 0
3 end_time = 1000
4
5 one_sec_segment = AudioSegment.silent(duration=1000)
6 for i in range(0, length):
7 song = AudioSegment.from_wav(’Audio_Split’ + ’/’ + ’chunk’ + str(i)
+ ’.wav’)
8 final_song = song + one_sec_segment
9 final_song = final_song[start_time:end_time]
10 final_song.export(’Audio_Split’ + ’/’ + ’edit_chunk’ + str(i) + ’.
wav’)

Hàm process_input

1 def process_input(audio_file):
2 SAMPLE_RATE = 16000
3 NUM_MFCC = 13
Phụ lục B

4 N_FTT=2048
5 HOP_LENGTH=512
6 TRACK_DURATION = 1 # measured in seconds
7 SAMPLES_PER_TRACK = SAMPLE_RATE * TRACK_DURATION
8
9 samples_per_segment = int(SAMPLES_PER_TRACK)
10 signal, sample_rate = librosa.load(audio_file, sr=SAMPLE_RATE)
11 mfcc = librosa.feature.mfcc(signal, sample_rate, n_mfcc=NUM_MFCC,
n_fft=N_FTT, hop_length=HOP_LENGTH)
12 mfcc = mfcc.T
13
14 return mfcc

Hàm speech_to_text

1 def speech_to_text(length):
2
3 stt = ’’
4
5 for i in range(0, length):
6 new_input_mfcc = process_input(r’G:\Python\Lenh_dieu_khien\
Audio_Mic\Audio_Split\edit_chunk’ + str(i) + ’.wav’)
7
8 X_to_predict = new_input_mfcc[np.newaxis, ..., np.newaxis]
9 X_to_predict.shape
10
11 prediction = reconstructed_model.predict(X_to_predict)
12 predicted_index = np.argmax(prediction, axis=1)
13
14 stt += word_dict[int(predicted_index)] + ’ ’
15 return stt

Hàm delete_files_in_directory

1 def delete_files_in_directory(directory_path):
2 try:
3 files = os.listdir(directory_path)
4 for file in files:
5 file_path = os.path.join(directory_path, file)
6 if os.path.isfile(file_path):
7 os.remove(file_path)
8 print("All files deleted successfully.")
9 except OSError:
10 print("Error occurred while deleting files.")

Tải mô hình phân loại

1 path = r’G:\Python\Lenh_dieu_khien\model_robot’
Phụ lục B

2 reconstructed_model = keras.models.load_model(path + "\Speech_to_Text.


tf")

Thu âm, xử lý và kết nối socket

1 import tkinter as tk
2 import threading
3 from denoise import AudioDeNoise
4 from socket import socket, AF_INET, SOCK_DGRAM
5
6 file_path = r’G:\Python\Lenh_dieu_khien\Audio_Mic\Audio_Split’
7 SERVER_IP = ’192.168.1.2’
8 PORT_NUMBER = 5000
9 SIZE = 1024
10 print ("Test client sending packets to IP {0}, via port {1}\n".format(
SERVER_IP, PORT_NUMBER))
11 mySocket = socket( AF_INET, SOCK_DGRAM )
12
13 class VoiceRecorder:
14 def __init__(self):
15 self.root = tk.Tk()
16 self.root.resizable(False, False)
17 self.button = tk.Button(text = " ", font = ("Arial", 120, "bold"),
command = self.click_handler)
18 self.button.pack()
19 self.output = tk.Text(self.root, height = 5, width = 41,)
20 self.output.pack()
21 self.recording = False
22 self.root.mainloop()
23
24 def click_handler(self):
25 if self.recording:
26 self.recording = False
27 self.button.config(fg = "black")
28 else:
29 self.recording = True
30 self.button.config(fg = "red")
31 threading.Thread(target = self.record).start()
32
33 def record(self):
34 recorder = PvRecorder(device_index=0, frame_length=512)
35 audio = []
36 recorder.start()
37
38 while self.recording:
39 frame = recorder.read()
40 audio.extend(frame)
41
42 recorder.stop()
43 with wave.open(file_path + ’\sound.wav’, ’w’) as f:
Phụ lục B

44 f.setparams((1, 2, 16000, 512, "NONE", "NONE"))


45 f.writeframes(struct.pack("h" * len(audio), *audio))
46
47 audioDenoiser = AudioDeNoise(inputFile=file_path + ’\sound.wav’)
48 audioDenoiser.deNoise(outputFile=file_path + ’\sound_clear.wav’)
49
50 length = split_audio(’\sound_clear.wav’)
51 edit_chunk(length)
52 stt = speech_to_text(length)
53 print(stt)
54 mySocket.sendto(stt.encode(’utf-8’),(SERVER_IP,PORT_NUMBER))
55 mySocket.sendto(b’stop’,(SERVER_IP,PORT_NUMBER))
56 self.output.insert("1.0", stt + ’\n’)
57 delete_files_in_directory(file_path)
58 recorder.delete()
59
60 VoiceRecorder()
Lưu ý: Đoạn lệnh tham khảo, cần chỉnh sửa tham số SERVER_IP phù hợp với
thực tế.

Hệ thống điều khiển xe robot


Điều khiển motor thông qua chân GPIO của Raspberry Pi

1 import RPi.GPIO as GPIO


2 from time import sleep
3 GPIO.setmode(GPIO.BCM)
4 GPIO.setwarnings(False)
5
6
7 class Motor():
8 def __init__(self,EnaA,In1A,In2A,EnaB,In1B,In2B):
9 self.EnaA= EnaA
10 self.In1A = In1A
11 self.In2A = In2A
12 self.EnaB= EnaB
13 self.In1B = In1B
14 self.In2B = In2B
15 GPIO.setup(self.EnaA,GPIO.OUT);GPIO.setup(self.In1A,GPIO.OUT);GPIO.
setup(self.In2A,GPIO.OUT)
16 GPIO.setup(self.EnaB,GPIO.OUT);GPIO.setup(self.In1B,GPIO.OUT);GPIO.
setup(self.In2B,GPIO.OUT)
17 self.pwmA = GPIO.PWM(self.EnaA, 100);
18 self.pwmB = GPIO.PWM(self.EnaB, 100);
19 self.pwmA.start(0);
20 self.pwmB.start(0);
21 self.mySpeed=0
22
23 def move(self,speed=0.5,turn=0,t=0):
Phụ lục B

24 speed *=100
25 turn *=70
26 leftSpeed = speed-turn
27 rightSpeed = speed+turn
28
29 if leftSpeed>100: leftSpeed =100
30 elif leftSpeed<-100: leftSpeed = -100
31 if rightSpeed>100: rightSpeed =100
32 elif rightSpeed<-100: rightSpeed = -100
33 #print(leftSpeed,rightSpeed)
34 self.pwmA.ChangeDutyCycle(abs(leftSpeed))
35 self.pwmB.ChangeDutyCycle(abs(rightSpeed))
36 if leftSpeed>0:GPIO.output(self.In1A,GPIO.HIGH);GPIO.output(self.
In2A,GPIO.LOW)
37 else:GPIO.output(self.In1A,GPIO.LOW);GPIO.output(self.In2A,GPIO.
HIGH)
38 if rightSpeed>0:GPIO.output(self.In1B,GPIO.HIGH);GPIO.output(self.
In2B,GPIO.LOW)
39 else:GPIO.output(self.In1B,GPIO.LOW);GPIO.output(self.In2B,GPIO.
HIGH)
40 sleep(t)
41
42 def stop(self,t=0):
43 self.pwmA.ChangeDutyCycle(0);
44 self.pwmB.ChangeDutyCycle(0);
45 self.mySpeed=0
46 sleep(t)
Lưu ý: Đoạn lệnh tham khảo, cần chỉnh sửa tham số để phù hợp với thực tế.

Nhận dữ liệu từ kết nối socket và điều khiển xe robot

1 from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM


2 from motorModule2 import Motor
3 import sys
4 import keyboardModule as kp
5
6 motor = Motor(23,24,25,17,27,22)
7 PORT_NUMBER = 5000
8 SIZE = 1024
9 hostName = gethostbyname( ’0.0.0.0’ )
10 mySocket = socket( AF_INET, SOCK_DGRAM )
11 mySocket.bind( (hostName, PORT_NUMBER) )
12 print ("Test server listening on port {0}\n".format(PORT_NUMBER))
13
14 def main():
15 (data,addr) = mySocket.recvfrom(SIZE)
16 str1 = data.decode(’utf-8’)
17 if str1 == ’lên’:
18 motor.move(0.6,0,0.1)
19 elif str1 == ’xuống’:

You might also like