Giới thiệu dự án

Công nghệ nhận dạng tiếng nói tự động (Automatic Speech Recognition - ASR) đóng vai trò then chốt trong giao tiếp người - máy (Human-Computer Interaction - HCI). Theo các báo cáo thống kê thị trường CNTT & Truyền thông quốc tế, quy mô đầu tư vào công nghệ xử lý tiếng nói đã vượt mốc 5 tỷ USD, mở rộng từ các hệ thống tương tác thoại IVR (Interactive Voice Response), hỗ trợ y tế từ xa, đến điều khiển robot dịch vụ.

Tuy nhiên, phần lớn các bộ nhận dạng thương mại (như IBM ViaVoice, Microsoft SAPI) được tối ưu cho ngôn ngữ không dấu như tiếng Anh. Tiếng Việt là một ngôn ngữ đơn lập, đa âm tiết và đặc biệt có 6 thanh điệu (ngang, huyền, hỏi, sắc, ngã, nặng). Sự thay đổi cao độ (F0) biểu thị trực tiếp ngữ nghĩa của từ. Việc áp dụng trực tiếp các mô hình âm học tiếng nước ngoài mang lại độ chính xác rất thấp khi phân biệt các từ đồng âm khác thanh điệu (ví dụ: chuẩn, chuẫn, chuân). Hơn nữa, việc tích hợp bộ nhận dạng tiếng Việt lên các hệ thống nhúng điều khiển biên (Edge Computing) gặp rào cản lớn về giới hạn tài nguyên bộ nhớ và năng lực xử lý số học.

Đề tài "Nhận dạng tiếng nói thể hiện trạng thái khuôn mặt" do sinh viên Trương Minh Thiện thực hiện dưới sự hướng dẫn của PGS. Trần Thu Hà (Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật TP.HCM) giải quyết bài toán nhận dạng giọng nói tiếng Việt thời gian thực, chuyển đổi các khẩu lệnh âm thanh thành tín hiệu điều khiển cơ cấu chấp hành hiển thị 5 trạng thái cảm xúc trên khuôn mặt robot mô hình.

+------------------+      +-------------------+      +----------------------+
| Tín hiệu Micro   | ---> | Thuật toán MFCC   | ---> | Lượng tử hóa Vector  |
| Fs = 8 kHz       |      | 39 chiều đặc trưng|      | K-Means Codebook 64  |
+------------------+      +-------------------+      +----------------------+
                                                                |
+------------------+      +-------------------+                 v
| Cơ cấu chấp hành | <--- | Arduino Mega 2560 | <--- +----------------------+
| Khuôn mặt Robot  | UART | Xử lý lệnh UART   |      | Mô hình Markov ẩn    |
+------------------+      +-------------------+      | Discrete HMM (DHMM)  |
                                                     +----------------------+

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

  1. Nghiên cứu đặc trưng âm học tiếng Việt: Khảo sát cấu trúc âm tiết, ngữ âm học, thanh điệu và sự phân bố phổ năng lượng của nguyên âm, phụ âm.
  2. Xây dựng giải thuật tiền xử lý và trích xuất đặc trưng: Ứng dụng thuật toán phát hiện tiếng nói (Voice Activity Detection - VAD) kết hợp lọc nhấn mạnh (Pre-emphasis) và trích chọn 39 hệ số đặc trưng Mel-Frequency Cepstral Coefficients (MFCC).
  3. Hiện thực hóa mô hình Lượng tử hóa Vector (VQ): Giảm không gian dữ liệu liên tục thành chỉ số rời rạc thông qua thuật toán phân cụm K-Means với Codebook $M = 64$.
  4. Xây dựng bộ nhận dạng dựa trên Mô hình Markov Ẩn (HMM): Triển khai thuật toán huấn luyện Baum-Welch và giải mã nhận dạng Viterbi cho mô hình HMM rời rạc (Discrete HMM).
  5. Phát triển phần mềm giao diện và phần cứng nhúng: Thiết kế GUI nhận dạng trên máy tính và giao tiếp nối tiếp UART với vi điều khiển Arduino Mega 2560 điều khiển cơ cấu mô phỏng biểu cảm khuôn mặt.

