Báo cáo môn xử lý tiếng nói đề tài 5 xác định tần số formant dùng xử lý đồng hình
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ÁO CÁO MÔN XỬ LÝ TIẾNG NÓI Đề tài 5: Xác định tần số formant dùng xử lý đồng hình Giảng viên hướng dẫn: PGS. TS Trịnh Văn Loan Sinh viên thực hiện : Trịnh Duy Tân 20082329 Nguyễn Trọng Hiếu 20080941 Lớp: TTM – K53 Hà Nội, tháng 04 năm 2012 Mục lục I. Cấu trúc file *.wav, đọc file *.wav 4 1. Cấu trúc file *.wav 4 a. Khối mô tả dạng RIFF: 5 b. Khối thuộc tính “fmt ”: 5 c. Khối dữ liệu “data”: 6 2. Đọc file *.wav 7 II. Xác định đáp ứng tần số của tuyến âm bằng phương pháp xử lý đồng hình 9 Xử lý đồng hình: 9 Sơ đồ khối xử lý đồng hình: 9 1. Bộ lọc hiệu chỉnh H(z): 10 2. Cửa sổ Hamming W(n) 10 3. Biến đổi Fourier rời rạc 10 4. Logarit hóa 11 5. Biến đổi Fourier ngược 12 6. Xác định đáp ứng tần số 13 7. Tính toán formant 13 III. Kết quả thực hiện chương trình 13 IV. Tài liệu tham khảo 15 Đề 5: Xác định tần số formant dùng xử lý đồng hình - Đọc và hiển thị tiếng nói từ file *.WAV. - Xác định đáp ứng tần số của tuyến âm bằng phương pháp xử lý đồng hình. - Hiển thị đáp ứng tần số. - Hiển thị kết quả formant đã tính được. Nhóm sinh viên thực hiện: Trịnh Duy Tân – 20082329 Nguyễn Trọng Hiếu – 20080941 Ngôn ngữ sử dụng: C# Công cụ lập trình: Microsoft Visual Studio 2010 I. Cấu trúc file *.wav, đọc file *.wav 1. Cấu trúc file *.wav 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 Windows. 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) và đặ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 để qui định kiểu và kích thước của khối ) và các byte dữ liệu. Tập tin wave có 2 dạng là dạng nén và dạng không nén (dạng chuẩn) vì thế trong đề tài này chúng ta sẽ chỉ đề cập đến dạng chuẩn của tập tin wave tức là dạng không nén. 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à 2 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 dạng RIFF và có kích thước là 12 byte gồm các trường: • ChunkID: Kích thước: 4 byte Chức năng: chứa chuỗi “RIFF” dưới dạng mã ASCII • ChunkSize: Kích thước: 4 byte Chức năng: cho biết tổng kích thước của các trường sau nó. (ChunkSize = 4 + (8 + Subchunk1Size) + (8 + Subchunk2Size)) • Format: Kích thước: 4 byte Chức năng: chứa chuỗi “WAVE” (giá trị 0x57415645 kiểu big-endian). 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: • Subchunk1ID: Kích thước: 4 byte Chức năng: chứa chuỗi “fmt ” (giá trị 0x666d7420 kiểu big-endian). • Subchunk1Size: Kích thước: 4 byte Chức năng: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 không nén (PCM) thì Subchunk1Size bằng 16) • AudioFormat: Kích thước: 2 byte Chức năng: cho ta biết dạng nén của dữ liệu trong tập tin wave. (với PCM thì AudioFormat = 1). • NumChannels: Kích thước: 2 byte Chức năng: cho biết số kênh của tập tin wave. (Mono=1, Stereo=2,v.v) • SampleRate: Kích thước: 4 byte Chức năng: cho biết số mẫu trên 1 s và đây chính là tần số lấy mẫu của tập tin wave. (8000, 10000, 44100…) • ByteRate: Kích thước: 4 byte Chức năng: cho biết số byte trên 1 s ứng với tần số lấy mẫu trên. (ByteRate = SampleRate * NumChannels * (BitsperSample / 8)) • BlockAlign: Kích thước: 2 byte Chức năng: cho biết số byte của 1 mẫu gồm tất cả các kênh. (BlockAlign = NumChannels * BitsPerSample / 8) • BitsPerSample: Kích thước: 2 byte Chức năng: cho biết số bit trên 1 mẫu chỉ tính cho 1 kênh. ( 8 bit=8, 16 bit=16, v.v) c. Khối dữ liệu “data”: • Subchunk2ID: Kích thước: 4 byte Chức năng: chứa chuỗi “data” (giá trị 0x64617461 kiểu big-endian). • Subchunk2Size: Kích thước: 4 byte Chức năng: cho biết kích thước của dữ liệu âm thanh thô trong trường data. (Subchunk2Size = NumSamples * 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 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 1 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 1 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 Ví dụ ta có file WAVE như sau: 52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00 24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d 2. Đọc file *.wav Ta xây dựng hàm đọc file wav với đầu vào là tên file (đường dẫn file wav), đầu ra là nội dung file dưới dạng nhị phân được lưu trong 1 mảng byte[]: Nội dung file dưới dạng nhị phân sẽ được lưu trong mảng byte[] wavData Các thông tin về tần số lấy mẫu, số bit mỗi mẫu… sẽ được đọc từ mảng wavData này bằng hàm Xuly(byte[] wData) theo đúng cấu trúc file .wav như sau: Phần dữ liệu sẽ được đọc vào mảng leftChannel (với trường hợp 1 kênh - mono) hoặc mảng leftChannel và rightChannel (với trường hợp 2 kênh - stereo). Khi đọc dữ liệu cần chú ý dữ liệu lưu trong file theo dạng little- endian. Sử dụng hàm ChuyenSo: để đọc chính xác dữ liệu từ file. II. Xác định đáp ứng tần số của tuyến âm bằng phương pháp xử lý đồng hình Xử lý đồng hình: Sơ đồ khối xử lý đồng hình: 1. Bộ lọc hiệu chỉnh H(z): H(z) = 1 - a.z -1 , a < 1 và thường được chọn cỡ 0.95 – 0.98 ở đây ta chọn a = 0.95. Tín hiệu output = input * h(n) (*: phép nhân chập) output(n) = input(n) - 0.95 input(n-1). 2. Cửa sổ Hamming W(n) Nhân với cửa sổ Hamming: W(n) = 0.54 - 0.46 * cos(2πn/(N-1)) output(n) = input(n) . W(n) 3. Biến đổi Fourier rời rạc Biến đổi Fourier rời rạc DFT: [...]... dựng class SoPhuc phục vụ thao tác tính toán với số phức, class SoPhuc này gồm 2 thuộc tính: RE (phần thực) và IM (phần ảo) 4 Logarit hóa 5 Biến đổi Fourier ngược Biến đổi DFT ngược: 6 Xác định đáp ứng tần số Sau khi biến đổi DFT ngược (IDFT) ta thu được cepstrum của tín hiệu, dùng cửa sổ chữ nhật lấy ra 1 đoạn, ta thu được ℎ( ) Theo công thức xử lý đồng hình ta có: ℎ( ) = {log [ ( )]} Từ đó để tính H(w)... Tính toán formant Formant được xác định bằng các điểm cực đại của đáp ứng tần số (chính là tần số tại vị trí các điểm cực đại) Để tìm được các cực đại này ta dùng phương pháp đạo hàm, công thức đạo hàm: y(x + dx) – y(x) ( )= ℎ →0 Ở đây tín hiệu rời rạc nên dx nhỏ nhất là = 1 Công thức đạo hàm trở thành : y’(x) = y(x+1) – y(x) Cực đại là điểm mà tại đó y’(x) chuyển dấu từ dương sang âm, từ đó xác định được... âm, từ đó xác định được các cực đại => tìm được các formant III Kết quả thực hiện chương trình Để vẽ các kết quả tính toán được, ta sử dụng hàm VeTinHieu vẽ lên 1 panel Tương tự để vẽ các cửa sổ, ta dùng hàm VeCuaSo Kết quả thử nghiệm : IV Tài liệu tham khảo Bài giảng Xử lý tiếng nói - PGS TS Trịnh Văn Loan - Khoa CNTT ĐHBKHN Bài giảng Xử lý tín hiệu số - PGS TS Trịnh Văn Loan - Khoa CNTT ĐHBKHN . CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO MÔN XỬ LÝ TIẾNG NÓI Đề tài 5: Xác định tần số formant dùng xử lý đồng hình Giảng viên hướng dẫn: PGS. TS Trịnh Văn Loan . dùng xử lý đồng hình - Đọc và hiển thị tiếng nói từ file *.WAV. - Xác định đáp ứng tần số của tuyến âm bằng phương pháp xử lý đồng hình. - Hiển thị đáp ứng tần số. - Hiển thị kết quả formant. ChuyenSo: để đọc chính xác dữ liệu từ file. II. Xác định đáp ứng tần số của tuyến âm bằng phương pháp xử lý đồng hình Xử lý đồng hình: Sơ đồ khối xử lý đồng hình: 1. Bộ lọc hiệu