Phần diễn dịch

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu và ứng dụng một số thuật toán nén tiếng nói luận văn ths công nghệ thông tin 60 48 05001 (Trang 43 - 46)

3.2.2.Đọc, ghi file Wave

Trong dạng RIFF gốc, cần thấy rõ rằng các khúc khác nhau có thể xuất hiện theo bất cứ thứ tự nào. Vì vậy, rất có thể có một vài dạng tệp Wav có thể có khúc dữ liệu âm thanh trước khúc định dạng. Và sự thể hiện của bất ký khúc nào đều phụ thuộc cả dạng của khúc và dạng của container kèm theo. Nguyên tắc chung của RIFF và các dạng tương tự là nên bỏ qua bất cứ khúc nào mà ta không thể nhận dạng được.

Một cách để truy cập những tệp như vậy là đọc lướt toàn bộ tệp và tạo một sự ánh xạ trong bộ nhớ với sự định vị và dạng của mỗi khúc. Sau đó, có thể định vị các khúc một cách riêng biệt tùy theo yêu cầu. Tuy nhiên, sự tiếp cận này, mặc dù chi tiết, nhưng lại có một trở ngại lớn là nó yêu cầu phải có sự hiệu lực toàn bộ tệp ngay lập

tức. Đặc biệt, nếu ta quan tâm tới quá trình truyền một tệp Wave qua mạng và quá trình phát nó giống như dữ liệu được nhận, ta có thể bỏ qua toàn bộ tệp và định vị các khúc trước khi ta bắt đầu phát.

Ngoài ra, có một cách tiếp cận khác là thay vào việc ánh xạ sự định vị cho mỗi khúc ta có thể đọc tệp từ phần đầu cho tới cuối và xử lý các khối ngay trong quá trình đọc. Và trong các tệp RIFF (như trong mọi dạng RIFF – derived file), mỗi khúc chiếm giữ một số bytes trong tệp. Nếu kích thước của khúc hiện thời là lẻ thì sẽ có một byte phụ của phần thêm vào cần được bỏ qua. Và có thể, khúc mà chúng ta vừa xóa lại là khúc cuối cùng của container của nó. Do đó, nếu bất cứ container còn lại ít hơn 8 bytes thì cần phải được kết thúc bởi vì một header của khúc yêu cầu ít nhất là 8 bytes.

 Khúc fmt chứa thông tin định dạng âm thanh hiện thời. Những nội dung chính xác của sự thay đổi khúc fmt phụ thuộc vào phương thức nén.

Bảng 3.3: Khuôn dạng khúc fmt sử dụng cho dữ liệu PCM:

Kích thƣớc Mô tả

2 Mã phương thức nén

2 Số kênh truyền

4 Số mẫu trong mỗi giây

4 Số byte trung bình cho mỗi giây

2 Block alignement

2 Số bit cho mỗi mẫu

2 Số byte của thông tin thêm vào n Thông tin về bộ nén phụ

 Khúc dữ liệu (data chunk) của dạng Wav theo chuẩn mẫu RIFF. Bốn byte đầu xác định khúc dữ liệu với các ký tự “data” trong mã ASCII. Theo sau bốn byte biểu diễn độ dài dữ liệu. Cuối cùng là các dữ liệu được mã hóa trong một số byte cho trước.

3.3. Nhiễu và khử nhiễu

3.3.1. Nhiễu

Nhiễu được hiểu là các âm thanhphát sinh ngẫu nhiên trong môi trường truyền âm. Ngay cả bộ phát âm của con người cũng sinh ra nhiễu, chẳng hạn như tiếng thở, tiếng bật lưỡi, tiếng chép miệng cả khi môi chạm vào micro… Không dễ gì có thể lọc được mọi thứ nhiễu, ta chỉ tìm cách tối thiểu hoá chúng để có thể nâng cao chất lượng của hệ thống nhận dạng.

Gọi tín hiệu tiếng nói là 𝑆𝑛, tín hiệu nhận được sau quá trình thu sẽ được ký hiệu là𝑆𝑛. Như vậy 𝑆 − 𝑆𝑛 𝑛 chính là tín hiệu nền

Độ nhiễu của tín hiệu được xác định thông qua năng lượng đo được của tín hiệu: 𝐸 = 10 log10 𝑁𝑛=0𝑆𝑛2

𝑁 𝑆 −𝑆𝑛 𝑛 2

𝑛=0 (đơn vị năng lượng tính bằng dB)

Như vậy, nếu năng lượng E càng lớn thì Sn càng gần với 𝑆𝑛, tín hiệu nền có giá trị gần về 0. Nếu E →∞ thì tín hiệu thu về là tín hiệu sạch, không có nhiễu.

3.3.2. Khử nhiễu

Có rất nhiều phương pháp lọc nhiễu khác nhau như dùng phép biến đổi Fourier với thuật toán FFT. Dùng biến đổi Fourier thuận xác định được các tần số tham gia và loại đi tất cả tần số không thuộc phạm vi tiếng nói (nếu biết được phạm vi tần số của đúng người sử dụng thì kết quả lọc sẽ càng cao hơn) bằng cách cho các hệ số tương ứng giá trị zero sau đó biến đổi ngược lại.

3.3.2.1 Thuật toán lọc nhiễu sử dụng hàm năng lượng thấp

Trong quá trình thu âm, người nói khi phát âm không thể tránh được các khoảng “lặng”. Về mặt thông tin của từ, các khoảng “lặng” này là vô nghĩa. Do đó, nó được coi là một loại nhiễu “thô” cần loại bỏ.

Xét về mặt năng lượng, các khoảng lặng này thường mang năng lượng thấp hơn khá nhiều so với năng lượng của cả từ được phát ra. Vì vậy, ta loại bỏ bằng cách:

 Sử dụng một hàm cửa sổ (w) có kích thước (N) phủ lên dãy giá trị của âm thanh vừa thu.

 Nếu 𝑁𝑖=1𝐸𝑖2 ≤ 𝑒thì loại bỏ. (Ei là giá trị của mẫu tín hiệu thứ i, i chạy từ a đến a+n, e là mức ngưỡng năng lượng cho trước).Vì vậy, với cách lọc này, ta giảm được đáng kể các khoảng “lặng” không có giá trị thông tin trong từ vừa thu âm, qua đó tăng độ chính xác cho bước nhận dạng từ.

Thuật toán lọc nhiễu sử dụng hàm năng lượng thấp được miêu tả như trong hình 3.6:

Input: Tín hiệu tiếng nói, là chuỗi các biên độ ứng với giá trị tín hiệu tiếng nói. Output: Dữ liệu tiếng nói đã loại bỏ các khoảng “lặng”.

Begin

-file.wav

A=ReadAllBytes(file .wav); B=ConvertTo16bit(A,2); L=B.length; n=16; i = 0; Arraylist L // Đọc file âm thanh và chuyển sang

dạng số nguyên S = Tổng(B, n); i < L S <= e i = i + n; End

For j=I; j<I + n; j++ L.add(B[j]); // Thêm các đoạn có S>e vào mảng L Đúng Đúng Sai Sai

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu, nghiên cứu và ứng dụng một số thuật toán nén tiếng nói luận văn ths công nghệ thông tin 60 48 05001 (Trang 43 - 46)