Phạm vi và giới hạn đề tài

  • Tập từ vựng: Nhận dạng 5 từ đơn cách biệt tương ứng 5 trạng thái biểu cảm: Vui, Buồn, Mệt, Giận, Hiền.
  • Môi trường âm học: Đánh giá hiệu năng trong môi trường phòng thí nghiệm tiêu chuẩn và môi trường có nhiễu nền cơ khí từ động cơ robot.
  • Phần cứng: Sử dụng máy tính cá nhân xử lý thuật toán nhận dạng tín hiệu, truyền mã lệnh điều khiển qua giao tiếp Serial UART đến kit vi điều khiển 8-bit ATmega2560.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Phương pháp nhận dạng Ưu điểm Nhược điểm Độ phức tạp tính toán Khả năng mở rộng từ vựng
Dynamic Time Warping (DTW) Đơn giản, không cần huấn luyện phức tạp, hiệu quả với tập từ nhỏ. Nhạy cảm với nhiễu, tốc độ so khớp chậm khi bộ từ vựng tăng ($O(N^2)$). Thấp - Trung bình Rất hạn chế (< 10 từ)
Artificial Neural Network (ANN/MLP) Khả năng phân lớp phi tuyến tính mạnh, nhận dạng nhanh ở pha inference. Cần tập dữ liệu huấn luyện rất lớn, khó mô hình hóa động học thời gian của tiếng nói. Cao trong huấn luyện Trung bình
Hidden Markov Model (HMM) (Được chọn) Mô hình hóa tối ưu tính biến thiên theo thời gian của tín hiệu âm thanh, xác suất thống kê chặt chẽ. Đòi hỏi bước lượng tử hóa vector hoặc mô hình hóa hỗn hợp Gaussian (GMM). Trung bình Rất cao
ASR trên phần cứng FPGA Tốc độ tính toán phần cứng cực nhanh, xử lý song song. Chi phí thiết kế cao, khó nâng cấp thuật toán, khó triển khai trên vi điều khiển thông dụng. Rất cao Hạn chế theo tài nguyên logic

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc):
    • Bộ tiền xử lý VAD tách chính xác biên âm thanh có ích với tỷ lệ cắt sai dưới 5%.
    • Trích xuất đủ 39 chiều đặc trưng MFCC (12 MFCC + 1 Năng lượng + 13 Delta + 13 Double-Delta).
    • Tỷ lệ nhận dạng chính xác trung bình $\ge 90%$ trên tập từ vựng 5 cảm xúc.
    • Giao thức truyền thông UART đồng bộ giữa phần mềm nhận dạng và phần cứng chấp hành.
  • Should have (Nên có):
    • Khả năng thích nghi bán độc lập người nói (Semi-speaker independent) qua cơ chế bù trung bình phổ (CMN).
    • Thời gian trễ xử lý nhận dạng dưới 500ms kể từ khi kết thúc phát âm.
  • Could have (Có thể có):
    • Mở rộng thêm các trạng thái biểu cảm như Ngạc nhiên, Sợ hãi.
    • Hiển thị trực quan phổ tần số thời gian thực trên GUI.
  • Won't have (Chưa thực hiện):
    • Nhận dạng câu nói tiếng Việt liên tục không ngắt quãng.
    • Tích hợp toàn bộ giải thuật trích xuất MFCC và HMM trực tiếp vào vi điều khiển 8-bit.

Thiết kế hệ thống

+-----------------------------------------------------------------------------------+
|                              MÁY TÍNH XỬ LÝ TRUNG TÂM                             |
|                                                                                   |
|  +--------------------+      +--------------------+      +---------------------+  |
|  |   Microphone In    | ---> |    Pre-emphasis    | ---> |      VAD Block      |  |
|  | 8 kHz / 16-bit PCM |      |  y[n]=x[n]-0.97x   |      | Ps1(m) * (1-Zs1)^Sc |  |
|  +--------------------+      +--------------------+      +---------------------+  |
|                                                                     |             |
|  +--------------------+      +--------------------+                 v             |
|  | Discrete Cosine    | <--- |  Mel-Filterbank    | <--- +---------------------+  |
|  | Transform (DCT)    |      | 12 Triangle Filters|      |  Hamming Windowing  |  |
|  +--------------------+      +--------------------+      | K=160, Overlap P=50 |  |
|            |                                             +---------------------+  |
|            v                                                                      |
|  +--------------------+      +--------------------+      +---------------------+  |
|  | Feature Matrix     | ---> | Vector Quantizer   | ---> | HMM Viterbi Decoder |  |
|  | 39-D Feature Vector|      | Codebook (K=64)    |      | 5 Word Models (1..5)|  |
|  +--------------------+      +--------------------+      +---------------------+  |
|                                                                     |             |
+---------------------------------------------------------------------|-------------+
                                                                      | UART: 9600 bps
                                                                      v
                               +----------------------------------------------------+
                               |        ARDUINO MEGA 2560 (ATmega2560 @ 16MHz)       |
                               |  - Frame Parsing                                   |
                               |  - PWM Servo Control (Góc quay 0 - 180 độ)         |
                               |  - Hiển thị LED / Động cơ biểu cảm khuôn mặt        |
                               +----------------------------------------------------+

