Bài tập lớn xử lý tiếng nói biểu diễn năng lượng, biên độ và tỷ lệ biến thiên qua giá trị không của tín hiệu tiếng nói theo thời gian - Pdf 13


 

ĐỀ TÀI 9:
             
.
 PGS.TS. Trịnh Văn Loan

Nguyễn Khánh Hưng 20081279 TTM-K53
Nguyễn Lê Hoài Nam 20081819 TTM-K53

 4/2012
2

LI GII THIU 3
I.  LÝ THUYT 4
1. Cấu trúc file wave 4
1.1. RIFF file 4
1.2. WAVE file 5
1.3. Subchunk “fmt” 5
1.4. Subchunk “data” 6
1.5. Sơ đồ cấu trúc file WAVE 7

I. 
1. 
Tiếng nói là tín hiệu tương tự, để lưu trữ được trong máy tính đặt trưng bởi
chuỗi số 01…ta phải “lấy mẫu” và “lượng tử hoá” tín hiệu tương tự thành tín hiệu
số mới lưu trữ được trong máy tính. Phương pháp “lấy mẫu” và “lượng tử hoá” âm
thanh hiện nay thường là phương pháp PCM. Phương pháp này sẽ lấy mẫu âm
thanh với tần số khoảng từ 11.025 kHz cho đến 44.1 kHz. Mỗi giá trị mẫu được
lượng tử hoá bằng 8 bits tương ứng giá trị mẫu từ –128 đến 127 hoặc lượng tử hoá
bằng 16 bits tương ứng giá trị mẫu từ –32768 đến 32767. So với lượng tử hoá bằng
8 bits thì lượng tử hoá bằng 16 bits sẽ lưu trữ âm thanh trung thực hơn nhưng bù lại
số byte lưu tăng gấp đôi.
1.1. RIFF file
Cấu trúc của Wave File thuộc vào lớp file được sử dụng bỡi các hàm
Multimedia của Windows : đó là RIFF file. RIFF là chữ viết tắt của Resource
Interchange File Format (format file trao đổi tài nguyên). Một RIFF file gồm một
hoặc nhiều loại chunks, trong mỗi chunk lại chứa con trỏ để chỉ đến chunk kế tiếp.
Mỗi chunk bao gồm loại chunk và dữ liệu theo sau loại chunk đó. Một ứng
dụng muốn đọc RIFF file có thể đi qua lần lượt từng chunk, đọc dữ liệu ở những
chunk nó quan tâm và có thể bỏ qua các chunk mà nó không quan tâm. Một chunk
của RIFF file luôn bắt đầu bởi một header có cấu trúc như sau:
typedef struct
{
FOURCC ckID;
DWORD ckSize;
} CK;
FOURCC gồm 4 bytes chỉ ra loại chunk. Đối với Wave File, field này có giá
trị là "WAVE". Nếu loại chunk ít hơn 4 ký tự thì các ký tự còn lại bên phải sẽ được
đệm thêm vào các khoảng trắng.
ckSize gồm 4 byte chứa kích thước vùng dữ liệu của chunk, vùng dữ liệu này
nằm ngay sau header và có kích thước là ckSize bytes.

• nAvgBytesPerSec: cho biết số byte yêu cầu trung bình trong một giây để
phát lại mẫu dữ liệu của sóng âm.
6

• nBlockAlign: cho biết số byte dùng để chứa một mẫu âm thanh. Như vậy
mẫu 8 bit hay ít hơn sẽ yêu cầu 1 byte, mẫu 9 đến 16 bit sẽ yêu cầu 2 byte. Nếu âm
thanh là stereo thì yêu cầu số byte gấp 2 lần âm thanh mono.

Ta thấy trong WAVEFORMAT chưa có thông tin về số bit dùng để lượng tử
hoá một mẫu dữ liệu của sóng âm. Thực tế Wave file sẽ xác lập số bit dùng cho một
mẫu dữ liệu bằng một trường gắn vào cuối cấu trúc của WAVEFORMAT. Cấu trúc
đó như sau:
Typedef struct pcmwaveformat_tag
{
WAVEFORMAT wf;
WORD wBitsPerSample;
} PCMWAVEFORMAT
Trong đó:
• wBitsPerSample: cho biết số bit trong một mẫu dữ liệu.

Chú ý:
Các mẫu dữ liệu vẫn phải lưu trữ ở dạng byte hoặc word. Do đó, nếu một
wave file dùng 12 bit để lượng tử hoá một mẫu sóng âm thì sẽ phải lưu trữ 4 bit
thừa không dùng đến.
1.4. 
Dữ liệu của data subchunk của wave file chứa các số liệu của âm thanh đã
được số hoá. Đối với mẫu âm thanh 8 bit, dữ liệu của data subchunk bao gồm các
giá trị 1 byte (có giá trị trong khoảng 0-255) của các mẫu âm thanh. Đối với mẫu
âm thanh 16 bit, mỗi mẫu dữ liệu gồm 2 byte (có giá trị trong khoảng từ -32768 đến
32767). Điều này không có nghĩa là file wave 16 bit sẽ nghe to hơn 256 lần file

