thiết kế hệ thống trả lời tự động, chương 14

Chia sẻ: Nguyen Van Dau | Ngày: | Loại File: PDF | Số trang:17

0
103
lượt xem
45
download

thiết kế hệ thống trả lời tự động, chương 14

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

oàn bộ môdun được thiết kế theo hướng ñối tượng kể cả CSDL nên dễ nâng cấp sửa chữa về sau, và ñược thiết kế ñộc lập nên khi sửa ñổi CSDL không làm ảnh hưởng tới chương trình. + Môdun sử dụng Font Unicode là Font khá thông dụng hiện nay. + Môdun ñược lập trình trên nền .Net kích thước File CSDL khá nhỏ nên có thể dễ dàng chuyển ñổi sang các ứng dụng chạy trên ñiện thoại di ñộng. 3.2.2.2.4 Một số vấn ñề và giải pháp. * Vấn ñề lưu trữ CSDL. + Vấn ñề...

Chủ đề:
Lưu

Nội dung Text: thiết kế hệ thống trả lời tự động, chương 14

  1. Chương 14: Một số đặc trưng của chương trình
  2. + Toàn bộ môdun ñược ñóng gói thành một dll nên dễ dàng thừa kế cho các ứng dụng khác. + Toàn bộ môdun ñược thiết kế theo hướng ñối tượng kể cả CSDL nên dễ nâng cấp sửa chữa về sau, và ñược thiết kế ñộc lập nên khi sửa ñổi CSDL không làm ảnh hưởng tới chương trình. + Môdun sử dụng Font Unicode là Font khá thông dụng hiện nay. + Môdun ñược lập trình trên nền .Net kích thước File CSDL khá nhỏ nên có thể dễ dàng chuyển ñổi sang các ứng dụng chạy trên ñiện thoại di ñộng. 3.2.2.2.4 Một số vấn ñề và giải pháp. * Vấn ñề lưu trữ CSDL. + Vấn ñề : CSDL là một kiểu dữ liệu có cấu trúc chứa danh sách các diphone.Trong ñó mỗi Diphone là một ñối tượng có các thuộc tính như mảng dữ liệu của File Wav, mảng toạ ñộ các ñiểm cực trị, toạ ñộ ñiểm nối vv... nên việc lưu trữ dữ liệu theo kiểu tuần tự là khó khăn và phức tạp thậm trí việc tìm kiếm truy cập, cập nhật là khó do kiểu lưu trữ tuần tự gây ra ví dụ khi thay ñổi khíc thước, dung lượng của một Diphone có thể sẽ làm mất hoặc sai lệch các dữ liệu của Diphone ñằng sau nó + Ý tưởng và giải pháp : coi toàn bộ CSDL là một Object có cấu trúc và lưu toàn bộ Object này xuống ổ cứng. ðể giải quyết vấn ñề này em sử dụng một formatter ñể tuần tự hóa ñối tượng và ghi nó vào một System. IO. FileStream. Khi cần truy xuất ñối tượng, sử dụng formatter cùng kiểu ñể ñọc dữ liệu ñược-tuần-tự-hóa từ file
  3. và giải tuần tự hóa ñối tượng. Thư viện lớp. NET Framework cung cấp các hiện thực formatter sau ñây ñể tuần tự hóa ñối tượng theo dạng nhị phân hay SOAP: System. Runtime. Serialization. Formatters. Binary. BinaryFormatter System. Runtime. Serialization. Formatters. Soap. SoapFormatter
  4. Lớp BinaryFormatter và SoapFormatter có thể ñược sử dụng ñể tuần tự hóa một ñối tượng của bất kỳ kiểu nào ñược gắn với ñặc tính System. SerializableAttribute. BinaryFormatter sinh ra một stream dữ liệu nhị phân mô tả ñối tượng và trạng thái của nó, trong khi SoapFormatter sinh ra một tài liệu SOAP. Cả hai lớp BinaryFormatter và SoapFormatter ñều hiện thực giao diện System. Runtime. Serialization. IFormatter, giao diện này ñịnh nghĩa hai phương thức: Serialize và Deserialize. Serialize nhận một tham chiếu System. Object và một tham chiếu System. IO. Stream làm ñối số, tuần tự hóa Object và ghi nó vào Stream. Deserialize nhận một tham chiếu Stream làm ñối số, ñọc dữ liệu của ñối tượng ñược-tuần-tự-hóa từ Stream, và trả về một tham chiếu Object ñến ñối tượng ñược-giải-tuần-tự-hóa. Ta phải ép tham chiếu Object này về kiểu thích hợp. * Vấn ñề tách dấu và tìm kiếm các Diphone + Vấn ñề : Một trong những bước quan trọng của bước tổng hợp mức cao ñó là tìm ñược vị trí nguyên âm ñầu tiên và dấu của từ là gì. ví dụ dấu huyền dấu sắc hay dấu hỏi…hay như khi ñã tìm ñược Diphone ñó là Diphone gì thì việc xác ñịnh vị trí của nó trong CSDL như thế nào? Việc viết các hàm kiểm tra và tìm kiếm này không khó tuy nhiên tốc ñộ thực thi phải nhanh và tối ưu. + Ý tưởng và giải pháp : Sử dụng các tập hợp của. Net cung
  5. cấp sẵn. cụ thể vấn ñề xác ñịnh kí tự ñó có phải là nguyên âm hay không hoặc kí tự ñó có chứa dấu hay không trong C# em sử dụng tập hợp StringCollection và sử dụng hàm Contains() ñể kiểm tra kí tự ñó có thuộc tập hợp hay không. Còn vấn ñề tìm kiếm em sử dụng bảng băm Hashtable, Hashtable là kiểu cấu trúc
  6. dữ liệu có mục tiêu tối ưu hoá việc tìm kiếm trong. Net. Hashtable là một kiểu từ ñiển ( kiểu tập hợp trong ñó có 2 thành phần chính liên hệ với nhau là khóa và giá trị) ñược tối ưu cho việc truy cập nhanh. Khi chúng ta truy cập một giá trị trong hashtable thì phải cấp một khóa. Khóa trong hashtable có thể là kiểu dữ liệu ñược xây dựng sẵn hay cũng có thể là thể hiện của kiểu dữ liệu do người dùng tạo ra. * Vấn ñề cắt và ghép nối các Diphone. + Vấn ñề : Sau khi thu âm ñược các từ mẫu, vấn ñề tiếp theo là phải tách từ ñã thu ñể thu ñược các diphone mong muốn. Do ñặc ñiểm từ ñơn âm tiết của tiếng Việt nên từ mẫu ñược tạo nên từ hai diphone, diphone bắt ñầu và diphone kết thúc. ðể có ñược các diphone này, ta phải cắt ra các ñoạn tín hiệu từ mẫu ñã có. Các diphone bắt ñầu ñược cắt từ phần bên trái của mẫu và các diphone kết thúc ñược cắt từ phần bên phải của mẫu. Các ñiểm cắt ñược xác ñịnh trực tiếp bằng mắt. ðiểm cắt phải thoả mãn ñiều kiện: + Nằm trong phần tín hiệu ổn ñịnh.. + ðiểm cắt bên phải của diphone bắt ñầu và ñiểm cắt bên trái của diphone kết thúc phải nằm tại ñỉnh cao nhất trong một chu kỳ của phần tín hiệu tương ứng với nguyên âm (gần như tuần hoàn). ðiều này bảo ñảm rằng hai diphone dùng ñể ghép nối không bị lệch pha nhiều. Sinh Viên : Trần Thành ðức - Lớp : 46TH Trang 59
  7. HÌnh 3.12 Vịtrí ñiểm cắt Sinh Viên : Trần Thành ðức - Lớp : 46TH Trang 60
  8. + Ý tưởng và giải pháp : Em không sử dụng khái niệm “ñiểm cắt-ñiểm nối ” mà ñưa ra khái niệm “ðoạn nối”.Vị trí ñoạn nối này cũng vẫn phải thỏa mãn ñiều kiện là nắm trong phân tín hiệu ổn ñịnh và vị trí ñiểm cắt cũng phải nằm tại ñỉnh cao nhất trong một chu kỳ của phần tín hiệu tương ứng. Cụ thể quá trình xử lý nối hai Diphone ñược tiến hành như sau : - Bước 1 : Tiến hành cắt Diphone như bình thường. - Bước 2 : Áp dụng biến ñổi khung OLA cho ½ chu kì bên phải của Diphone bên trái, tương tự cũng áp dụng ñổi khung OLA cho ½ chu kì bên trái của Diphone bên phải. -Bước 4 : ðiều chỉnh cường ñộ của hai Diphone ñảm bảo không có hiện tượng chênh lệch về cường ñộ do quá trình thu âm gây ra. -Bước 5 : Cộng xếp chồng hai Diphone ñể dược từ hoàn chỉnh Nửa bên trái sau khi cắt và xử lý khung OLA Nửa bên phải sau khi cắt và xử lý khung OLA
  9. Hình 3.13 Kết quả sau khi cộng xếp chồng 2 nửa. - ðể ý rằng do sử dụng giải thuật cộng xếp chồng hai nửa tín hiệu mà tín hiệu giường như ñược biến ñổi một cách từ từ từ ñoạn thứ nhất sang ñoạn thứ hai, hay nói cách khác “ñoạn nối” ñã ñược làm “trơn”. Và với phương pháp tách riêng hai nửa chu kì kết hợp với biến ñổi về cường ñộ cho một số khung OLA ở gần chỗ cắt hoàn toàn có thể tăng ñược ñộ dài của ñoạn nối lên To,3/2To,2To,vv…Nghĩa là làm tín hiệu ñược biến ñổi một cách dần dần từ ñoạn 1 sang ñoạn 2. - ðể thuận tiện cho người sử dụng việc cắt các Diphone em hỗ trợ hai phương pháp. Phương pháp 1 : Sử dụng một phần mềm xử lý âm thanh ñể cắt file Wav một cách trực tiếp sau ñó lưu file Wav này vào CSDL. Phương pháp 2 : sử dụng dữ liệu của một từ ñã có trong CSDL và chỉ ra vị trí ñiểm cần cắt và chương trình sẽ tự ñộng cắt lấy Diphone tương ứng. Ưu ñiểm của phương pháp thứ 2 là không phụ thuộc vào chương trình trung gian và kích thước CSDL tạo ra sẽ nhỏ hơn tuy nhiên chi phí tính toán sẽ nhiều hơn so với phương pháp 1. * Vấn ñề biến ñổi cường ñộ và trường ñộ. + Vấn ñề : Khi ghép nối các Diphone hay ghép nối các từ có hiện tượng không ñồng bộ về cường ñộ do quá trình thu âm gây ra .Vì vậy cần phải biến ñổi cường ñộ ñể cho
  10. cường ñộ của các từ hay các diphone ñồng bộ.Vấn ñề tiếp là trong các câu có ngữ ñiệu hay biến ñổi từ không dấu thành từ có dấu vv..thì yếu tố biến ñổi về trường ñộ cũng có vai trò quan trọng. + Ý tưởng và giải pháp : Vấn ñề biến ñổi cường ñộ ñược thực hiện bằng cách biến ñổi trực tiếp(cộng, trừ, nhân, chia….) dữ liệu của File Wav .Vấn ñề biến ñổi về trường ñộ ñược giải quyết bằng cách sử
  11. dụng ArrayList ñể cài ñặt mảng OLA. Việc kéo dãn hay thu ngắn trường ñộ của từ ñược thực hiện bằng cách thêm hoặc bớt một phần tử của ArrayList tại vị trí xác ñịnh. Lớp ArrayList hỗ trợ phương thức Insert() ñể thêm một phần tử và phương thức RemoveAt() ñể gỡ bỏ một phần tử tại vị trí xác ñịnh của mảng. * Vấn ñề biến ñổi tần số cơ bản . + Vấn ñề : Giải thuật TD-PSOLA sử dụng biến ñổi tần số cơ bản của một từ không dấu ñể tạo ra từ có dấu ,vì vậy mà làm giảm kích thước CSDL. + Ý tưởng và giải pháp : Quá trình thay ñổi tần số cơ bản ñược tiến hành bằng cách thay ñổi khoảng cách giữa các khung OLA.Chiều dài của một khung OLA là một chu kì cơ bản. Tuy nhiên tâm của khung OLA lại không nằm chính giữa. ðể tăng ñộ chính xác em ñưa ra khái niệm ñó là sử dụng khung OLA bất ñối xứng. Trong ñó hai nửa của khung OLA nửa trái và và nửa phải ñược tách và xử lí riêng. Phương pháp này cũng làm cho việc xử lí các phụ âm sát như sắc, chắc, sắn, sán, xá vv… một cách dễ dàng và mềm dẻo hơn.
  12. Hình 3.14 Một khung OLA khi chưa qua xử lí
  13. Quá trình giảm tần số cơ bản sẽ là quá trình tăng khoảng cách giữa các khung OLA.Ngược lại quá trình tăng tần số cơ bản sẽ là quá trình giảm khoảng cách giữa các khung OLA .Khoảng cách giữa 2 khung OLA chính bằng ½ chu kì cơ bản. Hình 3.15 Một khung OLA sau khi ñược tách và xử lí 3.2.2.2.5 Chương trình thử nghiệm. Toàn bộ Môdun ñược ñóng gói thành một lớp trong một dll nên việc sủ dụng rất ñơn giản. Cụ thể như sau : //Khởi tạo một ñối tượng Speaker Speaker TL_Speak = new Speaker();
  14. //Phát âm ra loa.
  15. TL_Speak.Speak("Khoa Công Nghệ Thông Tin Trường ðại Học Thuỷ Lợi"); //Hiện ñồ thị sóng âm lên pictureBox2. TL_Speak.RenderTimeDomainLeft(ref pictureBox2); //Lưu File xuống ổ cứng. TL_Speak.Save(@"c:\output.w av");
Đồng bộ tài khoản