Viện công nghệ thông tin
Báo cáo tổng kết khoa học và công nghệ
đề tài nhánh
tổng hợp và nhận dạng
tiếng Việt
thuộc đề tài cấp nhà nớc
nghiên cứu phát triển côngnghệ nhận dạng, tổng hợp
và xử lý ngôn ngữ tiếng việt
Mã số: KC 01.03
Chủ nhiệm đề tài: gs.tskh . bạch hng khang
6455-2
07/8/2007
Hà Nội- 2004
MỤC LỤC
1. PHƯƠNG PHÁP PHÂN TÍCH TIẾNG NÓI THEO CÁC ĐẶC TRƯNG 1
1.1. Các phương pháp trích chọn đặc tính 1
1.1.1. Phương pháp tính hệ số MFCC 1
1.1.2. Phương pháp tính hệ số PLP 4
1.1.3. Các kĩ thuật khử nhiễu 6
1.2. Các đơn vị xử lý tiếng nói 7
1.2.1. Tần số lấy mẫu 7
1.2.2. Nhiễu 7
1.2.3. Tần số cơ bản 8
1.2.4. Formant 8
1.3. Định dạng âm thanh 9
1.4. Thu tín hiệu âm thanh trong thời gian thực 11
1.5. Xác định giá trị hằng – ngưỡng theo môi trường tín hiệu 12
1.5.1. Thông số ngưỡng zero 12
1.5.2. Thông số độ ồn nhiễu 13
1.6. Lọc nhiễu 13
1.7. Xác định dãy tín hiệu số có chứa dữ liệu tiếng nói và xác định các điểm đầu
- cuối của tiếng nói 14
1.8. Chuẩn hoá biên độ 15
1.8.1. Biến đổi FFT 16
1.8.2. Làm rõ tín hiệu và cửa sổ hoá 19
1.8.3. Định lý lấy mẫu 20
1.8.4. Phổ dẹt của tiếng nói 20
1.8.5. Biểu diễn tiếng nói theo mô hình LPC và các hệ số dự báo tuyến tính 22
2. CÁC MÔ HÌNH ỨNG DỤNG CHO NHẬN DẠNG TIẾNG NÓI 28
2.1. Phương pháp VQ 28
2.1.1. Khái niệm phép lượng tử hoá 28
2.1.2. Độ biến dạng 29
2.1.3. Tính chất 29
2.1.4. Thiết kế codebook theo phương pháp LBG 30
2.1.5. Ứng dụng VQ trong xử lý tín hiệu tiếng nói 33
2.2. Phương pháp căn chỉnh thời gian động 34
2.2.1. Khái quát về tiếp cận đối sánh mẫu và kĩ thuật căn chỉnh thời gian động 34
2.2.2. Kĩ thuật căn chỉnh thời gian động 36
2.2.3. Các ràng buộc 41
2.2.4. Thuật toán căn chỉnh thời gian động 46
2.3. Mô hình Markov ẩn 52
2.3.1. Quá trình Markov 52
2.3.2. Mô hình Markov ẩn 54
2.3.3. Ba bài toán cơ bản của mô hình Markov ẩn 57
2.3.4. Các loại mô hình Markov ẩn 67
2.3.5. Giới hạn của mô hình Markov ẩn 69
2.4. Mạng Nơron 69
2.4.1. Các khả năng của mạng nơron 69
2.4.2. Cấu trúc mạng nơron nhân tạo 70
2.4.3. Phân loại mạng nơron 73
2.4.4. Ứng dụng mạng nơ ron lan truyền ngược cho nhận dạng tiếng nói 73
3. HUẤN LUYỆN VÀ NHẬN DẠNG TIẾNG NÓI 75
3.1. Huấn luyện và nhận dạng theo mô hình Markov 75
3.1.1. Giới thiệu về HTK 75
3.1.2. Huấn luyện hệ thống nhận dạng 75
3.1.3. Nhận dạng 91
3.1.4. Tổng kết 95
3.2. Mô hình lai ghép ANN/HMM 98
3.2.1. Hệ thống nhận dạng dùng HMM liên tục 98
3.2.2. Huấn luyện hệ thống nhận dạng dùng ANN 102
3.2.3. Hệ thống nhận dạng dùng HMM/ANN 103
3.2.4. Nhận dạng 106
3.3. So sánh hai phương pháp nhận dạng CD-HMM và HMM/ANN 110
4. MÔI TRƯỜNG TÍN HIỆU TIẾNG NÓI TRÊN ĐIỆN THOẠI 118
4.1. Giới thiệu về card Dialogic 118
4.2. Các khái niệm cơ bản 119
4.2.1. Event 119
4.2.2. Event Handlers 121
4.2.3. Dialogic device handle 122
4.2.4. Kênh (device channel) 122
4.3. Các mô hình lập trình 122
4.3.1. Lập trình đồng bộ 123
4.3.2. Lập trình bất đồng bộ 124
4.3.3. Mô hình bất đồng bộ mở rộng 128
4.3.4. Các mô hình kết hợp 129
4.4. Sơ lược về các hàm và cấu trúc dữ liệu trong SRL 130
4.4.1. Các hàm quản lý sự kiện 130
4.4.2. Các hàm thuộc tính chuẩn 137
4.4.3. Termination Parameter Table DV_TPT 139
4.4.4. Call status event block structure: DX_EBLK 141
4.4.5. User digit buffer:DV_DIGIT 142
4.4.6. Thư viện âm thanh của C (Voice library of C functions) 142
4.4.7. Chi tiết một số hàm đã được đề cập 145
5. TÍCH HỢP MODULE TỔNG HỢP TIẾNG VIỆT VÀ CÁC CHUẨN TÍCH
HỢP TIẾNG NÓI 149
5.1. Hệ thống thông điệp tích hợp (Unified Message System) 149
5.2. Cổng thoại 3i 154
5.2.1. Điều khiển voice menu – Callflow 154
5.2.2. Xử lý đồng thời nhiều cuộc gọi 155
5.2.3. Phát tiếng nói trên điện thoại 155
5.2.4. Lập trình tích hợp card Dialogic vào ứng dụng 157
5.2.5. Một số thuật ngữ 158
5.2.6. Tích hợp điện thoại và máy tính 159
6. CƠ SỞ DỮ LIỆU NGỮ ÂM CHO NHẬN DẠNG VÀ TỔNG HỢP TIẾNG
VIỆT 163
6.1. Giới thiệu 163
6.2. Ghi âm cho CSDL 164
6.3. Dữ liệu cho nhận dạng tiếng Việt 166
6.3.1. Nhận dạng lệnh 166
6.3.2. Nhận dạng chính tả 170
6.4. Dữ liệu tiếng nói cho phân tích và nhận dạng thanh điệu 182
6.4.1. Thanh điệu tiếng Việt trong câu 182
6.4.2. Xác định đường nét đặc trưng của thanh điệu 186
6.4.3. Xác định ảnh hưởng của thanh điệu do ngữ cảnh 186
6.5. Dữ liệu tiếng nói cho tổng hợp 188
6.5.1. Xác định đơn vị âm cho tổng hợp tiếng Việt 189
6.5.2. Hiện tượng liên cấu âm giữa âm tiết tiếng Việt 191
6.6.
Kết luận 191
7. TỔNG HỢP TIẾNG VIỆT 192
7.1. Nhập môn 192
7.2. Khái quát về tổng hợp tiếng nói từ văn bản TTS (Text To Speech) 194
7.2.1. Các loại âm 195
7.2.2. Các tham số âm thanh 196
7.2.3. Nhắc lại các khái niệm ngữ âm 196
7.2.4. Tổng hợp tiếng nói từ văn bản 198
7.3. Các phương pháp tổng hợp tiếng nói 200
7.3.1. Tổng hợp theo cấu âm 200
7.3.2. Tổng hợp formant theo quy luật 202
7.3.3. Tổng hợp xích chuỗi 204
7.4. Chuẩn hoá văn bản 218
7.5. Phân tích văn bản 222
7.6. Các mô hình ngôn ngữ 226
8. PHÂN TÍCH ĐẶC TRƯNG ÂM HỌC VÀ ÂM VỊ HỌC CỦA TIẾNG NÓI
233
8.1. Đặc trưng âm học của tiếng nói 233
8.1.1. Bản chất của âm 233
8.1.2. Các thuộc tính biên độ cơ bản của sóng âm 236
8.1.3. Các thuộc tính trường thời gian của các sóng âm 241
8.1.4. Các thuộc tính trường tần số của các sóng âm 243
8.1.5. Một số thuộc tính thẩm nhận cơ bản của sóng âm 249
8.1.6. Mô hình âm học của quá trình phát âm lời nói 253
8.1.7. Bộ lọc bộ máy phát âm trong quá trình sản sinh nguyên âm 254
8.1.8. Những thuộc tính âm học của chất lượng nguyên âm 265
8.2. Các đặc trưng âm vị học của tiếng nói 275
8.2.1. Phân tích tiếng nói thành các đơn vị cơ bản 275
8.2.2. Các nét khu biệt ngôn điệu và cố hữu 291
8.2.3. Các đặc trưng khu biệt so với các đặc trưng khác của âm 292
8.2.4. Ranh giới âm vị 294
8.2.5. Đột dừng đối lập với không đột dừng 294
8.2.6. Giọng the thé đối lập với giọng dịu 295
8.2.7. Nguồn bổ sung - Hữu thanh đối lập với vô thanh 299
8.2.8. Các nét vang 300
8.2.9. Các nét thanh tính 303
8.2.10. Dẹt đối lập với bằng phẳng 305
8.2.11. Điếc đối lập với bằng phẳng 306
9. ĐẶC ĐIỂM NGỮ ÂM CƠ BẢN TIẾNG VIỆT 242
9.1. Âm tiết tiếng Việt 242
9.1.1. Dẫn luận 242
9.1.2. Phương pháp 242
4.1.3. Kết quả 244
4.2. Hệ formant của nguyên âm tiếng Việt 248
4.3. Một số vấn đề về phụ âm tiếng Việt hiện đại 255
4.3.1. Đặt vấn đề 255
4.3.2. Phương pháp 257
4.3.3. Giới hạn 258
4.3.4. Kết quả 258
4.3.5. Kết luận 266
4.4. Các thanh điệu của tiếng Việt 269
TÀI LIỆU THAM KHẢO 275
Hình 1-1. Các bước xử lý của phương pháp tính toán hệ số MFCC. 2
Hình 1-2. Các bước xử lý của phương pháp tính toán hệ số PLP 5
Error! No bookmark name given.
Hình 1-4. Mô hình phổ dẹt của tiếng nói 21
Hình 1-5. Sơ đồ phân tích tiếng nói 21
Hình 1-6. Sơ đồ bộ xử lý LPC dùng cho trích đặc trưng tiếng nói 22
Hình 2-1. Ví dụ VQ 1 chiều 28
Hình 2-2. Ví dụ VQ 2 chiều 28
Hình 2-3. Sơ đồ khối chung của quá trình huấn luyện và phân lớp tín hiệu tiếng nói
sử dụng VQ 33
Hình 2-4. Đồ thị của chuỗi các vector phổ đã được mã hóa bằng VQ của phát âm từ
8 tiếng Anh. 34
Hình 2-5. Sơ đồ cách tiếp cận đối sánh mẫu 35
Hình 2-6- Các frame lần lượt gối lên nhau. 37
Hình 2-7- So sánh sự khác nhau về thời gian trên từ “speech” 37
Hình 2-8- Lưới minh họa quy hoạch động 39
Hình 2-9- Các ràng buộc điểm đầu cuối (Endpoint Constraints) 42
Hình 2-10- Minh họa về so khớp không đều đặn. 42
Hình 2-11- Minh họa về so khớp không liên tục. 43
Hình 2-12- Các ràng buộc đường đi cục bộ 44
Hình 2-13- Ràng buộc đường đi cục bộ Itakura. 44
Hình 2-14- Các ràng buộc đường đi toàn cục 45
Hình 2-15- Minh họa về căn chỉnh thời gian động giữa mẫu chuẩn “SPEECH” và
mẫu nhận dạng có nhiễu “SsPEEhH” 46
Hình 2-16- Các hướng đi có thể của SDTW 47
Hình 2-17- Ba cách đi có thể từ ô (i, j) đến một ô khác trong DTW phản đối xứng
49
Hình 2-18- Các hướng đi có thể của DTW phản đối xứng 50
Hình 2-19- Đường đi qua vùng hợp lệ 50
Hình 2-20- Xích Markov với 5 trạng thái S
1
, S
2
, , S
5
và các xác suất chuyển trạng
thái 53
Hình 2-21-Ví dụ một mô hình Markov ẩn với sáu trạng thái 56
Hình 2-22- Miêu tả các dãy phép toán được thực hiện để tính biến α
t
(i). 59
Hình 2-23- Miêu tả các dãy phép toán được thực hiện để tính biến β
t
(i) 60
Hình 2-24- Miêu tả các phép tính cần thiết để tính ξ
t
(i, j) 63
Hình 2-25- Mô hình nhiều tầng của mạng nơron 71
Hình 2-26- Các thành phần cơ sở mạng nơron. 71
Hình 3-1- Thuật toán của Hinit 80
Hình 3-2- Các hoạt động của Hnit. 81
Hình 3-3- Mô hình hoạt động của Hcompv 82
Hình 3-4- Sơ đồ buộc hai âm vị sil và sp 83
Hình 3-5- Hoạt động của Herest. 83
Hình 3-6- Dùng Hhed chuyển âm đơn sang âm ba 86
Hình 3-7- Quá trình buộc các âm ba bằng Hhed 87
Hình 3-8- Buộc các trạng thái 88
Hình 3-9- Sơ đồ ngữ pháp của hệ thống nhận dạng mười chữ số liên tục 91
Hình 3-10- Sơ đồ mạng word-loop với các xác suất bigram. 93
Hình 3-11- Cấu trúc ba lớp của mạng từ nhận dạng 94
Hình 3-12- Mô hình mạng lai ghép HMM/ANN 104
Hình 3-13-Huấn luyện mạng lai ghép HMM/ANN 105
Hình 3-14- Sơ đồ mạng word-loop với các xác suất bigram. 107
Hình 3-15- Cấu trúc ba lớp của mạng từ nhận dạng 108
Hình 3-16- Minh họa thuật toán chuyển thẻ bài. 109
Hình 7-1- Giao diện chương trình kiểm tra ETTVSNAM 150
Hình 7-2- Hệ thống thao tác dọc và duyệt thư thoại 155
Hình 7-3- Kiến trúc phân tầng TAPI 160
Hình 5-1. Phổ tiếng nói của câu 164
Hình 5-2. Ảnh phổ của âm tiết kết thúc bằng âm tắc /p/: “hấp tấp” 173
Hình 5-3. Ảnh phổ của âm tiết “bắt” 174
Hình 5-4. Ảnh phổ của hai âm tiết đọc liền nhau 177
1
1. PHƯƠNG PHÁP PHÂN TÍCH TIẾNG NÓI THEO
CÁC ĐẶC TRƯNG
1.1. Các phương pháp trích chọn đặc tính
Phần này sẽ giới thiệu hai phương pháp được sử dụng rộng rãi trong các
hệ thống nhận dạng hiện tại để tính toán các hệ số MFCC (Mel Scale
Frequency Cepstral Coefficients) và hệ số PLP (Perceptual Linear
Prediction). Hai kĩ thuật xử lý tiếng nói RASTA (RelAtive SpecTral) và CMS
(Cepstral Mean Subtraction) cũng được giới thiệu. Đây là hai kĩ thuật loại bỏ
nhiễu hay được sử dụng đặc biệt là trong phát âm có nhiều nhiễu như các câu
thu âm qua điện thoại.
1.1.1. Phươ
ng pháp tính hệ số MFCC
Hình 2.1 miêu tả các bước tính toán hệ số MFCC.
Nhấn mạnh tín hiệu (pre-emphasis). Trong bước xử lý đầu tiên này, tín
hiệu được đưa qua một bộ lọc số:
1
() 1
pre pre
Hz az
−
=
+
Trong đó
p
re
a
là hệ số nhấn mạnh, thường có giá trị là 0,9700002861. Bộ
lọc có tác dụng tăng cường tín hiệu tại tần số cao (trên 1KHz) với hai lý do
chính:
• Giọng nói có sự suy giảm khoảng 20dB/decade khi lên tần số cao do
đặc điểm sinh lý của hệ thống phát âm của con người. Bước xử lý này
sẽ tăng cường tín hiệu lên một giá trị gần 20dB/decade để khắc phục sự
suy giảm này,
• Hệ th
ống thính giác của con người nhạy cảm hơn với vùng tần số cao,
bước xử lý này nhấn mạnh vùng tần số cao, trợ giúp cho quá trình mô
hình hoá âm thanh sau này của hệ thống nhận dạng.
2
Hình 1-1. Các bước xử lý của phương pháp tính toán hệ số MFCC.
Tạo khung tín hiệu (framing). Tín hiệu tiếng nói luôn luôn biến thiên
theo thời gian, tuy nhiên, trong khoảng thời gian khoảng 10-20ms, tín hiệu
tiếng nói được coi là tương đối ổn định. Do đó, tín hiệu thường được chia
thành các khung kích thước 20-30 ms với vùng gối lên nhau khoảng 10-15
ms.
Làm cửa sổ (frame windowing). Cửa sổ Hamming thường được áp dụng
cho mỗi khung tín hiệu để giảm sự tác động của việc chia khung tín hiệu:
'
2( 1)
{0.54 0.46cos( )}
1
nn
n
s
s
N
π
−
=−
−
Trong đó, N là số mẫu dữ liệu (sample) của cửa sổ.
DFT (Discrete Fourier Transform). Tại bước này, với mỗi khung tín
hiệu, biến đổi Fourier được áp dụng để chuyển tín hiệu về miền tần số. Công
việc tính toán được thực hiện bằng thuật toán FFT (Fast Fourier Transform).
Lọc theo thang tần số Mel (Mel-frequency bandpass filter). Các bộ lọc
số được áp dụng để lọc các tín hiệu theo các giải tần số khác nhau.
Ph
ản ứng của tai người với các thành phần của tần số là không tuyến
tính. Sự khác nhau về tần số ở vùng tần số thấp (<1KHz) dễ được nhận biết
bởi con người hơn là ở vùng tần số cao. Lọc theo thang tần số Mel mô phỏng
3
tính chất này bằng cách dùng các bộ lọc được phân bố theo một hàm phi
tuyến trong khoảng không gian tần số, thông thường là hàm Mel:
10
( ) 2595log (1 )
700
f
Mel f =+
Logarit giá trị năng lượng (logarit of filter energies). Các giá trị năng
lượng thu được tại mỗi kênh lọc được lấy logarit để “nén” các giá trị này vào
một miền giá trị hẹp hơn.
DCT (Discrete Cosin Transform). Giọng nói của con người có phổ khá
trơn (smooth) trên miền tần số, do vậy, các giá trị năng lượng của các bộ lọc
gần nhau có sự tương quan (correlated) khá gần. Bước xử lý này biến đổi các
giá trị năng lượng thành các h
ệ số ít tương quan với nhau hơn, các hệ số này
được gọi là hệ số cepstral.
1
cos( ( 0.5))
N
ij
j
i
cm j
N
π
=
=−
∑
Trong đó, N là số kênh lọc, m
j
là giá trị logarit năng lượng của mạch lọc
thứ j, i là bậc của hệ số cepstral.
Chỉnh các giá trị cepstral. Giá trị cepstral bậc cao thường có giá trị rất
thấp, so với các giá trị cepstral bậc thấp. Sự khác biệt này gây khó khăn cho
việc mô hình hoá dữ liệu, ví dụ như khi sử dụng các hàm mật độ xác suất
Gauss. Do đó các hệ số cepstral được điều chỉnh lại (re-scaled) theo công
thứ
c:
exp( * )
nn
cnkc
′
=
Sau bước hiệu chỉnh này ta thu được các giá trị MFCC.
Tính giá trị delta MFCC. Các giá trị delta của các hệ số MFCC được
tính toán nhằm phản ánh sự biến thiên tiếng nói theo thời gian. Các giá trị
delta được tính toán dựa trên các giá trị MFCC của các khung tín hiệu lân
cận:
1
2
1
()
2
tt
t
cc
d
θ
θ
θ
θ
θ
θ
Θ
+−
=
Θ
=
−
=
∑
∑
Trong đó,
θ
là số khung tín hiệu lân cận được dùng (thông thường là 2).
Ngoài ra, giá trị delta của delta (hay còn gọi là acceleration) cũng có thể
được tính toán từ các giá trị delta dùng cùng một công thức như trên.
4
1.1.2. Phương pháp tính hệ số PLP
Phương pháp PLP (Perceptual Linear Predition) được phát triển dựa trên
phương pháp mã dự báo tuyến tính LPC (Linear Prediction Coding).
Phương pháp LPC hay còn gọi là mô hình hoá tự hồi quy (autoregression
modeling) là phương pháp mô hình hoá tín hiệu bằng sự kết hợp tuyến tính
các mẫu tín hiệu trước đó:
1
() ()( 1) ()
N
i
sn aisn en
=
=− − +
∑
Trong đó, N là số hệ số hay là bậc của dự báo, các a(i) là các hệ số dự
báo tuyến tính (linear prediction coefficients), e(n) là hàm lỗi.
Các hệ số a(i) được chọn để làm cực tiểu hàm lỗi dự báo trung bình bình
phương. Có một vài phương pháp để tính các hệ số này: phương pháp dùng
ma trận hiệp phương sai (covariance matrix), phương pháp tự tương quan
(auto-correlation method), phương pháp lưới hay còn gọi là phương pháp điều
hoà (lattice or harmonic). Phương pháp thường đượ
c áp dụng nhất trong nhận
dạng tiếng nói là phương pháp tự tương quan dùng thuật toán đệ quy
Levinson-Durbin.
Thuật toán Levinson-Durbin được trình bày như sau:
Tính p+1 các hệ số tự tương quan đầu tiên (p là bậc của dự báo tuyến
tính) bằng công thức sau:
1
Ni
ijji
j
rss
−
+
=
=
∑
Trong đó, s(n) là tín hiệu trong cửa sổ, N là số lượng mẫu trong cửa sổ.
Các hệ số sau đó được tính toán đệ quy như sau:
0
(0)
Er
=
1
(1)
(1)
[]
i
i
ijij
j
i
i
rar
k
E
−
−
−
−
−
=
∑
trong đó
1 ip
≤
≤
()i
ii
ak
=
11
*
ii
jj iij
aa ka
−
−
−
=
−
, với 11
j
i
≤
≤−
() 2 ( 1)
(1 )
ii
i
EkE
−
=
−
5
Các bước trên được tính toán lặp với i=1,2, p. Cuối cùng, ta thu được
các hệ số:
()p
jj
aa
=
với 1
j
p
≤
≤
Phương pháp tính các hệ số PLP dựa vào phương pháp LPC. Hình 2.2
miêu tả các bước xử lý tính toán hệ số PLP:
Hình 1-2. Các bước xử lý của phương pháp tính toán hệ số PLP.
FFT. Tương tự như phương pháp MFCC, tín hiệu tiếng nói được chia
thành các khung tín hiệu và được biến đổi Fourier sang miền tần số bằng
thuật toán FFT.
Lọc theo thang tần số Bark. Tương tự như phương pháp tính MFCC, tín
hiệu tiếng nói được lọc qua các bộ lọc phân bố theo thang tần số phi tuyến,
trong trường hợp này là thang tần số Bark:
}]1)
1200
[(
1200
ln{6)(
5.02
++=
ff
fBark
Nhấn mạnh tín hiệu dùng hàm equal-loudness. Bước xử lý này tương tự
như bước nhấn mạnh pre-emphasis của phương pháp MFCC. Hàm này mô
phỏng đường cong cân bằng độ ồn (equal-loudness curve).
264
2629626
(56,8*10)
()
( 6,3*10 )( 0,38*10 )( 9,58*10 )
E
ωω
ω
ωω ω
+
=
++ +
6
Dùng luật cường độ nghe (power law of hearing). Bước xử lý này giống
như bước lấy giá trị logarit trong phương pháp MFCC. Hàm căn lập phương
được sử dụng để “nén” các giá trị năng lượng.
0,33
() ()ffΦ=Ψ
Biến đổi Fourier ngược (inverse DFT). Các hệ số tự tương quan được
biến đổi Fourier ngược để sau đó dùng làm giá trị đầu vào cho phương pháp
LPC.
Thuật toán Durbin được sử dụng để tính toán các hệ số dự báo tuyến
tính giống như trong phương pháp LPC.
Tính các giá trị delta. Phương pháp tính tương tự như phương pháp tính
hệ số MFCC.
1.1.3. Các kĩ thuật khử nhiễu
1.1.3.1 Kĩ thuật CMS
Đây là một kĩ thuật thông dụng để khử nhiễu trong các hệ thống nhận
dạng, được dùng kết hợp trong quá trình tính toán các đặc tính phổ của tiếng
nói. Phương pháp này dựa trên giả thiết là các đặc tính tần số của môi trường
là thường xuyên cố định hoặc biến đổi chậm. Các tham số cepstral của một
phát âm được trừ đi giá trị trung bình của các tham số trong một khoảng thời
gian nào đó và làm cho các giá tr
ị này ít bị ảnh hưởng bởi môi trường:
1
1
ˆ
() () ()
T
t
OO Ot
T
ττ
=
=−
∑
Trong đó, T là độ dài của vùng lấy giá trị trung bình, thường là độ dài
của cả phát âm.
1.1.3.2 Kĩ thuật RASTA
RASTA là kĩ thuật lọc dựa trên giả thiết rằng các tính chất thời gian của
các nhiễu là khác so với các tính chất thời gian của giọng nói. Tốc độ thay đổi
của các thành phần không phải tiếng nói thường xuyên nằm ngoài tốc độ hoạt
động của bộ máy phát âm con người. Bằng cách dùng bộ l
ọc số, kĩ thuật
RASTA có thể loại bỏ được một phần các nhiễu của môi trường và các nhiễu
bổ sung bất thường khác. Bộ lọc dùng trong RASTA là:
123
1
0,2 0,1 0,2 0,1
()
10,94
z
zz
Hz
z
−
−−
−
+− −
=
−
7
Các kĩ thuật khử nhiễu thường yêu cầu một đoạn tiếng nói đủ lớn để phân
tích, thống kê. Vì vậy, khi áp dụng các kĩ thuật khử nhiễu vào nhận dạng tiếng
nói, cần lưu ý đến tốc độ xử lí và bảo tồn các đặc trưng âm học của phụ âm,
đặc biệt là các phụ âm vô thanh. Để đảm bảo thực hiện được trong thời gian
thực, hiện nay, ngườ
i ta thường áp dụng mô hình tham số thích nghi với nhiễu.
Cụ thể như sau: Khi huấn luyện tham số, người ta lấy một mẫu sạch, không bị
nhiễu, để huấn luyện, sau đó, người ta lấy các mẫu sạch này trộn với các loại
nhiễu sinh bởi các mô hình toán học khác nhau và tham số mô hình sẽ được
biến đổi bởi mẫu nhiễu nhờ các công cụ mô hình như mạng Nơron. Do đó,
trong giai đoạ
n nhận dạng, khi tín hiệu thực được đưa vào hệ thống, người ta sẽ
tính thẳng các đặc trưng và quyết định từ chính tín hiệu chứ không cần lọc.
1.2. Các đơn vị xử lý tiếng nói
1.2.1. Tần số lấy mẫu
Quá trình lấy mẫu tạo ra tín hiệu rời rạc hoặc tín hiệu số từ tín hiệu tín
hiệu tương tự. Tần số lấy mẫu là số lần lấy mẫu được tính trong một đơn vị
thời gian, thông thường là giây. Tần số lấy mẫu ký hiệu là F
s
.
Khoảng thời gian mà quá trình lấy mẫu được lặp lại gọi là chu kỳ lấy
mẫu.
Ví dụ: F
s
= 11025Hz
1s thu được 11025 mẫu
1ms thu được 11025/1000 ≈ 11 mẫu.
Số bit lưu một mẫu có thể là 8 hoặc 16 bit.
+ 8 bit/ 1 mẫu:
(
)
(
)
12,0
8
−∈nx
Ngưỡng lặng tuyệt đối là 128
+ 16 bit/ 1 mẫu:
(
)
(
)
11515
2,2
−−
∈nx
Ngưỡng lặng tuyệt đối là 0
1.2.2. Nhiễu
Nhiễu đối với hệ thống là loại âm thanh không phải tiếng nói sinh ra
trong môi trường xung quanh ta. Ngay cả bộ phát âm của con người cũng sinh
8
ra nhiễu, chẳng hạn như tiếng thở, tiếng bật lưỡi, tiếng chép miệng cả khi môi
chạm vào micro… Không dễ gì có thể lọc được mọi thứ nhiễu, ta chỉ tìm cách
tối thiểu hoá chúng để có thể nâng cao chất lượng của hệ thống nhận dạng.
Với tín hiệu tiếng nói là
n
s , tín hiệu nhận được sau quá trình thu sẽ được
ký hiệu là
n
s
~
. Như vậy:
nn
ss −
~
chính là tín hiệu nền.
Độ nhiễu của tín hiệu được xác định thông qua năng lượng đo được của
tín hiệu:
()
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎝
⎛
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
−
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
=
∑
∑
=
=
N
n
nn
N
n
n
ss
s
E
0
2
0
2
10
~
log10
(Đơn vị năng lượng tính bằng dB)
Như vậy, nếu năng lượng E càng lớn thì
n
s
~
càng gần với
n
s , tín hiệu nền
có giá trị gần về 0. Nếu
∞
→
E
thì tín hiệu thu được là tín hiệu sạch, không
có nhiễu.
1.2.3. Tần số cơ bản
Một âm thanh có thể là tổ hợp của nhiều tần số, tần số chính bao trùm
trong âm được gọi là tần số cơ bản. Trong tiếng nói, tần số cơ bản là đáp ứng
của sự rung động các dây thanh âm, tần số cơ bản thường được ký hiệu là F
0
.
Tần số cơ bản có giá trị phụ thuộc vào tần số lấy mẫu và khoảng cách a,
là khoảng cách giữa hai đỉnh của các sóng âm tuần hoàn.
Đơn vị của tần số là Hertz, ký hiệu là Hz. Mỗi Hz bằng 1 dao động/1s.
Và 1 KHz sẽ bằng 1000 Hz. (Xem biểu diễn đường F
0
của một số thanh điệu
ở phần phụ lục).
1.2.4. Formant
Formant là dải tần số được tăng cường do hiện tượng cộng hưởng trong
ống dẫn thanh, đặc trưng cho âm sắc của mỗi nguyên âm. Trong mỗi dải tần
như thế có một tần số được tăng cường hơn cả gọi là đỉnh formant.
Một nguyên âm do một người phát ra có nhiều formant:
F1: ứng vớ
i cộng hưởng vùng yết hầu
F2: ứng với cộng hưởng khoang miệng
9
Khi ta nói, các âm mũi sẽ có sự xuất hiện của formant F3, các formant
khác F4, F5,…liên quan đến các đặc trưng giọng nói riêng của mỗi cá nhân.
Mỗi lần môi, lưỡi, hàm ở những vị trí khác nhau là một lần hộp cộng hưởng
miệng và yết hầu thay đổi hình dáng, thể tích, lối thoát của không khí làm
biến đổi âm sắc của âm thanh đi qua chúng. Chính vì vậy, hai khoang miệng
và yết hầu là hai hộp cộng hưởng quan trọng nhất, chúng tạo nên hai formant
chính formant F1 và F2 đặc trưng c
ủa mỗi nguyên âm.
1.3. Định dạng âm thanh
Có nhiều chuẩn lưu trữ âm thanh số (AU, VOC, WAVE, AIFF, AIFF-C
và IFF/8VX), nhưng kết quả thực tế cho thấy rằng tập đoàn của Microsoft sử
dụng các file wave trong hệ thống điều hành windows, chúng đã trở thành
chuẩn sử dụng phổ biến nhất.
Âm thanh được xử lý ở dạng PCM, tập tin được lưu lại trên bộ nhớ dưới
dạng file WAVE.
Thông thường, các file WAVE PCM có cấu trúc như sau:
Các khối dữ liệ
u riêng biệt (còn gọi là các chunk), được thể hiện bằng
cấu trúc hình cây cơ bản.
Mỗi chunk bao gồm hai phần cơ bản là header và data.
Khối đầu tiên, cũng là phần chính của bất kỳ file RIFF nào là khối RIFF,
nó giống như gốc của một cây.
File bắt đầu với phần header RIFF, sau nó là hai khối con được định
nghĩa FMT và DATA. RIFF bao gồm ba phần tử: RIFF_ID, RIFF_SIZE và
RIFF_FORMAT.
struct RIFF
10
{
_TCHAR riffID[4]; // Chứa nhận dạng “RIFF”
DWORD riffSIZE; // Kích thước file trừ 8 byte
_TCHAR riffFORMAT[4]; //Chứa nhận dạng “WAVE”
};
Sau header RIFF, có một khối miêu tả các định dạng (FMT)
struct FMT
{
_TCHAR fmtID [4]; //chứa nhận dạng FMT và các
khoảng trống.
DWORD fmtSIZE; //chứa kích thước của khối (cho
WAVE PCM 16)
WAVEFORM fmtFORMAT; //cấu trúc của
WAVEFORMATEX
// nhưng không bao gồm file
cbSize.
};
Cấu trúc của WAVEFORMAT là chìa khoá của sự hiểu biết về các
WAVE. Nó chứa nhiều thông tin mà chúng ta cần khi làm việc với một
WAVE.
struct WAVEFORM
{
WORD wFormatTag; // đị
nh dạng âm thanh số
WORD nchannels; //số kênh (1 cho mono và 2
cho stereo)
DWORD nSamplesPerSec; //Số mẫu trong một giây
DWORD nAvgBytesPerSec; //Trung bình số byte của dữ
liệu trong một giây
WORD nBlockAlign; //Kích thước tối thiểu của dữ
liệu khi phát
WORD wBitsPerSample; // Số bit lưu một mẫu (8 hoặc 16)
};
Và cuối cùng là khối dữ liệu:
11
struct DATA
{
_TCHAR dataID[4]; //Chứa nhận dạng dữ liệu
DWORD dataSIZE; //Kích thước dl
};
Định dạng dữ liệu và giá trị lớn nhất, nhỏ nhất của các mẫu waveform
PCM ở nhiều kích thước được cho như sau:
Kích thước mẫu Định dạng dữ liệu Giá trị lớn nhất Giá trị nhỏ nhất
Từ 1 đến 8 bit Số nguyên không dấu 255 (0xFF) 0
Lớn hơn hoặc
bằng 9 bit
Số nguyên có dấu i Giá trị định vị lớn
nhất của i
i có giá trị âm
Giá trị lớn nhất, giá trị nhỏ nhất và giá trị điểm giữa của 8 bit và 16 bit
dữ liệu waveform PCM như sau:
1.4. Thu tín hiệu âm thanh trong thời gian thực
Tín hiệu tiếng nói trước khi trở thành dữ liệu tiếng nói phải trải qua một
quá trình xử lý, quá trình này được gọi là tiền xử lý tín hiệu.
Hệ thống máy tính hiện tại chỉ hỗ trợ cho ta thu tĩnh. Mỗi lần chỉ thu
được trong một khoảng thời gian khá nhỏ (vì dãy tín hiệu số phát sinh quá lớn
sẽ nhanh chóng lấp đầy phần không gian lưu trữ). Nếu người sử dụng nói vào
thời điểm hàm thu k
ết thúc thì dữ liệu sẽ bị mất mát, do đặc trưng của tín hiệu
tiếng nói các hệ thống thiết kế tốt cũng có thể không phát hiện được, vẫn thực
hiện và cho ra kết quả khi dữ liệu đầu vào đã sai.
Cách giải quyết chủ yếu dựa vào một số thủ thuật lập trình, cơ chế hoạt
động của hệ điều hành và cơ chế c
ủa hàm thu tín hiệu âm thanh. Tư tưởng
chính là làm một hàng đợi vòng, xử lý kịp thời để không bao giờ bị hết không
gian lưu trữ, kết hợp với việc sử dụng cơ chế đa luồng của hệ điều hành để
12
vẫn có thể thực hiện được đồng thời các ứng dụng khác. Cách thực hiện cụ
thể như sau:
Xin cấp phát M vùng đệm (buffer), mỗi vùng đệm có kích thước 3N và
đưa vào hàng đợi (N là kích thước của một frame). Tạo một luồng (thread)
làm những việc chính sau:
1. Kiểm tra cờ điều khiển (semaphore), nếu cờ tắt thì dừng (return).
2. Gọi hàm thu và chờ thu hết vùng đệm (hiện hành) (Khi này vùng đệm
bị lo
ại ra khỏi hàng đợi).
3. Tính năng lượng của ba frame trên vùng đệm, nếu năng lượng frame
đầu lớn hơn ngưỡng dữ liệu thì quay lại bước một (trạng thái đang có
âm thanh khi gọi hàm thu – không thu được trọn vẹn dữ liệu).
4. Đưa vùng đệm vào hàng đợi.
5. Tăng chỉ số vùng đệm hiện hành lên một.
6. Chờ thu hết vùng đệm.
7. Với mỗi frame của vùng đệm tính t
ổng năng lượng của nó và hai frame
kế trước (có thể là của vùng đệm trước- để đảm bảo tính liên tục).
8. Nếu tổng năng lượng vừa tính lớn hơn ngưỡng im lặng thì chép frame
vào vùng đệm chính, cập nhật lại kích thước vùng đệm chính và bật
cờ có dữ liệu.Ngược lại, nếu cờ có dữ liệu bật: cập nhật lại kích thước
đoạn im lặng.
9.
Nếu kích thước đoạn im lặng nhỏ hơn thời gian ngừng tối đa giữa hai
tiếng: Quay lại bước 5.
Ta có thể chọn kích thước frame là 220 ms, thời gian ngừng tối đa giữa
hai tiếng là 750 ms.
1.5. Xác định giá trị hằng – ngưỡng theo môi trường tín hiệu
1.5.1. Thông số ngưỡng zero
Bản chất âm thanh là sự dao động, khi số hoá các mẫu dữ liệu âm thanh
về miền giá trị 0…N-1 thì mẫu âm thanh im lặng (không có âm thanh) sẽ có
giá trị là N/2, giá trị này gọi là ngưỡng zero. Ví dụ nếu kích thước mỗi mẫu
13
tín hiệu số là 8 bit thì giá trị của ngưỡng zero là 128, các mẫu tín hiệu âm
thanh số sẽ có giá trị dao động xung quanh ngưỡng này.
Trên thực tế các thiết bị số hoá âm thanh của máy tính (sound card) có
thể bị sai ngưỡng zero (sound card mà người viết đang dùng có ngưỡng zero
là 112-mẫu 8 bit). Nếu hệ thống chương trình sử dụng ngưỡng zero tương ứng
của thiết bị thì dữ liệu nhận được vẫn là dữ liệu tốt. Còn nếu vẫ
n dùng
ngưỡng như trên thì kết quả nhận dạng có thể sai trầm trọng.
Thuật toán phương pháp xác định ngưỡng zero:
- Lấy thu của sound card.
- Đặt mức thu ở giá trị thấp nhất (tín hiệu thu được là nhỏ nhất).
- Thu một đoạn dữ liệu ngắn (khoảng 3 giây).
- Tính "histogram" H (H[k] là số mẫu có giá trị biên độ k).
- Tìm trong dãy H phần tử H[max] có giá trị lớn nhất. Ngưỡng zero
chính là max.
- Phục hồi lại mức thu ban đầu.
1.5.2. Thông số độ ồn nhiễu
Cách xác định: Thông báo yêu cầu người sử dụng đừng nói gì trong ba
giây và thu tín hiệu trong thời gian đó để lấy tiếng ồn nhiễu của môi trường
xung quanh. Ngưỡng im lặng được xác định là năng lượng cao nhất của các
frame. Ngoài ra có thể dùng biến đổi Fourier để tính ra các tần số nhiễu phục
vụ cho việc lọc nhiễ
u.
1.6. Lọc nhiễu
Hiện tại, việc lọc nhiễu của hệ thống được thực hiện theo phương pháp
kinh điển là dùng phép biến đổi Fourier với thuật toán FFT. Dùng biến đổi
Fourier thuận xác định được các tần số tham gia và loại đi tất cả tần số không
thuộc phạm vi tiếng nói (nếu biết được phạm vi tần số của đúng người sử
dụng thì kết quả lọc s
ẽ càng cao hơn) bằng cách cho các hệ số tương ứng giá
trị zero sau đó biến đổi ngược lại.
14
1.7. Xác định dãy tín hiệu số có chứa dữ liệu tiếng nói và xác định
các điểm đầu - cuối của tiếng nói
Dữ liệu thu được không phải lúc nào cũng là tiếng nói, nhất là khi thu
động dữ liệu sẽ thường xuyên là khoảng lặng và nhiễu. Vì hệ thống nhận dạng
được thiết kế theo hình thức so khớp tìm ra mẫu giống nhất nên dù dữ liệu thu
được không phải là tiếng nói mà được đưa vào thì hệ thống vẫn gán đó là một
trong các tiếng đã học mẫu dẫn đến sai hoàn toàn.
Trong mọi đoạn tín hiệu, dù có ti
ếng nói hoặc không có tiếng nói, thì
luôn luôn có âm nền. Khác biệt chủ yếu khi có tiếng nói là âm thanh tiếng nói
sẽ là âm thanh chính. Ta có thể đưa ra phương pháp sau:
1. Chia đều dãy tín hiệu số thành các frame với kích thước từ 5-10 ms (có
thể căn cứ vào tần số cơ bản trung bình của người đang nói để chọn giá
trị phù hợp nhất).
2. Sau đó kiểm tra tính chứa tiếng nói của các frame bằng cách đếm số
điểm zero hoặc tính năng lượng ngắn hạn của frame có vượt qua
ngưỡng.
3. Nếu tổng kích thước các frame liên tiếp được xác định có tính chứa
tiếng nói lớn hơn 150 ms thì có thể xem là có chứa tiếng nói.
Frame i
Frame i=+1
Cöa sæ i
Cöa sæ i+1
Dl chia sÎ
Dl míi
Hình 1-3. Phân chia tín hiệu thành các Frame
Nếu người nói nói rời rạc từng tiếng một và môi trường không bị ồn thì
ở bước xác định dãy tín hiệu số có chứa dữ liệu tiếng nói hay không ta cũng
đã xác định được các điểm biên của tiếng vì tại đó sẽ có các khoảng lặng.
Nhưng người ta có thể nói hơi chậm chứ không quen nói nhát gừng từng tiếng
15
một và môi trường xung quanh cũng hoàn toàn có thể có nhiễu. Khi đó giữa
hai tiếng có thể không có khoảng lặng - Tức chúng bị dính nhau (thường hiện
tượng này chỉ xảy ra giữa hai tiếng chứ ít có ba tiếng dính nhau). Lúc này,
bước trên sẽ cho kết quả chỉ là một tiếng mà ta đưa luôn cho hệ thống nhận
dạng thì trước mắt sẽ có một tiếng bị nhận sai (không có kết quả), và tiếng
còn lại cũng nhiều khả
năng sai. Như vậy, bước này cũng là cần thiết nếu
muốn hệ thống hoạt động cho chính xác.
Nếu các tiếng được nói rõ ràng thì chiều dài của mỗi tiếng không dao
động nhiều. Do đó ta có thể yêu cầu người nói rời rạc một số tiếng rồi đo
chiều dài nhỏ nhất L
1
và lớn nhất L
S
các tiếng của người đó. Khi nhận được
đoạn dữ liệu có chiều dài lớn hơn L
S
, tức đang có hai tiếng dính nhau, ta sẽ
tìm frame trong đoạn [L
1
L
S
] có năng lượng nhỏ nhất và điểm biên giữa hai
tiếng được chọn là điểm giữa của frame.
1.8. Chuẩn hoá biên độ
Dữ liệu tiếng nói khi thu được có biên độ rất biến động. Ngay cả khi
người sử dụng nói với một âm lượng rất chuẩn không hề thay đổi thì biên độ
của dữ liệu thu được cũng vẫn có thể không ổn định. Điều này dễ dàng xảy ra
khi người nói hơi xoay mặt đi, nhích micro đến gần miệng hơn hoặc kéo ra xa
hơn chỉ vài cm. Sự biến động này ảnh h
ưởng đến kết quả nhận dạng.
Việc chuẩn hoá là cần nhưng không nhất thiết phải thật tốt, chỉ cần biên
độ đừng nhỏ quá làm mất mát đặc trưng. Như vậy, ta có thể thực hiện đơn
giản bằng cách nhân mỗi điểm với một hệ số k thích hợp.
Ví dụ:
(
)
()
()
ns
k
max
1002/32767
−
=
Nhận dạng tiếng nói là mô hình phức tạp theo nhiều mức khác nhau. Tín
hiệu tiếng nói được phân tách ra thành từ, các cụm từ hay câu. Tiếp theo
chúng được phân tích dựa vào cú pháp của ngôn ngữ cần nhận dạng, được
biến đổi và nén lại để đơn giản cho việc xử lý tiếp theo.
Khi xử lý tín hiệu tiếng nói ta phải rời rạc hoá nó theo thời gian, sử dụng
biến đổi FFT để ước lượng các thành phần tần s
ố của tín hiệu rời rạc, tách lọc
các thành phần cần thiết trước khi nhận dạng.
16
1.8.1. Biến đổi FFT
Phép biến đổi nhanh FFT không phải là một phép biến đổi mới nó thực
chất là DFT nhưng được thực hiện với một thuật toán nhanh, gọn. Đây là
thuật toán đóng vai trò hết sức quan trọng trong việc phân tích, thiết kế và xử
lý tín hiệu.
Thuật toán biến đổi nhanh FFT cho N mẫu {x(n)} là:
Phép biến đổi thuận:
() ()
∑
−
=
−
=
1
0
/2
N
k
Nknj
enxkx
π
Phép biến đổi ngược:
() ()
Nknj
ekX
N
nx
/2
1
π
∑
=
Với n = 0, 1, …, N-1
Trong đó:
(
)
(
)
(
)
1−+= nbnanx
Phép biến đổi FFT bảo toàn tính tuyến tính bất biến, tuần hoàn và tính
trễ.
Phép biến đổi tín hiệu thời gian rời rạc z được định nghĩa là:
() ()
∑
∞
−∞=
−
=
π
n
znxzX
() ()
dzzzX
j
nx
C
n
∫
−
=
1
2
1
π
Phép biến đổi Fourier của x (n) có thể được tính từ biến đổi z khi:
() () ()
∑
∞
−∞=
−
=
==
n
nj
ez
enxzXX
j
ω
ω
ω
Phép biến đổi Fourier có thể xem như là phép biến đổi z đã được ước
lượng.
Phép biến đổi Fourier rời rạc (DFT) định nghĩa như là mẫu dưới đây:
() ()
∑
−
=
−
=
1
0
2
N
n
knj
N
ekXkX
π
,
1, 2,1,0 −
=
Nk
Phép biến đổi ngược DFT là:
() ()
∑
−
=
=
1
0
2
N
n
knj
N
ekXnx
π
,
1, ,2,1,0
−
=
Nn
Phép biến đổi Fourier nhanh (FFT) đơn giản là tính hệ số của DFT.
Phép biến đổi cosin rời rạc (DCT) là DFT của tín hiệu.
() () ()
∑
−
=
+=
1
1
2cos20
N
n
N
knnxxkX
π
,
1, ,2,1,0 −
=
Nk
17
Trình bày thuật toán trên ngôn ngữ C
void ScrAmble(long numPoints, struct _complex *f)
{
long i,j,m;
double temp;
j=0;
for(i=0; i < numPoints;i++)
{
if(i < j)
{
// swap f[i] & f[j]
temp=f[i].x;
f[i].x=f[j].x;
f[j].x=temp;
temp=f[i].y;
f[i].y=f[j].y;
f[j].y=temp;
} // if
m=numPoints >> 1;
while( (j >= m) && (m >= 2) )
{
j-=m;
m>>=1;
} // while
j+=m;
} // for
} // ScrAmble
//**************************************************
void ButterFlies(long numPoints,int logN,int dir, struct _complex *f)
{
double angle;
_complex w,wp,temp;