Tài liệu Đồ án Nén âm thanh file WAV theo chuẩn MPEG: TRƯỜNG………………………
KHOA……………………
ĐỒ ÁN TỐT NGHIỆP:
Đề tài: " Nén âm thanh file WAV theo chuẩn
MPEG "
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 1
Mục lục................................................................................................................. 1
Lời nói đầu ........................................................................................................... 3
PHẦN I . LÝ THUYẾT ...................................................................................... 4
CHƯƠNG 1. CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH............................ 5
I. NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ ................................................. 6
1.1. Sự hình thành sóng trong môi trường đàn hồi ................................. 6
1.2. Các đặc trưng của sóng. .................................................................... 7
1.3. Phương trình sóng. ............................................................................ 8
I...
79 trang |
Chia sẻ: haohao | Lượt xem: 1103 | Lượt tải: 1
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Nén âm thanh file WAV theo chuẩn MPEG, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG………………………
KHOA……………………
ĐỒ ÁN TỐT NGHIỆP:
Đề tài: " Nén âm thanh file WAV theo chuẩn
MPEG "
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 1
Mục lục................................................................................................................. 1
Lời nói đầu ........................................................................................................... 3
PHẦN I . LÝ THUYẾT ...................................................................................... 4
CHƯƠNG 1. CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH............................ 5
I. NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ ................................................. 6
1.1. Sự hình thành sóng trong môi trường đàn hồi ................................. 6
1.2. Các đặc trưng của sóng. .................................................................... 7
1.3. Phương trình sóng. ............................................................................ 8
II. SÓNG ÂM VÀ ĐẶC TÍNH ÂM THANH. ..................................................... 8
2.1 Dao động âm và sự truyền dao động. ................................................ 8
2.2 Đơn vị vật lý của âm thanh. ............................................................... 9
2.3. Đặc tính sinh lý về sự cảm thụ âm. ................................................... 12
CHƯƠNG 2. WAVE FILE. ................................................................................. 16
I. MULTIMEDIA WINDOWS. ......................................................................... 16
II. CẤU TRÚC WAVE FILE. ............................................................................. 17
2.1 RIFF file. ............................................................................................. 17
2.2 Cấu trúc File Wave............................................................................. 17
III. ĐỌC RIFF FILES ......................................................................................... 21
CHƯƠNG 3. LÝ THUYẾT XỬ LÝ TÍN HIỆU SỐ ........................................... 25
I. TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC ........................................................... 25
1. Giới thiệu ................................................................................................ 25
2. Đáp ứng xung trong hệ TTBB ............................................................... 25
3. Tính chất của tổng chập của hệ TTBB .................................................. 26
4. Hệ nhân quả ........................................................................................... 27
5. Tính ổn định ........................................................................................... 27
6. Phương trình sai phân tuyến tính hệ số hằng ....................................... 28
7. Biểu diễn các hệ rời rạc trong miền tần số ............................................ 28
8. Định lý lấy mẫu Shannon ....................................................................... 30
II. PHÉP BIẾN ĐỔI FOURIER RỜI RẠC ....................................................... 30
1. Chuỗi Fourier rời rạc của tín hiệu rời rạc tuần hồn ............................ 30
2. Biến đổi Fourier rời rạc của tín hiệu có độ dài hữu hạn ................................. 31
3. Phép biến đổi nhanh Fourier (FFT) ................................................................ 32
CHƯƠNG 4. GIỚI THIỆU VỀ MPEG. ............................................................. 33
I. GIỚI THIỆU. .................................................................................................. 33
1. MPEG là gì? ........................................................................................... 33
2. So sánh các chuẩn MPEG ..................................................................... 33
3. Aâm thanh MPEG ................................................................................. 34
4. Các khái niệm cơ bản ............................................................................ 35
5. Hoạt động ............................................................................................... 38
II. CÁC KHÁI NIỆM TRONG ÂM THANH MPEG ....................................... 40
1. Lược đồ mã hóa Perceptual Sub-band.................................................. 40
2. Giải thích hiệu qủa che (masking efficiency) ........................................ 41
3. Các lớp của âm thanh MPEG ................................................................. 43
III. CÁC THÔNG SỐ. ......................................................................................... 45
CHƯƠNG 5. CÁC GIẢI THUẬT NÉN ÂM THANH ....................................... 50
I. LÝ THUYẾT THÔNG TIN ............................................................................ 50
II. CÁC GIẢI THUẬT NÉN KHÔNG CÓ TỔN THẤT .................................... 51
1. Mã hóa Huffman .................................................................................... 51
2. Mã hóa Huffman sửa đổi ....................................................................... 53
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 2
3. Mã hóa số học ......................................................................................... 54
4. Giải thuật Lempel-Ziv-Welch (LZW) ................................................... 55
III. CÁC GIẢI THUẬT NÉN CÓ TỔN THẤT ................................................. 57
1. Các phương pháp nén âm thanh đơn giản ............................................ 57
2. Nén âm thanh dùng mô hình âm tâm lý ................................................ 57
3. Nén âm thanh theo chuẩn MPEG .......................................................... 58
PHẦN II. THIẾT KẾ CHƯƠNG TRÌNH .......................................................... 60
CHƯƠNG 6. LƯU ĐỒ GIẢI THUẬT VÀ CẤU TRÚC DỮ LIỆU ................... 61
I. SƠ ĐỒ KHỐI. .................................................................................................. 61
II. CẤU TRÚC DỮ LIỆU VÀ ĐỊNH NGHĨA .................................................... 62
A. CẤU TRÚC DỮ LIỆU ................................................................................... 62
1. Các cấu trúc về file ................................................................................ 62
2.Các cấu trúc về dòng bít dữ liệu............................................................. 63
3.Các cấu trúc để định dạng dòng bít dữ liệu ........................................... 63
4.Các cấu trúc huffmancodetab. ............................................................... 67
5.Các cấu trúc tính MDCT ........................................................................ 67
6.Các cấu trúc scalefac_struct ................................................................... 67
B. CÁC ĐỊNH NGHĨA ........................................................................................ 68
1.Các định nghĩa dùng trong truy xuất dữ liệu ........................................ 68
2.Các định nghĩa dùng trong tính tốn FFT............................................... 68
3.Các định nghĩa dùng trong định dạng dòng dữ liệu .............................. 68
4.Các định nghĩa dùng trong bộ mã hố Huffman ..................................... 68
5.Các định nghĩa dùng trong phân tích dữ liệu ........................................ 69
6.Các định nghĩa dùng trong mô hình âm tâm lý ..................................... 69
7.Các định nghĩa dùng trong truy xuất nhập dữ liệu ............................... 69
8.Các định nghĩa dùng trong cấu trúc file Wave và file Mpeg ................ 69
III. LƯU ĐỒ ........................................................................................................ 71
CHƯƠNG 7: GIAO DIỆN VÀ THUYẾT MINH CHƯƠNG TRÌNH ............... 75
I. GIỚI THIỆU ................................................................................................... 75
II. GIAO DIỆN ..................................................................................................... 75
III.CHƯƠNG TRÌNH ......................................................................................... 77
TÀI LIỆU THAM KHẢO ................................................................................... 87
Lời nói đầu
Công nghệ thông tin là ngành công nghiệp mũi nhọn của thế giới nói
chung và của việt nam nói riêng, nó đã phát triển mạnh mẽ không ngừng trong
những năm gần đây. Khi đời sống được nâng lên khoa học kỹ thuật phát triển nhu
cầu về giải trí cũng đa dạng lên, các loại hình giải trí không ngừng gia tăng và
ngày càng phong phú, đa dạng các loại hình giải trí như: trò chơi điện tử, nghe
nhạc xem phim, xem ca nhạc(video), và đặc biệt là những trong chơi dạng không
gian ba chiều. Sự phát triển ồ ạt này đã dẫn tới ngành công nghệ phần cứng đã
không thể đáp ứng được những đòi hỏi về lưu trữ, đồng hành với sự phát triển
này là mạng máy tính đó chính là Internet ngày càng phát triển số lượng người
tham gia truy cập ngày càng lớn và nhu cầu của họ thì ngày càng phong phú và đa
dạng về tất cả các loại hình nói trên. Do đó tốc độ truy cập, tốc độ truyền tải trên
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 3
mạng được quan tâm hơn để cho người dùng không phải sốt ruột ngồi chờ những
trang web mà mình truy cập, họ không phải bực mình khi download những file
âm thanh và những bài hát mà họ ưa thích vì đường truyền quá chậm trong khi
công nghệ phần cứng đã phát triển mạnh. Chính vì vậy các nhà nghiên cứu phần
mềm đã chú ý đến việc phát triển phần mềm để hỗ trợ phần cứng. Họ đã tạo ra
những chương trình phần mềm hỗ trợ tích cực phần cứng, từ đó đã ra đời những
phần mềm nén âm thanh, hình ảnh, nén video, tách âm thanh từ những file
video…để tạo ra những dạng âm thanh, hình ảnh, video như mindi, mpeg, mp3,
mp4… những file ảnh dạng gif, jpeg…với dung lượng lưu trữ vô cùng nhỏ mặc
dù chất lượng có giảm đi đôi chút nhưng không đáng kể so với những gì nó đạt
được để truyền tải, truy cập nhanh hơn.
Sự tồn tại của chuẩn JPEG (Joint Photographic Experts Group) chỉ để
giảm tốc độ bit và chủ yếu phục vụ cho hình ảnh, rõ ràng là không đủ đáp ứng
cho hình ảnh động có kèm âm thanh. Để đáp ứng nhu cầu của thị trường, một
nhóm các chuyên gia về hình ảnh động (Moving Picture Experts Group), gọi tắt
là MPEG, được thành lập để nghiên cứu đưa ra những lược đồ mã hóa phù hợp
cho việc truyền hình ảnh động và ghi lại chúng theo tiêu chuẩn trong các thiết bị
lưu trữ số như CD-ROM, Video CD..
Phần trình bày của luận văn chỉ nằm trong khuôn khổ "Aâm thanh". Do đó
mọi vấn đề liên quan tới hình ảnh sẽ không được đề cập tới, dù chuẩn MPEG là
dùng cho cả âm thanh và hình ảnh.
Mục tiêu của đề tài chủ yếu chỉ để tìm hiểu về các phương pháp mã hố và
nén âm thanh theo chuẩn Mpeg, từ đó dựa trên một số source code (viết bằng C)
đã có trên mạng Internet viết lại bằng ngôn ngữ Visual C++, nhằm hiểu sâu hơn
về giải thuật, đồng thời tạo ra một giao diện thân thiện hơn.
Do trình độ và kiến thức có hạn nên không tránh khỏi những thiếu sót, em
kính mong thầy tham gia và giúp đỡ em để em hồn thành được tốt hơn.
Em xin chân thành cám ơn thầy đã tạo điều kiện thuân lợi nhất giúp em
hồn thành báo cáo này.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 4
PHẦN I
LÝ THUYẾT CƠ BẢN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 5
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 6
CHUƠNG 1. CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH.
I. NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ
1.1. Sự hình thành sóng trong môi trường đàn hồi.
a. Định nghĩa:
Các môi trường chất khí, chất lỏng, chất rắn là môi trường đàn hồi.
Môi trường đàn hồi có thể coi là những môi trường liên tục gồm những
phân tử liên kết chặt chẽ với nhau, lúc bình thường mỗi phân tử có một vị
trí cân bằng bền.
b. Sự hình thành sóng trong môi trường đàn hồi:
Do tính chất của môi trường đàn hồi, cho nên nếu tác dụng lên phân tử
nào đó của môi trường thì phân tử này rời khỏi vị trí cân bằng bền.
Do tương tác, các phân tử lân cận một mặt kéo phân tử A về vị trí cân
bằng, mặt khác nhận một phần năng lượng do phân tử A truyền sang, do
đó cũng dao động theo, hiện tượng này xảy ra liên tiếp tạo thành sóng.
Sóng đàn hồi (sóng cơ) là sự lan truyền dao động trong môi trường đàn
hồi. Sóng cơ không thể truyền được trong chân không, vì chân không
không phải là môi trường đàn hồi.
Cần lưu ý trong khi truyền dao động, các phân tử của môi trường
không di chuyển theo các dao động được lan truyền mà chỉ dao động
quanh vị trí cân bằng của nó.
c. Một số khái niệm về sóng:
Nguồn sóng: là ngoại vật gây ra kích động sóng.
Tia sóng: là phương truyền sóng.
Môi trường sóng: là không gian mà sóng truyền qua.
Mặt sóng: là mặt chứa những điểm (phân tử) có cùng trạng thái dao
động tại một thời điểm nào đó. Tia sóng luôn vuông góc với mặt sóng.
Sóng cầu: mặt sóng là những mặt cầu phân bố đều trong không gian,
tâm là nguồn sóng. Trong môi trường đồng chất và đẳng hướng sẽ có sóng
cầu. Đối với sóng cầu tia sóng trùng với bán kính của mặt cầu.
Sóng phẳng: mặt sóng là những mặt phẳng song song nhau, tia sóng
vuông góc với mặt sóng. Nếu nguồn sóng ở rất xa môi trường đang xét thì
mặt sóng có thể coi là những mặt phẳng song song.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 7
Sóng dọc: là sóng trong đó các phân tử của môi trường dao động quanh
vị trí cân bằng trên phương trùng với tia sóng. Khi có sóng dọc, trên
phương của tia sóng các phân tử của môi trường khi thì bị nén chặt, khi thì
giãn ra làm cho các phân tử của môi trường có chỗ dày chỗ thưa.
Sóng ngang: là sóng trong đó các phân tử của môi trường dao động
quanh vị trí cân bằng trên phương vuông góc với tia sóng.
d. Nguyên nhân gây ra sóng ngang và sóng dọc:
Tùy tính chất của môi trường đàn hồi mà trong đó có thể xuất hiện sóng
ngang hay sóng dọc.
- Khi một lớp của môi trường bị lệch đối với lớp khác làm xuất hiện các
lực đàn hồi có xu hướng kéo lớp bị lệch về vị trí cân bằng thì trong môi
trường đó có thể truyền được sóng ngang. Vậy vật rắn là một môi trường
có tính chất đó.
- Nếu trong môi trường không có các lực đàn hồi khi các lớp song song bị
lệch đối với nhau thì sóng ngang không thể hình thành được. Chất lỏng và
chất khí là những môi trường đó.
- Khi bị biến dạng nén hay căng mà trong môi trường có các lực đàn hồi
xuất hiện thì trong môi trường đó có thể truyền được sóng dọc. Chẳng hạn
khi bị nén, chất lỏng hay chất khí sẽ tăng áp suất, lực nén giữ vai trò lực
đàn hồi.
Như vậy trong chất lỏng và chất khí chỉ có sóng dọc truyền được, còn
trong chất rắn có thể truyền được cả hai loại sóng.
1.2. Các đặc trưng của sóng.
a. Vận tốc truyền sóng (C) :
Là quãng đường mà sóng truyền được trong một đơn vị thời gian.
b. Bước sóng :
Là quãng đường mà sóng truyền được sau một thời gian bằng 1 chu kỳ T.
Như vậy là khoảng cách bé nhất giữa các phân tử dao động cùng pha.
Theo định nghĩa ta có : = CT.
c. Chu kỳ và tần số:
Chu kỳ T là thời gian cần thiết để sóng truyền được 1 bước sóng .
Tần số f là số chu kỳ thực hiện được trong 1 giây :
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 8
F = 1/T (Hz)
1.3. Phương trình sóng.
Sóng phẳng truyền dọc theo phương OY với vận tốc C thì phương trình
sóng biểu thị mối quan hệ giữa độ chuyển dời X của phân tử dao động kể
từ vị trí cân bằng với thời gian t và khoảng cách y đến các vị trí cân bằng
các phân tử dao động trên phương truyền sóng như sau :
X = asin(t – y/c)
Nếu sóng phẳng truyền theo hướng ngược với hướng tính khoảng cách
y thì :
X = asin(t + y/c)
Đối với sóng cầu thì biên độ a của dao động sóng tại vị trí cách nguồn
bằng bán kính r, tỉ lệ nghịch với r, phương trình sóng có dạng:
X = a/r sin(t – r/c)
II. SÓNG ÂM.
2.1. Dao động âm và sự truyền dao động.
Sóng âm là một loại sóng cơ có biên độ dao động nhỏ mà thính giác
nhận biết được. Thí dụ dao động phát ra từ dây đàn, mặt trống.. đang rung
động. Sóng âm là một loại sóng cơ nên mọi khái niệm và hiện tượng về
dao động và sóng cơ trên đây đều áp dụng cho sóng âm.
Trong không khí cũng như trong mọi chất khí khác, những dao động
truyền đi dưới dạng sóng dọc, khi đến tai người những dao động có tần số
từ 16 đến 20000 Hz sẽ gây cảm giác đặc biệt về âm.
Các dao động đàn hồi có tần số f>20.000 Hz là sóng siêu âm.
Các dao động đàn hồi có tần số f<16 Hz là sóng hạ âm
Mỗi âm có một tần số riêng, đơn vị của tần số là héc (Hz) với định
nghĩa:”Héc là tần số của một qúa trình dao động âm trong đó mỗi giây
thực hiện được một dao động”.
1 Héc (Hz) = 1 dao động / 1 giây
Việc phân chia sóng hạ âm, sóng siêu âm và sóng âm (âm thanh) liên
quan tới khả năng sinh lý của thính giác
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 9
2.2. Đơn vị vật lý của âm thanh.
Âm thanh hay tiếng động mà con người nhận biết được do tác động của
sóng âm lên màng nhĩ tai.
Các dao động âm phát ra từ nguồn lan truyền trong môi trường đàn hồi
như không khí.. dưới dạng sóng đàn hồi gọi là sóng âm. Sóng âm đến kích
động màng nhĩ tai gây cảm giác về âm, do đó cần phân biệt hai loại đại
lượng về âm:
- Đại lượng âm khách quan: những đại lượng thuần túy vật lý, không phụ
thuộc vào tai người.
- Đại lượng âm chủ quan: những đại lượng tâm lý vật lý phụ thuộc vào tai
người.
2.2.1. Đơn vị âm khách quan:
a. Aùp suất âm:
Khi sóng âm tới một mặt nào đó, do các phân tử môi trường dao
động tác dụng lên mặt đó một lực gây ra áp suất. Aùp suất ở đây là áp suất
dư do sóng âm gây ra ngồi áp suất khí quyển.
Trong phạm vi nghe được, áp suất âm trong khoảng từ 2.10-4 đến
2.102 bar, chênh lệch 106 lần, đó là một phạm vi rất rộng.
b. Cường độ âm (I):
- Cường độ âm ở một điểm nào đó trên phương đã cho trong trường âm là
số năng lượng âm đi qua đơn vị diện tích của mặt S vuông góc với phương
truyền âm, tại điểm đó trong đơn vị thời gian.
- Một vài cường độ âm đáng chú ý:
Người nói thường I = 2.10-3 W/m2
Còi ô-tô I = 5 W/m2
Còi báo động I = 3.000 W/m2
- Trong điều kiện chuẩn (to = 20oC, áp suất 760mmHg):
Vận tốc âm trong không khí : C = 340 m/s
= 0,00121 gr/cm3.
= Cp/Cv = 1,4
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
10
- Trong tính tốn người ta quy ước lấy âm đơn tần số f = 1000 Hz làm
chuẩn để so sánh (gọi là âm chuẩn).
- Đối với âm chuẩn, trong phạm vi nghe được
Áp suất âm nhỏ nhất Pmin = 2.10-4 bar
Cường độ âm nhỏ nhất Imin = 10-16 W/cm2.
- Aùp suất âm và cường độ âm lớn nhất mà tai người có thể chịu được là:
Pmax = 2.102 bar
Imax = 10-4 W/cm2.
- Công suất âm nhỏ nhất có thể nghe thấy được Wmin = 10-12 Watt.
2.2.2. Đơn vị âm chủ quan:
Tai người trung bình có thể nhận được những sóng âm có tần số từ 16
đến 20000 Hz, hiệu qủa này có liên quan tới khả năng sinh lý của tai
người.
Như vậy, âm thanh là một hiện tượng tâm lý vật lý, không phải bất cứ
sóng âm nào tới tai cũng gây ra cảm giác âm thanh như nhau. Aâm có tần
số khác nhau gây ra cảm giác khác nhau.
Cường độ âm nhỏ nhất của một sóng âm xác định mà tai người nghe
thấy được gọi là “Ngưỡng nghe”. Aâm có tần số khác nhau giá trị ngưỡng
nghe cũng khác nhau. Tai người thính nhất với âm có tần số trong khoảng
từ 1000 đến 3000 Hz, trong phạm vi này cường độ âm ngưỡng nghe nhỏ
nhất. Những tần số khác, tai kém thính hơn, ngưỡng nghe có giá trị lớn
hơn.
Đối với âm chuẩn, cường độ và áp suất ở ngưỡng nghe bằng:
Po = 2.10-5 N/ m2.
Io = 10-12 W/m2.
Do cảm giác âm thanh phụ thuộc vào đặc tính sinh lý của tai người, cho
nên phải có một số đại lượng đặc trưng cho cảm giác âm thanh phụ thuộc
vào tai người, những đại lượng như vậy gọi là đại lượng âm chủ quan.
a. Bel và decibel (db):
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
11
Theo định lý sinh lý của Vebe-Fécne, cảm giác nghe to đối với một âm
không tỉ lệ thuận với cường độ âm của âm đó. Khi cường độ âm tăng từ Io
tới I thì cảm giác nghe to tăng tỉ lệ với lg(I/Io). Do đó người ta dùng thang
lô-ga-rít cơ số 10 để đo mức cảm giác so với mức ngưỡng.
Mức ngưỡng gọi là mức zero qui ước :
lg(I/Io) = lg(10-12/ 10-12) = 0 bel.
Đơn vị là Bel hay db. 10db = 1 bel.
b. Mức cường độ âm (LI):
Nếu gọi I là cường độ âm của âm đang xét và Io là cường độ âm của mức
zero qui ước của âm chuẩn thì mức cường độ âm LI bằng :
LI = 10lg(I/Io) db
I tính bằng W/m2.
c. Mức áp suất âm (Lp):
Mức áp suất âm suy dẫn từ mức cường độ âm Lp = 20lg(P/Po) db.
Trong đó:
P :áp suất âm có ích của âm đang xét (N/m2)
Po:áp suất âm của âm chuẩn ở ngưỡng nghe.
Thực tế áp suất âm là đại lượng cơ bản hơn cường độ âm, nên thường dùng
mức áp suất âm sau đó suy ra mức cường độ âm. Đơn vị chung là bel hay
db. Đơn vị này cũng dùng để đo mức công suất, mức năng lượng âm.
Vài mức áp suất âm đáng chú ý :
Nói chuyện thường : 30db.
Nói chuyện to : 70db.
2.2.3. Quãng độ cao (quãng tần số):
Quãng tần số của hai âm là khoảng cách tần số của hai âm đó. Nếu một
âm tần số là f1, một âm khác tần số là f2 (f2 > f1) thì f2 / f1 = 2x.
Khi x=1 tức f2 / f1 = 2 gọi là 1 quãng tần số (hay 1 ốc-ta).
Khi x=1/2 tức f2 / f1 = 1.41 gọi là nửa ốc-ta.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
12
Khi x=1/3 tức f2 / f1 = 1.26 gọi là 1/3 ốc-ta.
- Mức áp suất âm của 1 ốc-ta bằng mức áp suất âm của 1/2 ốc-ta cộng
thêm 3db.
- Mức áp suất âm của 1 ốc-ta bằng mức áp suất âm của 1/3 ốc-ta cộng
thêm 5db.
Vì quãng tần số của một âm qui định độ cao của âm đó nên còn gọi là
quãng độ cao. Theo tập quán âm nhạc thì quãng độ cao gọi là quãng 8 (bát
độ).
Chẳng hạn âm LA, tần số f=440 Hz tăng 1 bát độ là tăng gấp đôi tần số,
tức là 880 Hz.
Trong thực tế thường gặp những âm phức tạp bao gồm nhiều tần số.
Tập hợp tất cả những tần số cấu tạo trong một âm thanh gọi là “tần phổ”
của âm đó, tần phổ có thể gián đoạn hay liên tục. Một âm có tần phổ liên
tục được đặc trưng bằng “Mức tần phổ B” với định nghĩa:
- Mức tần phổ là mức áp suất âm trong chiều rộng của dải tần số bằng 1.
- Một âm có mức tần phổ B không đổi với mọi tần số gọi là tiếng ồn trắng.
- Một âm có tần phổ gián đoạn được đặc trưng bằng “mức dải tần số” với
định nghĩa: mức dải tần số là mức áp suất âm trong chiều rộng của dải tần
số lớn hơn 1 Hz.
2.3. Đặc tính sinh lý về sự cảm thụ âm thanh.
2.3.1. Mức to, độ to, mức âm cảm giác:
Mức áp suất âm, mức cường độ âm trên đây vừa mang tính chất chủ
quan vừa mang tính chất khách quan vì những đại lượng này xác định từ
những đại lượng thuần túy vật lý. Vấn đề có ý nghĩa to lớn trong thực tế là
cần biết được sức mạnh của âm thanh đo bằng tai người.
Mức to, độ to của một âm là sức mạnh cảm giác do âm thanh gây nên
trong tai người, nó không những phụ thuộc vào áp suất âm mà còn phụ
thuộc vào tần số của âm đó. Thí dụ 2 âm có tần số 100 Hz và 1000 Hz áp
suất âm đều bằng 0,02 bar nhưng nghe to nhỏ khác nhau, âm 1000 Hz
nghe to hơn âm 100 Hz. Muốn nghe to bằng âm 1000 Hz thì âm 100 Hz
phải có áp suất bằng 0,25 bar. Như vậy tai người không nhạy đối với âm
100 Hz bằng âm 1000 Hz. Tần số càng thấp tai người càng kém nhạy.
a. Mức to:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
13
- Để biểu thị mức to trên cảm giác chủ quan, ta dùng đại lượng “mức to”,
đơn vị là “Fôn” với định nghĩa như sau :
Fôn là mức to của âm chuẩn, về giá trị bằng mức áp suất âm của âm chuẩn
tức là :
L = 20lg P/Po (Fôn).
- Vậy mức to của một âm bất kỳ đo bằng Fôn, về giá trị bằng mức áp suất
âm của âm chuẩn đo bằng db có cùng mức to với âm đó. Thí dụ: âm có tần
số 500 Hz mức áp suất âm bằng 25 db và âm có tần số 50 Hz mức áp suất
âm bằng 64 db sẽ có cùng mức to bằng 20 Fôn, bằng mức to của âm 1000
Hz mức áp suất bằng 20 db.
- Muốn biết mức to của một âm bất kỳ phải so sánh với âm chuẩn.
- Đối với âm chuẩn, mức to ở ngưỡng nghe là 0 Fôn, ngưỡng chói tai là
120 Fôn.
- Cùng một giá trị áp suất, âm tần số càng cao, mức to càng lớn.
b. Độ to:
- Khi so sánh âm này to hơn âm kia bao nhiêu lần, dùng khái niệm “độ to”
đơn vị là “Sôn” với định nghĩa như sau:
Số lượng Sôn biểu thị số lần mạnh hơn của một âm nào đó so với âm
chuẩn mà tai người có thể phân biệt được.
- Độ to là một thuộc tính của thính giác, cho phép phán đốn tính chất mạnh
yếu của âm thanh. Căn cứ vào độ to mà sắp xếp âm từ nhỏ tới to.
- Mức to tăng 10 Fôn thì độ to tăng gấp đôi và ngược lại.
2.3.2. Aâm điệu và âm sắc:
Âm điệu chỉ âm cao hay thấp, trầm hay bổng. Âm điệu chủ yếu phụ
thuộc vào tần số của âm, tần số càng cao, âm nghe càng cao, tần số càng
thấp âm nghe càng trầm.
Âm sắc chỉ sắc thái của âm du dương hay thô kệch, thanh hay rè, trong
hay đục. Âm sắc phụ thuộc vào cấu tạo của sóng âm điều hòa, biểu thị
bằng số lượng các loại tần số, cường độ và sự phân bố của chúng quanh
âm cơ bản. Âm sắc có quan hệ mật thiết với cường độ, âm điệu và thời
gian âm vang, sự trưởng thành và tắt dần của trường âm.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
14
Khi hai ca sĩ cùng hát một câu ở cùng một độ cao, ta vẫn phân biệt
được giọng hát của từng người. Khi đàn ghi-ta, sáo, kèn.. cùng tấu lên một
đoạn nhạc ở cùng một độ cao, ta vẫn phân biệt được tiếng của từng nhạc
cụ. Mỗi người, mỗi nhạc cụ phát ra những âm có sắc thái khác nhau mà tai
ta phân biệt được. Đặc tính đó của âm chính là âm sắc.
Âm sắc là một đặc tính sinh lý của âm, được hình thành trên cơ sở các
đặc tính vật lý của âm là tần số và biên độ. Thực nghiệm chứng tỏ rằng khi
một nhạc cụ phát ra một âm có tần số f1 thì đồng thời cũng phát ra các âm
có tần số f2=2f1, f3=3f1...
Âm có tần số f1 gọi là âm cơ bản hay họa âm thứ nhất, các âm có tần
số f2 , f3 .. gọi là các họa âm thứ hai, thứ ba... Âm cơ bản bao giờ cũng
mạnh nhất, các họa âm có tác dụng quyết định âm sắc của âm cơ bản, giúp
ta phân biệt các nguồn âm khác nhau. Chẳng hạn tiếng đàn Pi-a-nô và
tiếng sáo tuy cùng một âm cơ bản nhưng lại rất dễ phân biệt, nguyên nhân
là do số lượng, cấu trúc những họa âm quanh âm cơ bản của chúng khác
nhau. Họa âm càng nhiều âm nghe càng du dương phong phú.
3. Thính giác định vị (hiệu ứng Stereo):
Khi nghe âm tuy mắt không nhìn thấy nguồn âm nhưng có thể xác định
chính xác vị trí của nguồn âm. Đặc điểm này là kết qủa của hai tác dụng:
- Do cường độ, độ to, âm sắc của âm đến hai tai không giống nhau.
- Do âm đến hai tai lệch pha nhau, vì thời gian đến hai tai không giống
nhau.
Cường độ, độ to của âm đến hai tai chênh lệch nhau là do nhiễu xạ gây
ra. Âm có tần số f < 1000 Hz sự chênh lệch cường độ do nhiễu xạ gây ra
rất bé nhưng ở những tần số cao, sự chênh lệch này có thể đạt tới 20 - 30
db.
Do khả năng định vị của tai như vậy cho nên khi nghe âm có thể tập
trung chú ý vào nguồn âm cần nghe, bỏ qua một cách tự nhiên những âm
không cần nghe. Nhờ hiệu qủa này mà tiếng ồn bị phủ lấp hoặc giảm nhỏ
một cách tự nhiên. Nếu chỉ nghe âm một tai thì hiệu qủa này mất.
4. Nghe âm và chênh lệch thời gian:
Tương tự như tác dụng lưu ảnh của mắt, tai người cũng có tác dụng lưu
âm.
Thí nghiệm với nhiều thính giác bình thường cho thấy rằng, nếu hai âm
như nhau đến tai người cách nhau < 50 ms thì tai người không phân biệt
được, nghe như một âm duy nhất.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
15
CHƯƠNG 2. TẬP TIN DẠNG SÓNG (WAVE FILE).
I. MULTIMEDIA WINDOWS
Từ phiên bản Windows 3.1, Multimedia đã trở thành một tính năng của
Windows. Multimedia Windows đã bổ sung một tính năng mới: đó là sự
độc lập thiết bị trong việc xử lý âm thanh. Sự độc lập thiết bị này thể hiện
qua bộ API (Applycation Program Interface – Bộ giao diện lập trình ứng
dụng). Bộ API độc lập về thiết bị đối với phần cứng và đó là một chức
năng quan trọng của Windows. Người lập trình sẽ lập trình điều khiển
phần cứng trên Windows dựa trên chức năng của phần cứng hơn là các chi
tiết cụ thể của nó. Các nhà cung cấp phần cứng chỉ cần cung cấp một bộ
điều khiển thiết bị (device driver) cho Windows, nhờ đó một ứng dụng trên
Windows có thể điều khiển phần cứng thông qua Windows API.
Với Multimedia Windows, hãng Microsoft đã thực hiện được ba điều :
Định nghĩa một tiêu chuẩn phần cứng tối thiểu cho loại máy Multimedia
PC (viết tắt là MPC). Tiêu chuẩn này dựa trên chức năng tổng quát hơn là
sản phẩm cụ thể. Ví dụ nếu PC có thêm ổ đĩa CD-ROM và một card âm
thanh thì trở thành MPC cấp 1.
Microsoft đã cung cấp phần mềm Multimedia Extension cho Windows
3.0 và đã được ghép luôn vào hệ điều hành Windows từ phiên bản 3.1.
Phần mềm này bao gồm các bộ điều khiển thiết bị dành cho việc truy xuất
đến các phần cứng gắn thêm vào MPC.
Microsoft đưa ra công cụ phát triển Multimedia Development Kit
(MDK). Lập trình viên kết hợp công cụ trên với bộ Windows Software
Development Kit (SDK) để viết các ứng dụng về Multimedia.
Có hai dạng xử lý âm thanh số hóa trên Windows. Loại thứ nhất
microsoft gọi là “Wave Form Audio” (Aâm thanh dạng sóng), dựa trên
nguyên tắc số hóa sóng âm, MPC lưu chúng trên bộ nhớ hay tập tin .WAV
trên đĩa. Các dữ liệu số này có thể thông qua phần cứng biến đổi lại thành
âm thanh.
Dạng thứ hai là MIDI. Khác với âm thanh dạng sóng, MIDI chỉ lưu lại
những thông điệp điều khiển bộ tổng hợp phát ra âm thanh. Do đó kích
thước của tập tin .MID nhỏ hơn nhiều so với tập tin.WAV.
II. CẤU TRÚC WAVE FILE.
1. RIFF file.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
16
Wave File là tập tin chứa các dữ liệu của mẫu âm thanh đã được số
hóa. Phương pháp số hóa âm thanh hiện nay 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 11.025 kHz cho
đến 44.1 kHz. Mỗi lần lấy mẫu, số liệu này lại được lượng tử hóa bằng
một hay hai byte cho một mẫu âm thanh. Như vậy tần số lấy mẫu càng
cao, số byte dùng lượng tử hóa càng nhiều thì âm thanh phát lại càng trung
thực, nhưng lại tăng số byte cần lưu trữ. Với một mẫu âm thanh phát ra
trong một phút cần phải lưu trữ ít nhất 660 kB. Đó là lý do tại sao các File
Wave luôn có kích thước khá lớn so với MIDI 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 (dạng 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 ở 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;
Trường FOURCC có 4 bytes chỉ ra loại chunk. Đối với File Wave,
trường 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. Cần chú ý là
các ký tự trong FOURCC có phân biệt chữ hoa và chữ thường.
Trường DWORD 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.
Chunk có thể chứa các subchunks. Subchunk cũng là một chunk.
Một RIFF file luôn bắt đầu bằng một chunk loại “RIFF”.
2. Cấu trúc Wave file.
Wave file bắt đầu là chunk loại “RIFF”.
Hai subchunk trong wave chunk đặc tả thông tin về âm thanh của wave file
và tiếp đó là dữ liệu của từng subchunk. Đó là subchunk “fmt” và
subchunk “data”.
a. subchunk “fmt”:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
17
Dữ liệu của “fmt” chunk là đối tượng WAVEFORMAT có cấu trúc như
sau:
Typedef struct waveformat_tag
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
- wFormatTag thường có giá trị là WAVE_FORMAT_PCM được định
nghĩa trong tập tin MMSYSTEM.H như sau :
#define WAVE_FORMAT_PCM 1
Giá trị này báo cho phần mềm đang đọc Wave File biết kiểu mã hóa
dữ liệu âm thanh sang dữ liệu số là kiểu mã hóa PCM. Hiện nay đây là
kiểu mã hóa duy nhất của Wave file.
- nChannels: có hai giá trị bằng 1 cho âm thanh mono và bằng 2 cho âm
thanh stereo.
- nSamplesPerSec: cho biết tốc độ lấy mẫu, có các giá trị:
11025 -- 11.025 kHz
22050 -- 22.050 kHz
44100 -- 44.100 kHz
- nAvgBytesPerSec: cho biết số bytes 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.
- 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
bytes. Nếu âm thanh là Stereo thì yêu cầu gấp 2 lần số byte dùng cho âm
thanh mono.
Ta thấy trong WAVEFORMAT chưa có thông tin về số bit dùng để
lượng tử hóa một mẫu dữ liệu của sóng âm. Thực tế Wave File sẽ xác lập
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
18
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;
- wBitsPerSample: cho biết số bit trong một mẫu dữ liệu. Chú ý rằng 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ử hóa một mẫu sóng âm thì sẽ phải lưu trữ 4 bit
thừa không dùng đến.
b. Subchunk “data”.
Dữ liệu của “data” subchunk của wave file chứa các số liệu của âm
thanh đã được số hóa. Đố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ị từ 0 – 255) của các mẫu âm
thanh. Đối với mẫu âm thanh 16 bits, mỗi mẫu dữ liệu gồm 2 bytes (có giá
trị từ – 32768 đến 32767). Điều này không có nghĩa là file wave 16 bits sẽ
nghe to hơn 256 lần file wave 8 bits, mà nó có nghĩa là âm thanh được
lượng tử hóa chính xác hơn, nghe trung thực hơn.
Trong mẫu mono 8 bits, dữ liệu của subchunk “data” gồm chuỗi các
giá trị 1 byte. Với stereo 8 bits, mỗi mẫu gồm 2 bytes, dữ liệu sẽ được sắp
xếp xen kẽ (interleave), với byte đầu (byte chẵn) là mẫu âm thanh của
kênh bên trái, byte sau (byte lẻ) là của kênh bên phải.
Tóm laị cấu trúc của Wave File như sau:
Kích thước
(số byte)
Giá trị Tên trường
4 “RIFF”
4 Kích thước file RIFF
4 “WAVE”
4 “fmt”
4 Kích thước subchunk “fmt”
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
19
2 Kiểu mã hóa dữ liệu của file
wave (thường là PCM)
WORD nFormatTag
2 Số kênh : 1 - mono
2 - stereo
WORD nChannels
4 Số mẫu/1giây DWORD
nSamplesPerSec
4 Số bytes/1giây DWORD
nAvgBytesPerSec
2 Số byte/1mẫu DWORD
nBlockAlign
2 Số bit/1mẫu WORD
wBitsPerSample
4 “data”
4 Kích thước dữ liệu
III. ĐỌC RIFF FILES
Để làm việc với file RIFF, ta phải mở nó và “descend” vào chunk mà ta
cần. Điều này có nghĩa là ta cần phải định vị được chunk này, rồi chuyển
con trỏ file vào đầu khối dữ liệu của chunk. Khi làm việc xong với 1
chunk, ta phải “ascend” ra khỏi chunk và “descend” xuống chunk khác.
Các hàm dùng xử lý RIFF file đều có tiền tố là mmio và làm việc với
file handle dạng HMMIO, để bắt đầu, ta phải mở file bằng đoạn mã sau:
HMMIO h;
If ((h=mmioOpen(path,NULL,MMIO_READ))==NULL)
{
/*báo lỗi*/
return(0);
}
Thông số path chứa đường dẫn của file wave. Cờ MMIO_READ
báo cho mmioOpen mở file để đọc. Ta cũng có thể mở nó để ghi bằng
thông số MMIO_WRITE hay cả đọc và ghi bằng thông số
MMIO_READWRITE. Nếu mở file thành công, mmioOpen sẽ trả về một
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
20
handle loại HMMIO. Nếu thất bại, nó sẽ trả về trị NULL. Sau khi mở file
xong, ta bắt đầu định vị WAVE chunk bằng đoạn mã sau:
MMCKINFO mmParent;
MmParent.fccType=mmioFOURCC(‘W’,’A’,’V’,’E’);
If (mmioDescend(h,(LPMMCKINFO)&mmParent, NULL,
MMIO_FINDRIFF))
{
mmioClose(h,0);
/* báo lỗi */
return(0);
}
Cấu trúc của MMCKINFO chứa các thông tin về chunk. Nó được
định nghĩa trong MMSYSTEM.H như sau:
Typedef struct
{
FOURCC ckid;
DWORD cksize;
FOURCC fcctype;
DWORD dwDataOffset;
DWORD dwFlags;
} MMCKINFO;
Để “đi vào” một chunk, ta cho trường ckid của MMCKINFO ở loại
chunk mà ta muốn định vị. Có một macro thực hiện việc này là
mmioFOURCC. Sau đó gọi hàm mmioDescend để định vị chunk. Nếu
định vị thành công, hàm này trả về zero và đối tượng MMCKINFO truyền
cho hàm sẽ được điền vào các thông tin về chunk.
Trường cksize định nghĩa kích thước tính bằng byte của chunk.
Đối số thứ ba của mmioDescend là cờ MMIO_FINDRIFF. Cờ này
chỉ thị cho mmioDescend tìm một file có ID là RIFF với loại chunk được
xác định bởi ckid. Nếu muốn tìm một chunk trong Wave file ta cho cờ này
là MMIO_FINDCHUNK.
Sau khi đi vào WAVE chunk, ta bắt đầu đi vào fmt subchunk của
nó:
MMIOCKINFO mmSub;
MmSub.ckid=mmioFOURCC(‘f’,’m’,’t’);
If (mmioDescend(h,(LPMMCKINFO)& mmSub,
(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
/* báo lỗi */
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
21
return(0);
}
Đến đây ta đã có thể bắt đầu đọc dữ liệu từ Wave File. Đoạn mã sau
đọc đối tượng PCMWAVEFORMAT từ fmt subchunk:
PCMWAVEFORMAT waveformat;
Int n;
n = min ((unsigned int)mmSub.cksize,
sizeof(PCMWAVEFORMAT));
if(mmioRead(h,(HPSTR)&waveformat,
(long)n) !=(long)n)
{
/* báo lỗi */
return(0L);
}
if(waveformat.wf.wFormatTag !=WAVE_FORMAT_PCM)
{
/* báo lỗi */
mmioClose(h,0);
return(0L);
}
Đối số đầu tiên của mmioRead là handle của file đang đọc. Đối số
thứ hai là con trỏ xa trỏ tới vùng đệm để chứa dữ liệu. Đối số thứ ba là số
byte cần đọc. Hàm này sẽ trả về số byte thực sự đọc được.
Sau khi đã đọc nội dung của chunk, ta đi ra khỏi chunk để chuẩn bị đọc
chunk kế tiếp:
MmAscend(h,(LPMMCKINFO)&mmSub,0);
Đối số thứ hai của mmAscend là đối tượng MMCKINFO của chunk mà ta
“đi ra”. Đối số thứ ba là đối số giả.
Công việc còn lại là đọc dữ liệu mã hóa mẫu âm thanh của Wave file
vào bộ nhớ. Chú ý rằng giá trị cksize trả về bởi mmioDescend được sử
dụng để xác định kích thước vùng đệm cần cấp phát để chứa dữ liệu.
GLOBALHANDLE wavehandle;
HPSTR wavepointer;
MmSub.ckid=mmioFOURCC(‘d’,’a’,’t’,’a’);
If(mmioDescend(h,(LPMMCKINFO)&mmSub,
(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
/* báo lỗi */
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
22
return(0);
}
if((wavehandle=GlobalAlloc(GMEM_MOVEBLEIGMEM_
SHARE, mmSub.cksize))==NULL)
{
mmioClose(h,0);
/* báo lỗi */
return(0);
}
if(wavepointer=(HPSTR)GLOBALLOCK(WAVEHANDLE))
==null)
{
GlobalFree(wavehandle);
mmioClose(h,0);
/* báo lỗi */
return(0);
}
if(mmioRead(h,wavepointer,mSub.cksize) !=
mSub.cksize)
{
GlobalUnlock(wavehandle);
GlobalFree(wavehandle);
mmioClose(h,0);
/* báo lỗi */
return(0);
}
GlobalUnlock(wavehandle);
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
23
CHƯƠNG 3. LÝ THUYẾT XỬ LÝ TÍN HIỆU SỐ.
I. TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC
1. Giới thiệu
Tín hiệu là biểu hiện vật lý của thông tin, thường là thông tin về
trạng thái hay hành vi của một hệ vật lý nào đó. Về mặt tốn học, tín hiệu
được coi là hàm của của một hay vài biến độc lập. Ví dụ: tín hiệu âm thanh
là sự thay đổi áp suất không khí theo thời gian; tín hiệu hình ảnh là hàm độ
sáng theo hai biến không gian..
Theo qui ước chung, tín hiệu được coi là hàm theo một biến độc lập
và là biến thời gian.
Tín hiệu số (Digital signal) là tín hiệu rời rạc (theo biến độc lập thời
gian) đồng thời có biên độ cũng rời rạc hóa (lượng tử hóa).
2. Đáp ứng xung trong hệ tuyến tính bất biến.
Tín hiệu vào x(n) được gọi là tác động, tín hiệu ra y(n) được gọi là
đáp ứng của hệ xử lý. Ta có quan hệ:
)()( nxTny
T : phép biến đổi )()( nynx
Một hệ thống là tuyến tính nếu thỏa nguyên lý xếp chồng: giả sử
y1(n) và y2(n) là đáp ứng của hệ tương ứng với tác động vào là x1(n) và
x2(n). Hệ là tuyến tính nếu và chỉ nếu :
)(.)(.)(.)(. 2121 nybnyanxbnxaT
Như vậy, một hệ tuyến tính có thể xử lý tổng tác động như là các
tác động này được xử lý độc lập, sau đó các đáp ứng tương ứng sẽ được
cộng lại.
Một tín hiệu x(n) bất kỳ có thể biểu diễn :
k
knkxnx )().()(
Do vậy đối với hệ tuyến tính:
k
k nhkxny )().()(
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
24
hk(n) gọi là đáp ứng xung của hệ đối với tác động là xung (n-k)
Theo công thức trên, hệ tuyến tính vẫn còn tùy thuộc vào thời điểm
tác động k. Một hệ tuyến tính là bất biến(theo thời gian) nếu tín hiệu vào bị
dịch đi một đoạn thời gian là k thì tín hiệu ra cũng chỉ dịch một đoạn k,
tức mọi hk(n) trở thành h(n-k).
Như vậy mọi hệ tuyến tính bất biến đều được đặc trưng hồn tồn
bằng đáp ứng h(n), biết h(n) ta hồn tồn tính được đáp ứng y(n) của tín hiệu
vào x(n).
k
knhhxny )().()(
Công thức trên còn được gọi là Tổng chập (convolution sum) của
hai tín hiệu x(n) và h(n), và còn được ký hiệu:
)(*)()( nhnxny
3. Tính chất của tổng chập của hệ TTBB
Tính giao hốn:
)(*)()( nhnxny =
k
knhkx )().(
)(*)( nxnh
k
knxkh )().(
Tính phân phối:
)(*)()(*)()()(*)( 2121 nhnxnhnxnhnhnx
Như vậy, từ tính chất giao hốn, ta thấy rằng: hai hệ TTBB có đáp
ứng xung là h1(n) và h2(n) được mắc nối tiếp nhau sẽ tương đương với một
hệ có đáp ứng xung:
)(*)()( 21 nhnhnh
và thứ tự mắc nối tiếp không quan trọng.
Từ tính chất phân phối, hai hệ TTBB mắc song song nhau sẽ tương
đương với một hệ có đáp ứng xung bằng tổng hai đáp ứng xung:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
25
)()()( 21 nhnhnh
)(
)(
)()(
2
1 ny
nh
nhnx
)()()()( 21 nynhnhnx
4. Hệ nhân quả (causal system)
Các hệ có tín hiệu ra chỉ phụ thuộc vào tín hiệu trong quá khứ và
hiện tại được gọi là các hệ nhân quả, tức phải có tác động vào (nguyên
nhân) thì mới có tác động ra (kết quả).
Định lý: Hệ tuyến tính bất biến (TTBB) là nhân quả nếu đáp ứng xung
h(n) = 0 với mọi n<0.
Đối với một hệ TTBB và nhân quả, dạng chung của công thức tổng chập
k
knhkxny )().()(
hoặc viết cách khác:
0
)().()(
k
khknxny
Nếu đáp ứng xung h(n) có độ dài hữu hạn N thì:
1
0
)().()(
N
k
khknxny
Mở rộng cho tín hiệu: tín hiệu nhân qủa là tín hiệu bắt đầu khác 0 từ thời
điểm 0.
0 khi n<0
0 khi n0
5. Tính ổn định.
Định nghĩa: một hệ là ổn định nếu đáp ứng của hệ luôn bị chặn đối với tác
động vào bị chặn.
Định lý: Một hệ TTBB là ổn định nếu và chỉ nếu đáp ứng xung thỏa mãn
điều kiện sau:
n
nhS |)(|
6. Phương trình sai phân tuyến tính hệ số hằng
x(n)
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
26
Ta chỉ khảo sát các hệ thống tuyến tính bất biến và có thể đặc trưng bởi các
phương trình sai phân có hệ số hằng. Mối liên hệ giữa tín hiệu vào x(n) và
tín hiệu ra y(n) có dạng như sau:
N
k
M
r
rk rnxbknya
0 0
)()(
Trong đó tập các hệ số ak và br đặc trưng cho hệ TTBB.
7. Biểu diễn các hệ rời rạc trong miền tần số.
7.1. Phép biến đổi Fourier của tín hiệu rời rạc.
k k
knjekhknxkhny )().()().()(
Với tín hiệu vào x(n)= ejn (có tần số =2f) và đáp ứng xung h(n), ta có
tín hiệu ra:
)(.)( jnj eHeny
Hàm H(ej) gọi là đáp ứng tần số của hệ, biểu diễn đáp ứng của hệ thống
theo hàm của tần số đối với dãy tác động ejn, nó cho biết sự thay đổi về
biên độ và pha theo tần số khi tín hiệu đi qua hệ.
H(ej) là một hàm số phức và có thể biểu diễn theo phần thực và ảo:
H(ej)= Hr(ej)+ jHi(ej). (r: real; i: image)
Hoặc theo biên độ và pha:
H(ej)= | H(ej)| ejargH(ej ) (02).
H(ej) là hàm liên tục theo và tuần hồn với chu kỳ 2. Ta có thể khai
triển nó thành chuỗi Fourier, ngược lại h(n) có thể được tính tốn từ H(ej)
bằng các công thức tính hệ số khai triển chuỗi Fourier:
deeHnh njj .).(2
1)(
Trong đó :
n
njj enheH ).()(
Biến đổi Fourier của dãy rời rạc:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
27
k
tTjk
k eAtS
)2(.)(
Đối với tín hiệu tuần hồn
Tt
Tjk
k dtetsTA
0
0
)/2( .).(1
7.2. Phép biến đổi Fourier thuận.
n
njj ekxeX ).()(
7.3. Phép biến đổi Fourier nghịch.
deeXnx njj ).(2/1)(
7.4. Phổ biên độ, phổ pha và phổ năng lượng
Do X(f) là một hàm phức nên ta có thể biểu diễn dưới dạng modul và
argument:
)(arg|)(|)( fXjefXfX
Hàm modul X(f) theo f được gọi là phổ biên độ của tín hiệu x(n), còn hàm
(f)=arg[X(f)] được gọi là phổ pha.
Cuối cùng (f)=|X(f)|2 được gọi là phổ năng lượng, biểu diễn sự phân bố
theo tần số của năng lượng tín hiệu x(n).
8. Định lý lấy mẫu Shannon
Một tín hiệu tương tự xa(t) có dải phổ hữu hạn với giới hạn trên là Fmax(Hz)
(tức là phổ bằng 0 khi f nằm ngồi dải - Fmax.. Fmax). Ta sẽ chỉ có thể khôi
phục lại xa(t) một cách chính xác từ các mẫu xa(n.Ts) nếu như :
Fs 2Fmax
hay Ts 1/(2Fmax).
Khôi phục lại tín hiệu tương tự từ tín hiệu lấy mẫu:
Ta có thể khôi phục lại tín hiệu xa(t) bằng cách cho tín hiệu lấy mẫu đi qua
một mạch lọc (tương tự) thông thấp lý tưởng (low-pass filter) có đáp ứng
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
28
tần số Hlp(f) với tần số cắt là fc = Fs/2. Phổ của tín hiệu xa(t) sẽ được lọc lại
chính xác chỉ với điều kiện :
Fs 2Fmax
Nghĩa là thỏa mãn định lý lấy mẫu. Khi đó trong không gian tần số:
Xa(f) = X(f).Hlp(f)
Còn trong không gian thời gian:
Xa(t) = x(nTs)*hlp(t)
Trong đó hlp(t) là đáp ứng xung của mạch lọc thông thấp lý tưởng có biên
độ dải thông là Ts.
II. PHÉP BIẾN ĐỔI FOURIER RỜI RẠC
1. Chuỗi Fourier rời rạc của tín hiệu rời rạc tuần hồn
Tín hiệu tuần hồn xp(n) là tuần hồn với chu kỳ N nếu:
xp(n)= xp(n+N), với mọi n.
Đối với tín hiệu rời rạc, ta khai triển Fourier theo hàm:
k(n) = ej(2k/N)n , k=0,1, 2..
Các hàm điều hòa phức rời rạc chỉ có N tín hiệu phân biệt nhau vì tín hiệu
sai khác nhau là bội của N thì đều như nhau:
k(n) = kN(n) = k2N(n) = ej(2k/N)n
Đối với tín hiệu tuần hồn và rời rạc xp(n), ta có chuỗi Fourier rời rạc
(DFS):
nNkjkp eanX )/2(.)( k=N
Trong đó các hệ số ak là các hệ số khai triển chuỗi Fourier rời rạc hay còn
được gọi là các vạch phổ của tín hiệu tuần hồn.
2. Biến đổi Fourier rời rạc của tín hiệu có độ dài hữu hạn(DFT:Discrete Fourier
Transform)
Việc biểu diễn Fourier cho tín hiệu rời rạc có độ dài hữu hạn gọi là phép
biến đổi Fourier rời rạc (DFT).
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
29
Tín hiệu có độ dài hữu hạn là tín hiệu có giá trị khác 0 trong một khoảng
hữu hạn thời gian nào đó, và bằng 0 trong khoảng còn lại. Đây là loại tín
hiệu tồn tại trong thực tế vì chúng ta chỉ có thể quan sát mọi tín hiệu trong
một khoảng thời gian là hữu hạn từ N1 đến N2. Để đơn giản hố, ta có thể
qui ước tín hiệu x(n) tồn tại trong khoảng thời gian: 0 n M-1, tức là :
M = N2 - N1+1.
Với tín hiệu x(n) này được dùng như là một chu kỳ tín hiệu, ta có thể xây
dựng tín hiệu xp(n) tuần hồn với chu kỳ N bằng cách xếp chồng tuần hồn:
i
p iNnxnx )()(
Nếu N M thì không xảy ra hiện tượng trùm thời gian giữa các phần của
xp(n).
Do xp(n) chỉ có duy nhất một cách biểu diễn chuỗi Fourier rời rạc nên x(n)
cũng vậy. Từ chuỗi Fourier ta tính ra được 1 chu kỳ tín hiệu của xp(n),
trong đó có x(n):
xp(n) 0 n N-1
x(n)=
0 n còn lại.
3. Phép biến đổi nhanh fourier
Fast Fourier Transform (FFT) là một giải thuật rất hiệu quả để tính DFT.
Công thức biến đổi DFT:
1
0
/)2().()(
N
k
NknjenxkX
Đặt Wnk =
Nknje /)2(
1
0
).()(
N
k
nkWnxkX
Chia DFT thành 2 phần :
12/
0
12/
0
)12(2 ).12().2()(
N
n
N
n
kn
N
nk
N WnxWnxkX
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
30
Ký hiệu thành phần chẵn là xev và lẻ là xod, ta viết lại:
12/
0
12/
0
2/ ).().()(
N
n
N
n
nk
Nod
nk
Nev WnxWnxkX
)(.)()( 2/ kXWkXkX od
k
Nev , k = 0..N-1
Để tính X(k) chỉ cần tính trong nửa chu kỳ N/2.
Xev(k) và Xod(k) tuần hồn với chu kỳ N/2: Xev(k) = Xev(k - N/2),
N/2 k N-1.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
31
CHƯƠNG 4. GIỚI THIỆU VỀ MPEG.
I. GIỚI THIỆU.
1. MPEG là gì?
MPEG, viết tắt của cụm từ “Moving Picture Experts Group”, là một nhóm
chuyên nghiên cứu phát triển các tiêu chuẩn về hình ảnh số và nén âm
thanh theo chuẩn ISO/IEC. Ngày nay, nhóm làm việc MPEG đã phát triển
và phát hành các tiêu chuẩn MPEG-1, MPEG-2 và MPEG-4. Chuẩn
MPEG-3 được kết hợp vào MPEG-2 và không còn tách riêng nữa. Nhóm
MPEG hiện nay đã phát triển đến chuẩn MPEG-7. MPEG chỉ là một tên
riêng, tên chính thức của nó là : ISO/IEC JTC1 SC29 WG11.
ISO : International Organization for Standardization
IEC : International Electro-technical Commission
JTC1 : Joint Technical Committee 1
SC29 : Sub-committee 29
WG11: Work Group 11 (moving picture with audio).
2. So sánh các chuẩn MPEG:
MPEG-1 định nghĩa một tiêu chuẩn cho việc lưu trữ và phục hồi các hình
ảnh động và âm thanh trên các thiết bị lưu trữ. Tiêu chuẩn này định nghĩa
rằng hình ảnh được phát lại ở tốc độ 30 frames một giây và âm thanh được
phát lại ở chất lượng như CD-audio, độ phân giải hình ảnh là 352 x 240.
Chuẩn MPEG-1 được dùng điển hình trong các phần mềm huấn luyện
bằng máy tính, các game hành động trong máy tính, video chất lượng
VHS, Karaoke..
MPEG-2 định nghĩa cho một tiêu chuẩn kỹ thuật truyền hình số. Chuẩn
MPEG-2 khắc phục một vài nhược điểm của chuẩn MPEG-1. Ví dụ,
MPEG-2 có thể tạo hình ảnh lớn gấp 4 lần MPEG-1 với độ nét cao hơn và
rõ hơn (720 x 480 và 1280 x 720). Các đặc tính của MPEG-2 bao gồm
hình ảnh chất lượng cao và âm thanh nổi..
MPEG-3 định nghĩa một tiêu chuẩn cho High Difinition Television
(HDTV), là thế hệ tiếp theo của công nghệ truyền hình theo định dạng số
đầy đủ. Tiêu chuẩn này đã không được phát triển hồn thiện và cuối cùng
được kết hợp vào với chuẩn MPEG-2. MPEG-3 đi đến mục tiêu là các ứng
dụng HDTV với kích thước mẫu lên đến 1920x1080x30 Hz và được mã hố
ở tốc độ bit 20 đến 40 Mbits/s. Cuối cùng người ta đã nhận ra rằng với một
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
32
vài điều chỉnh thích hợp, MPEG-1 và MPEG-2 làm việc rất tốt đối với
HDTV.
MPEG-4 định nghĩa một tiêu chuẩn cho các ứng dụng Multi-media. Đặc
biệt nó định nghĩa tiêu chuẩn truyền cho dòng phức tạp các hình ảnh, âm
thanh và dữ liệu đồ hoạ và việc tái hợp chúng trên thiết bị thu. MPEG-4
được phát triển theo 2 giai đoạn, 1 và 2. Chuẩn MPEG-4 định nghĩa các
đối tượng hình ảnh mà trong đó các phần của một cảnh có thể được thao
tác trong khi những phần khác vẫn không đổi.
MPEG-5 và MPEG-6 vẫn chưa được công bố.
MPEG-7 định nghĩa một tiêu chuẩn về việc biểu diễn nội dung cho các
nghiên cứu thông tin hình ảnh và âm thanh. Tên chính thức là “Multimedia
Content Description Interface”. Mục tiêu của MPEG-7 là chuẩn hố việc
biểu diễn các mô tả về nội dung nghe nhìn. Tuy nhiên chuẩn không định
nghĩa các công cụ để nhận ra nội dung nghe nhìn thật sự.
3. Âm thanh MPEG.
Khả năng của âm thanh MPEG, về cơ bản, âm thanh MPEG sẽ làm giảm
kích thước lưu trữ 1 tâp tin âm thanh đi rất nhiều. Một đĩa Audio-CD lưu
trữ được khoảng 650 Mbyte dữ liệu âm thanh thô với cách mã hóa 16 bit
(bitdepth) và tần số lấy mẫu (sample rate) 44.1 kHz. Nếu đem phát ra thì
cũng chỉ được 60 đến 72 phút.
- bitdepth: mô tả mức biên độ lớn nhất mà một mẫu âm thanh có thể đạt
tới. Ví dụ: 8 bit = 256 mức, 16 bit = 65536 mức, về hình ảnh thì đó chính
là độ phân giải.
- sample rate: mô tả số mẫu âm thanh được lấy trong 1 giây. Ví dụ: 22 kHz
= 22.000 mẫu/1giây.
Phương pháp cổ điển để giảm kích thước lưu trữ là giảm lượng thông tin.
Nếu đổi cách lưu trữ âm thanh từ 16 bit sang 8 bit chúng ta có thể giảm
kích thước lưu trữ đi 1 nửa, tuy nhiên như thế chất lượng âm thanh cũng sẽ
giảm đi 1 nửa.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
33
Hình 4.1
4. Các khái niệm trong âm thanh MPEG.
a. Hiệu ứng che (masking): nói đơn giản là âm lớn át âm bé, âm mạnh át
âm yếu.
b. Ngưỡng nghe và mức nhạy cảm.
Thí nghiệm: đặt một người trong phòng yên tĩnh. Tăng mức to của âm
1kHz lên cho đến ngay khi có thể nghe được rõ ràng. Lặp lại thí nghiệm
với các tần số khác nhau, ta vẽ được đồ thị sau:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
34
Hình 4.2
“Ngưỡng nghe” : là mức mà dưới nó 1 âm thanh không thể nghe được. Nó
thay đổi theo tần số âm thanh, và dĩ nhiên giữa mỗi người khác nhau. Hầu
hết mọi người đều nhạy cảm ở mức 2 đến 5 kHz. Một người có nghe được
âm thanh hay không tùy thuộc vào tần số của âm và độ to của âm đó ở trên
hay dưới ngưỡng nghe tại tần số đó. Tai nhạy cảm ở mức 2 đến 5 kHz .
Ngưỡng nghe cũng có tính thích nghi, thay đổi cố định bởi âm thanh mà ta
nghe được. Ví dụ, một cuộc nói chuyện bình thường trong một phòng thì
có thể nghe được rõ ràng ở điều kiện bình thường. Tuy nhiên, cũng cuộc
trò chuyện đó nằm trong vùng lân cận của những tiếng ồn lớn, như là tiếng
ồn do một chiếc phản lực bay ngang bên trên, là hồn tồn không thể nghe
được do lúc này ngưỡng nghe đã bị sai lệch. Khi chiếc phản lục đã đi rồi
thì ngưỡng nghe trở lại bình thường. Aâm thanh mà ta không thể nghe
được do sự thích nghi động của ngưỡng nghe gọi là bị “che” (masked).
c. Che tần số (Frequency Masking)
Thí nghiệm:
Phát ra 1 âm có tần số 1 kHz với mức to cố định là 60dB, gọi là “âm che”
(masking tone). Phát ra một âm khác (gọi là test tone) ở mức tần số khác
(ví dụ 1.1kHz), và tăng mức to của âm này cho đến khi có thể nghe được
nó (phân biệt được âm 1.1 kHz và âm che 1kHz).
Làm lại thí nghiệm với các âm thử (test tone) và vẽ ra một ngưỡng mà tại
đó các âm thử bắt đầu có thể phân biệt được:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
35
Hình 4.3
Làm thí nghiệm với các “masking tones” có các tần số khác nhau, ta có
được hình vẽ:
Hình 4.4
d. Che nhất thời. (che thời gian)
Nếu ta nghe một âm thanh lớn, rồi ngưng nó lại, mãi một lúc sau ta mới có
thể nghe được một âm lân cận nhỏ hơn .
Thí nghiệm: phát ra một âm che “masking tone” có tần số 1kHz ở mức
60dB, kèm một âm thử (test tone) 1.1kHz ở mức 40dB. Ta không nghe
được âm thử này (nó đã bị che).
Dừng âm che lại, đợi một lúc (delay time) ta dừng tiếp âm thử (test tone).
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
36
Điều chỉnh thời gian delay để cho ta vừa có thể nghe được âm chủ (ví dụ
khoảng 5ms).
Lặp lại thí nghiệm cho các mức to khác nhau của âm thử, ta vẽ được đồ thị
sau:
Hình 4.5
Làm thí nghiệm tương tự với các tần số khác nhau cho âm thử. Hiệu qủa
che được vẽ như hình.
Hình 4.6
5. Hoạt động:
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
37
Khi đưa ra phương pháp mã hóa âm thanh, nền tảng vẫn là yếu tố “hệ
thống nghe” của con người. Thật không may đó không phải 1 thiết bị hồn
hảo để nhận biết âm thanh nhưng là thiết bị duy nhất chúng ta có được.
Nhưng chúng ta có thể chuyển những khuyết điểm của nó thành ưu điểm :
đó là đặc tính phi tuyến của ngưỡng nghe và khả năng thích hợp của nó.
MPEG hoạt động dựa trên hệ thống nghe của con người, đó là cảm giác về
âm mang đặc tính sinh lý và tâm lý.
Aâm thanh CD ghi lại tất cả tần số, kể cả những tần số bị ‘che’.
Aâm thanh MPEG chỉ ghi lại những tần số mà tai người có thể nghe.
Như vậy, MPEG sẽ bỏ qua những thông tin không quan trọng. Dựa trên
nghiên cứu về nhận thức âm thanh của con người, bộ mã hóa sẽ quyết định
những thông tin nào là căn bản và những thông tin nào có thể bỏ qua.
Hiệu qủa này là bao quát nhưng đặc biệt quan trọng trong âm nhạc. Nếu
trong một dàn nhạc có một nhạc cụ chơi cực mạnh, làm át tiếng của các
nhạc cụ khác ta không thể nghe được. Nhưng máy thâu âm vẫn ghi lại đầy
đủ tất cả tần số của tất cả nhạc cụ, nghĩa là thiết bị thâu âm hồn tồn không
có khả năng thích nghi động như con người. Nhưng khi phát lại, ta vẫn
không nghe được âm thanh của những nhạc cụ bị át. Vì vậy việc lưu
trữ/ghi lại những tần số này là thừa, làm chiếm dung lượng khá nhiều.
Cách ghi âm tuyến tính trên đĩa CD là hồn tồn không hiệu qủa về khía
cạnh này. Do đó thay vì phải ghi lại thông tin của những âm không nghe
được, ta sẽ dành chỗ cho các âm có thể nghe được. Theo cách này, dung
lượng của thiết bị ghi âm cần thiết có thể xem như giảm đi mà không làm
giảm chất lượng âm thanh.
Trước khi chúng ta nghe được điều gì, thông tin sẽ được phân tích bởi bộ
não của chúng ta. Não bộ sẽ dịch âm thanh và lọc bỏ những thông tin
không cần thiết. Kỹ thuật âm thanh MPEG làm việc này thay thế cho não
bộ. Như vậy, những thông tin lẽ ra phải được lọc bởi não bộ bây giờ không
còn cần phải lưu trữ chiếm giữ không gian đĩa nữa.
II. CÁC KHÁI NIỆM CƠ BẢN VỀ MPEG.
1. Lược đồ mã hóa Perceptual Subband.
Bộ mã hóa âm thanh theo “perceptual subband” phân tích liên tục các tín
hiệu vào và xác định ra đường cong che (masking curve), đó là mức
ngưỡng mà những âm thanh ở dưới nó không thể nghe được bởi hệ thống
nghe của con người.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
38
Hình 4.7
Tín hiệu vào được chia thành 1 số dải tần số, gọi là “subband”. Mỗi tín
hiệu “subband” được lượng tử hóa theo cách mà sự lượng tử hóa tiếng ồn
được bắt đầu bởi việc mã hóa sẽ không vượt qúa đường cong che của
subband đó. Sự lượng tử hóa phổ tiếng ồn vì thế thích nghi động với phổ
của tín hiệu.Thông tin trên bộ số hóa được dùng trong mỗi subband được
truyền dọc theo các mẫu subband được mã hóa. Bộ giải mã sẽ giải mã
dòng bit (bitstream) mà không cần phải biết cách mà bộ mã hóa xác định
những thông tin này. Điều này cho phép bộ mã hóa hoạt động với những
mức độ khác nhau về chất lượng và độ phức tạp, và cũng cho phép sự phát
triển trong tương lai của bộ mã hóa.
2. Giải thích về hiệu qủa che (masking effect).
a. Nén âm thanh MPEG.
MPEG có thể nén 1 dòng bit 32 kbit/s đến 384 kbit/s. Một dòng bit âm
thanh PCM thô thì khoảng 705 kbit/s, do đó tỉ số nén tối đa có thể là 22. Tỉ
số nén bình thường là 1:6 hay 1:7. 96 kbit/s là xem như trong suốt cho hầu
hết các mục đích thực tế. Có nghĩa rằng ta không cần phải lưu tâm đến bất
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
39
kỳ sự khác biệt nào giữa tín hiệu gốc và tín hiệu nén đối với nhạc pop hay
nhạc rock’n roll. Đối với một số ứng dụng khác như là hòa tấu piano, tốc
độ bit có thể lên tới 128 kbit/s.
Để đạt được tỉ số nén này, đối với âm thanh, về cơ bản ta có hai chọn lựa:
hoặc giảm số lần lấy mẫu, hoặc giảm số bit để lượng tử hố. Con người có
thể nghe âm thanh với tần số từ 20 Hz đến 20 kHz. Theo thuyết của
Nyquist, ta phải lấy mẫu âm thanh ở tần số tối thiểu là hai lần tần số cao
nhất mà ta muốn phát lại. Tần số lấy mẫu 44,1 kHz là thích hợp. Vấn đề
còn lại là phải chọn số bit cho một mẫu mã hóa là bao nhiêu. Thông
thường là 16 bit.
Lý do để chọn con số 16 bit bắt nguồn từ tỉ số tín hiệu và nhiễu (s/n).
Nhiễu nói ở đây sinh ra do qúa trình số hóa. Cứ mỗi bit thêm vào, ta có tỉ
số s/n tốt hơn 6dB (đối với tai người, 6 dB tương ứng với mức to gấp đôi).
Aâm thanh CD đạt tới khoảng 90 dB s/n. Mức này phù hợp với phạm vi
động của tai người còn tốt. Nghĩa là ta không thể nghe được bất kỳ nhiễu
nào đến từ bản thân hệ thống. Điều gì xảy ra nếu ta lấy mẫu với 8 bit? Ta
sẽ nghe thấy rất nhiều tiếng sôi trong bản ghi. Dễ dàng nghe thấy nhiễu
trong khoảng nghỉ của bản nhạc hoặc giữa các từ nếu ta ghi âm một giọng
nói.
b. Hiệu qủa che.
Giả sử có một âm mạnh với tần số 1000Hz, và một âm kèm theo có tần số
1100Hz nhưng với cường độ âm nhỏ hơn 18dB. Ta sẽ không thể nghe thấy
âm này vì nó đã bị che hồn tồn bởi âm chủ 1000Hz. Nói một cách khác,
một âm thanh yếu gần một âm thanh mạnh sẽ bị che. Nếu có một âm thanh
khác tần số 2000Hz cũng có mức to thấp hơn âm 1000Hz là 18dB thì ta sẽ
nghe được âm này. Để không nghe được âm này ta phải giảm mức to của
âm này xuống còn thấp hơn 45dB so với âm chủ 1000Hz. Hiệu qủa che có
ý nghĩa rằng ta có thể gia tăng mức ồn nền xung quanh một âm mạnh mà
vẫn không nghe được tiếng ồn vì chúng sẽ bị che hồn tồn. Tăng mức ồn
nền còn có nghĩa là dùng ít bit để số hóa. Và điều này cũng giống như là ta
đã nén âm thanh vậy.
Bây giờ hãy xem bộ mã hố âm thanh MPEG hoạt động như thế nào. Bộ mã
hóa chia phổ tần số (20Hz đến 20kHz) thành 32 dải nhỏ (sub-band). Mỗi
sub-band giữ 1 phần nhỏ của phổ. Trong vùng trên của sub-band 8 ta phát
một âm có tần số 1000Hz với mức to 60dB. Bộ mã hóa sẽ tính tốn hiệu
qủa che của âm này và nhận ra rằng có một ngưỡng che cho tồn bộ sub-
band thứ 8 (tất cả những âm có cùng tần số). Ngưỡng che này thấp hơn âm
phát ra 35 dB. Tỉ số s/n có thể chấp nhận được là 60 - 35 = 25 dB, tương
đương với 4 bit. Ngồi ra nó còn ảnh hưởng trên các sub-band 9-13 và 5-7
với hiệu qủa che giảm dần từ sub-band 8. Hơn nữa, bộ mã hóa cũng xem
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
40
xét mức độ nhạy cảm của tai đối với các tần số khác nhau. Tai người ít
nhạy cảm với các tần số cao và thấp. Nó nhạy cảm nhất đối với tần số 2-4
kHz, cùng dải tần số với tiếng nói con người.
Các sub-band nên phù hợp với tai người., nghĩa là mỗi sub-band cần có
các tần số có cùng các tính chất âm học tâm lý. Trong MPEG layerII, mỗi
sub-band có độ rộng 625Hz, do đó cần phải có những bộ lọc băng thông
phức tạp. Để các bộ lọc đỡ phức tạp, người ta thêm FFT (Fast Fourie
Transform) vào song song với bộ lọc và sử dụng các thành phần phổ từ
FFT như là các thông tin thêm vào bộ mã hóa. Bằng cách này ta sẽ lấy mật
độ bit cao hơn đối với các tần số thấp mà tai người nhạy cảm hơn.
Còn nhiều vấn đề cần phải bàn tới. Chúng ta chỉ mới giải thích sự che
đồng bộ, hiệu qủa che còn xảy ra trước và sau một âm mạnh.
3. Các lớp của âm thanh MPEG.
Có nhiều sự nhầm lẫn về lớp âm thanh MPEG. Tất cả các lớp đều dựa trên
cùng một lược đồ mã hóa (mã hóa theo nhận thức). Mức độ phức tạp của
bộ mã hóa và giảûi mã tuỳ thuộc vào mỗi lớp. Sau đây là hình ảnh cho
thấy tỉ số nén mà ta cần phải đạt tới 100% chất lượng CD với các bộ mã
hóa và giải mã khác nhau.
Hình 4.8
Sau đây là chi tiết về các lớp.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
41
a. Lớp I (Layer I):
Đây là lớp đơn giản nhất phù hợp cho ứng dụng của người dùng. Mô hình
âm học tâm lý của lớp này chỉ sử dụng các tần số che. Điều này có nghĩa
rằng nó sẽ bỏ qua các tần số bị khuất sau các tần số khác. Phạm vi tốc độ
bit từ 32 kbit/s (mono) đến 448 kbit/s (stereo). Tùy thuộc vào mức độ phức
tạp của bộ mã hóa, một âm thanh chất lượng cao (gần với âm thanh CD)
yêu cầu tốc độ bit khoảng 256 - 384 kb/s trên một chương trình stereo.
Không nên mã hóa với mức nén cao hơn 384 kb/s. Độ phức tạp của bộ giải
mã thấp, độ phức tạp của bộ mã hóa cao hơn 1.5 - 3 lần. Lớp I được dùng
nhiều trong DDC và Solid State Audio.
b. Lớp II (Layer II):
Lớp II đề nghị mức độ nén cao hơn lớp I và mức độ lọc sâu hơn. Nó có
những ứng dụng số cho cả âm thanh chuyên nghiệp và tài tử, như qua đài
phát thanh, TiVi...Phạm vi tốc độ bit từ 32 - 192 kb/s cho âm thanh mono,
và từ 64 - 384 kb/s cho âm thanh stereo. Tùy thuộc vào mức độ phức tạp
của bộ mã hóa, một âm thanh chất lượng cao (gần với âm thanh CD) yêu
cầu tốc độ bit khoảng 256 - 384 kb/s trên một chương trình stereo. Mức độ
phức tạp của bộ giải mã 25% cao hơn so với lớp I, và bộ mã hóa có mức
phức tạp cao hơn 2 - 4 lần.
c. Lớp III (Layer III).
Lớp III còn đưa ra mức độ nén và lọc cao hơn cả lớp II và sử dụng một bộ
mã hóa Huffman.
Layer Complexity
Encoder Decoder
I 1.5 – 3 1
II 2 – 4 1.25
III > 7.5 2.5
Trong bảng trên, độ phức tạp của bộ giải mã lớp I được dùng để so sánh.
III. CÁC THÔNG SỐ DÙNG TRONG MPEG.
Chuẩn MPEG cho phép ta chọn lựa các thông số cho việc nén âm thanh tốt
nhất phù hợp với ứng dụng mà ta sử dụng. Lược đồ mã hóa cho các loại là
tổng quát. Các thông số có thể chọn lựa trong bộ mã hóa MPEG bao gồm:
Mode, Sampling frequency, bitrate, và Layer.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
42
a. Mode.
Chuẩn MPEG có 4 chế độ:
Mono.
Dual channel.
Stereo.
Intensity Stereo (còn gọi là Joint Stereo).
Chế độ Mono rõ ràng được dùng cho âm thanh 1 kênh.
Để chọn chế độ cho các ứng dụng 2 kênh, đầu tiên ta phải xác định đâu là
tín hiệu trái và đâu là tín hiệu phải để chia chúng ra thành 2 files khác
nhau, nhằm sau này ta có thể làm việc độc lập trên kênh trái hoặc phải. Lúc
đó ta sẽ chọn chế độ Mono. Nếu 2 kênh không cần hoạt động độc lập, ta
chọn Stereo, Dual hay Intensity Stereo để tạo một file duy nhất.
Chế độ Stereo hay kênh Dual là hồn tồn đồng nhất khi chúng cùng sinh ra
một file duy nhất cho tín hiệu stereo. Tuy nhiên một bit chỉ thị sẽ nhận
dạng xem một file là ở chế độ nào và có thể được dùng cho những áp dụng
nào...
Chế độ Intensity Stereo xem xét sự dư thừa giữa các kênh trái và phải
nhằm tối ưu mã. Chất lượng chủ quan của Intensity Stereo thay đổi theo
hình ảnh stereo của tín hiệu đã mã hóa. Tuy nhiên nó đặc biệt thích hợp
cho tốc độ truyền bit thấp.
b. Sampling Frequency (tốc độ lấy mẫu).
Một số tốc độ lấy mẫu:
32kHz, 44.1kHzvà 48kHz đối với MPEG1 (Tiêu chuẩn ISO/IEC 11172-3).
16kHz, 22.05kHzvà24kHz đối với MPEG2 (Tiêu chuẩn ISO/IEC13818-3).
Khi chọn lựa tốc độ lấy mẫu cần xem xét các vấn đề:
Tần số lấy mẫu càng lớn thì chất lượng âm thanh càng cao(độ dài frame
nhỏ hơn).
Băng thông tín hiệu giới hạn ở mức 15 kHz khi lấy mẫu ở tốc độ 32 kHz
và 8 kHz ở tốc độ 16 kHz.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
43
Tần số lấy mẫu (kHz) và tốc độ của âm thanh mã hóa (kbps) có thể chọn
độc lập.
Tần số lấy mẫu 44.1 kHz hay 22.05 kHz là không thiết thực cho việc chọn
lọc vì độ dài frame (byte) là thay đổi.
Những file được lấy mẫu ở những tần số khác nhau thì rất khó khăn khi
hòa trộn.
Khi dùng đường nhập số AES/EBU, tần số lấy mẫu bị cố định bởi tín hiệu
nhập.
Nếu không bắt buộc, Digigram yêu cầu lấy mẫu ở 48 kHz hoặc 44.1 kHz
cho phát thanh hay ứng dụng multimedia. Nếu ta phải sử dụng tốc độ bit
thấp cho sự truyền có hiệu qủa, tốc độ 24 kHz là thích hợp.
c. Bit Rate.
Mỗi Layer và chế độ có nhiều cách chọn lựa tốc độ bit (bit rate). Việc chọn
tốc độ bit tùy thuộc trước tiên vào chất lượng âm yêu cầu. Băng thông tín
hiệu là hẹp hơn nếu tốc độ bit thấp, khiến cho nó không thực tế đối với một
số ứng dụng. Tốc độ bit được đo theo kilobits/sec(kbps).
Khi chọn lựa tốc độ bit cần xem xét các vấn đề:
Tại 128 kbps trên mỗi kênh (hay 256 kbps stereo), chất lượng âm thanh
CD sẽ đạt được với Layer I hay Layer II.
Tại 192 kbps trên mỗi kênh, chất lượng âm thanh là hồn tồn trong suốt.
Tốc độ 128 kbps/kênh được dùng phổ biến nhất trong phát thanh. Nó
tương ứng với tỉ số nén 1:6 ở tốc độ lấy mẫu 48 kHz. Tốc độ thấp hơn 128
kbps/kênh được dùng trong các ứng dụng yêu cầu tỉ số nén lớn hơn do
giới hạn của băng thông truyền hay thiết bị lưu trữ.
Một số tốc độ bit cung cấp bởi chuẩn âm thanh MPEG :
MPEG 1: 32 kHz, 44.1 kHz và 48 kHz
- Layer I :
32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 kbps.
Những tốc độ này là có thể ở chế độ Mono hay stereo..
- Layer II :
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
44
32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 kbps.
32, 48, 56, 80 kbps chỉ có thể ở chế độ Mono; •64, 96, 112, 128, 160, 192
kbps có thể ở cả hai chế độ Mono và Stereo;•224, 256, 320, 384 kbps chỉ
có thể ở chế độ Stereo.
MPEG 2 : 16 kHz, 22.05 kHz và 24 kHz
- Layer I :
32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256 kbps
Những tốc độ này là có thể ở chế độ Mono hay stereo..
- Layer II :
8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 kbps.
Những tốc độ này là có thể ở chế độ Mono hay stereo.
d. Layers.
Chuẩn MPEG có ba layer.
Khi chọn lựa tốc độ bit cần xem xét các vấn đề:
Ở cùng tốc độ bit, Layer II mang lại chất lượng âm thanh tốt hơn Layer I.
Kết luận này là chủ quan, vì sự chênh lệch là rất khó phân biệt ở tốc độ bit
128 kbps và lớn hơn.
Dùng Layer I thì việc chọn lọc chính xác hơn Layer II bởi vì độ phân giải
của Layer I gấp ba lần Layer II.
Resolution Table
Sampling
frequency
Layer I
(384 samples)
Layer II
(1152 samples)
32 kHz 12 ms 36 ms
44.1 kHz # 8.71 ms # 26.12 ms
48 kHz 8 ms 24 ms
16 kHz 24 ms 72 ms
22.05 kHz # 17.42 ms # 52.24 ms
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
45
24 kHz 16 ms 48 ms
Các điểm kỹ thuật mấu chốt.
Chuẩn mã hóa âm thanh MPEG chỉ định việc ghi một số cố định các mẫu
(384 cho Layer I và 1152 cho Layer II) để tạo ra một chuỗi các bytes gọi là
“frame”. “Frame” là thực thể nhỏ nhất được điều khiển bởi một ứng dụng.
Việc chọn tốc độ bit(kbps) thiết lập nên kích thước của frame đó theo byte.
Ví dụ:
Ở 48 kHz, 128 kbps, chế độ Mono, Layer II:
48,000 mẫu, tương ứng 1000 ms hay 1s, 1152 mẫu tương ứng 24 ms.
Ở tốc độ bit 128,000 bits/s, 3072 bits (384 bytes) cần cho 24 ms.
Chiều dài frame vì thế là 384 byte.
Để lưu 1 phút, cần 960,000 byte (hay khoảng 1 Megabyte) đĩa trống.
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
46
CHƯƠNG 5. CÁC GIẢI THUẬT NÉN ÂM THANH.
I. NỀN TẢNG LÝ THUYẾT THÔNG TIN.
Theo Shannon, entropy của một nguồn thông tin S được định nghĩa:
H(S) = = ipilog2(1/pi)
Trong đó: - pi là xác suất mà ký hiệu Si xuất hiện trong S.
- log2(1/pi) chỉ ra số lượng thông tin chứa đựng trong Si, nghĩa
là số bit cần thiết để mã hóa Si.
Ví dụ: một hình ảnh được tô đều với cùng một cường độ màu xám, tức là
pi=1/256, thì số bit cần thiết để mã hóa cho mỗi mức xám là 8 bits.
Entropy của hình này là 8.
Giải thuật Shannon - Fano:
Ta dùng một ví dụ đơn giản để mô tả giải thuật:
Ký hiệu A B C D E
---------------------------------------------------
Số lần 15 7 6 6 5
Mã hóa cho giải thuật Shannon - Fano:
Dùng cách tiếp cận từ trên xuống.
Sắp thứ tự các ký hiệu theo tần số xuất hiện của nó, nghĩa là: ABCDE.
Chia thành hai phần, mỗi phần tương đương với cùng số lần đếm.
Hình 5.1
Ký hiệu Số lần log(1/p) Mã Cộng(số bit)
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
47
---------- -------- ---------- ----- ---------------
A 15 1.38 00 30
B 7 2.48 01 14
C 6 2.70 10 12
D 6 2.70 110 18
E 5 2.96 111 15
Tổng cộng(số bit) : 89
II. CÁC GIẢI THUẬT NÉN KHÔNG CÓ TỔN THẤT.
1. Mã hóa Huffman.
Khởi tạo: đưa tất cả các node vào danh sách OPEN theo thứ tự tại mọi thời
điểm. Ví dụ: ABCDE.
Lặp lại cho đến khi danh sách OPEN chỉ còn một node bên trái như sau:
- Từ danh sách OPEN, chọn hai node có xác suất thấp nhất, tạo node cha
cho chúng.
- Gán tổng các xác suất cho node cha và đưa node cha vào danh sách
OPEN.
- Gán các mã 0, 1 vào các nhánh của cây, xóa các node con khỏi danh sách
OPEN.
Hình 5.2
Ký hiệu Số lần log(1/p) Mã Cộng(số bit)
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
48
---------- --------- ---------- ----- ---------------
A 15 1.38 0 30
B 7 2.48 100 14
C 6 2.70 101 12
D 6 2.70 110 18
E 5 2.96 111 15
Tổng cộng (số bit) : 87
Việc giải mã cho cả hai giải thuật trên là tầm thường chừng nào mà bảng
mã (thống kê) được gửi trước dữ liệu. Có một bit bên trên công việc truyền
này, nhưng không đáng kể nếu file dữ liệu lớn.
Tính chất tiền tố duy nhất: không có mã nào là tiền tố cho một mã khác (tất
cả các ký hiệu đều là node lá) rõ ràng là lớn đối với bộ giải mã.
Nếu việc thống kê có thể tiến hành được trước đó và với độ chính xác cao,
thì mã Huffman là rất tốt.
Trong ví dụ trên:Entropy=(15x1.38+7x2.48+ 6x2.7 + 6x2.7 + 5x2.96)/39
= 85.26 / 39 = 2.19.
Số bit cần thiết cho mã hóa Huffman là : 87 / 39 = 2.23
2. Mã Huffman sửa đổi.
(a) Các giải thuật trên đây yêu cầu kiến thức về thống kê là điều mà khó có
thể thực hiện (ví dụ âm thanh, hình ảnh sống..).
(b) Ngay cả khi nếu điều đó là có thể làm được thì chi phí cho nó khá nặng,
đặc biệt khi có nhiều bảng phải được truyền mà mô hình non-order() được
sử dụng, nghĩa là việc đưa vào tính tốn sự ảnh hưởng của các ký hiệu trước
đó với xác suất của ký hiệu hiện hành (ví dụ: “qu” thường đi với nhau,..).
Giải pháp đưa ra là dùng giải thuật sửa đổi cho thích hợp. Như ví dụ, việc
mã hóa Huffman sửa đổi được khảo sát sau đây với ý tưởng là làm thế nào
có thể áp dụng vào các giải thuật nén thích hợp khác.
Bộ mã hóa
Initialize_model();
while ((c = getc (input)) != eof)
{
encode(c, output);
Bộ giải mã
Initialize_model();
while ((c = decode (input)) != eof)
{
putc(c, output);
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 49
Mấu chốt ở đây là cả hai bộ mã hóa và giải mã đều dùng cùng các hàm
Initialize_model và update_model .
Hàm update_model có hai lưu ý: (a) Tăng biến đếm.
(b) Cập nhật cây Huffman.
- Trong suốt qúa trình cập nhật, cây Huffman sẽ được duy trì tính kế thừa,
các nodes (node trong và lá) được sắp xếp theo thứ tự tăng dần của trọng
lượng .
- Khi cần thiết trao đổi (swapping), node xa nhất với trọng lượng W được
trao đổi với node mà trọng lượng của nó tăng lên 1 đơn vị W+1.
Lưu ý: nếu node trọng lượng W có cây con bên dưới nó thì cây con đó
cũng phải dời cùng với nó.
Cây Huffman có thể nhìn rất khác so với trước khi trao đổi, ví dụ trong cây
thứ 3 , node A được trao đổi và trở thành node 5. Bây giờ nó được mã hóa
chi bằng 2 bit.
3. Mã hóa số học.
Mã hóa Huffman sử dụng một số nguyên k các bit cho mỗi ký hiệu, vì thế k
không bao giờ nhỏ hơn 1. Đôi khi, ví dụ phải truyền một hình ảnh 1 bit, thì
không thể nén được.
Ý tưởng: giả sử mẫu tự là [X,Y] và P(X) = 2/3
P(Y) = 1/3.
Nếu ta chỉ quan tâm với chiều dài mã hóa là 2 thông điệp, thì ta có thể ánh
xạ tất cả thông điệp có thể có vào những đoạn trong phạm vi [0..1]
X Y
XX XY YX YY
Để mã hóa thông điệp, chỉ dùng vừa đủ số bit cần thiết cho mỗi đoạn.
Tương tự, ta có thể ánh xạ tất cả chiều dài 3 thông điệp vào các đoạn trong
[0..1].
Nói chung, số bit được xác định bằng kích thước của đoạn.
Ví dụ: Đoạn đầu tiên là 8/27, cần 2 bit 2/3 bit cho mỗi ký tự.
Đoạn cuối là 1/27, cần 5 bit.
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 50
Tóm lại, cần -[logp] bit để biểu diễn cho đoạn có kích thước p.
Vấn đề đặt ra là làm thế nào để xác định được xác suất?
Ý tưởng đơn giản là dùng mô phỏng: bắt đầu bằng việc đốn tần số của một
ký hiệu. Cập nhật tần số cho mỗi ký hiệu mới.
4. Giải thuật Lempel-Ziv-Welch(LZW).
Giả sử chúng ta muốn mã hóa cho một cuốn tự điển Tiếng Anh 159,000 từ.
Như vậy mỗi từ cần 18 bit để mã hóa.
Nhược: - Dùng qúa nhiều bit.
- Chỉ làm việc cho ký tự tiếng Anh.
Giải pháp: - Cần phải tìm một cách mã hóa cuốn từ điển cho thích hợp.
- Các phương pháp ban đầu được đề xuất bởi Ziv và Lempel vào năm 1978
và 1979. Terry Welch phát triển lược đồ vào năm 1981 và trở thành giải
thuật LZW.
Giải thuật:
w = NIL;
while (read a character k)
{
if wk exists in the dictionary
w = wk;
else
add wk to the dictionary;
output the code for w;
w = k;
}
LZW nguyên gốc sử dụng từ điển với 4K mục từ, 256 từ đầu tiên là mã
ASCII.
Ví dụ: chuỗi ký tự là “^WED^WE^WEE^WEB^WET”.
w k output index symbol
------------------------------------------------------------------
NIL ^
^ W ^ 256 ^W
W E W 257 WE
E D E 258 ED
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 51
D ^ D 259 D^
^ W
^W E 256 260 ^WE
E ^ E 261 E^
^ W
^W E
^WE E 260 262 ^WEE
E ^
E^ W 261 263 E^W
W E
WE B 257 264 WEB
B ^ B 265 B^
^ W
^W E
^WE T 260 266 ^WET
T EOF T
19 ký hiệu nhập được giảm xuống 7 ký tự và 5 mã. Mỗi mã/ký hiệu sẽ cần
nhiều hơn 8 bit, ta lấy 9 bit.
Thông thường, công việc nén chỉ được bắt đầu khi có một số lớn byte được
đọc vào (ví dụ >100).
Giải thuật giải nén LZW:
read a character k;
output k;
w = k;
while ( read a character k ) /* k could be a character or a code. */
{
entry = dictionary entry for k;
output entry;
add w + entry[0] to dictionary;
w = entry;
}
III. CÁC GIẢI THUẬT NÉN CÓ TỔN THẤT.
1. Các phương pháp nén âm thanh đơn giản:
Các phương pháp nén khảo sát ở trên không hiệu quả trong việc nén âm
thanh.
Sau đây là các phương pháp nén có tổn thất:
- Nén “silence” : dò các khoảng “yên lặng”, giống như mã hố run-length.
- LPC (Linear Predictive Coding).
- CELP (Code Excited Linear Predictor).
2. Nén âm thanh dùng mô hình ââm - tâm lý.
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 52
a. Hệ thống nghe và phát âm của con người.
Phạm vi nghe được từ 20 Hz đến 20 kHz, nhạy cảm ở 2 - 5kHz.
Phạm vi phát âm bình thường từ 500 Hz đến 2 kHz.
b. Che tần số (Frequency masking)
“Ngưỡng che” (Threshold masking): sinh ra từ hiệu ứng che, mỗi âm với
một tần số và mức to (dB) xác định sẽ có một “ngưỡng che” (xem hình 4.3
và 4.4)
c. Băng giới hạn.
Thước đo tần số đồng bộ không tương xứng với độ rộng của đường cong
che.
Băng giới hạn có độ rộng là 100Hz đối với các tần số che < 500Hz, và càng
tăng lên đối với các tần số >500Hz.
Định nghĩa một đơn vị mới cho tần số là bark ( Barkhausen)
1 Bark = bề rộng của băng giới hạn:
- Tần số <500Hz : 1 bark = freq/100.
- Tần số >500Hz : 1 bark = 9 + 4log(freq/1000).
Ngưỡng che trên thước đo băng giới hạn:
Hình 5.3
d. Che nhất thời (Temporal masking): che theo thời gian.
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 53
Tai người cũng có đặc tính lưu âm.
Nếu có một âm thanh lớn, rồi ngưng nó lại, mãi một lúc sau ta mới có thể
nghe được một âm lân cận nhỏ hơn (xem hình 4.5 và 4.6).
3. Nén âm thanh MPEG.
Vài thông số:
MPEG-1 : 1.5Mbits/s cho âm thanh và hình ảnh.
Khoảng 1.2 Mbits cho hình ảnh và 0.3Mbits/s cho âm thanh.
Aâm thanh CD không nén dùng: (44,100 mẫu/s * 16bit/mẫu * 2 kênh) > 1.4
Mbits/s
Aâm thanh MPEG cung cấp các tần số lấy mẫu là 32, 44.1 và 48 kHz.
Giải thuật:
1. Dùng bộ lọc thông để chia tín hiệu âm thanh thành các sub-band theo tần
số, tương ứng với 32 băng giới hạn lọc sub-band.
2. Xác định số lượng che của mỗi band gây bởi các band lân cận bằng các kết
qủa bước 1 mô hình âm - tâm lý.
3. Nếu mức to của một băng mà nhỏ hơn ngưỡng che thì không mã hóa nó.
4. Ngược lại, xác định số bit cần thiết để mã hóa sao cho nhiễu sinh ra bởi
việc lượng tử hóa này thấp hơn đường cong che.
5. Định dạng dòng dữ liệu bit :
Hình 5.4
Ví dụ:
Sau khi phân tích, 16 band đầu tiên trong số 32 band như sau:
_________________________________________________________
Band 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Level(dB) 0 8 12 10 6 2 10 60 35 20 15 2 3 5 3 1
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 54
_________________________________________________________
Nếu mức to của âm thứ 8 là 60dB, nó sẽ che band thứ 7 ở mức 12dB và
band thứ 9 ở mức 15dB.
Mức to ở band 7 là 10dB (<12dB) nên bị bỏ qua, không mã hóa.
Mức to band 9 là 35 (> 15dB) nên được tiếp tục xử lý.
Layer I: bộ lọc loại DCT với 1 frame và độ rộng tần số như nhau trên mỗi
sub-band. Mô hình âm-tâm lý chỉ sử dụng hiệu quả che tần số (Frequency
masking).
Layer II: sử dụng 3 frame trong bộ lọc (trước, hiện tại và kế tiếp, tổng cộng
1152 mẫu). Mô hình âm-tâm lý có sử dụng hiệu quả che nhất thời
(Temporal masking).
Layer III: dùng bộ lọc băng giới hạn tốt hơn, mô hình âm-tâm lý có sử
dụng hiệu quả che nhất thời, và có dùng bộ mã hố Huffman.
Phần II
THIẾT KẾ CHƯƠNG TRÌNH
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 55
CHƯƠNG 6. LƯU ĐỒ GIẢI THUẬT VÀ CẤU TRÚC DỮ LIỆU.
I. SƠ ĐỒ KHỐI.
Thay đổi hay giữ nguyên
cấu hình
Cấu hình mặc định
Set_default()
Đặt input và output file;
Mở input file và kiểm tra;
Wave_open();
Open_bit_stream_w();
Memset();
Dùng mô hình âm-tâm lý để
phân tích dữ liệu
L3_psycho_analise();
Chuẩn bị Frame dữ liệu
L3_psycho_initialise();
L3_subband_initialise();
L3_mdct_initialise();
L3_loop_initialise();
Dùng bộ lọc nhiều pha để xử lý
dữ liệu
L3_window_subband();
L3_filter_subband();
Tính MDCT cho các đường ra
nhiều pha
L3_mdct_sub();
Xác định số bit để mã hoá một
Làm sạch buffer
L3_FlushBitstream();
Đóng thiết bị ghi
Close_bit_stream_w();
Đóng file nguồn
Wave_close();
Kết thúc
Chuẩn bị vùng đệm
Khởi tạo mô hình âm-tâm lý
Tính các hệ số của bộ lọc tần số
Khởi tạo dữ liệu tính MDCT
Khởi tạo mảng pow43[I].0<I<1024
Start compress
()
Đ
S wave_get(buffer)0
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 56
II. CẤU TRÚC DỮ LIỆU VÀ ĐỊNH NGHĨA.
A. Cấu trúc dữ liệu.
1. Các cấu trúc về file:
- Tập tin tiêu đề :
- Sử dụng : truy xuất các tập tin dạng *.wav và *.mp3. Trong chương trình, các
cấu trúc này sử dụng ở các giai đoạn mở file, đọc cấu hình file, truy xuất các
thông tin về cấu hình file.
a. Cấu trúc FILE WAVE :
typedef struct {
FILE *file;
int type;
int channels;
int bits;
long samplerate;
long total_samples;
long length;
} wave_t;
b. Cấu trúc FILE MPEG:
typedef struct {
FILE *file;
int type;
int layr;
int mode;
int bitr;
int psyc;
int emph;
int padding;
long samples_per_frame;
long bits_per_frame;
long bits_per_slot;
long total_frames;
int bitrate_index;
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 57
int samplerate_index;
int crc;
int ext;
int mode_ext;
int copyright;
int original;
int mode_gr;
} mpeg_t;
c. Cấu trúc config_t :
typedef struct {
time_t start_time;
char* infile;
wave_t wave;
char* outfile;
mpeg_t mpeg;
} config_t;
2. Cấu trúc dòng bit dữ liệu: bitstream_t
- Tập tin tiêu đề :
- Sử dụng: dùng trong quá trình đọc hoặc ghi dữ liệu từ file lên vùng đệm và
ngược lại.
typedef struct bit_stream_struc {
FILE *pt; /* con trỏ đến file bit dữ liệu */
unsigned char *buf; /* vùng đệm cho dòng bit dữ liệu */
int buf_size; /* kích thước vùng đệm tính theo số byte */
long totbit; /* đếm bit */
int buf_byte_idx; /* chỉ byte trên cùng trong vùng đệm */
int buf_bit_idx; /* bit trên cùng của byte trên cùng trong vùng đệm */
int mode; /* mở dòng bit ở chế độ đọc hay ghi */
int eob; /* chỉ đến cuối vùng đệm */
int eobs; /* đầu cuối của cờ dòng bit */
char format; /* định dạng file ở chế độ đọc (BINARY/ASCII) */
} bitstream_t;
3. Các cấu trúc để định dạng dòng bit dữ liệu:
- Tập tin tiêu đề :
a. Kiểu số nguyên:
typedef unsigned int uint32; /* định nghĩa số nguyên không dấu 32 bit */
typedef unsigned short uint16; /* định nghĩa số nguyên không dấu 16 bit */
b. Con trỏ hàm (*BitsFcnPtr):
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 58
Đây là một nguyên mẫu hàm con trỏ cần phải có để ghi các bit vào dòng dữ liệu.
Nó ghi “length” bits từ “value” bits, theo cách ghi msb-first. Các bit trong value
giả định là right-justified.
typedef void (*BitsFcnPtr)( uint32 value, uint16 length );
c. Cấu trúc BF_BitstreamElement:
Một BitstreamElement chứa đựng dữ liệu đã mã hố sẽ được ghi vào dòng bit.
“length” bit trong số “value” sẽ được ghi vào dòng bit theo msb-first.
typedef struct
{
uint32 value;
uint16 length;
} BF_BitstreamElement;
d. Cấu trúc BF_BitstreamPart:
Một BitstreamPart bao gồm một nhóm các “nrEntries” của BitstreamElements.
Mỗi BitstreamElement sẽ được ghi vào dòng bit theo thứ tự mà nó xuất hiện trong
dãy 'element'.
typedef struct
{
uint32 nrEntries;
BF_BitstreamElement *element;
} BF_BitstreamPart;
e. Cấu trúc BF_FrameData
Cấu trúc này chứa đựng tất cả những thông tin cần thiết cho bộ định dạng dòng bit
để mã hố một frame dữ liệu. Ta phải điền đầy nó và trỏ tới khi định dạng.
typedef struct BF_FrameData
{
BitsFcnPtr putbits; /* your low-level bitstream function */
int frameLength;
int nGranules;
int nChannels;
BF_BitstreamPart *header;
BF_BitstreamPart *frameSI;
BF_BitstreamPart *channelSI[MAX_CHANNELS];
BF_BitstreamPart *spectrumSI[MAX_GRANULES][MAX_CHANNELS];
BF_BitstreamPart *scaleFactors[MAX_GRANULES][MAX_CHANNELS];
BF_BitstreamPart *codedData[MAX_GRANULES][MAX_CHANNELS];
BF_BitstreamPart *userSpectrum[MAX_GRANULES][MAX_CHANNELS];
BF_BitstreamPart *userFrameData;
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 59
} BF_FrameData;
f. Các cấu trúc liên quan dến bộ định dạng:
Cấu trúc này chứa đựng thông tin được cung cấp bởi bộ định dạng dòng bit. Ta có
thể sử dụng nó để kiểm tra và xem thử bộ mã của ta có chấp nhận các kết quả của
việc gọi bộ định dạng hay không.
typedef struct BF_FrameResults
{
int SILength;
int mainDataLength;
int nextBackPtr;
} BF_FrameResults;
typedef struct BF_PartHolder
{
int max_elements;
BF_BitstreamPart *part;
} BF_PartHolder;
typedef struct
{
int frameLength;
int SILength;
int nGranules;
int nChannels;
BF_PartHolder *headerPH;
BF_PartHolder *frameSIPH;
BF_PartHolder *channelSIPH[MAX_CHANNELS];
BF_PartHolder *spectrumSIPH[MAX_GRANULES][MAX_CHANNELS];
} MYSideInfo;
4. Cấu trúc huffcodetab:
- Tập tin tiêu đề :
- Sử dụng : dùng trong quá trình mã hố dữ liệu theo thuật tốn Huffman.
struct huffcodetab {
unsigned int xlen; /*max. x-index+ */
unsigned int ylen; /*max. y-index+ */
unsigned int linbits; /*number of linbits */
unsigned int linmax; /*max number to be stored in linbits */
HUFFBITS *table; /*pointer to array[xlen][ylen] */
unsigned char *hlen; /*pointer to array[xlen][ylen] */
};
5. Các cấu trúc tính MDCT.
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 60
- Tập tin tiêu đề :
- Sử dụng : trong tính tốn MDCT, định dạng dòng bit, tính tốn mô hình tâm lý, mã
hố dữ liệu..
typedef struct {
unsigned part2_3_length;
unsigned big_values;
unsigned count1;
unsigned global_gain;
unsigned scalefac_compress;
unsigned window_switching_flag;
unsigned block_type;
unsigned mixed_block_flag;
unsigned table_select[3];
int /* unsigned */ subblock_gain[3];
unsigned region0_count;
unsigned region1_count;
unsigned preflag;
unsigned scalefac_scale;
unsigned count1table_select;
unsigned part2_length;
unsigned sfb_lmax;
unsigned sfb_smax;
unsigned address1;
unsigned address2;
unsigned address3;
double quantizerStepSize;
/* added for LSF */
unsigned *sfb_partition_table;
unsigned slen[4];
} gr_info;
typedef struct {
int main_data_begin; /* unsigned -> int */
unsigned private_bits;
int resvDrain;
unsigned scfsi[2][4];
struct {
struct {
gr_info tt;
} ch[2];
} gr[2];
} L3_side_info_t;
typedef struct {
double l[2][2][21];
double s[2][2][12][3];
} L3_psy_ratio_t;
typedef struct {
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 61
double l[2][2][21];
double s[2][2][12][3];
} L3_psy_xmin_t;
typedef struct {
int l[2][2][22]; /* [cb] */
int s[2][2][13][3]; /* [window][cb] */
} L3_scalefac_t;
6. Cấu trúc scalefac_struct:
- Tập tin tiêu đề :
struct scalefac_struct
{
int l[23];
int s[14];
};
B. Các định nghĩa.
1. Các định nghĩa dùng trong truy xuất dòng bit dữ liệu:
- Tập tin tiêu đề :
#define MINIMUM 4 /* Minimum size of the buffer in bytes */
#define MAX_LENGTH 32 /* Maximum length of word written or read
from bit
stream */
#define READ_MODE 0
#define WRITE_MODE 1
#define ALIGNING 8
#define BINARY 0
#define ASCII 1
#define TRUE 1
#define FALSE 0
#ifndef BS_FORMAT
#define BS_FORMAT ASCII /* BINARY or ASCII = 2x bytes
*/
#endif
#define BUFFER_SIZE 4096
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MAX(A, B) ((A) > (B) ? (A) : (B))
2. Các định nghĩa dùng trong tính tốn FFT:
- Tập tin tiêu đề :
#define BLKSIZE_S 256
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 62
#define LOGBLKSIZE_S 8
3. Các định nghĩa dùng trong định dạng dòng dữ liệu:
- Tập tin tiêu đề:
#define MAX_CHANNELS 2
#define MAX_GRANULES 2
4. Các định nghĩa dùng trong bộ mã hố Huffman:
- Tập tin tiêu đề:
#define HUFFBITS unsigned long int
#define HTN 34
#define MXOFF 250
5. Các định nghĩa dùng trong phân tích dữ liệu :
- Tập tin tiêu đề:
#define e 2.71828182845
#define CBLIMIT 21
#define SFB_LMAX 22
#define SFB_SMAX 13
#define PRECALC_SIZE 1024 /* WAS 256 !!! */
6. Các định nghĩa dùng trong mô hình âm tâm lý:
- Tập tin tiêu đề:
#define HBLKSIZE 513
#define CBANDS 63
#define CBANDS_s 42
#define BLKSIZE_s 256
#define HBLKSIZE_s 129
#define TCBMAX_l 63
#define TCBMAX_s 42
#define SBMAX_l 21
#define SBMAX_s 12
/* #define switch_pe 1800 */
#define NORM_TYPE 0
#define START_TYPE 1
#define SHORT_TYPE 2
#define STOP_TYPE 3
#define maximum(x,y) ( (x>y) ? x : y )
#define minimum(x,y) ( (x<y) ? x : y )
7. Các định nghĩa dùng trong truy xuất dữ liệu nhâp:
- Tập tin tiêu đề:
#define Read32BitsLowHigh(f) Read32Bits(f)
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 63
#define WriteString(f,s) fwrite(s,strlen(s),sizeof(char),f)
#define Read32BitsLowHigh(f) Read32Bits(f)
8. Các định nghĩa dùng trong cấu trúc file wave và file mpeg:
#define PI 3.14159265358979
#define PI4 PI/4
#define PI64 PI/64
#define SQRT2 1.41421356237
#define LOGBLKSIZE 10
#define LN_TO_LOG10 0.2302585093
#define BLKSIZE 1024
#define HAN_SIZE 512
#define SCALE_BLOCK 12
#define SCALE_RANGE 64
#define SCALE 32768
#define SBLIMIT 32
#define WAVE_RIFF_PCM 0
#define WAVE_PCM_LOHI 1
#define WAVE_PCM_HILO 2
#define WAVE_PCM_AIFF 3
#define TYPE_MPEG_I 1
#define LAYR_III 2
#define MODE_STEREO 0
#define MODE_JSTEREO 1
#define MODE_DUAL 2
#define MODE_MONO 3
#define PSY_NONE 0
#define PSYC_MUSICAM 1
#define PSYC_ATT 2
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 64
III. LƯU ĐỒ
Thay đổi hay giữ nguyên
cấu hình
Cấu hình mặc định
Set_default()
Đặt input và output file;
Mở input file và kiểm tra;
Wave_open();
Open_bit_stream_w();
Memset();
Config.mpeg.mode_gr=2;
Config.mpeg.sample_per_frame=1152;
___________________________________
Chuẩn bị Frame dữ liệu
L3_psycho_initialise();
L3_subband_initialise();
L3_mdct_initialise();
L3_loop_initialise();
Config.wave.bits_per_slot =8;
Frames_processed =0;
Sideinfo_len =32;
Chuẩn bị vùng đệm
Khởi tạo mô hình âm-tâm lý
Tính các hệ số của bộ lọc tần số
Khởi tạo dữ liệu tính MDCT
Khởi tạo mảng pow43[I].0<I<1024
StartL3-Compress ()
Mở thiết bị ghi
Config.mpeg.total_frames=(config.wave.total
_samples /config.mpeg.samples_per_frame);
config,wave.channels=1
S
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 65
avg_slots_per_frame = ((double)config.mpeg.samples_per_frame /
((double)config.wave.samplerate / 1000))*
((double)config.mpeg.bitr /
(double)config.mpeg.bits_per_slot) ;
whole_slots_per_frame = (int) avg_slots_per_frame ;
frac_slots_per_frame = avg_slots_per_frame - (double)
whole_slots_per_frame ;
slot_lag = - frac_slots_per_frame ;
config.mpeg.padding = 0
Update_stastus(frames_processed ++); L3_FlushBitstream( );
close_bit_stream_w( );
wave_close( ) ;
Kết thúc
buffer_windows[0] = buffer[0];
buffer_windows[1] = buffer[1];
slot_lag -= frac_slots_per_frame;
config.mpeg.padding = 0 ;
slot_lag -= frac_slots_per_frame;
config.mpeg.padding = 0 ;
config.mpeg.bits_per_frame = 8*(whole_slot_per_frame + config.mpeg.padding);
mean_bit = (config.mpeg.bits_per_frame - sideinfo_len)/ config.mpeg.mode_gr ;
1
4
frac_slots_per_frame = 0
wave_get(buffer) 0
frac_slots_per_frame 0
slot_lag > (frac_slots_per_frame - 1)
Đ
S
Đ
S
Đ
S
Đ
S
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 66
L3_mdct_sub( );
L3_iteration_loop( );
L3_format_bitstream( );
frame_bits = sstell(&bs) - sent_bits
3
gr = 0 ;
channel = 0
;
L3_psycho_analise( ) ;
channel ++ ;
gr ++ ;
gr = 0 ;
channel = 0 ;
i = 0 ;
L3_window_subband( );
L3_filter_subband( );
i ++ ;
i < 18
channel ++ ;
gr ++ ;
3
2
Đ
Đ
Đ
Đ
Đ
S
S
S
S
channel < config.wave.channels
gr <
config.mpeg.mod_gr
channel < config.wave.channels
gr < config.mpeg.mod_gr
S
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 67
CHƯƠNG 7. GIAO DIỆN VÀ THUYẾT MINH CHƯƠNG TRÌNH
I. Giới thiệu.
Giao diện là công cụ trợ giúp đắc lực cho người sử dụng. Những phần mềm có giao
diện tốt luôn được ưa chuộng. Đó cũng chính là ưu điểm tuyệt vời của Windows.
Lập trình trong Windows hỗ trợ những công cụ cho phép ta tạo ra những giao diện
rất dễ dàng và thân thiện. Tuy nhiên, thiết kế giao diện để cho ai cũng có thể sử
dụng được và không bị nhầm lẫn không phải là chuyện dễ dàng. Nó đòi hỏi ta phải
có một cái nhìn bao quát, thậm chí phải hiểu sâu về giải thuật của chương trình thì
mới có thể loại trừ những sai lầm khi sử dụng.
Lập trình trong Windows là lập trình theo tình huống. Mọi nút nhấn, ô đối thoại
trên giao diện đều có thể được truy cập tới bất kỳ lúc nào mà không theo một trình
tự nhất định. Do đó người lập trình cần phải dự trù đến mọi tình huống và cần phải
đưa ra một số đề nghị dưới dạng những thông số định sẵn cho người sử dụng theo
đó mà vận hành. Ngồi ra, giao diện cần có phần trợ giúp để hướng dẫn cho người
sử dụng ở bất kỳ lúc nào.
II. Giao diện.
Dựa trên sơ đồ khối và lưu đồ giải thuật. Giao diện bao gồm các phần như hình vẽ
sau:
1. Input group.
Nhóm các thông tin cấu hình và lệnh về tập tin nguồn ( *.wav). Bao gồm các
thông tin như : bitrates, samplerates, mode, File path name..
1 2 3 4 5 6
7 8
2
9 10
11
12 13
14
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 68
2. Open button.
Mở hộp thoại File Open của Windows để chọn file cần nén. Phần mở rộng mặc
định là .wav
3. Text Edit box.
Dùng gõ file nguồn bằng tay. Mặc định là *.wav.
4. Bitrates.
Cho biết chỉ số tốc độ bit của tập tin nguồn .wav đã chọn trên mục 2 hoặc 3. Chỉ
số mặc định là 128. Không sửa bằng tay được.
5. Samplerates.
Cho biết tần số lấy mẫu của tập tin nguồn .wav đã chọn trên mục 2 hoặc 3. Tần
số mặc định là 44100 Hz. Không sửa bằng tay được.
Các tần số có thể bao gồm : 32000, 44100 và 48000 Hz.
6. Output.
Nhóm các thông tin cấu hình và lệnh về tập tin đích ( *.mp3). Bao gồm các
thông tin như : bitrates, samplerates, mode, File path name..
7. Save button.
Mở hộp thoại File Save của Windows để ghi đường dẫn và tên file nén. Phần
mở rộng mặc định là .mp3.
8. Text Edit box.
Dùng gõ đường dẫn à tên tập tin đích bằng tay. Mặc định là *.mp3.
Khi đã chọn được tập tin nguồn trong phần 2 hoặc 3 thì trong ô này sẽ tự động
xuất hiện đường dẫn và tên tập tin đích.
9. Bitrates.
Định chỉ số tốc độ bit của tập tin đích đã chọn trên mục 7 hoặc 8. Chỉ số mặc
định là 128. Có thể chọn các chỉ số khác trong ô kéo xuống, bao gồm các giá trị
: 16, 32, 40, 48, 56, 64, 80, 96, 112, 128, 156, 160, 192, 224, 256, 320.
10. Samplerates.
Cho biết tần số lấy mẫu của tập tin đích, phụ thuộc và bằng với tần số lấy mẫu
của tập tin nguồn. Tần số mặc định là 44100 Hz. Không sửa bằng tay được.
11. Mode group.
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 69
Nhóm các chế độ Stereo hay Mono. Mặc định là Stereo.
12. Progress bar.
Thanh tiến trình, xuất hiện trong quá trình nén từ tập tin nguồn .wav sang tập tin
đích .mp3 .
13. Compress button.
Nút nhấn này chỉ có thể sau khi đã chọn và định cấu hình đầy đủ cho các tập tin
nguồn và đích. Nghĩa là chỉ có thể nhấn được nút này sau khi đã nhấn nút
Update.
Khi nhấn nút này, quá trình nén từ tập tin nguồn sang tập tin đích mới thực sự
bắt đầu. Đồng thời thanh tiến trình mới bắt đầu hoạt động.
Kết thúc quá trình nén sẽ có thông điệp báo cho biết đã hồn tất công việc
14. Update button.
Phím này được nhấn sau khi đã chọn các tập tin nguồn và đích để cập nhật các
thông số chuẩn bị cho quá trình nén và kích hoạt phím Compress.
III. Chương trình.
Chương trình có nền là hộp thoại MP3 COMPRESSOR hiển thị các phím
nhấn cho người sử dụng lựa chọn và chạy ứng dụng. Do đó, tất cả các hàm
chính đều được đặt trong lớp CMp3Dlg.
Sau đây ta sẽ lần lược khảo sát một số hàm quan trọng.
1. OnInitDialog( ) :
Hàm này khởi tạo một số giá trị mặc định cho hộp thoại, nhằm giúp cho
người sử dụng có một cái nhìn tồn cục và hiểu được ngay ứng dụng, để
từ đó có thể chọn lựa các thông số thích hợp cho ứng dụng.
Đồng thời, cũng cài đặt sẵn một số giá trị ban đầu cho các đối tượng
được dùng cho chương trình.
BOOL CMp3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
// Khởi tạo giá trị ban đầu cho hộp thoại
m_stereo_in = 0;
m_stereo_out = 0;
m_file_in = "*.wav";
m_file_out = "*.mp3";
m_samplerates_in = "44100";
m_samplerates_out = "44100";
Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 70
m_bitrates_in = "128";
m_bitrates_out.AddString("32");
m_bitrates_out.AddString("40");
m_bitrates_out.AddString("48");
m_bitrates_out.AddString("56");
m_bitrates_out.AddString("64");
m_bitrates_out.AddString("80");
m_bitrates_out.AddString("96");
m_bitrates_out.AddString("112");
m_bitrates_out.AddString("128");
m_bitrates_out.AddString("160");
m_bitrates_out.AddString("192");
m_bitrates_out.AddString("224");
m_bitrates_out.AddString("256");
m_bitrates_out.AddString("320");
m_bitrates_out.SetCurSel(8);
UpdateData(FALSE);
bOpen = FALSE;
bSave = FALSE;
// Gán các hằng cho các đối tượng
config.mpeg.type = TYPE_MPEG_I;
config.mpeg.layr = LAYR_III;
config.mpeg.mode = MODE_STEREO;
config.mpeg.bitr = 128;
config.mpeg.psyc = PSYC_ATT;
config.mpeg.
Các file đính kèm theo tài liệu này:
- Đề tài- Nén âm thanh file WAV theo chuẩn MPEG.pdf