Ngăn xếp công nghệ (Technology Stack)

  • Thuật toán & Xử lý số tín hiệu (DSP): MATLAB R2015b / C++ Signal Processing Toolbox.
  • Phần mềm giao diện (GUI): MATLAB Guide / Win32 GUI API.
  • Giao tiếp phần cứng: RS-232 / USB-to-UART Bridge (Baudrate: 9600 bps, 8 Data bits, 1 Stop bit, No Parity).
  • Phần cứng nhúng: Board Arduino Mega 2560 (Vi điều khiển ATmega2560, Flash 256KB, SRAM 8KB, Clock 16MHz).
  • Cơ cấu chấp hành: Hệ thống Servo RC TowerPro MG995 điều khiển các khớp mi mắt, cung mày, khóe miệng mô phỏng trạng thái khuôn mặt.

Phương pháp luận (Methodology)

Dự án áp dụng mô hình phát triển hệ thống nhúng phối hợp theo mô hình chữ V (V-Model):

Phân tích yêu cầu ngữ âm -----------------------------> Kiểm thử chấp nhận (UAT)
       \                                                      /
        Phân tích toán học (MFCC/HMM) -----------> Kiểm thử mô hình nhận dạng
               \                                  /
                Thiết kế Module phần mềm/phần cứng
                         \              /
                          Hiện thực mã nguồn

Ma trận đánh giá rủi ro và giải pháp xử lý

  1. Rủi ro nhiễu môi trường làm sai lệch biên VAD:
    • Giải pháp: Kết hợp hàm công suất ngắn hạn $P_{s1}(m)$ và tốc độ qua điểm không $Z_{s1}(m)$, áp dụng ngưỡng thích nghi $t_W = \mu_W + \alpha \delta_W$ dựa trên 50 khung nhiễu nền tĩnh.
  2. Rủi ro bùng nổ tính toán khi tính ma trận hiệp phương sai trong Continuous HMM:
    • Giải pháp: Sử dụng mô hình Discrete HMM (DHMM) kết hợp Vector Quantization K-Means để rời rạc hóa không gian đặc trưng về bảng mã Codebook kích thước 64.
  3. Rủi ro sai số nhận dạng do tốc độ phát âm khác nhau:
    • Giải pháp: Cấu trúc HMM topo dạng Left-to-Right (Bakis Model) cho phép trạng thái tự lặp lại ($a_{ii}$) hoặc chuyển sang trạng thái kế tiếp ($a_{i,i+1}$), hấp thu hoàn toàn sự co giãn trục thời gian.

Implementation và kết quả

Quy trình phát triển thuật toán chi tiết

1. Tiền xử lý và Bộ lọc nhấn mạnh (Pre-emphasis)

Nhằm bù đắp sự suy giảm năng lượng phổ ở các tần số cao (mức suy giảm xấp xỉ 20 dB/decade do đặc điểm cấu tạo thanh quản người), tín hiệu âm thanh đầu vào được lọc qua bộ lọc số thông cao:

$$H(z) = 1 - a \cdot z^{-1}, \quad \text{với } a = 0.97$$

Phương trình sai phân miền thời gian:

$$s_1[n] = x[n] - 0.97 \cdot x[n-1]$$

// Hiện thực giải thuật Pre-emphasis lọc số thông cao
void apply_pre_emphasis(const double* input_signal, double* output_signal, int length, double alpha) {
    output_signal[0] = input_signal[0];
    for (int n = 1; n < length; n++) {
        output_signal[n] = input_signal[n] - alpha * input_signal[n - 1];
    }
}

2. Tách tiếng nói khỏi khoảng lặng (Voice Activity Detection - VAD)

Tín hiệu được chia khung thành các đoạn có độ dài $K = 160$ mẫu ($20\text{ ms}$ ở tần số lấy mẫu $F_s = 8\text{ kHz}$). Công suất ngắn hạn $P_{s1}(m)$ và tỷ lệ qua điểm zero $Z_{s1}(m)$ được xác định:

$$P_{s1}(m) = \frac{1}{L} \sum_{n=m-L+1}^{m} s_1^2[n]$$

