Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Bài tập lớn xử lý tiếng nói xử lý đồng hình...

Tài liệu Bài tập lớn xử lý tiếng nói xử lý đồng hình

.PDF
25
151
71

Mô tả:

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BỘ MÔN KỸ THUẬT MÁY TÍNH ********* BÁO CÁO BÀI TẬP LỚN XỬ LÝ TIẾNG NÓI Đề Tài : Xử lý đồng hình Giáo viên hướng dẫn: GS.TS. Trịnh Văn Loan Sinh viên thực hiện: Nguyễn Thượng Khang MSSV: 20083366 Nguyễn Anh Sơn MSSV: 20082230 Lớp : KTMT– K53 Hà Nội - 2012 Mục lục I. Lý thuyết: ...................................................................................................... 3 1. Khái niệm tiếng nói và xử lý tiếng nói: .................................................. 3 1.1. Tiếng nói:........................................................................................... 3 1.2. Xử lý tiếng nói: .................................................................................. 3 2. Bộ máy phát âm của con người:............................................................. 3 3. Các đặc tính của âm thanh: .................................................................... 4 3.1. Đặc tính vật lý của âm thanh: .......................................................... 4 3.2. Đặc tính âm học của âm thanh: ....................................................... 4 4. Xử lý tín hiệu tiếng nói: .......................................................................... 8 4.1. Sự biểu hiện và phân tích tiếng nói: ................................................ 8 4.2. Phương pháp xử lý đồng hình: ...................................................... 10 4.3. Xác định tần số cơ bản F0:............................................................. 12 II. Thiết kế chương trình: ............................................................................... 15 1. Cấu trúc file wave:................................................................................. 15 1.1. Khái niệm về tập tin wave ............................................................... 15 1.2. Cấu trúc tập tin wave: ..................................................................... 15 2. Phân tích và thiết kế chức năng chương trình: ................................... 18 3. Cài đặt chương trình: ............................................................................ 18 4. Thử nghiệm chương trình: ................................................................... 25 2 I. Lý thuyết: 1. Khái niệm tiếng nói và xử lý tiếng nói: 1.1. Tiếng nói: Tiếng nói là phương tiện trao đổi thông tin của con người. Trung khu thần kinh điều khiển hệ thống phát âm và tạo ra âm thanh. Tiếng nói phân biệt với các âm thanh khác bởi các đặc tính âm học có nguồn gốc từ cơ chế tạo tiếng nói. Về bản chất tiếng nói là sự giao động của không khí có mang theo thông tin. Các giao động này tạo thành những áp lực đến tai và được tai phát hiện, phân tích chuyển đến trung khu thần kinh. Lúc này tại trung khu thần kinh thông tin được tái tạo dưới dạng tư duy logic mà con người có thể hiểu được. Tín hiệu tiếng nói được tạo thành bởi chuỗi các âm vị liên tiếp. Sự sắp xếp của các âm vị được chi phối bởi các quy tắc của ngôn ngữ. 1.2. Xử lý tiếng nói: Xử lý tiếng nói là xử lý thông tin chứa trong tín hiệu tiếng nói nhằm lan truyền, lưu trữ tín hiệu tiếng nói hoặc là tổng hợp nhận dạng tiếng nói. Mục đích của việc xử lý tiếng nói: - Mã hóa tiếng nói: Để lan truyền và lưu trữ tiếng nói một cách hiệu quả. - Tổng hợp và nhận dạng tiếng nói: Giúp giải quyết các vấn về giao tiếp giữa con người và hệ thống nói chung bằng tiếng nói. - Phân tích tiếng nói: Phục vụ cho việc nghiên cứu về tín hiệu tiếng nói. 2. Bộ máy phát âm của con người: Các thành phần giúp cho con người có thể phát âm bao gồm: Phổi, khí quản và các đường dẫn miệng mũi. Thanh quản: Chứa hai dây thanh và có thể giao động tạo ra sự cổng hưởng cần thiết để tạo ra âm thanh. Khoảng cách giữa hai dây thanh gọi là thanh môn. Vị trí nguồn âm của âm tuần hoàn nằm tại thanh môn. Chu kì rung của dây thanh (T0) được gọi là chu kì cơ bản, 1/T0 được gọi là tần số cơ bản. Toàn bộ bộ máy phát âm tính từ thanh môn trở lên gọi là tuyến âm. Cơ chế phát âm: - Tuyến âm được kích thích bởi nguồn năng lượng chính tại thanh môn. Luồng khí từ phổi đi lên qua khí quản, luồng khí này sẽ va chạm vào hai dây thanh trong tuyến âm. Hai dây thanh dao động sẽ tạo ra cộng hưởng, dao động âm sẽ được lan truyền theo tuyến âm và sau khi đi qua khoang mũi và môi sẽ tạo ra tiếng nói. - Khoang mũi là ống không đều bắt đầu từ môi. Kết thúc bởi vòm miệng, có độ dài cố định khoảng 12cm đối với người lớn. - Vòm miệng là các nếp cơ chuyển động. 3 3. Các đặc tính của âm thanh: 3.1. Đặc tính vật lý của âm thanh: - Độ cao: Độ cao hay còn gọi là độ trầm bổng của âm thanh. Độ trầm bổng của âm thanh phụ thuộc vào sự chuyển động nhanh hay chậm của các phần tử không khí trong một đơn vị thời gian. Nói cách khác, độ cao phụ thuộc vào tần số giao động. Đối với tiếng nói, tần số giao động của đôi dây thanh qui định độ cao giọng nói của con người và mỗi người có một độ cao giọng nói khác nhau. - Cường độ: Cường độ là độ to nhỏ của âm thanh, cường độ càng lớn thì âm thanh truyền đi càng xa trong môi trường có nhiễu. Cường độ của sóng tiếng nói do biên độ dao động của song qui định. Trong tiếng nói, cường độ của nguyên âm thường lớn hơn phụ âm nên tai người nghe nguyên âm dễ hơn. - Độ dài: Độ dài của âm phụ thuộc vào sự chấn động lâu hay mau của các phần tử không khí. Cùng một âm nhưng trong các từ khác nhau thì độ dài khác nhau. - Âm sắc: Âm sắc là sắc thái riêng của một âm, cùng một nội dung, cùng một độ cao nhưng mỗi người có âm sắc khác nhau. 3.2. Đặc tính âm học của âm thanh: Như đã nói tiếng nói được tạo thành bởi các chuỗi âm vị lien tiếp. Sự sắp xếp của các âm vị được chi phối bởi các qui tắc ngôn ngữ. Mỗi ngôn ngữ có số lượng các âm vị khác nhau, thông thường cỡ 20 – 30 và bé hơn 50 cho mọi ngôn ngữ. Các âm vị chia làm hai loại chính nguyên âm và phụ âm. a. Nguyên âm và phụ âm: Tín hiệu tiếng nói là tín hiệu tương tự biểu diễn thông tin về mặt ngôn ngữ và được mô tả bởi các âm vị khác nhau. Như vậy âm vị là đơn vị nhỏ nhất của ngôn ngữ. Tùy theo từng ngôn ngữ cụ thể mà số lượng các âm vị khác nhau. Các âm vị được chia thành: nguyên âm và phụ âm. Nguyên âm: Nguyên âm được tạo thành bằng sự cộng hưởng của dây thanh khi dòng khí được thanh môn đẩy lên. Khoang miệng được tạo lập thành nhiều hình dạng nhất tạo thành các nguyên âm khác nhau. Mỗi nguyên âm được đặc trưng bởi ba formant đầu. Phụ âm: Phụ âm được tạo ra bởi các dòng khí hỗn loạn được phát ra gần những điểm co thắt của đường dẫn âm thanh do cách phát âm tạo thành. Dòng không khí tại chỗ đóng của vòm miệng tạo ra phụ âm tắc. Những phụ âm xát được phát ra từ chỗ co thắt lớn nhất và các âm tắc xát tạo ra từ khoảng giữa. Phụ âm có đặc tính hữu thanh và vô thanh tùy thuộc vào dây thanh có dao động để tạo thành cộng hưởng không. Đặc tính của phụ âm tùy thuộc vào tính chu kì của dạng song, phổ tần số, thời gian tồn tại và sự truyền âm. Hệ thống âm vị: Hệ thống âm vị bao gồm 11 nguyên âm đơn, 3 nguyên âm đôi và 22 phụ âm. Sự phân biệt nguyên âm là theo độ nâng của lưỡi và sự 4 chuyển động của lười. Sự phân loại phụ âm là theo tắc hay xát, hữu thanh hay vô thanh… 11 nguyên âm đơn: STT Nguyên âm đơn Ví dụ 1 Y Ý chí 2 Ê Ê chề 3 A A ha 4 Ă Mắt 5 Â Cần cù 6 Ơ Chơi vơi 7 Ư Uu tư 8 Ô Cô giáo 9 O Con bò 10 U Xích đu 11 E E dè Nguyên âm đôi: STT Nguyên âm đôi 1 ia, yê, iê, ya 2 ua, uô 3 ưa, ươ 5 22 phụ âm STT Phụ âm STT Phụ âm 1 B 12 Tr 2 P 13 S 3 V 14 R 4 Ph 15 Ch 5 M 16 Nh 6 Đ 17 Ng, ngh 7 T 18 Kh 8 Th 19 G, gh 9 D, gi 20 H 10 N 21 X 11 L 22 C, k, q b. Âm hữu thanh và âm vô thanh: Âm hữu thanh: Âm hữu thanh được tạo ra từ các dây thanh bị căng đồng thời và chúng rung động ở chế độ dãn khi không khí tăng lên làm thanh môn mở ra và sau đó thanh môn xẹp xuống. Do sự cộng hưởng của dây thanh, sóng âm tạo tạo ra có dạng gần như tuần hoàn. Phổ của âm hữu thanh có nhiều thành phần hài tại giá trị bội số của tần số cộng hưởng, còn gọi là tần số cơ bản. Âm vô thanh: Khi tạo ra âm vô thanh dây thanh không cộng hưởng. Nguồn của âm vô thanh là nguồn là nguồn không tuần hoàn. Nó có vị trí không cố định mà thay đổi theo âm chúng ta tạo ra. Phổ của nguồn âm khá đều trong một phạm vi rộng từ vài Hz đến KHz. Tuyến âm được đặc trưng bởi các bộ lọc thông dải.Tín hiệu đầu ra cũng là ngẫu nhiên. c. Các yếu tố khác: Tỷ suất thời gian: Trong khi nói chuyện, khoảng nói chuyện và khoảng nghỉ xen kẽ nhau. Tỷ số thời gian nói và nghỉ gọi là tỷ suất thời gian. Hàm năng lượng ngắn: Việc nghiên cứu xử lý tiếng nói trong thực tế chỉ trong một thời gian hữu hạn (về mặt lý thuyết thì phải xét cho đến vô cùng), hay trên số mẫu xác định. Việc nghiên cứu trên các mẫu này với các kĩ thuật nhất định sẽ cho kết quả gần đúng so với lý thuyết. Thông thường việc lấy mẫu tín hiệu tiếng nói được thực hiện thông qua các cửa sổ. 6 Tần số vượt qua điểm không: Tần suất vượt qua điểm không là số lần biên độ tín hiệu tiếng nói vượt qua giá trị không trong khoảng thời gian cho trước. Thông thường giá trị này của âm vô thanh lớn hơn âm hữu thanh do đặc tính ngẫu nhiên của âm vô thanh. Đặc điểm này cũng được ứng dụng trong quá trình tiền xử lý trong nhận dạng tiếng nói tự động. Phát hiện điểm cuối: Trong xử lý tiếng nói việc xác định khi nào bắt đầu xuất hiện và kết thúc quá trình nói là rất quan trọng và cần thiết. Có nhiều phương pháp,ví dụ như sau: Lấy một mẫu nhỏ của nền nhiễu trong khoảng thời gian yên lặng trước khi nói. Dùng hàm năng lượng thời gian ngắn để tính năng lượng cho mẫu, ngưỡng của tiếng nói được chọn là giá trị giữa năng lượng yên tĩnh và năng lượng đỉnh. Ban đầu giả thiết điểm cuối xuất hiện tại điểm năng lượng tín hiệu vượt qua ngưỡng. Để tính đúng ước lượng này, người ta giả thiết so sánh chúng với giá trị đó trong vùng yên tĩnh. Khi những thay đổi phát hiện được trong khi tính toán tần suất trên ở ngoài ngưỡng giả thiết thì điểm cuối được giả thiết lại tại điểm mà sự thay đổi xẩy ra. Tần số cơ bản Người nói 80 – 200 Hz Đàn ông 150 – 450 Hz Phụ nữ 200 – 600 Hz Trẻ em Đối với hai âm có cùng độ cao, cường độ sẽ được phân biệt bởi tính tuần hoàn. Một âm hữu thanh có tính tuần hoàn khi phân tích phổ sẽ xuất hiện sẽ xuất hiện một vạch tại vùng tần số rất thấp. Vạch này đặc trưng cho tần số cơ bản của âm. Trong hội thoại tần số cơ bản thay đổi liên tục. Formant: Trong phổ tần số của tín hiệu tiếng nói, mỗi đỉnh có biên độ cao nhất xét trong xét trong một khoảng nào đó (cực đại khu vực) xác định một formant. Ngoài tần số, formant còn được xác định cả biên độ và giải thông của chúng. Về mặt vật lý các tần sô formant tương ứng với các tần số cộng hưởng tuyến âm. Trong xử lý tiếng nói đặc biệt là trong tổng hợp tiếng nói, để mô phỏng lại tuyến âm người ta phải xác định được các tham số formant đối với từng loại âm vị, do đó việc đánh giá ước lượng các formant có ý nghĩa rất quan trọng. Tần số formant biến đổi trong một dải rộng thuộc vào giới tính người nói và đối với từng âm vị. Đồng thời formant còn phụ thuộc vào các âm vị trước và sau nó. Thông thường phổ tần số tiếng nói chứa khoảng 6 formant nhưng ảnh hưởng lớn nhất đến đặc tính của âm vị là 3 formant đầu tiên. 7 Tần số formant đặc trưng cho nguyên âm biến đổi tùy thuộc vào người nói trong điều kiện phát âm nhất định. Mặc dù phạm vi tần số formant của các nguyên âm có thể trùng lên nhau nhưng vị trí giữa các formant đó không đổi vì sự xê dịch của các formant là song song. 4. Xử lý tín hiệu tiếng nói: Kỹ thuật phân tích tiếng nói có thể được phân lớp vào miền tần số và miền thời gian. Mục đích chính trong phân tích tiếng nói là đánh giá đáp ứng tần số của bộ máy phát âm (tuyến âm). Các kỹ thuật xử lý tín hiệu tiếng nói thông thường là dung dãy các bộ lọc, phân tích Fourier, xử lý đồng hình hoặc cepstral. Khái niệm “short time analysis” là cơ sở cho hầu hết các kỹ thuật phân tích tiếng nói. Giả sử rằng trong khoảng thời gian dài tín hiệu tiếng nói là không dừng nhưng với khoảng thời gian đủ nhỏ (10 – 30 ms), có thể xem nó là dừng. Đây là lý do mà sự thay đổi phổ tín hiệu tiếng nói có liên hệ trực tiếp với sự chuyển động của hệ phát âm (môi, cổ họng…) và các rang buộc ngữ cảnh, sinh lý khác. Vì vậy các hệ thống phân tích tiếng nói đều thực hiện trên cơ sở thời gian biến đổi, với các khung thời gian được chọn 10 -30 ms. 4.1. Sự biểu hiện và phân tích tiếng nói: Tiếng nói liên tục là tập hợp các âm thanh phức tạp mà chúng ta khó sản sinh nhân tạo. Tín hiệu tiếng nói được tạo thành bởi các chuỗi âm vị liên tiếp bao gồm nguyên âm và phụ âm. Trong tín hiệu tiếng nói bao gồm F0 và các thành phần được sản sinh bởi các giây thanh. Tuyến âm thay đổi các tín hiệu nguồn tạo nên Formant. Mỗi tần số Formant có một biên độ và giải thông và đôi khi khó có thể định nghĩa các tham số này một cách chính xác. Tần số cơ bản và tần số Formant là những khái niệm quan trọng nhất trong tổng hợp và xử lý tiếng nói nói chung. Các âm vô thanh không có tần số cơ bản và có thể được xem là nhiễu trắng. Thì thầm là trường hợp đặc biệt của tiếng nói, khi thì thầm thì ở đó không có tần số cơ bản. Dạng tiếng nói của 3 nguyên âm (/a/, /i/, /u/). Với miền thời gian và miền tần số như trong hình sau. 8 Hình 1: Miền thời gian và miền tần số của nguyên âm a,e, i, u Tần số của âm thanh bình thường nằm trong khoảng 300 Hz đến 3400 Hz. Vì vậy để biểu diễn tín hiệu tiếng nói trong kênh thoại thì 3 formant đầu là đủ. Để chất lượng cao hơn tần số lấy mẫu phải nằm từ 10 kHz tới 20kHz. Phương pháp thường sử dụng để mô tả tín hiệu tiếng nói là spectrogram (ảnh phổ) mà qua đó biểu diễn thời gian – tần số - biên độ của một tín hiệu. Khi đó miền có tần số cao hơn thì màu xám hơn. Phổ của nguyên âm và phụ âm cũng dễ dàng nhận thấy. Do vậy ảnh phổ là phương pháp biểu diễn hữu ích nhất để nghiên cứu tiếng nói. Hình 2: Ảnh phổ biểu diễn miền thời gian của từ kaksi 9 Để xác định tần số cơ bản của tiếng nói thì sơ đồ khối như sau: Bộ lọc hiệu chỉnh Cửa sổ FFT Log10|. | Phân tích Cepstral cung cấp phương pháp để tách riêng tuyến âm và nguồn kích thích. Tín hiệu tiếng nói sau khi qua bộ lọc hiệu chỉnh (thực chất là bộ lọc thông cao) với hệ số truyền đạt: H(z) = 1 – az-1, a < 1 và thường được chọn cỡ 0.95 – 0.98. Bộ lọc hiệu chỉnh dùng để xét ảnh hưởng của tuyến âm trong miền tần số. Do đặc tính phổ của tín hiệu nguồn, âm hữu thanh năng lượng tập trung ở miền tần thấp có độ dốc phổ là 12dB/octave. Môi là bộ lọc thông cao có độ dốc cỡ 6dB/octave. Để phổ bằng phẳng hơn cần bộ lọc hiệu chỉnh bù lại 12dB/octave – 6dB/octave, do đó người ta chọn a = 0.95 – 0.98. Cửa sổ thường được chọn là cửa số Hamming nhằm giảm sai số phân tích phổ khi độ dài tín hiệu hữu hạn. Quá trình lấy log10| . | cho phổ đều hơn. 4.2. Phương pháp xử lý đồng hình: Chúng ta đã biết rằng tín hiệu tiếng nói gồm ba thành phần, một dãy các xung mô tả các pitch, xung kích thích và đáp ứng xung của ống thanh. Trong miền thời gian, gọi s(n) là tín hiệu nguồn, e(n) là tín hiệu kích thích và h(n) biểu diễn đáp ứng xung của ống thanh. s(n) = e(n) * h(n). Biến đổi Fourier 2 vế ta có S() = E() . H(). Quan hệ biên độ: |S()| = |E()| . |H()|. Logarithm hóa hai vê ta có log{|S()|} =log{|E()|} + log{|H()|}. Như vậy logarithm của |S()| là tổng logarithm của |E()| và |H()|. Hơn nữa |H()| được quyết định bởi tuyến âm theo hướng tần số biến đổi chậm, trong khi đó phân bố |E()| có chu kì biến đổi nhan hơn theo tần số. Điều này có nghĩa là hai thành phần này có thể phân tách nhau nhờ toán tử lọc. Phép lọc này thông thường được thực hiện nhờ biến đổi Fourier ngược của log{|S()|}, cho ta cepstrum của tín hiệu. Trong Cepstrum, chu kì pitch phân bố có tính chu kì, trong khi đó phân bố của tuyến âm xảy ra gần trục hoành hơn bởi vì biến đổi chậm hơn. Sơ đồ hệ thống đồng hình cho phân tích tiếng nói. 10 Bộ lọc hiệu chỉnh Cửa sổ hamming FFT Log10|. | FFT-1 Trong ảnh phổ xuất hiện các họ hài với chu kì của nguồn xung làm cho việc quan sát trở nên khó khăn. Nếu cùng lúc có nhiều nguồn xung tuần hoàn với các tần số khác nhau, trong ảnh phổ sẽ xuất hiện các họ hài với các chu kì khác nhau của các nguồn, nên cần phải dung đến cepstrum. Trong cepstrum ta có thể nhận ra các xung nhảy vọt đặc trưng cho các họ hài của phổ. Nếu ta chặn được các xung của cepstrum này, tính được dãy tín hiệu theo thời gian sau khi đã dùng phép biến đổi ngược, thì lúc đó ta sẽ có dạng đáp ứng xung đặc trưng cho sự truyền đạt của hệ thống. Nếu dùng lọc tần số thấp để chặn tất cả các tín hiệu trừ xung của cepstrum đặc trưng cho nguồn xung thì sau phép biến đổi ngược ta nhận lại được tín hiệu theo thời gian của đáp ứng nguồn xung. Hình 3: Tín hiệu tuần hoàn. Ta thấy Cepstrum biến đổi tương đối chậm đặc trưng cho hàm truyền đạt và Cepstrum nhảy vọt đại diện cho sự lặp lại tuần hoàn. Hình 4: Cepstrum tương ứng của tín hiệu tuần hoàn. Sử dụng Cepstrum trong việc đánh giá cường độ và các tần số đỉnh cộng hưởng. Nếu không có sự dao động tuần hoàn trong phổ thì trong Cepstrum tương ứng sẽ không có đỉnh xuất hiện. Do đó, với mọi âm thanh có chu kì cường độ ngắn nhất, đỉnh cường độ xuất hiện trong các vùng nơi mà các thành phần Cepstrum khác đã suy giảm đi đáng kể, nên khó phát hiện xung nhảy vọt. Vì vậy, tốt nhất nên sử dụng một ngưỡng thấp trong quá trình tìm kiếm đỉnh cường độ. 11 Hình 5: Tín hiệu không tuần hoàn. Quan sát Cepstrum tương ứng ta thấy không có gì nổi trội. Hình 6: Cepstrum tương ứng. 4.3. Xác định tần số cơ bản F0: Theo các kết quả khảo sát và nghiên cứu, tần số cơ bản: Giọng nam: 80 – 250 Hz. Giọng nữ: 150 – 500 Hz. Chúng ta thấy rằng với âm hữu thanh, có một đỉnh cao nhất trong cepstrum tại chu kì cơ bản âm đầu vào. Không có đỉnh cao nhất xuất hiện trong cepstrum đối với âm vô thanh. Những đặc tính của cepstrum được sử dụng cho việc xác định tần số cơ bản cho âm hữu thanh hay vô thanh và ước lượng chu kì cơ bản cho âm hữu thanh. Một số phương pháp xác đinh F0: - Dựa vào hàm tự tương quan. - Dựa vào hàm vi sai biên độ trung bình. - Dùng bộ lọc đảo và hàm tự tương quan. - Xử lý đồng hình. Đối với phương pháp xử lý đồng hình, ta thấy từ biểu thức (2.2): x^(n) = s^(n) + u^(n) (2.2). Ta tách thành phần s^(n) bằng cách nhân x^(n) với cửa số (chữ nhật chẳng hạn), biến đổi Fourier ta được phổ dexiben của nguồn. Trong phổ dexiben của nguồn, đỉnh cao nhất và gần gốc nhất là tần số cơ bản F0. 12 Đường bao của thủ tục ước lượng chu kì dựa trên cepstrum đơn giản hơn. Cepstrum được tìm kiếm với đỉnh cao nhất trong lân cận của chu kì thời gian được kì vọng. Nếu đỉnh cao nhất của cepstrum nằm bên trên ngưỡng thiết lập trước đó, tín hiệu âm đầu vào giống như âm hữu thanh và vị trí của đỉnh cao nhất là ước lượng tốt cho chu kì thời gian. Nếu đỉnh cao nhất không vượt qua ngưỡng, nó giống như đầu vào của âm vô thanh. Sự biến thiên thời gian của chế độ kích thích và chu kì thời gian có thể được ước lượng bằng cách tính toán một giá trị cepstrum phụ thuộc thời gian dựa trên biến đổi Fourier phụ thuộc thời gian. Điển hình, cepstrum được tính toán mỗi khoảng thời gian 10 – 20 ms vì các tham số kích thích không thay đổi trong tín hiệu tiếng nói thông thường. Để tính tần số cơ bản dựa trên cepstrum, ta phải tính được chu kì T0 của tín hiệu tiếng nói. Giả sử có một khung cửa sổ với độ dài 32ms, tại thời điểm đầu tiên ta xác định hai đỉnh cao nhất trên cepstrum, khoảng cách giữa hai điểm này là chu kì của tiếng nói,do đó tần số cơ bản là 1/T0. Hình 7: Tính chu kì cơ bản T0. Tiếp theo ta dịch chuyển tiếp một nửa độ dài cửa sổ (16ms) đến vị trí tiếp theo, xác định các đỉnh cao nhất trong cửa số 32 ms và lại tính tương tự như trên thu được tần số cơ bản tiếp theo. Cuối cùng ta thu được một tập các tần số cơ bản, chúng được biểu diễn như trên đồ thị sau: 13 Hình 8: Đường biểu diễn F0. 14 II. Thiết kế chương trình: 1. Cấu trúc file wave: Hình 9: Cấu trúc file wave 1.1. Khái niệm về tập tin wave Tập tin wave là một dạng tập tin dùng để lưu trữ dữ liệu âm thanh số (dạng sóng) và nó là một trong những định dạng phổ biến nhất của hệ điều hành Windown. Tập tin wave thuộc chuẩn RIFF (Resource Interchange File Format – dạng tập tin tài nguyên có thể trao đổi). Đặc điểm của những tập tin thuộc chuẩn RIFF đó là nó sẽ nhóm nội dung của tập tin thành các khối riêng biệt và mỗi một khối sẽ gồm một header (dùng để quy định kiểu và kích thước khối) và các byte dữ liệu. Tập tin file wave có 2 dạng nén và không nén (dạng chuẩn) vì thế trong đề tài này em chỉ đề cập đến dạng chuẩn của tập tin wave tức dạng không nén. 1.2. Cấu trúc tập tin wave: Cấu trúc file wave gồm 3 khối: Khối mô tả dạng RIFF, khối thuộc tính “fmt” và khối dữ liệu “data”. Trong đó khối thuộc tính “fmt” và khối dữ liệu “data” là hai khối con của khối mô tả dạng RIFF. a. Khối mô tả dạng RIFF: Khối này xác định định dạng RIFF và có kích thước là 12 byte gồm các trường: 15 Trường Kích thước Chức năng ChunkID 4 byte Chứa chuỗi “RIFF” dưới dạng mã ASCII. ChunkSize 4 byte Cho biết tổng kích thước của các trường sau nó. ChunkSize = 4 + (8 + Subchunk1Size) + (8 + Subchunk2Size). Format 4 byte Chứa chuỗi “WAVE”. b. Khối thuộc tính “fmt” Khối này xác định các thuộc tính của dữ liệu âm thanh và có kích thước là 24 byte gồm các trường. Trường Kích Chức năng thước Subchunk1ID 4 byte Chứa chuỗi “fmt”. Subchunk1Size 4 byte Cho biết tổng kích thước của các trường thuộc khối thuộc tính đứng phía sau trường này. Đối với tập tin wave Subchunk1Size bằng 16). AudioFormat 2 byte không nén thì Cho biết dạng nén của dữ liệu trong tập tin wave. Giá trị: 0 không xác định. 1 không nén (PCM – Pulse Code Modulation). 80 MPEG. 49 GSM 6.10. 17 IMA ADPCM. 16 Một số giá trị thông dụng Trường Kích Chức năng thước Numchannels 2 byte Cho biết số kênh của tập tin wave (mono = 1, Stereo = 2). SampleRate 4 byte Cho biết số mẫu trên 1s và đây là tần số lấy mẫu. ByteRate 4 byte Cho biết số byte trên 1s ứng với tần số lấy mẫu trên. (ByteRate = SampleRate * NumChannels * (BitsperSample / 8) BlockAlign 2 byte BitsPerSample Cho biết số byte của 1 mẫu gồm tất cả các kênh. Cho biết số bit trên 1 mẫu chỉ tính cho một kênh. (8 bit = 8, 16 bit = 16). c. Khối dữ liệu (data): Khối này bao gồm các trường sau: - Subchunk2ID: Có kích thước 4 byte và chứa chuỗi “data”. - Subchunk2Size: Kích thước 4 byte và cho biết kích thước của dữ liệu âm thanh thô trong trường data. Subchunk2Size = NumSample * NumChannels * BitsperSample / 8. - Data: Trường data chứa các byte dữ liệu âm thanh và các byte dữ liệu này sẽ nhóm thành các mẫu, mỗi mẫu sẽ có 1 hoặc 2 kênh. Tùy vào số kênh của một mẫu (xác định bởi trường NumChannels) và số bit trên kênh (xác định bởi trường BitsPerSample) mà ta sẽ xác định được số byte của 1 mẫu. Số kênh / số bit trên kênh / kích thước 1 mẫu / giá trị lớn nhất / giá trị nhỏ nhất. 1 /(Mono)/8/1 byte/255/0. 1 (Mono)/16/2 byte/32767/-32768. 2 (Stereo)/8/2 byte/255/0. 2 (Stereo)/16/4 byte/32767/-32768. 17 Hình 10: Ví dụ cho cấu trúc file wave 2. Phân tích và thiết kế chức năng chương trình: Chương trình được thiết kế gồm ba chức năng chính: - Đọc và hiện thị tín hiệu tiếng nói từ file ưav - Xác định tín hiệu cepstrum theo phương pháp xử lý đồng hình. - Hiện thị tín hiệu cepstrum. - Hiện thị đường biểu diễn F0 đã tính được. 3. Cài đặt chương trình: Đọc các trường của file wav: Sự dụng hàm fopen() để mở file và fread để đọc các trường của file wav. input_wave::input_wave(char *filename) { int i; FILE *file; unsigned int file_operator_state; char output_buffer[80]; WAVE_FILE_HEADER *wave_file_herder; DATA_CHUNK_HEADER *data_chunk_header; short int *uptr; unsigned char *cptr; int data_chunk_id; // so thu tu cua chunk tiep theo can doc long int fp_moving_distance; // so vi tri dich chuyen file pointer; char *wbuff; // buffer chua data chunk hay chua cac mau int wbuff_len; // tong so mau; 18 // khoi tao cac gia tri sample_array = NULL; current_samples = 0; total_number_of_samples_in_wave_file = 0; // cap phat bo nho wave_file_herder = new WAVE_FILE_HEADER; data_chunk_header = new DATA_CHUNK_HEADER; if(wave_file_herder == NULL) exit(-1); if (data_chunk_header == NULL) exit(-1); // open file wav file = fopen(filename, "rb"); if (file == NULL) exit(-1); // doc 36 file header file_operator_state = fread((void*)wave_file_herder, sizeof(WAVE_FILE_HEADER), (size_t)1, file); if (file_operator_state != 1) exit(-1); // kiem tra dinh dang cua header // kiem tra dinh dang "RIEF" file for (i = 0; i < 4; ++i) output_buffer[i] = wave_file_herder>riff_string[i]; output_buffer[4] = 0; if (strcmp(output_buffer, "RIFF")) exit(-1); // kiem tra dinh dang "WAVE" file for(i = 0; i < 4; ++i) output_buffer[i] = wave_file_herder>wave_string[i]; output_buffer[4] = 0; if (strcmp(output_buffer, "WAVE") != 0) exit(-1); // kiem tra "fmt" cua subchunk for(i = 0; i < 3; ++i) output_buffer[i] = wave_file_herder>ftm_string[i]; output_buffer[3] = 0; if (strcmp(output_buffer, "fmt") != 0) exit(-1); // audio format tag phai bang 1 if (wave_file_herder->wave_file_format_tag != 1) exit(-1); // chi chap nhan luong tu 8 hoac 16 bit if (wave_file_herder->number_of_bits_per_samples != 8 && wave_file_herder->number_of_bits_per_samples != 16) exit(-1); 19 // khong doc cac phan con lai cua header // chi chap nhan luong tu 8 hoac 16 bit if (wave_file_herder->number_of_bits_per_samples != 8 && wave_file_herder->number_of_bits_per_samples != 16) exit(-1); // khong doc cac phan con lai cua header // phan cua header da doc duoc co do dai 20 bytes // 20 bytes nay gom co: "RIFF", chunksize(long int), "WAVE", "FMT", SubchunkSize1 fp_moving_distance = wave_file_herder->pcm_heder_len (sizeof(WAVE_FILE_HEADER) - 20); // chuyen con tro toi dau data chunk file_operator_state = fseek(file, fp_moving_distance, SEEK_CUR); if (file_operator_state != 0) exit(-1); // doc cho toi khi tim thay "data" trong chunk data data_chunk_id = 1; while (data_chunk_id != 0) { if (data_chunk_id > MAX_NUMBER_OF_DATA_CHUNKS) exit(-1); // doc chunk header // chunk header gom 8 bytes: "data", chunksize (long int) file_operator_state = fread((void*)data_chunk_header, sizeof(DATA_CHUNK_HEADER), (size_t)1, file); // kiem tra chunk type for(i = 0; i < 4; ++i) output_buffer[i] = data_chunk_header>data_string[i]; output_buffer[4] = 0; if(strcmp(output_buffer, "data") == 0) break; // so thu tu cua chunk tiep theo can doc data_chunk_id++; // chuyen sang chunk tiep theo file_operator_state = fseek(file, data_chunk_header->data_chunk_length, SEEK_CUR); if (file_operator_state != 1) exit(-1); } // do dai chunk data wbuff_len = data_chunk_header->data_chunk_length; 20
- Xem thêm -

Tài liệu liên quan