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 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ã 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++, 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.
PHẦN I LÝ THUYẾT CƠ BẢN
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.
• 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ó :
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 :
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
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 ngoà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
- Trong tính toá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):
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.
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:
- Để 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 đoá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.
• 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.
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.
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”:
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 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”
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 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 */
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 */
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);
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 toá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ệ:
T : phép biến đổi
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 :
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 :
Do vậy đối với hệ tuyến tính:
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 hoàn toàn bằng đáp ứng
h(n), biết h(n) ta hoàn toàn tính được đáp ứng y(n) của tín hiệu vào x(n).
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:
3. Tính chất của tổng chập của hệ TTBB
• Tính giao hoán:
• Tính phân phối:
Như vậy, từ tính chất giao hoá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:
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:
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
hoặc viết cách khác:
Nếu đáp ứng xung h(n) có độ dài hữu hạn N thì:
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.
khi n<0