1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

53 638 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 837,58 KB

Nội dung

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

Trang 1

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

Trang 2

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

Trang 3

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

Trang 4

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

Trang 5

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…

Trang 6

• 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

Trang 7

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:

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

Trang 8

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ữ

Trang 9

â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)

Trang 10

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 độ

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:

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)

Trang 11

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

• 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

Trang 12

CHƯƠNG 2 MÔI TRƯỜNG

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

Trang 13

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)

Trang 14

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:

hàm >

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

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ả

Trang 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:

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

Trang 16

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

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

6 5 4

3 2 1

đượ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

Trang 17

Viết trong Matlab Ý nghĩa

[] Ma trận rỗng

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]

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

Trang 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]

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:

Trang 19

=

= n

1 k

)jk(B

*)k,i(A)

j(C

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)

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

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

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

phức thì cho môđun của x

x.^(1/n)

Trang 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

mod y x div y chính là floor(x/y)

vị radian

asin(x), acos(x),

atan(x)

Các hàm lượng giác arcsin, arccos, arctang

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

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

Trang 21

(có giá trị thực từ 0 đến 1), fs là tần số lấy mẫu (giá trị nguyê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:

dụ đối với x=a+bi

Viết trong Matlab Ý nghĩa Kết quả

i,j Kí hiệu đơn bị ảo − 1Cá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

Trang 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

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

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

Trang 24

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

Trang 25

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

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

• 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ì <nhóm 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)

Trang 26

• Nếu <biểu thức> là một ma trận (ma trận mxn) thì <nhóm lệnh> thực

hiện m lần, mỗi lần <chỉ số> nhận một vector cột của ma trận (từ trái

• Nếu <biểu thức> đúng thì thực hiện <nhóm lệnh>

• Thực hiện xong lại quay lại kiểm tra <biểu thức> 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ỡ:

Ngày đăng: 21/06/2015, 23:36

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w