Tải bản đầy đủ (.pdf) (53 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (837.58 KB, 53 trang )

LỜI NÓI ĐẦU
Ngay khi phát minh ra máy tính, con người đã mơ ước máy tính có thể nói
chuyện với mình. Yêu cầu đơn giản nhất là máy có thể xác định được từ ngữ mà
chúng ta nói với máy. Đó là mục tiêu của ngành nhận dạng tiếng nói.
Đối với con người, việc nghe, nhất là nghe tiếng mẹ đẻ là một vấn đề khá
đơn giản. Còn đối với máy tính, xác định một chuỗi tín hiệu âm thanh là sự phát
âm của một từ nào hoàn toàn không đơn giản, khó khăn cũng như việc học nghe
ngoại ngữ của chúng ta.
Lĩnh vực nhận dạng tiếng nói đã được nghiên cứu hơn 4 thập kỉ và hiện nay
mới chỉ có một số thành công. Có thể kể đến hệ thống nhận dạng tiếng Anh (ví
dụ: phần mềm Via Voice của IBM, hệ thống nhận dạng tiếng nói tích hợp của
OfficeXP…). Các hệ thống này hoạt động khá tốt (cho độ chính xác khoảng 90 95%) nhưng còn xa mới đạt đến mức mơ ước của chúng ta: có một hệ thống có
thể nghe chính xác và hiểu hoàn toàn những điều ta nói.
Riêng với tiếng Việt, lĩnh vực nhận dạng tiếng nói còn khá mới mẻ. Chưa
hề thấy xuất hiện một phần mềm nhận dạng tiếng Việt hoàn chỉnh trên thị trường.
Số công trình nghiên cứu về nhận dạng tiếng nói tiếng Việt được công bố rất
hiếm hoi, và kết quả còn hạn chế về bộ từ vựng, độ chính xác…. Tiếng Việt có
nhiều đặc tính khác với các ngôn ngữ đã được nghiên cứu nhận dạng nhiều như
tiếng Anh, tiếng Pháp. Do đó việc nghiên cứu nhận dạng tiếng Việt là rất cần
thiết.
Vì những lí do trên, tôi chọn đề tài “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”, nhằm nghiên cứu các phương pháp nhận
dạng tiếng nói đối với tiếng Việt và thử nghiệm xây dựng một hệ thống nhận
dạng cỡ nhỏ.
Khoá luận gồm có 5 chương:
1. Chương 1 trình bày tổng quan về nhận dạng tiếng nói, nhận dạng tiếng
nói tiếng Việt và một số phương pháp nhận dạng phổ biến.
2. Chương 2 trình bày về môi trường Matlab.
3. Chương 3 trình bày về trích chọn đặc trưng cho nhận dạng.
4. Chương 4 trình bày sơ lược về mạng nơron và toolbox NetLab cho


mạng nơron trên môi trường Matlab.



1


5. Chương 5 trình bày quá trình tiến hành và một số kết quả nghiên cứu
xây dựng hệ nhận dạng tiếng nói các chữ số tiếng Việt trên môi trường
Matlab.
Mặc dù hết sức cố gắng nhưng do khả năng còn hạn chế cộng với những
vấn đề về thời gian, phương tiện, công cụ... nên kết quả nghiên cứu còn khá
khiêm tốn. Hy vọng rằng trong tương lai tôi sẽ có điều kiện hơn để tiếp tục
nghiên cứu đề tài này.
Em xin chân thành cảm ơn thầy Đặng Văn Chuyết (khoa CNTT ĐHBK Hà
Nội), cô Hồ Cẩm Hà, thầy Nguyễn Tân Ân, thầy Lê Minh Hoàng, thầy Ðào Việt
Cường, thầy Trần Đăng Hưng cùng các thầy cô giáo khoa CNTT ĐHSP Hà Nội
đã tận tình chỉ bảo, góp ý và giúp đỡ, tạo điều kiện cho em trong quá trình nghiên
cứu.
Cảm ơn anh Nguyễn Tiến Dũng (Viện CNTT), em Đinh Ngọc Thắng và các
bạn ở trung tâm FYT, các bạn cùng lớp, cùng khoa đã động viên và giúp đỡ tài
liệu, phương tiện để tôi hoàn thành nghiên cứu này.



2


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-phonetic approach) ....................................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


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