$$Z_{s1}(m) = \frac{1}{2L} \sum_{n=m-L+1}^{m} |\text{sgn}(s_1[n]) - \text{sgn}(s_1[n-1])|$$

Chỉ số kết hợp $W_{s1}(m)$ xác định ranh giới phát âm:

$$W_{s1}(m) = P_{s1}(m) \cdot (1 - Z_{s1}(m))^{S_c} \quad (S_c = 1000)$$

Ngưỡng quyết định: $t_W = \mu_W + \alpha \delta_W$, trong đó $\alpha = 0.2 \cdot \delta_W^{-1.4}$. Khung được giữ lại khi $W_{s1}(m) \ge t_W$.

3. Phân tích trích xuất 39 đặc trưng MFCC

  1. Cửa sổ hóa Hamming: Giảm hiệu ứng rò rỉ phổ (Spectral Leakage): $$w[k] = 0.54 - 0.46 \cos\left(\frac{2\pi k}{K - 1}\right), \quad 0 \le k \le K-1$$
  2. Biến đổi Fourier nhanh (Radix-4 FFT): Bổ sung 96 mẫu zero (Zero-padding) để mở rộng độ dài khung từ 160 lên 256 điểm: $$X_2[k; m] = \text{FFT}_{256}{x_1[n; m] \cdot w[n]}$$
  3. Băng lọc tam giác Mel (Mel-scale Filterbank): Chuyển đổi dải tần tuyến tính ($0 - 4000\text{ Hz}$) sang thang đo tâm thính giác Mel thông qua 12 kênh lọc: $$\text{Mel}(f) = 2595 \log_{10}\left(1 + \frac{f}{700}\right)$$
  4. Biến đổi Cosine rời rạc ngược (IDCT): Tính 12 hệ số Cepstral cơ sở $c_s[n; m]$: $$c_s[n; m] = \sum_{k=0}^{N-1} m_k \cos\left(\frac{\pi (2n+1)k}{2N}\right)$$
  5. Tính toán hệ số động năng Delta ($\Delta$) và Gia tốc ($\Delta\Delta$): Sử dụng xấp xỉ đạo hàm bậc một và bậc hai với cửa sổ hồi quy bán kính $P = 3$: $$\delta[n; m] = \frac{\sum_{p=-P}^{P} p \cdot c[n; m+p]}{\sum_{p=-P}^{P} p^2}$$

Tổng hợp vector đặc trưng tại mỗi khung 20ms bao gồm: $$\mathbf{f} = [E, c_1..c_{12}, \Delta E, \Delta c_1..\Delta c_{12}, \Delta\Delta E, \Delta\Delta c_1..\Delta\Delta c_{12}]^T \in \mathbb{R}^{39}$$

% Đoạn mã MATLAB trích xuất MFCC và Vector đặc trưng 39 chiều
function feature_vector = extract_mfcc_39d(frame_signal, Fs, num_filters)
    % 1. Cửa sổ Hamming
    N = length(frame_signal);
    hamming_win = hamming(N);
    windowed = frame_signal .* hamming_win;
    
    % 2. FFT 256 điểm
    nfft = 256;
    mag_spectrum = abs(fft(windowed, nfft));
    half_spectrum = mag_spectrum(1:nfft/2+1);
    
    % 3. Áp dụng Filterbank Mel 12 kênh
    mel_fb = design_mel_filterbank(Fs, nfft, num_filters, 0, 4000);
    filter_energies = mel_fb * half_spectrum;
    log_energies = log(filter_energies + eps);
    
    % 4. DCT thu 12 hệ số Cepstral
    mfcc_12 = dct(log_energies);
    mfcc_12 = mfcc_12(1:12);
    log_E = log(sum(windowed.^2) + eps);
    
    % Kết hợp 13 hệ số tĩnh cơ sở [LogE, MFCC_1..12]
    base_feat = [log_E; mfcc_12];
    feature_vector = base_feat; % Vector động Delta/Delta-Delta được tính nối tiếp qua các khung lân cận
end

4. Lượng tử hóa Vector (Vector Quantization - VQ)

Sử dụng thuật toán K-Means (Linde-Buzo-Gray) để phân nhóm tập các vector 39 chiều liên tục thành $M = 64$ vector trọng tâm (Codewords). Độ méo dạng khoảng cách Euclidean:

$$d(\mathbf{x}, \mathbf{c}k) = \sqrt{\sum{i=1}^{39} (x_i - c_{ki})^2}$$