Số bytes/1 giây
2 bytes
Số bytes/1mẫu
2 bytes
Số bits/1mẫu
4 bytes
"data"
4 bytes
Kích thước dữ liệu
Dữ liệu sóng âm 2. 
Biên độ tín hiệu tiếng nói theo thời gian cho biết đường bao biên độ của tín
hiệu. Vì vậy chỉ cần lấy giá trị tuyệt đối của biên độ và biểu diễn giá trị này theo
thời gian.



3. 
Tiếng nói được tạo từ sự rung động đường thanh âm theo thời gian. Vì vậy tín
hiệu tiếng nói trong tự nhiên là không ổn định. Hầu hết các công thức trong xử lý
tín hiệu đã học, các hệ thống hay quá trình xử lý tín hiệu đều giả sử hệ thống bất
8

biến theo thời gian, thời gian bất biến và tín hiệu không thay đổi. Do đó những công
thức này không áp dụng trực tiếp cho quá trình xử lý tiếng nói.
Công thức tính tổng năng lượng của tín hiệu tiếng nói:



  




 


4.  
Tỷ lệ biến thiên qua giá trị không đưa ra thông tin về tỷ lệ tín hiệu thay đổi
dấu trong suốt chiều dài tín hiệu, tỷ lệ mà tại đó tín hiệu thay đổi từ dương sang âm
hoặc ngược lại. Đặc điểm này được sử dụng nhiều trong cả việc nhận biết tín hiệu
tiếng nói và khôi phục lại thông tin tiếng nhạc, để phân loại âm thanh va đập.
Nếu tỷ lệ biến thiên qua giá trị không lớn thì tín hiệu có thay đổi lớn, đoạn tín
hiệu đó có tần số cao với các đường giống nhau. Nếu tín hiệu có tỷ lệ biến thiên qua
giá trị không nhỏ, tín hiệu thay đổi chậm, do đó tín hiệu chứa thông tin về tần số
thấp. Tỷ lệ biến thiên qua giá trị không đưa ra thông tin về tần số của tín hiệu tiếng
nói.
Công thức tính tỷ lệ biến thiên qua giá trị không của tín hiệu tiếng nói:

Trong đó
w(m) là cửa sổ chữ nhật
0.5|sgn{x[m]} – sgn{x[m – 1]}| = 1 nếu x[m] và x[m – 1] khác dấu và bằng 0
nếu hai mẫu cùng dấu.

private int m_Channels; //Số kênh(Mono=1; Stereo=2): 2 byte
private int m_SamplesPerSec; //Tần số lấy mẫu:số mẫu trên1giây:4 byte
private int m_AverageBytesPerSec; //Số bytes trên giây: 4 byte
private int m_BlockAlign; //Số byte trong một mẫu: 2byte
private int m_BitsPerSample; //Số bit trên mẫu: 2 byte

#endregion

#region DATA WAVE

private byte[] m_DataID; //Chuỗi data
private int m_DataSize; //Kích thước dữ liệu âm thanh
private int m_NumSamples; //Tổng số mẫu
private int[] m_Data1; //Chứa byte của dứ liệu âm thanh
private int[] m_Data2;
#endregion
}

11

 Biểu diễn file *.wav: class ViewWave
public void DrawSpeechSignal()
{
using( Graphics g = Graphics.FromImage(bitmap))
{
Pen pen = new Pen(Color.Blue);
g.DrawLine(pen, new Point(50, height / 2), new Point(width, height /
2));
PointF[] point = new PointF[NumSample];
int dtMax = getValueMax(Data);

int dtMax = getValueMax(Data);
g.DrawString(dtMax + "", new Font("Courier", 8, FontStyle.Regular),
Brushes.Black, new Point(15, 13));
int fheight = height - 30;
g.TranslateTransform(0, height - 15);
for (int i = 0; i < Data.Length; i++)
{
int val = Math.Abs(Data[i]);
point[i].X = (i * (width - 50)) / NumSample + 50;
point[i].Y = (-1) * ((fheight * val) / dtMax);
}

g.DrawLines(pen, point);
g.Dispose();
}
picGraph.Image = bitmap;
} 2.3. Năng lượng của tín hiệu tiếng nói: class ViewEnergy
 Tính năng lượng của tín hiệu tiếng nói
Hamming = WindowHamming(lenWindow); //Cửa sổ Hamming
int numPoint = NumSample / lenShift; //Tổng số điểm tren Ox
Energy = new int[numPoint];
newData = new int[NumSample];
int dtMax = getValueMax(data);
int fheight = height / 2 - 15;
for (int i = 0; i < NumSample; i++)
{
newData[i] = (fheight * data[i]) / dtMax;

}
14

III. K
Thông qua quá trình nghiên cứu bài tập lớn đã đem lại cho chúng em những
hiểu biết toàn diện hơn về tín hiệu tiếng nói, cũng như những ứng dụng thực tế của
việc xác định và biểu diễn tín hiệu tiếng nói, năng lượng và tỷ lệ biến thiên qua giá
trị không của tín hiệu tiếng nói. Do thời gian có hạn nên không thể tránh khỏi những
sai sót, chúng em mong nhận được sự góp ý bổ sung của thầy.

15



- Trịnh Văn Loan, Bài giảng xử lý tiếng nói
-
- http://125.20.82.167:8091/virtual/experiment7.php?link=T00107
- />001&section=x1-56r1


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status