4


CHƯƠNG 1. NHẬN DẠNG
TIẾNG NÓI
1.1. NHẬN DẠNG TIẾNG NÓI VÀ MỘT SỐ PHƯƠNG
PHÁP NHẬN DẠNG PHỔ BIẾN
1.1.1. Nhận dạng tiếng nói
Hiểu một cách đơn giản, nhận dạng tiếng nói (speech recognition by
machine) là dùng máy tính chuyển đổi tín hiệu ngôn ngữ từ dạng âm thanh thành
dạng văn bản. Nói một cách chính xác hơn: nhận dạng tiếng nói là phân chia
(segmentation) và đính nhãn ngôn ngữ (labeling) cho tín hiệu tiếng nói.
Nhận dạng tiếng nói có nhiều ứng dụng:









Đọc chính tả. Là ứng dụng được sử dụng nhiều nhất trong các hệ
nhận dạng. Thay vì nhập liệu bằng tay thông qua bàn phím, người sử
dụng nói với máy qua micro và máy xác định các từ được nói trong
đó.
Điều khiển - giao tiếp không dây. Chẳng hạn hệ thống cho phép máy
tính nhận lệnh điều khiển bằng giọng nói của con người như: “chạy
chương trình”, “tắt máy”… Một số ưu điểm của việc sử dụng tiếng
nói thay cho các thiết bị vào chuẩn như bàn phím, con chuột là: thuận
tiện, tốc độ cao, không bị ảnh hưởng của cáp, khoảng cách, không đòi
hỏi huấn luyện sử dụng...
Điện thoại-liên lạc. Một số hệ thống (chẳng hạn ở máy điện thoại di
động) cho phép người sử dụng đọc tên người trong danh sách thay vì
bấm số. Một số hệ thống khác (ở ngân hàng, trung tâm chứng
khoán…) thực hiện việc trả lời tự động đối với các các cuộc gọi hỏi về
tài khoản…


Tuy nhiên vấn đề nhận dạng tiếng nói gặp rất nhiều khó khăn. Một số khó
khăn chủ yếu là:


Tiếng nói là tín hiệu thay đổi theo thời gian. Mỗi người có một giọng
nói, cách phát âm khác nhau... Thậm chí một người phát âm cùng một
từ mà mỗi lần khác nhau cũng không giống nhau (chẳng hạn về tốc
độ, âm lượng...)




5





Các phương pháp nhận dạng hiện tại của máy tính khá “máy móc”,
còn xa mới đạt đến mức độ tư duy của con người.
Nhiễu là thành phần luôn gặp trong môi trường hoạt động của các hệ
thống nhận dạng và ảnh hưởng rất nhiều đến kết quả nhận dạng.

Do những khó khăn đó, nhận dạng tiếng nói cần tri thức từ rất nhiều từ
ngành khoa học liên quan:










Xử lí tín hiệu: tìm hiểu các phương pháp tách các thông tin đặc trưng,
ổn định từ tín hiệu tiếng nói, giảm ảnh hưởng của nhiễu và sự thay đổi
theo thời gian của tiếng nói.
Âm học: tìm hiểu mối quan hệ giữa tín hiệu tiếng nói vật lí với các cơ

chế sinh lí học của việc phát âm và việc nghe của con người.
Nhận dạng mẫu: nghiên cứu các thuật toán để phân lớp, huấn luyện
và so sánh các mẫu dữ liệu...
Lí thuyết thông tin: nghiên cứu các mô hình thống kê, xác suất; các
thuật toán tìm kiếm, mã hoá, giải mã, ước lượng các tham số của mô
hình…
Ngôn ngữ học: tìm hiểu mối quan hệ giữa ngữ âm và ngữ nghĩa, ngữ
pháp, ngữ cảnh của tiếng nói.
Tâm-sinh lí học: tìm hiểu các cơ chế bậc cao của hệ thống nơron của
bộ não người trong các hoạt động nghe và nói.
Khoa học máy tính: nghiên cứu các thuật toán, các phương pháp cài
đặt và sử dụng hiệu quả các hệ thống nhận dạng trong thực tế.