Quá trình lượng tử hóa ánh xạ mỗi chuỗi âm thanh thành dãy chỉ số quan sát rời rạc $\mathbf{O} = {o_1, o_2, \dots, o_T}$, với $o_t \in {1, 2, \dots, 64}$.

5. Nhận dạng dựa trên Mô hình Markov Ẩn rời rạc (Discrete HMM)

Mỗi từ cảm xúc trong bộ từ điển $V = {\text{'vui'}, \text{'buồn'}, \text{'mệt'}, \text{'giận'}, \text{'hiền'}}$ được mô hình hóa bằng một HMM $\lambda_v = (\mathbf{A}_v, \mathbf{B}_v, \boldsymbol{\pi}_v)$ gồm $N = 5$ trạng thái theo cấu trúc nối tiếp Left-to-Right:

  • $\mathbf{A} = [a_{ij}]$: Ma trận xác suất chuyển trạng thái ($a_{ij} = 0$ nếu $j < i$ hoặc $j > i + 1$).
  • $\mathbf{B} = [b_j(k)]$: Ma trận xác suất phát xạ ký hiệu quan sát $k \in {1..64}$.
  • $\boldsymbol{\pi} = [1, 0, 0, 0, 0]^T$: Trạng thái ban đầu luôn bắt đầu tại $S_1$.

Quyết định nhận dạng cho chuỗi quan sát $\mathbf{O}$ được thực hiện theo nguyên lý hợp lý cực đại (Maximum Likelihood):

$$v^* = \arg\max_{1 \le v \le 5} P(\mathbf{O} | \lambda_v)$$

Xác suất $P(\mathbf{O} | \lambda_v)$ được tính toán hiệu quả bằng thuật toán Tiến (Forward Algorithm) với độ phức tạp tính toán $O(N^2 T)$.


Thử nghiệm và đánh giá kết quả

Hệ thống được thử nghiệm với 100 mẫu phát âm cho mỗi từ ngữ từ các đối tượng thử nghiệm trong hai điều kiện môi trường:

  1. Môi trường yên tĩnh (Phòng làm việc, SNR $\approx 30\text{ dB}$).
  2. Môi trường hoạt động thực tế có nhiễu (Robot đang vận hành động cơ, SNR $\approx 15\text{ dB}$).

Ma trận nhầm lẫn (Confusion Matrix) trong điều kiện phòng tiêu chuẩn

Nhãn thực tế Vui (Đoán) Buồn (Đoán) Mệt (Đoán) Giận (Đoán) Hiền (Đoán) Tỷ lệ chính xác (%)
Vui 94 1 2 1 2 94.0%
Buồn 2 91 3 2 2 91.0%
Mệt 1 3 93 2 1 93.0%
Giận 3 2 1 90 4 90.0%
Hiền 1 2 2 3 92 92.0%
Trung bình - - - - - 92.0%

Đánh giá hiệu năng tổng thể

Tiêu chí đo lường Mục tiêu thiết kế ban đầu Kết quả thực nghiệm đạt được Trạng thái
Độ chính xác môi trường tĩnh $\ge 90.0%$ 92.0% Đạt chỉ tiêu
Độ chính xác môi trường nhiễu $\ge 85.0%$ 90.0% Vượt chỉ tiêu
Kích thước Codebook VQ 64 codewords 64 codewords ($B=6\text{ bits}$) Tối ưu tài nguyên
Thời gian trễ nhận dạng $< 500\text{ ms}$ $210\text{ ms}$ (trên máy tính Core i5) Phản hồi thời gian thực
Tốc độ truyền dữ liệu UART 9600 bps ổn định 9600 bps (Tỷ lệ mất gói $0%$) Đạt chuẩn nhúng

Đổi mới và đóng góp

Cải tiến kỹ thuật nổi bật

  1. Tối ưu hóa tham số tiền xử lý VAD cho tiếng Việt đơn âm: Sử dụng trọng số $S_c = 1000$ kết hợp số mũ phương sai $\alpha = 0.2 \cdot \delta_W^{-1.4}$, loại bỏ triệt để khoảng lặng giả và tiếng thở dài mà không làm mất âm đầu (như phụ âm xát, phụ âm bật hơi /v/, /g/, /th/).
  2. Không gian đặc trưng MFCC 39 chiều toàn diện: Không chỉ dừng lại ở 12 hệ số tĩnh truyền thống, việc bổ sung năng lượng khung, Delta và Double-Delta giúp mô hình nắm bắt trọn vẹn quỹ đạo biến thiên tần số của các thanh điệu tiếng Việt (ví dụ: thanh sắc có quỹ đạo tăng vọt, thanh nặng có nét ngắt cụt).
  3. Mô hình kiến trúc Hybrid VQ-HMM tối ưu cho vi điều khiển: Việc rời rạc hóa không gian đặc trưng thông qua Codebook 64 giúp loại bỏ toàn bộ các phép tính hàm mật độ xác suất đa biến Gaussian (Gaussian Mixture Model) tốn kém tài nguyên, mở đường cho việc nhúng bộ giải mã trực tiếp lên chip xử lý biên.

