Tải bản đầy đủ (.pdf) (15 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (501.73 KB, 15 trang )


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:


Ở đây ta xây 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) ta biến đổi Fourier
-
(.) rồi lấy 10 mũ.

7. 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:
/
0
(
1
)
=%
y(x+dx)%–%y(x)
23
%4 5%67 8 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 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.



×