1.1.2. Một số phương pháp nhận dạng tiếng nói phổ biến
1.1.2.1. Phương pháp ngữ âm - âm vị học (acoustic-phonetic approach)
Phương pháp ngữ âm - âm vị học dựa trên lý thuyết âm vị: lí thuyết này khẳng
định sự tồn tại hữu hạn và duy nhất các đơn vị ngữ âm cơ bản trong ngôn ngữ nói
gọi là âm vị, được phân chia thành: nguyên âm - phụ âm, vô thanh-hữu thanh, âm
vang -âm bẹt… Các âm vị có thể xác định bởi tập các đặc trưng trong phổ của
tín hiệu tiếng nói theo thời gian (độc giả có thể tham khảo thêm ở [10]).
Đặc trưng quan trọng nhất của âm vị là formant. Đó là các vùng tần số có
cộng hưởng cao nhất của tín hiệu. Ngoài ra còn một số đặc trưng khác như âm
vực (cao độ - pitch), âm lượng…
Hệ thống nhận dạng dựa trên phương pháp này sẽ tách các đặc trưng từ tín
hiệu tiếng nói và xác định chúng tương ứng với âm vị nào. Sau đó, dựa vào một



6



từ điển phiên âm, máy sẽ xác định chuỗi các âm vị đó có khả năng là phát âm của
từ nào nhất.
Xét khía cạnh nguyên lí, phương pháp có vẻ rất đơn giản. Tuy nhiên các thử
nghiệm trong thực tế cho thấy phương pháp cho kết quả nhận dạng không cao.
Nguyên nhân từ những vấn đề sau:






Phương pháp cần rất nhiều tri thức về ngữ âm học, nhất là các tri thức
liên quan đến đặc tính âm học của các âm vị. Mà những tri thức này
nhìn chung còn chưa được nghiên cứu đầy đủ.
formant chỉ ổn định đối với các nguyên âm, với phụ âm formant rất
khó xác định và không ổn định. Hơn nữa việc xác định các formant
cho độ chính xác không cao. Đặc biệt khi chịu ảnh hưởng của nhiễu
(là vấn đề thường xảy trong thực tế).
Rất khó phân biệt các âm vị dựa trên phổ, nhất là các phụ âm vô
thanh. Có một số phụ âm rất giống nhiễu (ví dụ: /s/, /h/).

1.1.2.2. Phương pháp nhận dạng mẫu (pattern recognition approach)
Phương pháp nhận dạng mẫu dựa vào lý thuyết xác suất - thống kê để nhận dạng
dựa trên ý tưởng: so sánh đối tượng cần nhận dạng với các mẫu được thu thập
trước đó để tìm mẫu "giống" đối tượng nhất.
Như vậy hệ thống nhận dạng sẽ trải qua 2 giai đoạn:

Đặc trưng


Dữ liệu huấn luyện

1) Giai đoạn huấn luyện thực hiện các nhiệm vụ: thu thập mẫu, phân lớp
và huấn luyện hệ thống ghi nhớ các mẫu đó.

Minh hoạ: Sơ đồ giai đoạn huấn luyện của phương pháp đối sánh mẫu

2) Giai đoạn nhận dạng: nhận vào đối tượng cần nhận dạng, so sánh với
các mẫu và đưa ra kết quả là mẫu giống đối tượng nhất.



7


Thông tin phân lớp

Đối tượng cần nhận dạng

Minh hoạ: Sơ đồ giai đoạn nhận dạng của phương pháp đối sánh mẫu

Phần lớn các hệ nhận dạng thành công trên thế giới là sử dụng phương pháp
này. Phương pháp có những ưu điểm sau:
1. Sử dụng đơn giản, dễ hiểu, mang tính toán học cao (lý thuyết xác suất
thống kê, lý thuyết máy học, …)
2. Ít bị ảnh hưởng của những biến thể về bộ từ vựng, tập đặc trưng, đơn vị
nhận dạng, môi trường xung quanh…
3. Cho kết quả cao. Điều này đã được kiểm chứng trong thực tế.
1.1.2.3. Phương pháp trí tuệ nhân tạo (artifactial intelligence approach)
Phương pháp trí tuệ nhân tạo nghiên cứu cách học nói và học nghe của con