So sánh với các công trình nghiên cứu tiền nhiệm

Giải pháp nghiên cứu Giải thuật chính Tập từ vựng Độ chính xác trung bình Yêu cầu phần cứng
TS. Hoàng Đình Chiến Mạng nơ-ron (ANN) + LPC & AMDF 8 từ điều khiển xe 99.4% Máy tính PC cấu hình cao
TS. Hoàng Trang et al. Cứng hóa giải thuật trên chip FPGA Từ vựng chuyên biệt ~90.0% Kit FPGA Altera/Xilinx đắt tiền
Đồ án này (Trương Minh Thiện) VAD + MFCC 39-D + VQ K-Means + HMM 5 từ trạng thái cảm xúc 92.0% (Tĩnh) / 90.0% (Nhiễu) PC phối hợp Vi điều khiển Arduino Mega

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Giao tiếp Người - Robot (HRI): Điều khiển cảm xúc của robot lễ tân, robot hỗ trợ người cao tuổi hoặc trẻ tự kỷ thông qua giọng nói tương tác.
  • Hệ thống buồng lái thông minh / Nhà thông minh: Chuyển đổi lệnh thoại thành các kịch bản ánh sáng và âm nhạc tương ứng với tâm trạng của người dùng (Vui, Buồn, Mệt mỏi).
  • Thiết bị trợ năng cho người khuyết tật: Cung cấp giao thức điều khiển trực quan không cần tiếp xúc vật lý.

Hướng dẫn triển khai và tích hợp phần cứng

[Máy tính chạy GUI Nhận Dạng] 
       | (Cáp USB-to-UART / COM Port)
       v
[Chân RX0 (Pin 0) - Arduino Mega 2560]
       |
       +---> [Timer 1 PWM Pin 9]  ---> [Servo MG995 - Khóe Miệng Trái]
       +---> [Timer 3 PWM Pin 5]  ---> [Servo MG995 - Khóe Miệng Phải]
       +---> [Timer 4 PWM Pin 6]  ---> [Servo MG995 - Cung Mày]
       +---> [Timer 4 PWM Pin 7]  ---> [Servo MG995 - Mi Mắt]
// Mã nguồn nạp cho Arduino Mega 2560 xử lý khung lệnh từ MATLAB/PC
#include <Servo.h>

Servo servo_mouth_left;
Servo servo_mouth_right;
Servo servo_eyebrow;

const int PIN_MOUTH_L = 9;
const int PIN_MOUTH_R = 5;
const int PIN_EYEBROW = 6;

void setup() {
    Serial.begin(9600);
    servo_mouth_left.attach(PIN_MOUTH_L);
    servo_mouth_right.attach(PIN_MOUTH_R);
    servo_eyebrow.attach(PIN_EYEBROW);
    set_neutral_face(); // Trạng thái mặc định
}

void loop() {
    if (Serial.available() > 0) {
        char cmd = Serial.read();
        switch (cmd) {
            case '1': // Trạng thái: VUI
                servo_mouth_left.write(150);
                servo_mouth_right.write(30);
                servo_eyebrow.write(90);
                break;
            case '2': // Trạng thái: BUỒN
                servo_mouth_left.write(30);
                servo_mouth_right.write(150);
                servo_eyebrow.write(45);
                break;
            case '3': // Trạng thái: MỆT
                servo_mouth_left.write(80);
                servo_mouth_right.write(100);
                servo_eyebrow.write(60);
                break;
            case '4': // Trạng thái: GIẬN
                servo_mouth_left.write(40);
                servo_mouth_right.write(140);
                servo_eyebrow.write(135);
                break;
            case '5': // Trạng thái: HIỀN
                servo_mouth_left.write(110);
                servo_mouth_right.write(70);
                servo_eyebrow.write(90);
                break;
            default:
                break;
        }
    }
}

