PHÂN TÍCH BÀI TOÁN
6.2.5 Modul chương trình chính
Đối với một phần mềm, modul chương trình chính luôn thể hiện những ý đồ chủ đạo từ việc nhận các dữ liệu từ giao diện, thông qua các bước tiến hành và cuối cùng là thể hiện kết quả ra màn hình. Xét riêng trong trường hợp bài toán nhận dạng nguyên âm mà chúng ta đang nghiên cứu, với mục đích độc lập với
phần thiết kế giao diện, đồng thời trao trách nhiệm thể hiện kết quả ra màn hình cho các modul khác trong quá trình hoạt động của chúng, modul chương trình chính chỉ bao gồm các thủ tục sau:
* Các thủ tục có các tham biến được truyền trực tiếp từ giao diện thể hiện các công việc chủ đạo như: cấu tạo một mạng neuron chuyên biệt; thực hiện các bước tiến hành cần thiết cho việc xử lý các file âm thanh, tích luỹ mạng hay đánh giá tính năng nhận dạng.
* Một số phép xử lý đặc biệt có quy mô nhỏ như: tạo mức neuron đạo hàm bậc nhất, chuẩn hoá đầu vào ...
Chương 7
GIỚI THIỆU PHẦN MỀM CÀI ĐẶT
Sau khi tiến hành phân tích và thiết kế bài toán cần thực hiện, tác giả bản luận văn này đã cố gắng cài đặt phần mềm thử nghiệm bằng ngôn ngữ C được biên dịch trên nền Microsoft Visual C++. Tuy nhiên do hạn chế về thời gian và năng lực cá nhân, phần mềm đã cài đặt chưa được hoàn thiện cả về mặt giao diện lẫn sự vận hành. Trong chương này, tác giả xin giới thiệu về những gì đã thực hiện được trong quá trình cài đặt phần mềm.
7.1 Khái quát về kết quả cài đặt
Nhìn một cách tổng thể, phần mềm hoạt động như sau:
* Bằng giao diện, người sử dụng mở (hoặc tạo mới) một file chứa mạng neuron (*.net).
* Người sử dụng nhập vào danh sách các file âm thanh (*.wav) và tiến hành xử lý tín hiệu để có được các file tham số đặc trưng với cùng tên nhưng có phần mở rộng khác (*.dat).
* Người sử dụng chọn các file âm thanh thuộc cùng một nguyên âm rồi thực hiện tạo các file chứa các giá trị đích (*.tag) tương ứng với nguyên âm đó cho tất cả các file được chọn. Các file *.tag cũng có cùng tên với các file âm thanh (*.wav).
* Người sử dụng chọn một tập hợp các cặp file tham số đặc trưng và file giá trị đích (mỗi cặp file có cùng tên và cùng tương ứng với một file âm thanh). Tập hợp này có thể coi là tập hợp các ví dụ tích luỹ và tiếp theo là tiến hành tích luỹ mạng neuron (trong file đang mở (*.net)) theo thuật toán back-propagation. Trong thời gian tích luỹ, phần mềm sẽ dần thông báo trạng thái hoạt động cũng như kết quả đạt được ra màn hình.
* Người sử dụng cũng chọn một tập hợp các cặp file như trên nhưng tập hợp này được coi là tập hợp các ví dụ kiểm tra. Mỗi vector feature trong file tham số đặc trưng sẽ được tiến hành phân loại (nhận dạng) bằng mạng neuron trong file đang mở (*.net); kết quả phân loại sẽ được đem so sánh với các giá trị đích để quyết định xem vector đó có được phân loại đúng không. Cuối cùng tỷ lệ frame nhận dạng đúng cho từng loại nguyên âm sẽ được thông báo lên màn hình.
7.2 Các modul đã cài đặt
Vai trò và chức năng chung của tất cả các modul đã được nêu ra trong thiết kế của phần mềm. Dưới đây tác giả xin trình bày một số chi tiết về cài đặt cho các modul.
7.2.1 Modul MainProg
Đây là modul chương trình chính, nó cung cấp những thủ tục sau cho phần giao diện:
/* Tạo nên một mạng neuron chuyên biệt */
void MakeInitNet(char* NetName, char* Dir, char* ParamDir, char* TargDir);
/* Tạo các file tham số chứa các giá trị đích cho các file âm thanh */
int MakeTarget(int NumFiles, char** WavFiles, char* TargFile);
/* Thực hiện quá trình tích luỹ */
void Training(char** inList1, int NumFiles, char* NetName, char* Dir,
char** EvalList1, int NumEvalFiles);
/* Thực hiện xử lý filter bank và tạo ra các file tham số chứa các vector feature cho các file âm thanh */
void FilterBank(char** WavsList1, int NumWavs,
char* ParamsDir, char* WavsDir);
/* Thực hiện đánh giá tính năng nhận dạng */
void RunNet(char* NetName, char* Dir,
char** ParamsList1, int NumParams);
Hình 7.1 Khái quát trình tự thi hành của phần mềm
Sau đây là chi tiết về ba thủ tục thực hiện chính:
void Training(char** inList1, int NumFiles, char* NetName, char* Dir,
char** EvalList1, int NumEvalFiles,
int Numiters, float Threshold) {
Net *ann; char** inList; char** EvalList;
Hình 7.2 Kiến trúc khái quát của mạng neuron thử nghiệm
/* Đọc file chứa mạng neuron từ đĩa */
NetName = MakeName(Dir, NetName, "net"); ann = LoadNet(NetName);
/* Chuẩn hoá đầu vào */
NormConnector("CEP", ann, inList, NumFiles, 1.0);
NormGroup("diff1", ann, inList, NumFiles, 1.0); NormGroup("diff2", ann, inList, NumFiles, 1.0);
/* Truyền giá trị cho tham biến xác lập chế độ tích luỹ */
ResetBackPropVar();
SetBackPropVar('m', 0, 0, 0.7, 0.0, NULL, NULL, NULL); SetBackPropVar('g', 0, 0, 1e-5, 0.0, NULL, NULL, NULL); SetBackPropVar('i', Numiters, 0, 0.0, 0.0, NULL, NULL,
NULL);
SetBackPropVar('F', 20, 30, 0.0, 0.0, NULL, NULL, NULL); SetBackPropVar('e', 0, 0, Threshold, 0.0, NULL, NULL,
NULL);
SetBackPropVar('n', 0, 0, 0.0, 0.0, NetName, NULL, NULL); SetBackPropVar('x', NumFiles, 0, 0.0, 0.0, NULL, NULL,
inList);
/* Thực hiện tích luỹ */
BackPropTrain(ann);
FREE2D(inList, NumFiles) SaveNet(NetName, ann);
FreeNet(ann); }
void MyFilterBank(char** WavsList1, int NumWavs, char* ParamsDir, char* WavsDir) {
char** WavsList;
WavsList = CutDirExt(WavsList1, NumWavs);
/* Truyền giá trị cho tham biến xác lập chế độ x/lý*/
ResetFibVar();
SetFibVar('d' ,0, 0, 0, ParamsDir, NULL); SetFibVar('x' ,0, 0, 0, "dat", NULL); SetFibVar('p' ,0, 0, 0, WavsDir, NULL); SetFibVar('q' ,0, 0, 0, "wav", NULL);
SetFibVar('i', NumWavs, 0, 0, NULL, WavsList); SetFibVar('n', 24, 0, 0, NULL, NULL);
SetFibVar('c', 12, 0, 0, NULL, NULL); SetFibVar('e', 0, 0, 0, NULL, NULL);
/* Thực hiện xử lý filter bank */
FibAct();
FREE2D(WavsList, NumWavs) }
void MyRunNet(char* NetName, char* Dir,
char** ParamsList1, int NumParams) {
char** ParamsList;
/* Đọc file chứa mạng neuron từ đĩa */
ParamsList = CutDirExt(ParamsList1, NumParams); NetName = MakeName(Dir, NetName, "net"); LoadNet(NetName);
/* Truyền giá trị cho tham biến */
ResetEvaluationVar();
SetEvaluationVar('t', 0, NetName, NULL);
SetEvaluationVar('i', NumParams, NULL, ParamsList);
/* Thực hiện đánh giá tính năng cho mạng neuron */
Evaluation();
FREE2D(ParamsList, NumParams) }