người, tìm hiểu các quy luật ngữ âm, ngữ pháp, ngữ nghĩa, ngữ cảnh… và tích
hợp chúng bổ sung cho các phương pháp khác để nâng cao kết quả nhận dạng.
Chẳng hạn có thể thêm các hệ chuyên gia (expert system), các luật logic mờ
(fuzzy logic) về ngữ âm, âm vị… vào các hệ nhận dạng tiếng nói dựa trên
phương pháp ngữ âm-âm vị học để tăng độ chính xác cho việc xác định các âm vị
(vấn đề đã được đề cập là rất khó nếu chỉ sử dụng các thông tin về âm phổ ).
Hay đối với các hệ nhận dạng mẫu, người ta cải tiến bằng cách với mỗi đối
tượng cần nhận dạng, hệ thống sẽ chọn ra một số mẫu “giống” đối tượng nhất,
sau đó sẽ kiểm chứng tiếp các kết quả đó bằng các luật ngữ pháp, ngữ nghĩa, ngữ
cảnh… để xác định mẫu phù hợp nhất.
Hiện nay đang có một phương pháp trí tuệ nhân tạo trong nhận dạng tiếng
nói được nghiên cứu rộng rãi là mạng nơron. Tuỳ vào cách sử dụng, mạng nơron
có thể coi là mở rộng của phương pháp nhận dạng mẫu hoặc phương pháp ngữ



8


âm-âm vị học. Do những đặc tính của mình (được trình bày kĩ ở phần 2), mạng
nơron được hi vọng sẽ tăng cường hiệu quả của các hệ nhận dạng tiếng nói.
Mạng nơron là phương pháp được chúng tôi nghiên cứu xây dựng hệ nhận
dạng trình bày trong khoá luận này.

1.2. NHẬN DẠNG TIẾNG VIỆT
1.2.1. Một số đặc điểm ngữ âm tiếng Việt
Một đặc điểm dễ thấy là tiếng Việt là ngôn ngữ đơn âm (monosyllable mỗi từ đơn chỉ có một âm tiết), không biến hình (cách đọc, cách ghi âm không
thay đổi trong bất cứ tình huống ngữ pháp nào). Tiếng Việt hoàn toàn khác với
các ngôn ngữ Ấn-Âu như tiếng Anh, tiếng Pháp là các ngôn ngữ đa âm, biến
hình.

Theo thống kê trong tiếng Việt có khoảng 6000 âm tiết. Nhìn về mặt ghi
âm: âm tiết tiếng Việt có cấu tạo chung là: phụ âm-vần. Ví dụ âm tin có phụ âm t,
vần in. Phụ âm là một âm vị và âm vị này liên kết rất lỏng lẻo với phần còn lại
của âm tiết (hiện tượng nói lái).
Vần trong tiếng Việt lại được cấu tạo từ các âm vị nhỏ hơn, trong đó có một
âm vị chính là nguyên âm.
Hình sau là phổ tín hiệu của âm tiết “ba”. Chúng ta có thể quan sát và phân
biệt rõ miền nhiễu nền, miền phổ của phụ âm b và nguyên âm a (miền đậm hơn
là có mật độ năng lượng lớn hơn).

Minh hoạ: Phổ tín hiệu của âm tiết “ba”, có miền nhiễu nền (silence), miền tín hiệu của
phụ âm /b/ và nguyên âm /a/ (miền đậm hơn là có mật độ năng lượng lớn hơn).



9


Quan sát phổ các âm tiết tương tự chúng ta có thể rút ra kết luận: các phụ
âm và nguyên âm đều phân biệt với nhau rất rõ qua sự phân bố năng lượng tại
các miền tần số, ví dụ: phụ âm ở tần số thấp, năng lượng nhỏ, nguyên âm có năng
lượng lớn ở cả vùng tần số cao. Vùng không có tín hiệu tiếng nói (nhiễu nền và
khoảng lặng) có năng lượng thấp và chỉ tập trung ở các tần số rất thấp.
Các nguyên âm có tần phổ (spectrum) khác nhau khá rõ. Hình sau minh hoạ
sự khác nhau về phổ của 5 nguyên âm cơ bản. Miền đậm là miền có mật độ năng
lượng cao.