void set_neutral_face() {
    servo_mouth_left.write(90);
    servo_mouth_right.write(90);
    servo_eyebrow.write(90);
}

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Hạn chế ngữ âm độc lập người nói: Mô hình được huấn luyện theo phương pháp bán độc lập; khi có đối tượng phát âm có giọng vùng miền quá khác biệt (giọng Bắc - Nam - Trung), tỷ lệ nhận dạng giảm xuống dưới 80% nếu chưa được học mẫu bổ sung.
  • Giới hạn nhận dạng từ đơn: Hệ thống xử lý dựa trên giả định có khoảng lặng phân tách rõ ràng trước và sau từ ($20\text{ ms}$ silence); chưa hỗ trợ giải mã chuỗi từ liên tục (Continuous Speech Recognition).
  • Phân tách xử lý máy tính - nhúng: Khâu trích xuất đặc trưng và Viterbi Decoder vẫn phải thực thi trên PC, chưa độc lập hoàn toàn trên chip đơn (Standalone SoC).

Hướng phát triển nâng cao

  1. Nâng cấp mô hình âm học: Chuyển đổi từ Discrete HMM sang Continuous Density HMM (CDHMM-GMM) hoặc mạng nơ-ron tích chập sâu kết hợp bộ nhớ tái phát (CNN-LSTM / Conformer CTC ASR).
  2. Triển khai Edge AI trên vi điều khiển 32-bit: Tối ưu hóa fixed-point hóa (Q15/Q31 format) thuật toán MFCC và Viterbi để nạp trực tiếp lên các vi điều khiển ARM Cortex-M4/M7 (như STM32F4/STM32H7) hoặc ESP32-S3 mà không cần máy tính phụ trợ.
  3. Mở rộng kích thước từ vựng: Xây dựng từ điển ngữ âm Triphone cho tiếng Việt, cho phép nhận dạng tập lệnh điều khiển không giới hạn và các câu thoại biểu cảm phức tạp.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                            GIÁ TRỊ MANG LẠI CHO CÁC NHÓM                          |
+-----------------------------------------------------------------------------------+
| [Sinh viên / Học viên]       --> Nguồn tài liệu mẫu hoàn chỉnh về xử lý DSP,       |
|                                  trích xuất MFCC và giải thuật HMM tiếng Việt.    |
| [Kỹ sư Lập trình Nhúng]      --> Mã nguồn tham khảo kết nối liên lạc UART,        |
|                                  cơ chế điều khiển động cơ servo nhiều bậc tự do. |
| [Doanh nghiệp Robot/Tự động] --> Mô hình kiến trúc chi phí thấp ($15-$20),        |
|                                  thay thế các vi mạch nhận dạng đắt đỏ.          |
| [Nhà nghiên cứu Ngữ âm học]  --> Dữ liệu thực nghiệm về tính biến thiên F0 và      |
|                                  ảnh hưởng của 6 thanh điệu tiếng Việt lên ASR.   |
+-----------------------------------------------------------------------------------+
  • Sinh viên kỹ thuật ngành Điện tử - Viễn thông, Tự động hóa, CNTT: Tiếp cận giáo trình thực hành chuyên sâu kết hợp lý thuyết xử lý tín hiệu âm thanh ngẫu nhiên và giải thuật xác suất thống kê.
  • Kỹ sư phát triển hệ thống nhúng / IoT: Sở hữu kiến trúc tham chiếu hoàn chỉnh để xây dựng module nhận dạng giọng nói ngoại tuyến (Offline Voice Control Module) không phụ thuộc đường truyền Internet và dịch vụ đám mây.
  • Doanh nghiệp sản xuất đồ chơi thông minh và robot giáo dục: Tiết kiệm 70% chi phí BOM (Bill of Materials) phần cứng điều khiển tương tác giọng nói so với các giải pháp chip chuyên dụng từ nước ngoài.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

  • Phía máy tính (Xử lý thuật toán): CPU x86/x64 xung nhịp từ 1.5 GHz, RAM tối thiểu 2 GB, Microphone chuẩn 16-bit 8 kHz, cổng kết nối USB/COM.
  • Phía điều khiển chấp hành: Board mạch vi điều khiển tương thích Arduino (ATmega328P hoặc ATmega2560), nguồn cấp rời 5V/3A cấp dòng cho hệ thống 3-5 động cơ Servo công suất MG995/SG90.

2. Tại sao hệ thống sử dụng tần số lấy mẫu 8 kHz thay vì 44.1 kHz hay 48 kHz?

Theo đặc tính ngữ âm học của con người, hơn 90% năng lượng thông tin có ích của giọng nói tập trung ở dải tần dưới 4000 Hz. Theo định lý lấy mẫu Nyquist-Shannon:

