Luận văn Tìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab

MỤC LỤC

LỜI NÓI ĐẦU . 1

MỤC LỤC . 3

CHƯƠNG 1. NHẬN DẠNG TIẾNG NÓI. 5

1.1. NHẬN DẠNG TIẾNG NÓI VÀ MỘT SỐPHƯƠNG PHÁP NHẬN DẠNG . 5

1.1.1. Nhận dạng tiếng nói.5

1.1.2. Một sốphương pháp nhận dạng tiếng nói phổbiến.6

1.1.2.1. Phương pháp ngữâm - âm vịhọc (acoustic-phoneticapproach) .6

1.1.2.2. Phương pháp nhận dạng mẫu (pattern recognition approach).7

1.1.2.3. Phương pháp trí tuệnhân tạo (artifactial intelligence approach) .8

1.2. NHẬN DẠNG TIẾNG VIỆT . 9

1.2.1. Một số đặc điểm ngữâm tiếng Việt .9

1.2.2. Những thuận lợi và khó khăn đối với nhận dạng tiếng nói tiếng Việt .11

1.2.2.1. Thuận lợi .11

1.2.2.2. Khó khăn .11

CHƯƠNG 2. MÔI TRƯỜNG MATLAB. 12

2.1. GIAO DIỆN VÀ CÁC THÀNH PHẦN CƠBẢN CỦA MATLAB . 13

2.1. LỆNH TRONG MATLAB . 13

2.2. BIẾN TRONG MATLAB . 14

2.2.1. Sửdụng biến trong Matlab.14

2.2.2 Nhập (Import) và xuất (Export).15

2.3. MA TRẬN TRONG MATLAB . 16

2.3.1. Ma trận (matrix), vectơ(vector) và vô hướng (scalar) .16

2.3.2. Một sốma trận, vector đặc biệt .16

2.3.3. Các phép toán với vô hướng.17

2.3.4. Các phép toán với vector.17

2.3.5. Các phép toán với ma trận.18

2.4. CÁC HÀM THÔNG DỤNG TRONG MATLAB. 19

2.4.1. Một sốhàm toán học thông dụng .19

2.4.2. Một sốhàm vector.20

2.4.3. Một sốhàm xửlí âm thanh.20

2.4.4. Các phép toán sốphức .21

2.5. LẬP TRÌNH MATLAB. 22

2.5.1. Chương trình nguồn (m-file), hàm và script.22

2.5.2. Các cấu trúc điều khiển .23

2.5.2.1. Lệnh gán .23

2.5.2.2. Lệnh rẽnhánh.24

2.5.2.3. Lệnh lặp.25

2.5.3 Biểu thức logic .26

2.5.3.1 Các phép toán quan hệ.26

2.5.3.2. Các phép toán logic .27

2.5.3.3. Một sốhàm quan hệvà logic .27

CHƯƠNG 3. TRÍCH CHỌN ĐẶC TRƯNG TÍN HIỆU TIẾNG NÓI. 29

3.1. TRÍCH CHỌN ĐẶC TRƯNG MFCC. 29

3.1.1. Sơ đồkhối của quá trình tính MFCC .30

3.1.2. Chia khung và cửa sổhoá.30

3.1.3. Biến đổi Fourier rời rạc .30

3.1.4. Lọc qua các bộlọc mel-scale .31

3.1.5. Logarit và biến đổi Fourier ngược.31

3.1.6. Tính toán năng lượng .32

3.1.7. Tính toán đặc trưng delta.32

3.2. TOOLBOX VOICEBOX TRONG MATLAB . 33

CHƯƠNG 4. MẠNG NƠRON NHÂN TẠO. 34

4.1. MÔ HÌNH MẠNG NƠRON . 34

4.1.1. Mô hình một nơron perceptron.34

4.1.2. Mô hình mạng nơron MLP.35

4.1.3. Huấn luyện mạng nơron MLP .36

4.1.5. Ưu điểm và nhược điểm của mạng nơron .38

4.2. SỬDỤNG MẠNG NƠRON TRONG NHẬN DẠNG MẪU . 39

4.2.1. Một phương pháp tiếp cận dựa vào xác suất phân lớp .39

4.2.2. Nhược điểm của mạng MLP trong nhận dạng tiếng nói.39

4.2.3. Một sốphương pháp tiếp cận khác.39

4.3. MẠNG NƠRON TRÊN MÔI TRƯỜNG MATLAB . 40

4.3.1. Khởi tạo mạng MLP.40

4.3.2. Huấn luyện mạng MLP .40

4.3.3. Sửdụng mạng MLP .41

CHƯƠNG 5. XÂY DỰNG HỆNHẬN DẠNG CHỮSỐTIẾNG VIỆT. 42

5.1. XÂY DỰNG HỆTHỐNG NHẬN DẠNG. 42

5.1.1. Mô tảchung vềhệthống .42

5.1.2. Sơ đồkhối của hệthống .42

5.1.3. Thu thập và tiền xửlí tín hiệu tiếng nói.43