Minh hoạ: Sự khác nhau về phổ của 5 nguyên âm cơ bản. Miền đậm là miền có mật độ
năng lượng cao (vùng có formant).


Theo tác giả Đoàn Thiện Thuật ([3]), xét về mặt ngữ âm-âm vị học âm tiết
tiếng Việt có lược đồ như sau:
Âm đầu

Thanh điệu
Vần
Âm đệm
Âm chính

Âm cuối

Lược đồ cho thấy âm tiết tiếng Việt có cấu trúc rõ ràng, ổn định. Lược đồ
còn cho thấy tiếng Việt là ngôn ngữ có thanh điệu. Hệ thống thanh điệu gồm 6
thanh: bằng, huyền, sắc, hỏi, ngã, nặng.
Thanh điệu trong âm tiết là âm vị siêu đoạn tính (thể hiển trên toàn bộ âm
tiết). Do đó đặc trưng về thanh điệu thể hiện trong tín hiệu tiếng nói không rõ nét
như các thành phần khác của âm tiết.
Sự khác biệt về cách phát âm tiếng Việt rất rõ rệt theo giới, lứa tuổi và đặc
biệt là theo vị trí địa lí (giọng miền Bắc, miền Trung và miền Nam khác nhau rất
nhiều).



10


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
1.2.2.1. Thuận lợi
Những đặc điểm ngữ âm tiếng Việt cho thấy nhận dạng tiếng nói tiếng Việt

có một số thuận lợi sau:




Tiếng Việt là ngôn ngữ đơn âm, số lượng âm tiết không quá lớn. Điều
này sẽ giúp hệ nhận dạng xác định ranh giới các âm tiết dễ dàng hơn
nhiều. Đối với hệ nhận dạng các ngôn ngữ Ấn-Âu (tiếng Anh, tiếng
Pháp...) xác định ranh giới âm tiết (endpoint detection) là vấn đề rất
khó và ảnh hưởng lớn đến kết quả nhận dạng.
Tiếng Việt là ngôn ngữ không biến hình từ. Âm tiết tiếng Việt ổn
định, có cấu trúc rõ ràng. Đặc biệt không có 2 âm tiết nào đọc giống
nhau mà viết khác nhau. Điều này sẽ dễ dàng cho việc xây dựng các
mô hình âm tiết trong nhận dạng; đồng thời việc chuyển từ phiên âm
sang từ vựng (lexical decoding) sẽ đơn giản hơn so với các ngôn ngữ
Ấn-Âu. Theo [10], việc chuyển từ phiên âm sang từ vựng cũng là một
vấn đề khó khăn trong nhận dạng các ngôn ngữ Ấn-Âu.

1.2.2.2. Khó khăn
Ngoài những thuận lợi trên, nhận dạng tiếng nói tiếng Việt cũng gặp rất
nhiều khó khăn như sau:








Tiếng Việt là ngôn ngữ có thanh điệu (6 thanh). Thanh điệu là âm vị

siêu đoạn tính, đặc trưng về thanh điệu thể hiện trong tín hiệu tiếng
nói không rõ nét như các thành phần khác của âm tiết.
Cách phát âm tiếng Việt thay đổi nhiều theo vị trí địa lí. Giọng địa
phương trong tiếng Việt rất đa dạng (mỗi miền có một giọng đặc
trưng).
Hệ thống ngữ pháp, ngữ nghĩa tiếng Việt rất phức tạp, rất khó để áp
dụng vào hệ nhận dạng với mục đích tăng hiệu năng nhận dạng. Hệ
thống phiên âm cũng chưa thống nhất.
Các nghiên cứu về nhận dạng tiếng Việt cũng chưa nhiều và ít phổ
biến. Đặc biệt khó khăn lớn nhất là hiện nay chưa có một bộ dữ
liệu chuẩn cho việc huấn luyện và kiểm tra các hệ thống nhận
dạng tiếng Việt.



11


