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

15 1.9K 20
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

Đ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

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

VỆ Ơ Ệ Ơ V UYỀ Ơ ẬP LỚ Mơn học: Xử lý tiếng nói ĐỀ TÀI 9: iểu diễn lượng, biên độ tỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói theo thời gian iáo viên hướng dẫn: PGS.TS Trịnh Văn Loan Sinh viên thực hiện: Nguyễn Khánh Hưng 20081279 TTM-K53 Nguyễn Lê Hoài Nam 20081819 TTM-K53 4/2012 L I GIỚI THIỆU Ơ SỞ LÝ THUYẾT I Cấu trúc file wave 1.1 RIFF file 1.2 WAVE file 1.3 Subchunk “fmt” 1.4 Subchunk “data” 1.5 Sơ đồ cấu trúc file WAVE Biên độ tín hiệu tiếng nói Năng lượng tín hiệu tiếng nói Tỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói II THIẾT KẾ Ơ Ì 10 Các chức chương trình 10 Các lớp hàm chương trình 10 2.1 2.2 Biên độ tín hiệu tiếng nói 12 2.3 Năng lượng tín hiệu tiếng nói 12 2.4 III Đọc biểu diễn file *.wav 10 Tỷ lệ biến thiên qua giá trị không tín hiệu tiếng nói 13 KẾT LUẬN 14 TÀI LIỆU THAM KHẢO 15 L Ớ ỆU Trong năm học trước, chúng em trang bị kiến thức xử lý tín hiệu số Năm học này, chúng em tiếp tục học mơn Xử lý tiếng nói Mơn học giúp chúng em cụ thể hoá số vấn đề lý thuyết xử lý tín hiệu số Xử lý tiếng nói thực chúng em mơn học khó, qua việc hồn thành đề tài tập lớn này, chúng em phần hiểu rõ môn học Qua đây, chúng em xin gửi lời cảm ơn chân thành tới thầy Trịnh Văn Loan, giảng viên trực tiếp giảng dạy môn học Xử lý tiếng nói, tận tình truyền đạt cho chúng em vấn đề xử lý tín hiệu số nói chung xử lý tiếng nói nói riêng I Ơ SỞ LÝ UYẾ ấu trúc file wave Tiếng nói tín hiệu tương tự, để lưu trữ máy tính đặt trưng chuỗi số 01…ta phải “lấy mẫu” “lượng tử hoá” tín hiệu tương tự thành tín hiệu số lưu trữ máy tính Phương pháp “lấy mẫu” “lượng tử hoá” âm thường phương pháp PCM Phương pháp lấy mẫu âm với tần số khoảng từ 11.025 kHz 44.1 kHz Mỗi giá trị mẫu lượng tử hoá bits tương ứng giá trị mẫu từ –128 đến 127 lượng tử hoá 16 bits tương ứng giá trị mẫu từ –32768 đến 32767 So với lượng tử hố bits lượng tử hố 16 bits lưu trữ âm trung thực bù lại số byte lưu tăng gấp đôi 1.1 RIFF file Cấu trúc Wave File thuộc vào lớp file sử dụng bỡi hàm Multimedia Windows : RIFF file RIFF chữ viết tắt Resource Interchange File Format (format file trao đổi tài nguyên) Một RIFF file gồm nhiều loại chunks, chunk lại chứa trỏ để đến chunk Mỗi chunk bao gồm loại chunk liệu theo sau loại chunk Một ứng dụng muốn đọc RIFF file qua chunk, đọc liệu chunk quan tâm bỏ qua chunk mà không quan tâm Một chunk RIFF file bắt đầu header có cấu trúc sau: typedef struct { FOURCC ckID; DWORD ckSize; } CK; FOURCC gồm bytes loại chunk Đối với Wave File, field có giá trị "WAVE" Nếu loại chunk ký tự ký tự cịn lại bên phải đệm thêm vào khoảng trắng ckSize gồm byte chứa kích thước vùng liệu chunk, vùng liệu nằm sau header có kích thước ckSize bytes Chunk chứa subchunks Subchunk chunk Một RIFF file bắt đầu chunk loại "RIFF" 1.2 WAVE file Wave file bắt đầu chunk loại "RIFF Hai subchunk Wave chunk đặc tả thông tin âm wave file tiếp liệu subchunk Đó subchunk "fmt" subchunk "data" 1.3 Subchunk “fmt” Dữ liệu “fmt” chunk cấu trúc WAVEFORMAT có cấu trúc sau: typedef struct waveformat_tag { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; } WAVEFORMAT; + wFormatTag: Thường có giá trị WAVE_FORMAT_PCM định nghĩa tập tin MMSYSTEM sau: #define WAVE_FORMAT_PCM Giá trị báo cho phần mềm đọc Wave file biết kiểu mã hoá liệu âm sang liệu số kiểu mã hoá PCM Hiện kiểu mã hố Wave file • nChannels: có hai giá trị : cho âm mono cho âm stereo • nSamplesPerSec: cho biết tốc độ lấy mẫu, có giá trị: 11025 11.025 kHz 22050 22.050 kHz 44100 44.100 kHz • nAvgBytesPerSec: cho biết số byte yêu cầu trung bình giây để phát lại mẫu liệu sóng âm • nBlockAlign: cho biết số byte dùng để chứa mẫu âm Như mẫu bit hay yêu cầu byte, mẫu đến 16 bit yêu cầu byte Nếu âm stereo yêu cầu số byte gấp lần âm mono Ta thấy WAVEFORMAT chưa có thơng tin số bit dùng để lượng tử hố mẫu liệu sóng âm Thực tế Wave file xác lập số bit dùng cho mẫu liệu trường gắn vào cuối cấu trúc WAVEFORMAT Cấu trúc sau: Typedef struct pcmwaveformat_tag { WAVEFORMAT wf; WORD wBitsPerSample; } PCMWAVEFORMAT Trong đó: • wBitsPerSample: cho biết số bit mẫu liệu Chú ý: Các mẫu liệu phải lưu trữ dạng byte word Do đó, wave file dùng 12 bit để lượng tử hố mẫu sóng âm phải lưu trữ bit thừa không dùng đến 1.4 Subchunk “data” Dữ liệu data subchunk wave file chứa số liệu âm số hoá Đối với mẫu âm bit, liệu data subchunk bao gồm giá trị byte (có giá trị khoảng 0-255) mẫu âm Đối với mẫu âm 16 bit, mẫu liệu gồm byte (có giá trị khoảng từ -32768 đến 32767) Điều khơng có nghĩa file wave 16 bit nghe to 256 lần file wave bit, mà có nghĩa âm lượng tử hố xác hơn, nghe trung thực Trong mẫu mono bit, liệu data subchunk gồm chuỗi giá trị byte Với stereo bit, mẫu gồm byte, liệu xếp xen kẽ (interleave), với byte đầu (byte chẵn) mẫu âm kênh bên trái, byte sau (byte lẻ) kênh bên phải 1.5 Sơ đồ cấu trúc file W VE Kích thước bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes Giá trị "RIFF" Kích thước file RIFF "WAVE" "fmt " Kích thước subchunk "fmt " Kiểu mã hóa liệu file wave (thường PCM) Số kênh: – mono – stereo Số mẫu/1giây Số bytes/1 giây Số bytes/1mẫu Số bits/1mẫu "data" Kích thước liệu Dữ liệu sóng âm iên độ tín hiệu tiếng nói Biên độ tín hiệu tiếng nói theo thời gian cho biết đường bao biên độ tín hiệu Vì cần lấy giá trị tuyệt đối biên độ biểu diễn giá trị theo thời gian ăng lượng tín hiệu tiếng nói Tiếng nói tạo từ rung động đường âm theo thời gian Vì tín hiệu tiếng nói tự nhiên khơng ổn định Hầu hết cơng thức xử lý tín hiệu học, hệ thống hay q trình xử lý tín hiệu giả sử hệ thống bất biến theo thời gian, thời gian bất biến tín hiệu khơng thay đổi Do cơng thức khơng áp dụng trực tiếp cho q trình xử lý tiếng nói Cơng thức tính tổng lượng tín hiệu tiếng nói: Cơng thức sử dụng trường hợp tín hiệu không thay đổi lượng giới hạn Giả sử, sử dụng công thức để tính tổng lượng tín hiệu tiếng nói Nhưng tổng lượng khơng sử dụng Bởi vì, thực tế tiếng nói lượng thay đổi theo thời gian Vì phải đưa cơng thức tính lượng thay đổi theo thời gian Để rõ ràng giả sử tín hiệu trình xử lý khơng thay đổi, tín hiệu tiếng nói không thay đổi biểu diễn khối từ 10 tới 30 ms Vì để xử lý tiếng nói, ta xử lý tín hiệu tiếng nói khối 10-30ms Đây gọi trình xử lý ngắn hạn Năng lượng tín hiệu tiếng nói biến thiên theo thời gian Do mục đích q trình xử lý tiếng nói để nhận biết thay đổi lượng theo thời gian Tín hiệu tiếng nói bao gồm âm vơ thanh, hữu khoảng lặng Hơn nữa, phải so sánh lượng vùng âm hữu với vùng âm vơ vùng khoảng lặng khơng có lượng Vì lượng ngắn hạn sử dụng để phân loại âm hữu thanh, âm vô khoảng lặng Cơng thức tính lượng ngắn hạn dựa cơng thức tính tổng lượng Để tính lượng ngắn hạn xét tín hiệu khoảng 10-30ms Đặt mẫu khung n = tới n = N-1, N tổng số mẫu khung Cơng thức tính lượng ngắn hạn: Trong w(n) hàm cửa sổ cửa sổ chữ nhật, hanning, hamming Hàm cửa sổ Hamming { ( ) ỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói Tỷ lệ biến thiên qua giá trị không đưa thông tin tỷ lệ tín hiệu thay đổi dấu suốt chiều dài tín hiệu, tỷ lệ mà tín hiệu thay đổi từ dương sang âm ngược lại Đặc điểm sử dụng nhiều việc nhận biết tín hiệu tiếng nói khơi phục lại thông tin tiếng nhạc, để phân loại âm va đập Nếu tỷ lệ biến thiên qua giá trị không lớn tín hiệu có thay đổi lớn, đoạn tín hiệu có tần số cao với đường giống 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, tín hiệu chứa thơng tin tần số thấp Tỷ lệ biến thiên qua giá trị không đưa thơng tin tần số 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 tín hiệu tiếng nói: Trong w(m) cửa sổ chữ nhật 0.5|sgn{x[m]} – sgn{x[m – 1]}| = x[m] x[m – 1] khác dấu hai mẫu dấu Ế II Ế Ơ Ì ác chức chương trình - Đọc hiển thị tín hiệu tiếng nói từ file *.WAV - Biểu lượng, biên độ tỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói Các menu:  Open menu: chọn file *.wav  Wave file information menu: xem thông tin header file *.wav  Next, Back menu: chuyển hình biểu diễn ác lớp hàm chương trình 2.1 Đọc biểu diễn file *.wav  Đọc file *.wav class WaveFile { #region RIFF HEAD private byte[] m_RiffID; //Chuỗi "RIFF": byte private int m_RiffSize; //Tổng kích thước trường sau private byte[] m_RiffFormat; //Chuỗi "WAVE": byte #endregion #region FMT HEAD private private private private private private private private byte[] m_FmtID; //String "fmt":4 byte int m_FmtSize; //Tổng kích thước trường sau int m_FmtTag; //Dạng nén liệu(VD: 1-PCM): byte int m_Channels; //Số kênh(Mono=1; Stereo=2): byte int m_SamplesPerSec; //Tần số lấy mẫu:số mẫu trên1giây:4 byte int m_AverageBytesPerSec; //Số bytes giây: byte int m_BlockAlign; //Số byte mẫu: 2byte int m_BitsPerSample; //Số bit mẫu: byte #endregion #region DATA WAVE private byte[] m_DataID; private int m_DataSize; private int m_NumSamples; private int[] m_Data1; private int[] m_Data2; #endregion //Chuỗi data //Kích thước liệu âm //Tổng số mẫu //Chứa byte dứ liệu âm } 10  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 fheight = height / - 15; g.TranslateTransform(0, height / 2); for (int i = 0; i < Data.Length; i++) { int val = 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; } - Trong hàm biểu diễn trên, mẫu có giá trị lớn biểu diễn đoạn có độ dài fheight 11 2.2 Biên độ tín hiệu tiếng nói: class ViewAmplitude public void DrawAmplitude() { using (Graphics g = Graphics.FromImage(bitmap)) { Pen pen = new Pen(Color.Blue); PointF[] point = new PointF[NumSample]; 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 tín hiệu tiếng nói: class ViewEnergy  Tính lượng 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 / - 15; for (int i = 0; i < NumSample; i++) { newData[i] = (fheight * data[i]) / dtMax; } for (int i = 0; i < numPoint; i++) { double temp = 0; for (int m = 0; m < lenWindow; m++) { if (i * lenShift + m >= NumSample) continue; temp += Math.Pow(newData[m + i * lenShift], 2) * Math.Pow(Hamming[m], 2); } Energy[i] = (int)temp; } 12 2.4 Tỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói Class ViewZeroCrossingRate int numPoint = NumSample / lenShift; ZCR = new int[numPoint]; for (int i = 0; i < numPoint; i++) { double temp = 0; for (int m = 0; m < lenWindow; m++) { if (i * lenShift + m + >= NumSample) continue; temp += 0.5 * Math.Abs(Math.Sign(data[m + i * lenShift]) - Math.Sign(data[m + + i * lenShift])); } ZCR[i] = (int)(temp); } 13 III KẾ LUẬ Thơng qua q trình nghiên cứu tập lớn đem lại cho chúng em hiểu biết toàn diện tín hiệu tiếng nói, ứng dụng thực tế việc xác định biểu diễn tín hiệu tiếng nói, lượng tỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói Do thời gian có hạn nên khơng thể tránh khỏi sai sót, chúng em mong nhận góp ý bổ sung thầy 14 L ỆU M Ả - Trịnh Văn Loan, Bài giảng xử lý tiếng nói - http://my.opera.com/f0ng_vn/blog/show.dml/671686 - http://125.20.82.167:8091/virtual/experiment7.php?link=T00107 - http://www.nowpublishers.com/product.aspx?product=SIG&doi=2000000 001§ion=x1-56r1 15 ... iên độ tín hiệu tiếng nói Biên độ tín hiệu tiếng nói theo thời gian cho biết đường bao biên độ tín hiệu Vì cần lấy giá trị tuyệt đối biên độ biểu diễn giá trị theo thời gian ăng lượng tín hiệu tiếng. .. Hamming { ( ) ỷ lệ biến thiên qua giá trị khơng tín hiệu tiếng nói Tỷ lệ biến thiên qua giá trị khơng đưa thơng tin tỷ lệ tín hiệu thay đổi dấu suốt chiều dài tín hiệu, tỷ lệ mà tín hiệu thay đổi... 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, tín hiệu chứa thơng tin tần số thấp Tỷ lệ biến thiên qua giá trị không đưa thông tin tần số tín hiệu tiếng nói

Ngày đăng: 28/04/2014, 20:38

Từ khóa liên quan

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

Tài liệu liên quan