5.1.4. Phân chia bộdữliệu và phân lớp .44

5.1.5. Trích chọn đặc trưng MFCC .44

5.1.6. Tính đầu vào cho mạng .44

5.1.7. Xây dựng và huấn luyện và thửnghiệm mạng .46

5.1.8. Sửdụng mạng trong nhận dạng.46

5.1.9. Giao diện phần mềm demo.47

5.2. KẾT QUẢTHỬNGHIỆM . 48

5.3. HƯỚNG MỞRỘNG CỦA ĐỀTÀI. 50

5.3.1. Xây dựng bộdữliệu huấn luyện lớn hơn .50

3.3.2. Xây dựng phần mềm nhận dạng dựa trên kết quảnghiên cứu.50

5.3.3. Nghiên cứu các phương pháp xác định đặc trưng khác.50

5.3.4. Nghiên cứu các phương pháp nhận dạng khác .51

PHỤLỤC 1. DANH MỤC TÀI LIỆU THAM KHẢO . 52

PHỤLỤC 2. BẢNG CÁC THUẬT NGỮVÀ TỪVIẾT TẮT . 53

pdf53 trang | Chia sẻ: netpro | Lượt xem: 5327 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Tìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ến thường dùng để cung cấp đầu vào, nhận các giá trị trung gian và ghi nhớ kết quả. 15 Biến trong Matlab được đặt tên như quy tắc của ngôn ngữ C: chỉ gồm chữ cái, chữ số, dấu gạch dưới, dài không quá 19 kí tự, phân biệt chữ hoa, chữ thường. Để khai báo và khởi tạo biến, ta dùng lệnh gán. Khi gán biến cho một ma trận, nếu biến chưa tồn tại, Matlab sẽ tạo ra biến mới có kích thước bằng ma trận đó và gán giá trị của ma trận cho biến. Thường ta hay dùng các lệnh x=[]; hay x=zeros(m,n) để khởi tạo biến (Xem thêm phần 2.3.2.về các ma trận đặc biệt để hiểu tác dụng của mỗi lệnh). Ta có thể nhập giá trị trực tiếp cho biến thông qua lệnh gán và hàm input. Để hiện thị giá trị của biến ta gõ lệnh chỉ có tên biến, không có dấu ; ở cuối. 2.2.2 Nhập (Import) và xuất (Export) Toàn bộ các biến đang sử dụng được gọi là không gian làm việc (workspace) của Matlab. Sau khi thoát khỏi Matlab thì chúng bị xoá. Để làm việc với dữ liệu được nhiều lần ta phải ghi (save) và nạp (load) các biến đó. Ngoài ra ta còn có nhu cầu chia xẻ dữ liệu giữa Matlab và các môi trường khác. Matlab cung cấp chức năng Save và Load để thực hiện các yêu cầu này. Matlab ghi các biến (không nhất thiết là toàn bộ không gian làm việc) ra các file có cấu trúc khác nhau: file text ASCII và file nhị phân MAT. Thường chúng ta ghi dưới dạng file nhị phân, trong trường hợp cần trao đổi dữ liệu chúng ta sẽ ghi dưới dạng text. Matlab có khả năng nạp dữ liệu từ nhiều khuôn dạng, ngoài kiểu file text và file MAT, Matlab còn có thể đọc các file ảnh, file âm thanh, file CSDL, file Excel để lấy ra các thông tin cần thiết. Ghi và đọc dữ liệu qua file trong Matlab có thể thực hiện qua 2 lệnh save và load, cũng có thể thực thi bằng chọn menu. Trong trường hợp ta chắc chắn được cấu trúc của file dữ liệu thì nên dùng lệnh cho nhanh, trong trường hợp không rõ (thường xảy ra khi nhập từ file của các môi trường khác) ta nên dùng menu vì máy cần chúng ta cung cấp và xác định cấu trúc file. Cú pháp của lệnh save, load: Save Ghi toàn bộ không gian làm việc vào file .MAT có tên là Save x Ghi biến x vào file .MAT có tên là Save x y z Ghi các biến x,y,z vào file .MAT có tên là Load Đọc các biến trong file .MAT có tên là 16 vào không gian làm việc. Load x Đọc giá trị của biến x từ file .MAT có tên là Load x y z Đọc giá trị các biến x,y,z từ file .MAT có tên là Nếu lệnh Load, Save có tham số -ASCII thì Matlab đọc/ghi file theo cấu trúc text. 2.3. MA TRẬN TRONG MATLAB 2.3.1. Ma trận (matrix), vectơ (vector) và vô hướng (scalar) Trong Matlab một bảng m dòng, n cột gọi là một ma trận m×n. Vector là ma trận một dòng hoặc một cột. Vô hướng là ma trận 1×1 (tương đương với một giá trị). Matlab hỗ trợ các kiểu vô hướng: thực, phức, kí tự. Xâu (chuỗi - string) trong Matlab là một vector có các phần tử kiểu kí tự. Ngoài ma trận 2 chiều như trên, Matlab còn hỗ trợ ma trận nhiều chiều (mỗi phần tử của ma trận khi đó không phải là một vô hướng mà là một vector hay một ma trận). Tuy nhiên tất cả các phần tử của ma trận phải có cùng một kiểu. Do có thể coi vector và vô hướng là các ma trận đặc biệt nên từ đây nếu chỉ nói “ma trận”, ta ngầm hiểu đó có thể là vector, vô hướng. Để cho dễ thấy hơn, trong khoá luận này, tên biến vô hướng thường được viết thường, tên vector, ma trận thường được viết hoa. Kí pháp định nghĩa ma trận trong Matlab là cặp [ ]. Ma trận được mô tả từng dòng một, giữa các dòng cách nhau bởi dấu ; giữa các phần tử trên cùng một dòng cách nhau bởi dấu phân tách như dấu cách, tab... Ví dụ ma trận ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ 887 654 321 được mô tả trong Matlab là [1 2 3; 4 5 6; 7 8 9]. Phần tử dòng i, cột j của ma trận A viết là A(i,j). Nếu chỉ viết A(i) thì Matlab hiểu đó là A(1,i). Còn để xác định vector dòng i của ma trận A thì phải viết là A(i,:); tương tự để xác định vector cột j của A thì viết là A(:,j). Kí hiệu : ở đây hiểu là “tất cả”. 2.3.2. Một số ma trận, vector đặc biệt 17 Viết trong Matlab Ý nghĩa [] Ma trận rỗng eye(n) Ma trận đơn vị cấp n zeros(m,n) Ma trận toàn phần tử 0 cỡ m×n ones(m,n) Ma trận toàn phần tử 1 cỡ m×n a:b Vector các phần tử từ a đến b, độ lệch là 1 hay -1 tuỳ thuộc a lớn hơn hay nhỏ hơn b. Ví dụ 1:5 sinh ra vector [1 2 3 4 5]; 3.6:2 sinh ra vector [3.6 2.6]. a:d:b Vector các phần tử thực từ a đến b, với khoảng chia d. Ví dụ 1:0.5:3.1 sinh ra vector [1.0 1.5 2 2.5 3.0] 2.3.3. Các phép toán với vô hướng Bảng sau mô tả các phép toán thực hiện với 2 giá trị vô hướng. Cột kết quả môt tả cho trường hợp a=3; b=1.2 Viết trong Matlab Ý nghĩa Kết quả a+b Cộng 2 giá trị 4.2 a-b Trừ 2 giá trị 2.8 a*b Nhân 2 giá trị 3.6 a/b Chia 2 giá trị 2.5 a^b Luỹ thừa ab. 3.7372 Thứ tự ưu tiên toán tử trong Matlab giống như các ngôn ngữ lập trình: ưu tiên cao nhất là dấu ngoặc, tiếp đến là phép luỹ thừa rồi nhân chia trước, cộng trừ sau từ trái sang phải. Các phép toán trên (ngoại trừ phép luỹ thừa) còn thực hiện được đối với một ma trận và một vô hướng (vector là trường hợp đặc biệt của ma trận). Khi đó kết quả sẽ là một ma trận cùng cỡ mà mỗi phần tử của ma trận này là kết quả của phép toán giữa vô hướng và phần tử tương ứng của ma trận ban đầu. Ví dụ: nếu gán B=A*3; A là một ma trận cỡ m×n thì B cũng là một ma trận cỡ m×n và B(i,j)=A(i,j)×3. 2.3.4. Các phép toán với vector 18 Các phép toán với vector thực hiện với 2 vector cùng cỡ, kết quả là một vector cùng cỡ, trong đó mỗi phần tử của vector kết quả là kết quả của phép toán giữa 2 phần tử tương ứng của 2 vector ban đầu. Tức là nếu C=A.^B thì C(i)=A(i)^B(i). Trong bảng sau cột kết quả ứng với A=[4 3]; B=[2 1] Viết trong Matlab Ý nghĩa Kết quả A+B Cộng vector [6 4] A-B Trừ vector [2 2] A.*B Nhân vector [8 3] A./B Chia vector [2.0 3.0] A.^B Luỹ thừa [16 3] Ngoài ra ta còn thực hiện được các phép toán đó giữa một vector và một vô hướng (như đã trình bày ở phần về các phép toán với vô hướng). 2.3.5. Các phép toán với ma trận Với 2 ma trận cùng cỡ, ta có thể thực hiện các phép toán như các phép toán với vector ở trên (kết quả cũng là một ma trận cùng cỡ, mỗi phần tử là kết quả của phép toán với 2 phần tử tương ứng). Viết trong Matlab Ý nghĩa A+B A-B A.*B A./B A.^B Cộng, trừ, nhân, chia, lấy luỹ thừa 2 ma trận cùng kích thước như phép toán vector. Ngoài ra ta còn thực hiện được các phép toán đó giữa một ma trận và một vô hướng (như đã trình bày ở phần về các phép toán với vô hướng).. Matlab còn có các phép toán sau đối với các ma trận: Viết trong Matlab Ý nghĩa A*B Nhân 2 ma trận A(m,n) và B(n,p), được ma trận C(m,p) mà các phần tử xác định bởi: 19 ∑ = = n 1k )j,k(B*)k,i(A)j,i(C A*B’ Tích vô hướng 2 vector dòng A,B có cùng số phần tử. A’ Ma trận chuyển vị của A. Nếu gán B=A’ và A cỡ m×n thì B có cỡ n×m và B(i,j)=A(j,i). A(i,:) Vector dòng i. A(:,j) Vector cột j. A(x,y) Trích ma trận con: x,y là 2 vector mô tả chỉ số dòng và cột. A(x,y) là ma trận con trong đó các phần tử là các phần tử của A có chỉ số dòng và cột mô tả trong x và y. Tức là nếu gán B=A(x,y) thì B(i,j)=A(x(i),y(j)). Có thể dùng thêm kí hiệu : để lấy toàn bộ dòng hoặc cột. reshape(A,m,n) Định dạng lại ma trận A thành ma trận m dòng, n cột rot90(A,k) Quay ma trận A 90o, ngược chiều kim đồng hồ k lần. A^k Luỹ thừa ma trận: tính ma trận Ak (nhân A k lần), chỉ áp dụng với ma trận vuông. inv(A) Cho ma trận nghịch đảo của A. Chỉ áp dụng với ma trận vuông triu(A),tril(A) Cho ma trận tam giác trên/dưới của A. 2.4. CÁC HÀM THÔNG DỤNG TRONG MATLAB 2.4.1. Một số hàm toán học thông dụng Matlab có các hàm toán học thông dụng như lượng giác, logarit... để tính toán. Đối số của hàm là vô hướng hoặc ma trận (vector là trường hợp đặc biệt của ma trận). Nếu đối số là ma trận thì kết quả là một ma trận cùng cỡ mà mỗi phần tử của ma trận này có giá trị tương ứng với các phần tử ma trận đã cho. Viết trong Matlab Ý nghĩa abs(x) Cho giá trị tuyệt đối của x. Nếu x là số phức thì cho môđun của x. sqrt(x) Căn bậc 2. Nếu muốn lấy căn bậc n thì viết x.^(1/n) 20 round(x), fix(x), floor(x), ceil(x) Cho kết quả là số nguyên tương ứng: gần x, gần 0, gần -∞ và gần +∞ nhất. rem(x,y) Cho phần dư của phép chia x/y, tức là x mod y. x div y chính là floor(x/y) exp(x) ex. log(x), log10(x) lnx, lgx (tương ứng). sin(x), cos(x), tan(x) Các hàm lượng giác sin, cos, tg. x lấy đơn vị radian. asin(x), acos(x), atan(x) Các hàm lượng giác arcsin, arccos, arctang atan2(x,y) Cho arctg của y/x trong khoảng -π đến π, tuỳ thuộc vào dấu của x,y 2.4.2. Một số hàm vector Các hàm sau thực hiện cho vector, nếu đối số là ma trận thì kết quả là vector mà mỗi phần tử tính toán tương ứng với các cột của ma trận. Viết trong Matlab Ý nghĩa sum(X) Tính tổng các phần tử của vector X. mean(X) Tính trung bình cộng các phần tử của vector X. [xm id] =max(X); [xm id] =min(X); Tìm phần tử lớn nhất/nhỏ nhất của X. xm là giá trị, id là chỉ số. norm(X, p) Tính chuẩn bậc p của ma trận hay vector X, mặc định là bậc 2. length(X) Cho số phần tử của X. [m n]= size(A) Cho kích thước ma trận A. 2.4.3. Một số hàm xử lí âm thanh Matlab có một số hàm xử lí âm thanh sau: Viết trong Matlab Ý nghĩa [y fs]=wavread(wavfile) Đọc tín hiệu âm thanh từ file wav cho bởi xâu wavfile, y là vector mô tả tín hiệu âm thanh 21 (có giá trị thực từ 0 đến 1), fs là tần số lấy mẫu (giá trị nguyên) wavwrite(y,fs,wavfile ) Ghi tín hiệu âm thanh từ file wav cho bởi xâu wavfile, y là vector mô tả tín hiệu âm thanh, fs là tần số lấy mẫu. sound(y) Phát âm thanh ra loa, y là vector mô tả tín hiệu âm thanh. y=wavrecord(n, fs) Ghi âm (từ micro) với tần số lấy mẫu fs và n mẫu. Kết quả là vector y. Đoạn lệnh sau ghi âm trong 2 giây với tần số lấy mẫu 8kHz, phát lại rồi ghi vào file: y=wavrecord(16000,8000); sound(y); wavwrite(y,8000,‘temp.wav’); 2.4.4. Các phép toán số phức Khác với các ngôn ngữ lập trình thông dụng, Matlab cho phép tính toán trực tiếp với số phức. Ngoài các phép toán thông thường giống số thực như cộng, trừ, nhân, chia, với số phức còn có một số phép toán và hàm sau. Cột kết quả viết ví dụ đối với x=a+bi. Viết trong Matlab Ý nghĩa Kết quả real(x) Phần thực a imag(x) Phần ảo b conj(x) Số phức liên hợp a-bi abs(x) môđun 22 ba + angle(x) argument arctg(b/a) i,j Kí hiệu đơn bị ảo. 1− Cách viết phép toán và gọi hàm với số thực và số phức hoàn toàn giống nhau. Các phép toán hay hàm nào thực hiện được với số phức cho kết quả là số phức tương ứng. 22 2.5. LẬP TRÌNH MATLAB 2.5.1. Chương trình nguồn (m-file), hàm và script Matlab hỗ trợ 2 chế độ hoạt động: hoạt động theo giao diện dòng lệnh hoặc theo chương trình. Giao diện dòng lệnh cho phép người dùng gõ lệnh và máy hiển thị kết quả trong cửa sổ lệnh (có thể tham khảo một số lệnh ở phần 1.3). Tuy nhiên để nâng cao hiệu qủa sử dụng Matlab thì phải lập trình. Chương trình trong Matlab có 2 dạng: script (kịch bản) hoặc function (hàm). Chương trình nguồn Matlab được lưu vào các file text có phần mở rộng là .m ( gọi là các m-file) và tên chương trình được xác định qua tên file. Script và function đều là dãy các lệnh Matlab. Có một khác biệt cơ bản: hàm có thể nhận đối số và trả lại kết quả, còn script thì không. Khi gõ lệnh chứa tên hàm hay kịch bản, máy sẽ thực thi dãy các lệnh tương ứng trong chương trình nguồn như là chúng được gõ trong cửa sổ lệnh (nếu là lệnh gọi hàm thì còn thêm các thao tác truyền tham số vào-ra, tạo và huỷ biến địa phương…) Sau đây là ví dụ về hàm dtcv, được lưu trong chương trình nguồn đặt tên là dtcv.m, thực hiện tính toán diện tích và chu vi hình chữ nhật với tham số vào là 2 cạnh a,b. function [s, p] = dtcv(a,b) % Ham tinh dien tich va chu vi hinh chu nhat s=a*b; p = 2*(a+b); Các quy tắc viết hàm: 1. Hàm phải được bắt đầu bằng từ khoá function, sau đó lần lượt là tham số đầu ra, dấu =, tên hàm, dấu (, các đối số (tham số đầu vào) và dấu ). Nếu có nhiều tham số đầu vào thì chúng phải viết cách nhau bằng dấu , Nếu có nhiều tham số đầu ra thì chúng cũng phải viết cách nhau bằng dấu , và có cặp dấu [ ] bao ngoài. 2. Chú thích trong Matlab là chú thích trên dòng. Bắt đầu bằng kí tự %, sau đó cho đến hết dòng là nội dung chú thích. Nếu chú thích viết ngay sau khai báo hàm thì khi dùng lệnh help <tên hàm>, nội dung phần chú thích đó sẽ được Matlab hiển thị. 3. Các kết quả của hàm được xác định qua các tham số đầu ra. Vì vậy trong thân hàm phải có các dòng lệnh gán giá trị cho chúng. 23 4. Ngoại trừ các tham số vào/ra, tất cả các biến bên trong hàm đều là biến địa phương. Chúng được tạo khi có lệnh gán đầu tiên và bị xóa sau khi kết thúc hàm. Ngược lại, biến trong script thì luôn là biến toàn cục. 5. Lời gọi hàm: Lệnh gọi hàm có dạng như khai báo hàm, chỉ khác là không được có dấu ; giữa các tham số đầu ra. []=(các tham số đầu vào) Tuy nhiên Matlab cho phép số tham số đầu vào, đầu ra ít hơn số tham số hình thức. Người lập trình cần dùng 2 hàm nargin và nargout để xác định số đầu vào, đầu ra thực sự trong lời gọi hàm (chú ý: . Chẳng hạn ta có thể dùng lời gọi hàm sau để tính diện tích và chu vi hình chữ nhật kích thước 4×3: [dt cv] = dtvc(4,3) Nếu chỉ quan tâm đến diện tích ta có thể gọi: dt = dtvc(4,3) Tuy nhiên trình tự truyền tham số của hàm trong Matlab là từ trái sang, vì vậy nếu chỉ cần kết quả là chu vi, không quan tâm đến diện tích ta vẫn phải gọi hàm như câu lệnh đầu tiên, không thể dùng câu lệnh sau: cv = dtvc(4,3) Vì nếu gọi như vậy, cv sẽ bị gán giá trị 12 của diện tích. So sánh với các ngôn ngữ khác chúng ta có một số nhận xét: • Matlab cho phép hàm trả lại nhiều kết quả. • Matlab cho phép số tham số thực sự ít hơn số tham số hình thức. • Matlab không xác định kiểu của tham số hình thức và kiểm tra kiểu của tham số thực sự. Người lập trình phải tự xác định lấy. 2.5.2. Các cấu trúc điều khiển Các cấu trúc điều khiển của Matlab nhìn chung giống Pascal, ngoại trừ đặc điểm là không có cấu trúc khối begin end nên thường các cấu trúc điều khiển trong Matlab cho phép có nhiều câu lệnh con và kết thúc bằng end. 2.5.2.1. Lệnh gán Lệnh gán trong Matlab là dấu =, có dạng: = 24 Khi thực hiện lệnh gán, nếu chưa tồn tại thì Matlab sẽ tạo ra biến có kiểu và kích thước trùng với , sau đó gán giá trị của cho biến. Ở đây: có thể là: kí pháp định nghĩa ma trận, lời gọi hàm, biến, phép toán với các biểu thức khác... 2.5.2.2. Lệnh rẽ nhánh Matlab có một số lệnh rẽ nhánh sau: 1/ Lệnh if đơn Cú pháp: if end; Thực thi: Lệnh này kiểm tra giá trị của , nếu kết quả là đúng (khác 0) thì thực hiện . 2/ Lệnh if else Cú pháp: if else end; Thực thi: Lệnh này kiểm tra giá trị của , nếu kết quả là đúng (khác 0) thì thực hiện , ngược lại thì thực hiện <nhóm lệnh 2>. 3/ Lệnh if elseif Cú pháp if elseif 25 end; Thực thi: Dùng elseif thì tương tự như dùng else sau đó có một câu lệnh if: if else if end; end; Tuy nhiên dùng elseif thì chương trình sáng sủa hơn, không phải thêm các từ khoá end ở cuối. 2.5.2.3. Lệnh lặp Matlab có 2 loại lệnh lặp: lệnh for và lệnh while. 1/ Lệnh for Cú pháp: for = end; Trong đó là một biến, là vector, ma trận hoặc giá trị vô hướng. Quy tắc sử dụng: • Nếu là ma trận rỗng thì vòng for không thực hiện. • Nếu là giá trị vô hướng (ma trận 1x1) thì được gán bằng giá trị vô hướng đó và thực hiện đúng một lần. • Nếu là một vector (ma trận nx1 hoặc 1xn) thì <nhóm lệnh> thực hiện n lần, mỗi lần nhận một phần tử của vector (từ trái sang phải). 26 • Nếu là một ma trận (ma trận mxn) thì thực hiện m lần, mỗi lần nhận một vector cột của ma trận (từ trái sang phải). 2/ Lệnh while Cú pháp: while end; Thực thi: • Nếu đúng thì thực hiện . • Thực hiện xong lại quay lại kiểm tra và thực hiện <nhóm lệnh> cho đến khi nhóm lệnh sai. • Trong vòng lặp for, while có thể sử dụng lệnh break để ngắt. Khi gặp lệnh break Matlab sẽ kết thúc vòng lặp ngay lập tức. 2.5.3 Biểu thức logic Như ở mục trên ta thấy trong các cấu trúc điều khiển, ta luôn cần các biểu thức logic. Trong Matlab giá trị 0 được coi là sai (false) còn mọi giá trị khác 0 được coi là đúng (true) (giống như trong C). Ở các ngôn ngữ lập trình thông thường ta chỉ gặp các biểu thức logic có giá trị là một vô hướng (chỉ là đúng/sai), nhưng trong Matlab thì biểu thức logic có giá trị là một ma trận (mà giá trị vô hướng là một trường hợp đặc biệt: ma trận 1×1). 2.5.3.1 Các phép toán quan hệ Matlab có các phép toán quan hệ sau với 2 ma trận cùng cỡ: Toán tử Ý nghĩa Ví dụ cách viết < Nhỏ hơn A<B <= Nhỏ hơn hoặc bằng A(1,2)<B(3,4) > Lớn hơn A>3 >= Lớn hơn hoặc bằng == Bằng nhau (chú ý: khác với dấu = là toán tử 27 gán; == là toán tử so sánh). ~= Khác nhau Phép so sánh ma trận với vô hướng có kết quả là một ma trận cùng cỡ, trong đó mỗi phần tử của ma trận này là kết qủa so sánh tương ứng phần tử của ma trận với vô hướng: là 1 nếu đúng, là 0 nếu sai. Ví dụ: nếu viết lệnh C=A>3; trong đó A,C là các ma trận mxn thì c cũng là một ma trận mxn, C(i,j)=1 nếu A(i,j)>3 và bằng 0 trong trường hợp ngược lại. Phép so sánh 2 ma trận cùng cỡ (2 giá trị vô hướng là 2 ma trận 1x1) có kết quả là một ma trận cùng cỡ, trong đó mỗi phần tử là kết qủa so sánh tương ứng 2 phần tử của 2 ma trận: là 1 nếu đúng, là 0 nếu sai. Ví dụ: nếu viết lệnh C=A>B; trong đó A,B là các ma trận mxn thì C cũng là một ma trận mxn, C(i,j)=1 nếu A(i,j)>B(i,j) và bằng 0 trong trường hợp ngược lại. 2.5.3.2. Các phép toán logic Phép toán logic trong Matlab hợp lệ nếu kết hợp 2 trận cùng kích thước chỉ toàn các phần tử 0 và 1. Kết quả của phép toán logic là một ma trận cùng kích thước mà mỗi phần tử là kết quả phép toán logic tương ứng của từng phần tử 2 ma trận ban đầu. Toán tử Ý nghĩa Ví dụ cách viết & Phép and logic a>=0 & a<=3 | Phép or logic a>b | a<c ~ Phép not logic ~(a>=0 & a<=3) Bảng kết quả phép toán logic (đối với vô hướng) a b ~a a|b a&b false false true false false false true true true false true false false true false true true false true true 2.5.3.3. Một số hàm quan hệ và logic 28 Matlab hỗ trợ nhiều hàm cho giá trị logic. Sau đây là một số hàm: Lời gọi hàm Ý nghĩa any(x) Chỉ cho giá trị true (1) nếu tồn tại một phần tử của x khác 0 all(x) Chỉ cho giá trị true (1) nếu tất cả các phần tử của x khác 0. isempty(x) Trả lại true (1) nếu x là ma trận rỗng. isstr(x) Trả lại true (1) nếu x là một xâu (ma trận kí tự). find(x) Kết quả là một vector cột chứa chỉ số các phần tử khác 0 của x. Nếu x là một ma trận thì 29 CHƯƠNG 3. TRÍCH CHỌN ĐẶC TRƯNG TÍN HIỆU TIẾNG NÓI Quá trình nhận dạng mẫu (cả ở pha huấn luyện hay pha nhận dạng) đều trải qua bước giai đoạn là trích chọn đặc trưng (feature extraction). Bước này thực hiện các phân tích phổ (spectral analysis) nhằm xác định các thông tin quan trọng, đặc trưng, ổn định của tín hiệu tiếng nói, tối thiểu hoá ảnh hưởng của nhiễu; xúc cảm, trạng thái, cách phát âm của người nói; giảm khối lượng dữ liệu cần xử lí... Mặc dù không mang tính quyết định nhưng giai đoạn trích chọn đặc trưng ảnh hưởng rất lớn đến hiệu năng nhận dạng. Vì vậy việc lựa chọn đặc trưng cho tín hiệu tiếng nói rất quan trọng. Có nhiều phương pháp trích chọn đặc trưng đã và đang được sử dụng (FBA, MFCC, LPC, PLP...). Mỗi phương pháp có những ưu điểm và nhược điểm riêng. Hiện nay MFCC (Mel-scale Frequency Cepstral Coefficient) được sử dụng phổ biến nhất. Vì vậy chúng tôi sử dụng MFCC làm đặc trưng của hệ nhận dạng được trình bày trong khoá luận này. Nội dung tiếp theo của chương này trình bày về phương pháp tính đặc trưng MFCC và toolbox VoiceBox của Matlab dùng trong xử lí tiếng nói. 3.1. TRÍCH CHỌN ĐẶC TRƯNG MFCC Các hệ nhận dạng tiếng nói thường tách đặc trưng từ tín hiệu bằng cách: chia tín hiệu thành các đoạn độ dài 5-15 ms, mỗi đoạn gọi là một khung (frame). Trong khoảng thời gian ngắn như vậy, phổ của tín hiệu đủ ổn định để tiến hành tách đặc trưng. Mỗi frame sẽ cho đặc trưng là một vector và đặc trưng của toàn bộ tín hiệu sẽ là một dãy vector. MFCC là phương pháp trích đặc trưng dựa trên đặc điểm cảm thụ tần số âm của tai người: tuyến tính đối với tần số nhỏ hơn 1kHz và phi tuyến đối với tần số trên 1kHz (theo thang tần số mel, không phải theo Hz). MFCC là phương pháp tách đặc trưng dựa trên sự cảm thụ của con người nên thường cho kết quả nhận dạng cao nhất (theo [12]). Vì lẽ đó rất nhiều hệ thống nhận dạng tiếng nói sử dụng MFCC làm đặc trưng. 30 3.1.1. Sơ đồ khối của quá trình tính MFCC Đối với phương pháp MFCC, việc tính đặc trưng có sơ đồ như sau: Tín hiệu tiếng nói Phân khung và cửa sổ hoá Biến đổi Fourier Lọc qua bộ lọc mel-scale Lấy logarit Biến đổi Fourier ngược MFCC Lấy đạo hàm rời rạc M FC C Delta MFCC Tính toán năng lượng Năng lượng Minh hoạ: Sơ đồ khối của quá trình trích chọn đặc trưng MFCC Quá trình tính toán như sau: đầu tiên tín hiệu tiếng nói được chia thành các frame có độ dài 10ms. Mỗi frame sẽ được nhân với một hàm cửa sổ, thường là cửa sổ Hamming sau đó được chuyển sang miền tần số nhờ biến đổi Fourier. Tín hiệu ở miền tần số được nhân với các bộ lọc mel-scale, lấy logarit rồi biến đổi Fourier ngược (để chuyển sang miền cepstral) sẽ được các hệ số MFCC. Một số hệ thống có tính thêm năng lượng (cũng lấy logarit) và đặc trưng delta (đạo hàm rời rạc theo thời gian của MFCC) nhằm thêm thông tin cho các pha sau của quá trình nhận dạng. Các mục sau trình bày từng bước quá trình tính toán đặc trưng MFCC. 3.1.2. Chia khung và cửa sổ hoá Tín hiệu tiếng nói x[n] gồm L mẫu được sau khi được chia thành các khung độ rộng 10ms (ứng với fs*0.01 mẫu) sẽ được cửa sổ hoá bằng cách nhân tín hiệu với môt hàm cửa sổ độ rộng N. 1N..0n);n(w*)n(x)n(x t −== Hàm cửa sổ thường được dùng là hàm cửa sổ Hamming: 1-0..Nn ; ) N n2cos(46.054.0)n(w =π×−= 3.1.3. Biến đổi Fourier rời rạc Tín hiệu (của một frame) sau khi nhân với hàm cửa sổ, được chuyển sang miền tần số bằng biến đổi Fourier rời rạc: 31 1N..0k;e).n(x)k(X 1N 0n N kn2i −==∑− = π − 3.1.4. Lọc qua các bộ lọc mel-scale Các bộ lọc mel-scale là các bộ lọc tam giác, đặt cách đều nhau trong miền tần số nhỏ hơn 1kHz và khoảng cách tăng theo hàm mũ trong miền từ 1kHz đến fs/2 (một nửa của tần số lấy mẫu). Minh hoạ: Các bộ lọc mel-scale tam giác (triangle mel-scale filters) Với M bộ lọc đó, ta hoàn toàn xác định được hệ số nhân hi(k) của mỗi bộ lọc. Kết quả lọc đối với tín hiệu ở miền tần số qua các bộ lọc được tính như sau: M..1i|;)k(X|.)k(h)i(F 1N 0k i ==∑− = Chú ý: X(k) là số phức nhưng thông tin về pha của X(k) không quan trọng nên ta chỉ tính kết quả lọc với modun của X(k). Việc nhân tín hiệu ở miền tần sốvới các bộ lọc mel-scale để chuyển biểu diễn miền tần số từ thang Hz sang thang mel. Mục đích là phân giải tần số (frequency resolution) theo đặc điểm cảm thụ âm của con người: tuyến tính trong miền dưới 1kHz và phi tuyến trong miền trên 1kHz. 3.1.5. Logarit và biến đổi Fourier ngược Lấy logarit của tín hiệu ở miền tần số (spectrum) rồi biến đổi Fourier ngược sẽ đưa tín hiệu về một miền gọi là cepstrum có đơn vị thời gian (thuật ngữ là cepstrum đảo ngược của âm đầu tiên trong từ spectrum: spectrum → cepstrum). Biến đổi từ spectrum sang cepstrum là một biến đổi đồng hình 32 (homomorphic). Theo [9] biến đổi đồng hình chuyển biểu diễn tín hiệu từ dạng tích về dạng tổng, như vậy cho phép sử dụng các hệ tuyến tính để xử lí các tín hiệu không tuyến tính. Công thức tính của bước này là: ∑ = = −π = M 1k p..1n); M2 )1k(n2icos()).k(Flog()n(c Chú ý: mặc dù biến đổi từ spectrum sang cepstrum là biến đổi Fourier ngược, tuy nhiên do ta dùng spectrum và cepstrum thực nên chỉ sử dụng biến đổi cosine rời rạc (DCT) để tăng hiệu năng tính toán. Sau bước này ta được vector cepstral (ở độ đo mel) p thành phần. Thông thường người ta thường nhân thêm vào kết quả một hàm cửa sổ sóng sin (gọi là thủ tục liftering) để giảm bớt ảnh hưởng của các biến đổi đến kết quả. )n(w).n(c)n(c ) L nsin(. 2 L1)n(w = π += 3.1.6. Tính toán năng lượng Kèm thêm thông tin về năng lượng của tín hiệu sẽ tăng thêm thông tin cho nhận dạng (ví dụ: phân biệt các khoảng chứa tín hiệu âm và khoảng lặng, phân biệt vùng tín hiệu chứa nguyên âm và phụ âm…) Năng lượng của cả frame được tính qua công thức: ∑− = = 1N 0n 2))n(x(E 3.1.7. Tính toán đặc trưng delta Đặc trưng delta là đạo hàm bậc nhất (rời rạc) của đặc trưng theo thời gian. Có các đặc trưng delta sẽ tăng thêm thông tin cho nhận dạng (chẳng hạn: xác định các vùng mà phổ tín hiệu ổn định…). Đặc trưng delta

Các file đính kèm theo tài liệu này:

  • pdfTìm hiểu một số phương pháp nhận dạng tiếng nói và xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt bằng mạng nơron trên môi trường Matlab.pdf