CHƯƠNG 2. MÔI TRƯỜNG
MATLAB.
Matlab (Matrix Laboratory) là một môi trường trợ giúp tính toán và hiển thị
rất mạnh được hãng MathWorks phát triển. Mức phát triển của Matlab ngày nay
đã chứng tỏ Matlab là một phần mềm có giao diện cực mạnh cùng nhiều lợi thế
trong kĩ thuật lập trình để giải quyết những vấn đề đa dạng trong nghiên cứu
KHKT.
Phần tử tính toán cơ bản của Matlab là các ma trận. Giao diện cơ sở của
Matlab là các dòng lệnh. Ngoài thư viện các hàm tính toán, vào-ra, đồ hoạ… cơ
bản, Matlab còn có các toolbox là các thư viện cho từng lĩnh vực cụ thể. Ví dụ có
toolbox cho xử lí tín hiệu (Signal Processing), mô phỏng mô hình (SimulLink),
logic mờ (Fuzzy Logic), mạng nơron (NNet), … thậm chí cho cả thiết kế máy

bay (Aerospace) hay giải phương trình vi phân (PDE)…
Matlab cũng hỗ trợ lập trình và cho phép tích hợp thư viện do người dùng
xây dựng. Câu lệnh của Matlab được viết rất sát các mô tả kĩ thuật nên lập trình
trên Matlab nhanh và đơn giản hơn so với các ngôn ngữ thông dụng như Pascal,
Fortran… Cú pháp lập trình của Matlab giống C nên không quá khó học. Đặc
biệt Matlab còn có các giao thức để liên kết với các môi trường lập trình khác,
nhất là VC++, chẳng hạn cho phép dịch các hàm trong Matlab thành các chương
trình nguồn C/C++ hoặc hỗ trợ các thư viện DLL từ bên ngoài.
Do những điểm mạnh như vậy của Matlab, chúng tôi quyết định sẽ dùng
Matlab để phát triển hệ nhận dạng của mình.



12


2.1. GIAO DIỆN VÀ CÁC THÀNH PHẦN CƠ BẢN CỦA
MATLAB
Giao diện làm việc thường gặp của Matlab như sau:

Giống như các môi trường khác như AutoCAD, để thao tác với Matlab, ta
gõ lệnh trên cửa sổ lệnh hoặc sử dụng menu. Phần tiếp theo của chương sẽ trình
bày về cách sử dụng lệnh trong Matlab.

2.1. LỆNH TRONG MATLAB
Lệnh trong Matlab có thể phân loại theo chức năng như sau:





Lệnh thực hiện chức năng cơ bản của Matlab. Ví dụ: lệnh help để gọi
trợ giúp, mcc để gọi trình biên dịch của Matlab…
Lệnh gọi hàm và gọi script.
Lệnh thao tác biến (hiển thị, gán trị…).

Sau đây là ví dụ một số lệnh trong Matlab. Đoạn lệnh sau thực hiện việc
tính toán khoảng cách 2 điểm:
>>p1 = [1 2];
>>p2 = [3 4];
>>v = p2 - p1;
>>d = norm(vt)



13


Sau khi Matlab thực hiện xong đoạn lệnh (xem hình minh hoạ), ta rút ra
một số nhận xét:








Câu lệnh Matlab có dấu nhắc là >>. Dấu nhắc này do Matlab sinh
ra, ta không cần phải gõ vào. Sau này để đơn giản trong các phần sau
câu lệnh Matlab chúng tôi sẽ thêm không phần dấu nhắc nữa.

Câu lệnh Matlab có thể kết thúc bằng dấu ; hoặc không có. Sau đó
khi gõ lệnh xong, gõ phím Enter thì lệnh sẽ được thực hiện. Nếu
không có dấu ; thì Matlab hiển thị kết quả tính toán (đôi khi rất dài và
làm chậm hệ thống), còn nếu có dấu ; thì Matlab không hiển thị.
Kí pháp 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ụ
mô tả ma trân [1 2; 3 4]. (Chú ý mỗi dòng phải có số phần tử bằng
nhau). Trong đoạn trình này p1, p2 là 2 ma trận 1x2 mô tả toạ độ 2
điểm. v=p2-p1 là vector tạo bởi 2 điểm p1, p2.
Câu lệnh d = norm(vt) là câu lệnh gán trị, đồng thời là câu lệnh gọi
hàm: norm là hàm lấy chuẩn của vector.

Bảng sau liệt kê một số lệnh cơ bản của Matlab:
Lệnh

Ý nghĩa

clc

Xoá cửa sổ lệnh.

Clf