$$F_s \ge 2 \cdot F_{\max} = 2 \cdot 4000\text{ Hz} = 8000\text{ Hz}$$

Việc sử dụng $F_s = 8\text{ kHz}$ giúp giảm 80% dung lượng bộ nhớ đệm và giảm thiểu 5 lần khối lượng tính toán FFT/MFCC so với chuẩn 44.1 kHz mà vẫn đảm bảo giữ nguyên 100% đặc trưng âm học cần thiết để phân biệt từ vựng.

3. Làm thế nào để hệ thống nhận diện chính xác khi có người nói giọng vùng miền khác nhau?

Hệ thống sử dụng cơ chế Huấn luyện thích nghi bán độc lập (Semi-speaker adaptation):

  • Người dùng mới chỉ cần phát âm mỗi từ trong bộ từ vựng từ 2 đến 3 lần.
  • Thuật toán Baum-Welch sẽ cập nhật nhẹ ma trận xác suất phát xạ $\mathbf{B}$ của mô hình HMM tương ứng mà không cần phải tái cấu trúc lại toàn bộ không gian Codebook.

4. Tại sao cần bổ sung 13 hệ số Delta và 13 hệ số Double-Delta vào vector MFCC?

Các hệ số MFCC tĩnh ($c_1 \dots c_{12}$) chỉ phản ánh phân bố năng lượng tĩnh trong một khung 20ms riêng lẻ. Tiếng nói là tín hiệu biến thiên liên tục, thanh điệu tiếng Việt được thể hiện qua tốc độ thay đổi và độ cong của cao độ theo thời gian. Các hệ số Delta ($\Delta$ - Đạo hàm bậc 1) và Double-Delta ($\Delta\Delta$ - Đạo hàm bậc 2) mô tả trực tiếp vận tốc và gia tốc thay đổi phổ âm thanh giữa các khung liên tiếp, giúp nâng cao độ chính xác phân loại từ 74% lên trên 90%.

5. Chi phí ước tính để sản xuất thương mại phần cứng mô hình này là bao nhiêu?

Tổng chi phí linh kiện phần cứng (BOM) ở quy mô sản xuất nhỏ:

  • Kit vi điều khiển ATmega2560 / STM32F103: ~100.000 - 150.000 VNĐ.
  • Module Micro thu âm tích hợp tiền khuếch đại (MAX9814/MAX4466): ~30.000 VNĐ.
  • Bộ 3 Servo RC điều khiển biểu cảm: ~90.000 VNĐ.
  • Khung cơ khí và phụ kiện: ~100.000 VNĐ.
  • Tổng chi phí ước tính: $\approx 350.000 - 400.000\text{ VNĐ}$ (tương đương $\approx 15 - 18\text{ USD}$), mang lại hiệu quả kinh tế vượt trội so với các sản phẩm nhập ngoại.

Kết luận

Đồ án "Nhận dạng tiếng nói thể hiện trạng thái khuôn mặt" của tác giả Trương Minh Thiện đã giải quyết thành công chuỗi bài toán kỹ thuật từ lý thuyết xử lý tín hiệu số âm thanh đến hiện thực hóa cơ cấu chấp hành cơ điện tử:

  1. Làm chủ quy trình DSP hoàn chỉnh: Xây dựng thuật toán tiền xử lý VAD thích nghi, biến đổi bộ lọc nhấn mạnh Pre-emphasis, trích chọn 39 chiều đặc trưng động học MFCC và lượng tử hóa vector rời rạc với Codebook 64.
  2. Ứng dụng thành công Mô hình Markov Ẩn (HMM): Hiện thực hóa bộ ba giải thuật kinh điển (Forward, Viterbi, Baum-Welch) trong nhận dạng tiếng Việt đơn âm, đạt độ chính xác 92.0% trong môi trường tiêu chuẩn và 90.0% trong môi trường có nhiễu nền cơ khí.
  3. Hiện thực hóa mô hình tương tác thời gian thực: Kết nối nhịp nhàng giữa tầng thuật toán trên máy tính và tầng chấp hành cơ cấu khuôn mặt robot qua vi điều khiển Arduino Mega 2560 với độ trễ phản hồi chỉ $210\text{ ms}$.

Công trình là tài liệu tham khảo có giá trị cao cho các nghiên cứu ứng dụng tiếp theo về nhận dạng tiếng nói tiếng Việt ngoại tuyến, điều khiển robot thông minh và phát triển các giao diện tương tác người - máy trực quan trong tương lai.