BÀI tập lớn xử lý TIẾNG nói xử lý đồng hình

25 171 6
BÀI tập lớn xử lý TIẾNG nói   xử lý đồng hình

Đ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

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: Khái niệm tiếng nói xử lý tiếng nói: 1.1 Tiếng nói: 1.2 Xử lý tiếng nói: Bộ máy phát âm người: 3 Các đặc tính âm thanh: 4 3.1 Đặc tính vật lý âm thanh: 3.2 Đặc tính âm học âm thanh: .4 Xử lý tín hiệu tiếng nói: 4.1 Sự biểu phân tích tiếng nói: 4.2 Phương pháp xử lý đồng hình: 11 4.3 Xác định tần số F0: 13 II Thiết kế chương trình: .16 Cấu trúc file wave: 16 1.1 Khái niệm về tập tin wave .16 1.2 Cấu trúc tập tin wave: 17 Phân tích thiết kế chức chương trình: 20 Cài đặt chương trình: 20 Thử nghiệm chương trình: 27 I Lý thuyết: Khái niệm tiếng nói 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 người Trung khu thần kinh điều khiển hệ thống phát âm và tạo âm Tiếng nói phân biệt với âm khác đặc tính âm học có nguồn gốc từ chế tạo tiếng nói Về chất tiếng nói là giao đợng khơng khí có mang theo thơng tin Các giao động này tạo thành áp lực đến tai và tai phát hiện, phân tích chuyển đến trung khu thần kinh Lúc này trung khu thần kinh thông tin tái tạo dạng tư logic mà người hiểu Tín hiệu tiếng nói tạo thành chuỗi âm vị liên tiếp Sự xếp âm vị chi phối quy tắc 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 tín hiệu tiếng nói nhằm lan truyền, lưu trữ tín hiệu tiếng nói là tổng hợp nhận dạng tiếng nói Mục đích 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 - Tổng hợp nhận dạng tiếng nói: Giúp giải vấn giao tiếp người và hệ thống nói chung tiếng nói - Phân tích tiếng nói: Phục vụ cho việc nghiên cứu tín hiệu tiếng nói Bộ máy phát âm người: Các thành phần giúp cho người phát âm bao gồm: Phổi, khí quản và đường dẫn miệng mũi Thanh quản: Chứa hai dây và giao động tạo cổng hưởng cần thiết để tạo âm Khoảng cách hai dây gọi là mơn Vị trí nguồn âm âm tuần hoàn nằm mơn Chu kì rung dây (T0) gọi là chu kì bản, 1/T0 gọi là tần số Toàn bợ bợ máy phát âm tính từ mơn trở lên gọi là tuyến âm Cơ chế phát âm: - Tuyến âm kích thích nguồn lượng mơn Luồng khí từ phổi lên qua khí quản, luồng khí này va chạm vào hai dây tuyến âm Hai dây dao động tạo cộng hưởng, dao động âm lan truyền theo tuyến âm và sau qua khoang mũi và mơi tạo tiếng nói - Khoang mũi là ống không môi Kết thúc vòm miệng, có đợ dài cố định khoảng 12cm người lớn - Vòm miệng là nếp chuyển đợng Các đặc tính âm thanh: 3.1 Đặc tính vật lý âm thanh: - Độ cao: Đợ cao hay gọi là độ trầm bổng âm Độ trầm bổng âm phụ thuộc vào chuyển động nhanh hay chậm phần tử khơng khí mợt đơn vị thời gian Nói cách khác, đợ cao phụ tḥc vào tần số giao đợng Đối với tiếng nói, tần số giao động đôi dây qui định độ cao giọng nói người và người có mợt đợ cao giọng nói khác - Cường độ: Cường độ là độ to nhỏ âm thanh, cường đợ càng lớn âm truyền càng xa mơi trường có nhiễu Cường đợ sóng tiếng nói biên đợ dao đợng song qui định Trong tiếng nói, cường đợ ngun âm thường lớn phụ âm nên tai người nghe nguyên âm dễ - Độ dài: Độ dài âm phụ thuộc vào chấn động lâu hay mau phần tử khơng khí Cùng mợt âm từ khác đợ dài khác - Âm sắc: Âm sắc là sắc thái riêng một âm, một nội dung, một độ cao người có âm sắc khác 3.2 Đặc tính âm học âm thanh: Như nói tiếng nói tạo thành chuỗi âm vị lien tiếp Sự xếp âm vị chi phối qui tắc ngơn ngữ Mỗi ngơn ngữ có số lượng âm vị khác nhau, thông thường cỡ 20 – 30 và bé 50 cho ngôn ngữ Các âm vị chia làm hai loại nguyên âm và phụ âm a Nguyên âm 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 mặt ngôn ngữ và mô tả âm vị khác Như âm vị là đơn vị nhỏ ngôn ngữ Tùy theo ngôn ngữ cụ thể mà số lượng âm vị khác Các âm vị chia thành: nguyên âm và phụ âm Nguyên âm: Nguyên âm tạo thành cợng hưởng dây dòng khí môn đẩy lên Khoang miệng tạo lập thành nhiều hình dạng tạo thành nguyên âm khác Mỗi nguyên âm đặc trưng ba formant đầu Phụ âm: Phụ âm tạo dòng khí hỗn loạn phát gần điểm co thắt đường dẫn âm cách phát âm tạo thành Dòng khơng khí chỗ đóng vòm miệng tạo phụ âm tắc Những phụ âm xát phát từ chỗ co thắt lớn và âm tắc xát tạo từ khoảng Phụ âm có đặc tính hữu và vơ tùy tḥc vào dây có dao đợng để tạo thành cợng hưởng khơng Đặc tính phụ âm tùy tḥc vào tính chu kì dạng song, phổ tần số, thời gian tồn và truyền âm Hệ thống âm vị: Hệ thống âm vị bao gồm 11 nguyên âm đơn, nguyên âm đôi và 22 phụ âm Sự phân biệt nguyên âm là theo độ nâng lưỡi và chuyển động lười Sự phân loại phụ âm là theo tắc hay xát, hữu hay vô thanh… 11 nguyên âm đơn: STT Nguyên âm đơn Ví dụ Y Ý chí Ê Ê chề A A Ă Mắt  Cần cù Ơ Chơi vơi Ư Uu tư Ơ Cơ giáo O Con bò 10 U Xích đu 11 E E dè Nguyên âm đôi: STT Nguyên âm đôi ia, yê, iê, ya ua, uô ưa, ươ 22 phụ âm STT Phụ âm STT Phụ âm B 12 Tr P 13 S V 14 R Ph 15 Ch M 16 Nh Đ 17 Ng, ngh T 18 Kh Th 19 G, gh D, gi 20 H 10 N 21 X 11 L 22 C, k, q b Âm hữu âm vô thanh: Âm hữu thanh: Âm hữu tạo từ dây bị căng đồng thời và chúng rung động chế độ dãn không khí tăng lên làm mơn mở và sau mơn xẹp xuống Do cợng hưởng dây thanh, sóng âm tạo tạo có dạng gần tuần hoàn Phổ âm hữu có nhiều thành phần hài giá trị bội số tần số cợng hưởng, gọi là tần số Âm vô thanh: Khi tạo âm vô dây không cộng hưởng Nguồn âm vô 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 tạo Phổ nguồn âm một phạm vi rộng từ vài Hz đến KHz Tuyến âm đặc trưng bợ lọc thơng dải.Tín hiệu đầu là ngẫu nhiên c Các yếu tố khác: Tỷ suất thời gian: Trong nói chuyện, khoảng nói chuyện và khoảng nghỉ xen kẽ Tỷ số thời gian nói và nghỉ gọi là tỷ suất thời gian Hàm lượng ngắn: Việc nghiên cứu xử lý tiếng nói thực tế mợt thời gian hữu hạn (về mặt lý thuyết phải xét vô cùng), hay số mẫu xác định Việc nghiên cứu mẫu này với kĩ thuật định cho kết gần so với lý thuyết Thơng thường việc lấy mẫu tín hiệu tiếng nói thực thơng qua cửa sổ 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 khoảng thời gian cho trước Thông thường giá trị này âm vô lớn âm hữu đặc tính ngẫu nhiên âm vô Đặc điểm này ứng dụng trình tiền xử lý nhận dạng tiếng nói tự đợng Phát điểm cuối: Trong xử lý tiếng nói việc xác định nào bắt đầu xuất và kết thúc q trình nói là quan trọng và cần thiết Có nhiều phương pháp,ví dụ sau: Lấy một mẫu nhỏ nhiễu khoảng thời gian yên lặng trước nói Dùng hàm lượng thời gian ngắn để tính lượng cho mẫu, ngưỡng tiếng nói chọn là giá trị lượng yên tĩnh và lượng đỉnh Ban đầu giả thiết điểm cuối xuất điểm lượng tín hiệu vượt qua ngưỡng Để tính ước lượng này, người ta giả thiết so sánh chúng với giá trị vùng yên tĩnh Khi thay đổi phát tính tốn tần suất ngoài ngưỡng giả thiết điểm cuối giả thiết lại điểm mà thay đổi xẩy Tần số 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ó đợ cao, cường đợ phân biệt tính tuần hoàn Mợt âm hữu có tính tuần hoàn phân tích phổ xuất xuất một vạch vùng tần số thấp Vạch này đặc trưng cho tần số âm Trong hội thoại tần số thay đổi liên tục Formant: Trong phổ tần số tín hiệu tiếng nói, đỉnh có biên đợ cao xét xét mợt khoảng nào (cực đại khu vực) xác định mợt formant Ngoài tần số, formant xác định biên độ và giải thông chúng Về mặt vật lý tần sô formant tương ứng với tần số cộng hưởng tuyến âm Trong xử lý tiếng nói đặc biệt là tổng hợp tiếng nói, để mơ lại tuyến âm người ta phải xác định tham số formant loại âm vị, việc đánh giá ước lượng formant có ý nghĩa quan trọng Tần số formant biến đổi một dải rộng thuộc vào giới tính người nói và âm vị Đồng thời formant phụ tḥc vào âm vị trước và sau Thơng thường phổ tần số tiếng nói chứa khoảng formant ảnh hưởng lớn đến đặc tính âm vị là formant Tần số formant đặc trưng cho nguyên âm biến đổi tùy tḥc vào người nói điều kiện phát âm định Mặc dù phạm vi tần số formant nguyên âm trùng lên vị trí formant khơng đổi xê dịch formant là song song Xử lý tín hiệu tiếng nói: Kỹ thuật phân tích tiếng nói phân lớp vào miền tần số và miền thời gian Mục đích phân tích tiếng nói là đánh giá đáp ứng tần số 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 bợ lọc, phân tích Fourier, xử lý đồng hình cepstral Khái niệm “short time analysis” là sở cho hầu hết kỹ thuật phân tích tiếng nói Giả sử khoảng thời gian dài tín hiệu tiếng nói là khơng dừng với khoảng thời gian đủ nhỏ (10 – 30 ms), xem là dừng Đây là lý mà thay đổi phổ tín hiệu tiếng nói có liên hệ trực tiếp với chuyển động hệ phát âm (môi, cổ họng…) và rang buộc ngữ cảnh, sinh lý khác Vì hệ thống phân tích tiếng nói thực sở thời gian biến đổi, với khung thời gian chọn 10 -30 ms 4.1 Sự biểu phân tích tiếng nói: Tiếng nói liên tục là tập hợp âm phức tạp mà khó sản sinh nhân tạo Tín hiệu tiếng nói tạo thành 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à thành phần sản sinh giây Tuyến âm thay đổi 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 khó định nghĩa tham số này mợt cách xác Tần số và tần số Formant là khái niệm quan trọng tổng hợp và xử lý tiếng nói nói chung Các âm vơ khơng có tần số và xem là nhiễu trắng Thì thầm là trường hợp đặc biệt tiếng nói, thầm khơng có tần số Dạng tiếng nói nguyên âm (/a/, /i/, /u/) Với miền thời gian và miền tần số hình sau 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ố âm bình thường nằm khoảng 300 Hz đến 3400 Hz Vì để biểu diễn tín hiệu tiếng nói kênh thoại formant đầu là đủ Để chất lượng cao 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 độ một tín hiệu Khi miền có tần số cao màu xám Phổ nguyên âm và phụ âm dễ dàng nhận thấy Do ảnh phổ là phương pháp biểu diễn hữu ích để 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 Để xác định tần số tiếng nói sơ đồ khối 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 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) = – az-1, a < và thường chọn cỡ 0.95 – 0.98 Bộ lọc hiệu chỉnh dùng để xét ảnh hưởng tuyến âm miền tần số Do đặc tính phổ tín hiệu nguồn, âm hữu 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ổ phẳng cần bộ lọc hiệu chỉnh bù lại 12dB/octave – 6dB/octave, người ta chọn a = 0.95 – 0.98 Cửa sổ thường chọn là cửa số Hamming nhằm giảm sai số phân tích phổ đợ dài tín hiệu hữu hạn Q trình lấy log10| | cho phổ 4.2 Phương pháp xử lý đồng hình: Chúng ta biết tín hiệu tiếng nói gồm ba thành phần, mợt dãy xung mơ tả pitch, xung kích thích và đáp ứng xung ống 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 ống s(n) = e(n) * h(n) Biến đổi Fourier 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ư logarithm |S()| là tổng logarithm |E()| và |H()| Hơn | H()| định tuyến âm theo hướng tần số biến đổi chậm, phân bố |E()| có chu kì biến đổi nhan theo tần số Điều này có nghĩa là hai thành phần này phân tách nhờ tốn tử lọc Phép lọc này thông thường thực nhờ biến đổi Fourier ngược log{|S()|}, cho ta cepstrum tín hiệu Trong Cepstrum, chu kì pitch phân bố có tính chu kì, phân bố tuyến âm xảy gần trục hoành biến đổi chậm Sơ đồ hệ thống đồng hình cho phân tích tiếng nói Bợ lọc hiệu chỉnh Cửa sổ hamming FFT Log10| | FFT-1 Trong ảnh phổ xuất họ hài với chu kì nguồn xung làm cho việc quan sát trở nên khó khăn Nếu lúc có nhiều nguồn xung tuần hoàn với tần số khác nhau, ảnh phổ xuất họ hài với chu kì khác nguồn, nên cần phải dung đến cepstrum Trong cepstrum ta nhận xung nhảy vọt đặc trưng cho họ hài phổ Nếu ta chặn xung cepstrum này, tính dãy tín hiệu theo thời gian sau dùng phép biến đổi ngược, lúc ta có dạng đáp ứng xung đặc trưng cho truyền đạt hệ thống Nếu dùng lọc tần số thấp để chặn tất tín hiệu trừ xung cepstrum đặc trưng cho nguồn xung sau phép biến đổi ngược ta nhận lại tín hiệu theo thời gian đáp ứng nguồn xung 10 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 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 việc đánh giá cường độ và tần số đỉnh cộng hưởng Nếu khơng có dao đợng tuần hoàn phổ Cepstrum tương ứng khơng có đỉnh xuất Do đó, với âm có chu kì cường độ ngắn nhất, đỉnh cường độ xuất vùng nơi mà thành phần Cepstrum khác suy giảm đáng kể, nên khó phát xung nhảy vọt Vì vậy, tốt nên sử dụng mợt ngưỡng thấp q trình tìm kiếm đỉnh cường đợ 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ó trợi 11 Hình 6: Cepstrum tương ứng 4.3 Xác định tần số F0: Theo kết khảo sát và nghiên cứu, tần số bản: Giọng nam: 80 – 250 Hz Giọng nữ: 150 – 500 Hz Chúng ta thấy với âm hữu thanh, có mợt đỉnh cao cepstrum chu kì âm đầu vào Khơng có đỉnh cao xuất cepstrum âm vơ Những đặc tính cepstrum sử dụng cho việc xác định tần số cho âm hữu hay vô và ước lượng chu kì cho âm hữu 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) cách nhân x^(n) với cửa số (chữ nhật chẳng hạn), biến đổi Fourier ta phổ dexiben nguồn Trong phổ dexiben nguồn, đỉnh cao và gần gốc là tần số F0 Đường bao thủ tục ước lượng chu kì dựa cepstrum đơn giản Cepstrum tìm kiếm với đỉnh cao lân cận chu kì thời gian kì vọng Nếu đỉnh cao cepstrum nằm bên ngưỡng thiết lập trước đó, tín hiệu âm đầu vào giống âm hữu và vị trí đỉnh cao là ước lượng tốt cho chu kì thời gian Nếu đỉnh cao khơng vượt qua ngưỡng, giống đầu vào âm vơ Sự biến thiên thời gian chế đợ kích thích và chu kì thời gian ước lượng cách tính tốn mợt giá trị cepstrum phụ thuộc thời gian dựa biến đổi Fourier phụ thuộc thời gian Điển hình, cepstrum tính tốn khoảng thời gian 10 – 20 ms tham số kích thích khơng thay đổi tín hiệu tiếng nói thơng thường Để tính tần số dựa cepstrum, ta phải tính chu kì T0 tín hiệu tiếng nói Giả sử có mợt khung cửa sổ với độ dài 32ms, thời điểm 12 ta xác định hai đỉnh cao cepstrum, khoảng cách hai điểm này là chu kì tiếng nói,do tần số là 1/T0 Hình 7: Tính chu kì 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 đỉnh cao cửa số 32 ms và lại tính tương tự thu tần số Cuối ta thu một tập tần số bản, chúng biểu diễn đồ thị sau: 13 Hình 8: Đường biểu diễn F0 14 II Thiết kế chương trình: 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ữ liệu âm số (dạng sóng) và là mợt định dạng phổ biến 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 trao đổi) Đặc điểm tập tin tḥc chuẩn RIFF là nhóm nợi dung tập tin thành khối riêng biệt và một khối gồm một header (dùng để quy định kiểu và kích thước khối) và byte liệu Tập tin file wave có dạng nén và khơng nén (dạng chuẩn) đề tài này em đề cập đến dạng chuẩn 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 khối: Khối mơ tả dạng RIFF, khối tḥc tính “fmt” và khối liệu “data” Trong khối tḥc tính “fmt” và khối liệu “data” là hai khối 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 trường: 15 Trường Kích thước Chức ChunkID byte Chứa chuỗi “RIFF” dạng mã ASCII ChunkSize byte Cho biết tổng kích thước trường sau ChunkSize = + (8 + Subchunk1Size) + (8 + Subchunk2Size) Format byte Chứa chuỗi “WAVE” b Khối thuộc tính “fmt” Khối này xác định tḥc tính liệu âm và có kích thước là 24 byte gồm trường Trường Kích thước Chức Subchunk1ID byte Chứa chuỗi “fmt” Subchunk1Size byte Cho biết tổng kích thước trường tḥc khối tḥc tính đứng phía sau trường này Đối với tập tin wave khơng nén Subchunk1Size 16) AudioFormat byte Cho biết dạng nén liệu tập tin wave Giá trị: không xác định 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 thước Chức Numchannels byte Cho biết số kênh tập tin wave (mono = 1, Stereo = 2) SampleRate byte Cho biết số mẫu 1s và là tần số lấy mẫu ByteRate byte Cho biết số byte 1s ứng với tần số lấy mẫu (ByteRate = SampleRate * NumChannels * (BitsperSample / 8) BlockAlign byte Cho biết số byte mẫu gồm tất kênh BitsPerSample Cho biết số bit mẫu tính cho mợt kênh (8 bit = 8, 16 bit = 16) c Khối liệu (data): Khối này bao gồm trường sau: - Subchunk2ID: Có kích thước byte và chứa chuỗi “data” - Subchunk2Size: Kích thước byte và cho biết kích thước liệu âm thô trường data Subchunk2Size = NumSample * NumChannels * BitsperSample / - Data: Trường data chứa byte liệu âm và byte liệu này nhóm thành mẫu, mẫu có kênh Tùy vào số kênh một mẫu (xác định trường NumChannels) và số bit kênh (xác định trường BitsPerSample) mà ta xác định số byte mẫu Số kênh / số bit kênh / kích thước mẫu / giá trị lớn / giá trị nhỏ /(Mono)/8/1 byte/255/0 (Mono)/16/2 byte/32767/-32768 (Stereo)/8/2 byte/255/0 (Stereo)/16/4 byte/32767/-32768 17 // 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"); Hình 10:ifVí (file dụ cho == cấu NULL) trúc file wave exit(-1); Phân // tíchdoc thiết kế chức chương trình: 36 file header Chương trình thiết kế =gồm ba chức chính: file_operator_state fread((void*)wave_file_herder, - Đọc và thị tín hiệu tiếng nói từ file ưav sizeof(WAVE_FILE_HEADER), (size_t)1, file); if (file_operator_state != 1) - Xác định tín hiệu cepstrum theo phương pháp xử lý đồng hình exit(-1); - Hiện thị tín hiệu cepstrum - Hiện thị đường biểu diễn F0 tính // kiem tra dinh dang cua header // kiem tra dinh dang "RIEF" file Cài đặt chương for (i = trình: 0; i < 4; ++i) wave_file_herderĐọc cácoutput_buffer[i] trường của file wav:= Sự dụng hàm fopen() để mở file và fread >riff_string[i]; để đọc trường file wav output_buffer[4] = 0; if (strcmp(output_buffer, "RIFF")) input_wave::input_wave(char *filename) exit(-1); { int i; tra dinh dang "WAVE" file // kiem FILE for(i*file; = 0; i < 4; ++i) unsigned int file_operator_state; output_buffer[i] = wave_file_herderchar output_buffer[80]; >wave_string[i]; output_buffer[4] = 0; WAVE_FILE_HEADER *wave_file_herder; if (strcmp(output_buffer, "WAVE") != 0) DATA_CHUNK_HEADER *data_chunk_header; exit(-1); short int *uptr; // kiem tra "fmt" cua subchunk unsigned char for(i = 0; i ftm_string[i]; long int fp_moving_distance; // so vi tri dich chuyen output_buffer[3] = 0; file pointer; if (strcmp(output_buffer, "fmt") != 0) exit(-1); // audio format tag phai bang if (wave_file_herder->wave_file_format_tag != 1) exit(-1); 18 // chi chap nhan luong tu hoac 16 bit if (wave_file_herder->number_of_bits_per_samples != && wave_file_herder->number_of_bits_per_samples != 16) exit(-1); // khong doc cac phan lai cua header // phan cua header da doc duoc co dai 20 bytes // 20 bytes gom co: "RIFF", chunksize(long int), "WAVE", "FMT", SubchunkSize1 fp_moving_distance = wave_file_herder->pcm_heder_len (sizeof(WAVE_FILE_HEADER) - 20); // chuyen 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 tim thay "data" 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 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); } // dai chunk data wbuff_len = data_chunk_header->data_chunk_length; 19 // tim so luong mau // so byte data chunk // so mau = tong so byte / (so byte/mau) total_number_of_samples_in_wave_file = data_chunk_header->data_chunk_length; total_number_of_samples_in_wave_file /= wave_file_herder->number_of_bits_per_samples/8; //cap phat bo nho wbuff = new char [wbuff_len]; if (wbuff == NULL) exit(-1); sample_array = new double[total_number_of_samples_in_wave_file]; if (sample_array == NULL) exit(-1); // doc cac mau, ghi gia tri cua cac mau vao wbuff file_operator_state = fread((void*)wbuff, wbuff_len, (size_t)1, file ); if (file_operator_state != 1) exit(-1); // convert data // 16bits/sample if (wave_file_herder->number_of_bits_per_samples == 16) { uptr = (short*)wbuff; for(i = 0; i < total_number_of_samples_in_wave_file; ++i) sample_array[i] = (double) (uptr[i])/NOMALIZE_16_BIT; } // 8bits/sample else { cptr = (unsigned char *)wbuff; for(i = 0; i < total_number_of_samples_in_wave_file; i++) sample_array[i] = (double) (cptr[i])/NOMALIZE_8_BIT; } // tan so lay mau sampling_frequency_hz = (double)(wave_file_herder>number_of_samples_per_second); // so bit/mau number_of_bits_per_sample = wave_file_herder>number_of_bits_per_samples; 20 // so kenh number_of_channels = wave_file_herder->number_of_channel; // reset buffer stream index current_samples = 0; // Release if(wbuff != NULL) delete wbuff; if(wave_file_herder != NULL) delete wave_file_herder; if(data_chunk_header != NULL) delete data_chunk_header; fclose(file); return; 21 Biến đổi Fourier rời rạc: int DFT(char direction, int N, double *in_real, double *in_image) { long i, k; double omega_i, omega, coefficient; double cos_omega_i, sin_omega_i; double *local_real = NULL, *local_image = NULL; if (direction == REVERSE_TRANSFORM) { omega = 2.0 * PI / (double)N; coefficient = / (double)N; } else if(direction == FORWARD_TRANFORM) for (i { = 0; i < N; ++i) { omega = -2.0 * PI / (double)N; local_real[i] = 0; coefficient = 1; local_image[i] = 0; } omega_i = omega*(double)i; else for (k = 0; k < N; ++k) { { perror("\n Tranform Direction khong dung"); returncos_omega_i FAILURE; = cos(k * omega_i); sin_omega_i = sin(k * omega_i); } += (in_real[k] * cos_omega_i local_real local_real[i] = new double[N]; in_image[k] * sin_omega_i); local_image = new double[N]; local_image[i] += (in_real[k] * sin_omega_i + in_image[k] * cos_omega_i); if(local_real == NULL || local_image == NULL) } return FAILURE; } // copy data back for (i = 0; i < N; ++i) { in_real[i] = local_real[i] * coefficient; in_image[i] = local_image[i] * coefficient; } delete local_image; delete local_real; return SUCCESS; } 22 Xác định Cepstrum: void window::compute_cepstrum() { int i; int start_sampleID; start_sampleID = windowID * (number_of_samples_per_window - number_of_overlapping_window); cepstrum_real_part = new double[number_of_samples_per_window]; cepstrum_image_part = new double[number_of_samples_per_window]; cepstrum_real_part = wav_file.get_sample(start_sampleID, number_of_samples_per_window); // cho qua cua so hamming // sau roi rac fordo (ibien = 0;doi i

Ngày đăng: 06/04/2020, 16:26

Từ khóa liên quan

Mục lục

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

      • 1.2. Xử lý tiếng nói:

      • 2. Bộ máy phát âm của con người:

      • 3. Các đặc tính của âm thanh:

        • 3.1. Đặc tính vật lý của âm thanh:

        • 3.2. Đặc tính âm học của âm thanh:

          • a. Nguyên âm và phụ âm:

          • b. Âm hữu thanh và âm vô thanh:

          • c. Các yếu tố khác:

          • 4. Xử lý tín hiệu tiếng nói:

            • 4.1. Sự biểu hiện và phân tích tiếng nói:

            • 4.2. Phương pháp xử lý đồng hình:

            • 4.3. Xác định tần số cơ bản F0:

            • II. Thiết kế chương trình:

              • 1. Cấu trúc file wave:

                • 1.1. Khái niệm về tập tin wave

                • 1.2. Cấu trúc tập tin wave:

                  • a. Khối mô tả dạng RIFF:

                  • b. Khối thuộc tính “fmt”

                  • c. Khối dữ liệu (data):

                  • 2. Phân tích và thiết kế chức năng chương trình:

                  • 3. Cài đặt chương trình:

                  • 4. Thử nghiệm chương trình:

Tài liệu cùng người dùng

Tài liệu liên quan