Xoá cửa sổ đồ hoạ.

exit, quit

Thoát khởi Matlab.


help
hàm...>

lệnh, Trợ giúp về tên lệnh, hàm.

pause

Tạm dừng, ấn phím bất kì để tiếp tục

disp

Hiển thị biến hoặc xâu

Ctrl+C

Thoát khỏi lệnh đang thực thi (trong trường hợp
chạy quá lâu hoặc lập trình sai nên không thoát
được).



Gọi lại các lệnh ở phía trên.

2.2. BIẾN TRONG MATLAB
2.2.1. Sử dụng biến trong Matlab
Phần tử không thể thiếu trong Matlab, cũng như trong các ngôn ngữ lập
trinh là biến. Biế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ả.



14


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 <filename>

Ghi toàn bộ không gian làm việc vào file
.MAT có tên là <filename>

Save <filename> x

Ghi biến x vào file .MAT có tên là <filename>

Save <filename> x y z

Ghi các biến x,y,z vào file .MAT có tên là
<filename>

Load <filename>

Đọc các biến trong file .MAT có tên là


15


<filename> vào không gian làm việc.
Load <filename> x

Đọc giá trị của biến x từ file .MAT có tên là

<filename>

Load <filename> x y z

Đọc giá trị các biến x,y,z từ file .MAT có tên
là <filename>

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...
⎡1 2 3 ⎤
Ví dụ ma trận ⎢⎢4 5 6⎥⎥ được mô tả trong Matlab là [1 2 3; 4 5 6; 7 8 9].
⎢⎣7 8 8⎥⎦


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


16


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


17


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


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.

A-B
A.*B
A./B
A.^B

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:



18


n


C(i, j) = ∑ A(i, k ) * B(k , j)
k =1

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)



19


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),
atan(x)

acos(x), Các hàm lượng giác arcsin, arccos, arctang

Cho arctg của y/x trong khoảng -π đến π,
tuỳ thuộc vào dấu của x,y

atan2(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);

Tìm phần tử lớn nhất/nhỏ nhất của X. xm là giá trị,
id là chỉ số.

[xm id] =min(X);
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


20


(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

angle(x)

argument

i,j

Kí hiệu đơn bị ảo.

a 2 + b2

arctg(b/a)
−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.



21


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 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.



22


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 ra>]=<tên hàm>(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:
<biến>=<biểu thức>



23


Khi thực hiện lệnh gán, nếu <biến> 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 <biểu thức>, sau đó gán giá trị của <biểu thức> cho
biến. Ở đây: <biểu thức> 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 <biểu thức logic>
<nhóm lệnh>
end;

Thực thi:
Lệnh này kiểm tra giá trị của <biểu thức logic>, nếu kết quả là đúng
(khác 0) thì thực hiện <nhóm lệnh>.
2/ Lệnh if else
Cú pháp:
if <biểu thức logic>
<nhóm lệnh 1>
else
<nhóm lệnh 2>
end;

Thực thi:
Lệnh này kiểm tra giá trị của <biểu thức logic>, nếu kết quả là đúng
(khác 0) thì thực hiện <nhóm lệnh 1>, ngược lại thì thực hiện 2>.
3/ Lệnh if elseif
Cú pháp
if <biểu thức logic 1>
<nhóm lệnh 1>
elseif <biểu thức logic 2>



24



<nhóm lệnh 2>
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 <biểu thức logic 1>
<nhóm lệnh 1>
else
if <biểu thức logic 2>
<nhóm lệnh 2>
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 <chỉ số> = <biểu thức>
<nhóm lệnh>
end;

Trong đó <chỉ số> là một biến, <biểu thức> là vector, ma trận hoặc
giá trị vô hướng.
Quy tắc sử dụng:






Nếu <biểu thức> là ma trận rỗng thì vòng for không thực hiện.
Nếu <biểu thức> là giá trị vô hướng (ma trận 1x1) thì <chỉ số> được
gán bằng giá trị vô hướng đó và <nhóm lệnh> thực hiện đúng một
lần.
Nếu <biểu thức> là một vector (ma trận nx1 hoặc 1xn) thì lệnh> thực hiện n lần, mỗi lần <chỉ số> nhận một phần tử của vector
(từ trái sang phải).


25


×