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
53 trang |
Chia sẻ: netpro | Lượt xem: 5417 | Lượt tải: 1
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:
- 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.pdf