Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
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 hoàn 30
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 toá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ã hoá 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
SVTH: Đỗ Văn Tuấn Trang 2
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
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
hoá 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++,
SVTH: Đỗ Văn Tuấn Trang 3
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
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 hoà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
hoàn thành báo cáo này.
SVTH: Đỗ Văn Tuấn Trang 4
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
PHẦN I
LÝ THUYẾT CƠ BẢN
SVTH: Đỗ Văn Tuấn Trang 5
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
CHNG 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
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.
SVTH: Đỗ Văn Tuấn Trang 7
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
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 :
• 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
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. 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. p suất ở đây là áp
suất dư do sóng âm gây ra ngoài áp suất khí quyển.
SVTH: Đỗ Văn Tuấn Trang 9
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
Trong phạm vi nghe được, áp suất âm trong khoảng từ 2.10
-4
đến
2.10
2
µbar, chênh lệch 10
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 P
min
= 2.10
-4
µbar
Cường độ âm nhỏ nhất I
min
= 10
-16
W/cm
2
.
- p suất âm và cường độ âm lớn nhất mà tai người có thể chòu được là:
P
max
= 2.10
2
µbar
I
max
= 10
-4
W/cm
2
.
- Công suất âm nhỏ nhất có thể nghe thấy được W
min
= 10
W/m
2
.
• 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):
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ừ
I
o
tới I thì cảm giác nghe to tăng tỉ lệ với lg(I/I
o
). 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/I
o
) = lg(10
-12
/ 10
-12
) = 0 bel.
Đơn vò là Bel hay db. 10db = 1 bel.
b. Mức cường độ âm (L
I
):
SVTH: Đỗ Văn Tuấn Trang
11
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à f
1
, một âm khác tần số là f
2
(f
2
> f
1
) thì f
2
/ f
1
= 2
x
.
Khi x=1 tức f
2
/ f
1
= 2 gọi là 1 quãng tần số (hay 1 ốc-ta).
Khi x=1/2 tức f
2
/ f
1
= 1.41 gọi là nửa ốc-ta.
Khi x=1/3 tức f
2
đò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:
SVTH: Đỗ Văn Tuấn Trang
13
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
- Để 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 “độ
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.
SVTH: Đỗ Văn Tuấn Trang
15
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
• 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
• 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” (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.
SVTH: Đỗ Văn Tuấn Trang
17
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
• 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.
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
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.
SVTH: Đỗ Văn Tuấn Trang
19
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
- 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 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
4 “WAVE”
4 “fmt”
4 Kích thước subchunk “fmt”
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
SVTH: Đỗ Văn Tuấn Trang
21
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
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
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 */
return(0);
}
SVTH: Đỗ Văn Tuấn Trang
23
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
Đến đây ta đã có thể bắt đầu đọc dữ liệu từ Wave File. Đoạn mã
HPSTR wavepointer;
MmSub.ckid=mmioFOURCC(‘d’,’a’,’t’,’a’);
If(mmioDescend(h,(LPMMCKINFO)&mmSub,
SVTH: Đỗ Văn Tuấn Trang
24
Khoa CNTT – ÑHBKHN GVHD thaày: Dö Thanh Bình
(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
/* baùo loãi */
return(0);
}
if((wavehandle=GlobalAlloc(GMEM_MOVEBLEIGMEM_
SHARE, mmSub.cksize))==NULL)
{
mmioClose(h,0);
/* baùo loãi */
return(0);
}
if(wavepointer=(HPSTR)GLOBALLOCK(WAVEHANDLE))
==null)
{
GlobalFree(wavehandle);
mmioClose(h,0);
/* baùo loãi */
return(0);
}
if(mmioRead(h,wavepointer,mSub.cksize) !=
mSub.cksize)
{