Phía nhận cố gắng thực hiện chạy mỗi đoạn đúng q(ms) sau khi đoạn đó
được tạo ra. Nếu nhãn của đoạn là t, trong trường hợp đoạn tới phía nhận trước thời điểm theo thứ tự nó được chạy, phía nhận sẽ chạy đoạn đó tại thời điểm
t+q, nếu nó tới sau thời điểm đó, nó bị coi như đã mất.
Trong cơ chế này, số thứ tự là không cần thiết. Điều cần quan tâm tới là giá trị q. Nếu q nhỏ hơn nhiều so với 400ms, rất nhiều gói tin có thể bị coi như là bị mất do jitter. Nếu độ trễ đầu cuối - đầu cuối lớn thì dùng q lớn, nếu độ trễ nhỏ và sự biến thiên độ trễ là nhỏ thì dùng q nhỏ chẳng hạn < 150ms.
Hình dưới đây minh họa mối quan hệ giữa thời gian làm trễ và sự mất gói tin (gói tin coi là mất khi nó tới phía nhận sau thời điểm được chạy theo lịch).
Hình 2.1. Sự phụ thuộc giữa tỉ lệ mất gói tin với thời gian làm trễ việc chạy q Hình vẽ thể hiện thời gian mà tại đó gói tin được tạo và được chạy. Phía gửi tạo gói tin cứ 20ms một lần. Gói tin đầu tiên tới phía nhận tại thời điểm r.
Theo cơ chế tạm ngừng thứ nhất, thời gian tạm ngừng là p-r, gói tin thứ 4 không tới phía nhận trước thời gian được lập lịch nên bị coi là mất. Trong khi đó ở cơ chế tạm ngừng thứ 2, thời gian tạm ngưng là p’-r, toàn bộ các gói tin đều tới
phía nhận trước thời gian lập lịch và coi như không có sự mất gói tin. 2.3.2. Làm trễ việc chạy với thời gian thích nghi
Với cơ chế làm trễ việc chạy với thời gian cố định, nếu thiết lập thời gian tạm ngừng lớn, các gói tin hầu như sẽ tới phía nhận trước thời gian chạy trong lịch nên không có mất mát gói tin. Tuy nhiên, với các ứng dụng tương tác thời gian thực như điện thoại Internet, Video Conference thì độ trễ lớn quá có thể khiến chất lượng không chấp nhận được. Vậy ta phải giảm thời gian tạm ngừng tới giá trị nhỏ nhất với ràng buộc là cho phép mất gói tin chỉ là vài phần trăm. Muốn vậy, ta cần đánh giá độ trễ mạng và sự biến thiên độ trễ (jitter), theo đó điều chỉnh thời gian làm trễ tại lúc bắt đầu mỗi cuộc hội thoại. Cơ chế phía nhận thay đổi thời gian làm trễ được mô tả như sau:
Gọi ti là nhãn (thời điểm gói tin được tạo ra phía bên gửi) của gói tin thứ i,
ri là thời điểm gói tin thứ i tới phía nhận, pi là thời điểm gói tin thứ i được chạy
ở phía nhận. Khi đó, độ trễ đầu cuối - đầu cuối của gói tin thứ i là ri – ti. Tùy theo jitter, độ trễ này thay đổi khác nhau đối với mỗi gói tin. Gọi di là độ trễ trung bình cho tới gói tin thứ i. Chúng ta có thể sử dụng độ trễ trung bình được tính theo công thức sau: di = (1-u)di-1 + u(ri – ti) với u là hằng số nào đó (ví dụ u
= 0.1). Công thức này còn thường được gọi là bộ lọc thông thấp – LPF (Low
1 2 3 4 5
Pass Filter), có tác dụng làm giảm ảnh hưởng của các biến động tức thời của độ trễ đến độ trễ trung bình.
Gọi vi là độ lệch trung bình cho tới gói tin thứ i giữa độ trễ của gói tin thứ
i và độ trễ trung bình di.
vi= (1-u)vi-1 + u|ri-ti-di|
Các giá trị di, vi được tính cho mỗi gói tin nhận được tại phía nhận, để từ đó tính thời điểm chạy cho gói tin đầu tiên của mỗi đoạn thoại.
Sau khi tính các giá trị trên, giả sử gói tin thứ i là gói đầu tiên của đoạn
thoại nào đó, thời điểm chạy của nó tại phía nhận sẽ là pi=ti+di+Kvi, trong đó K là hằng số dương (ví dụ K = 4). Kvi được thêm vào để cho thời điểm chạy gói tin đủ lâu để các gói tin bị coi như bị mất là rất ít. Thời điểm chạy của các gói tin tiếp theo trong cùng đoạn thoại với gói tin đầu tiên sẽ là pj=tj+qi với qi=pi-ti, là thời gian từ khi gói tin đầu tiên được tạo ra (bên gửi) cho tới khi nó được chạy (bên nhận). Trong cơ chế trên điều quan trọng là phải xác định đâu là đoạn đầu tiên của đoạn thoại. Nếu không có sự mất gói tin, phía nhận có thể xác định được điều này bằng cách so sánh nhãn của gói tin thứ i với nhãn của gói tin thứ
i-1. Nếu ti - ti-1 > 20ms, thì phía nhận sẽ biết rằng gói tin thứ i là gói tin đầu tiên
của đoạn hội thoại. Nhưng khi việc mất gói tin xảy ra, thì khi ti-ti-1 > 20ms chưa chắc i đã là gói tin đầu tiên của đoạn thoại. Trong trường hợp này, 2 gói tin nhận được cũng có hiệu 2 nhãn lớn hơn 20ms. Vì thế, số thứ tự trong trường hợp này được sử dụng. Phía nhận có thể dùng số thứ tự để xác định trường hợp nào là gói tin đầu tiên, trường hợp nào là mất mát gói tin.
2.4. Khôi phục các gói tin bị mất tại phía nhận
Như đã nói ở phần trên chúng ta quan niệm rằng: Gói tin bị coi là mất nếu nó không tới phía nhận hoặc tới sau thời gian mà nó được thực hiện tại phía nhận (theo lịch). Việc truyền lại gói tin bị mất là không phù hợp với ứng dụng thời gian thực. Vì thế ta sử dụng lược đồ khôi phục gói tin bị mất tại phía nhận. Có 2 kiểu lược đồ là: lược đồ FEC (forward error correction) và lược đồ xen kẽ (interleaving).
2.4.1. Lược đồ FEC
Ý tưởng của FEC là thêm các thông tin bổ sung vào gói tin. Các thông tin này có thể được dùng để khôi phục các gói tin bị mất. Chúng ta xét 2 cơ chế FEC.
Cơ chế thứ nhất: Cứ sau n đoạn thì lại gửi một đoạn chứa thông tin bổ sung. Đoạn chứa thông tin bổ sung đó được tạo bằng cách thực hiện phép XOR n đoạn ban đầu. Nếu một gói tin nào đó trong n + 1 gói tin đã gửi bị mất, phía nhận có thể khôi phục lại gói tin đó. Nhưng nếu có nhiều gói tin bị mất, phía
nhận sẽ không thể tái tạo lại được. Nếu để cỡ của khối là (n + 1) nhỏ, một phần lớn của các gói tin bị mất có thể được khôi phục. Lược đồ này cũng làm tăng độ trễ bởi vì phía nhận phải nhận toàn bộ khối gói tin xong mới có thể thực hiện chúng được.
Hình 2.2. Sửa đổi dữ liệu sử dụng FEC
Cơ chế FEC thứ hai: Gửi một luồng thông tin bổ sung chính là luồng âm thanh có chất lượng thấp hơn. Chẳng hạn, phía gửi tạo một luồng bình thường và một luồng tốc độ bít thấp (ví dụ: luồng bình thường là mã hóa PCM tốc độ 64Kbps, luồng tốc độ bít thấp là mã hóa GSM tốc độ 13Kbps). Luồng tốc độ bít thấp được xem như là thông tin bổ sung. Phía gửi sẽ tạo ra gói tin thứ n
bằng cách lấy đoạn thứ n của luồng bình thường và chèn vào đó đoạn thứ n-1
của luồng bổ sung như hình vẽ. Khi xảy ra mất gói tin không liên tiếp, phía nhận có thể chạy đoạn mã hóa tốc độ bít thấp trong gói tin kế tiếp. Đoạn tốc độ bít thấp cho chất lượng âm thanh thấp hơn đoạn bình thường, nhưng trên tổng thể thì ảnh hưởng không đáng kể. Trong lược đồ này, phía nhận chỉ phải nhận 2 gói tin trước khi thực hiện chạy chúng, vì thế độ trễ là nhỏ. Nếu mã hóa tốc độ bít thấp chiếm tỉ lệ kích thước không đáng kể so với mã hóa bình thường, tốc độ truyền tăng lên không đáng kể.
Hình 2.3. Chèn thêm thông tin bổ sung là các gói tin tốc độ bít thấp vào gói tin bình thường
Để xử lý việc mất gói tin liên tục, một biến thể của cơ chế trên được sử dụng. Thay vì chèn đoạn tốc độ bít thấp thứ n-1 vào đoạn bình thường thứ n,
phía gửi sẽ chèn đoạn tốc độ bít thấp thứ n-1 và n-2, hoặc chèn đoạn tốc độ bít thấp thứ n-1 và thứ n-3. Việc chèn càng nhiều đoạn bổ sung vào thì càng làm
tăng băng thông cần thiết và độ trễ. 2.4.2. Lược đồ xen kẽ
Phía gửi sẽ xếp các dữ liệu âm thanh trước khi truyền, các phần tử sát nhau sẽ được xếp cách nhau một khoảng nào đó trong luồng truyền đi. Điều này sẽ làm giảm ảnh hưởng của việc mất gói tin. Ví dụ: Mỗi phần tử ứng với dữ liệu âm thanh dài 5ms, một đoạn dài 20ms (chứa 4 phần tử). Đoạn đầu tiên chứa các phần tử thứ:1, 5, 9, 13,… đoạn thứ 2 chứa phần tử thứ: 2, 6, 10, 14,… Việc mất gói tin sẽ chỉ làm cho mỗi đoạn nhận được sau khi được khôi phục lại giảm chất lượng đi chút ít.
Hình 2.4. Lược đồ khôi phục gói tin bị mất theo kiểu xen kẽ
Cơ chế trên có thể nâng cao chất lượng luồng nhận được. Bất lợi dễ thấy là tăng độ trễ. Đây là hạn chế với các ứng dụng tương tác thời gian thực như điện thoại Internet hoặc Video Conference, mặc dầu không ảnh hưởng lắm tới ứng dụng truyền âm thanh, hình ảnh được lưu trữ trên server. Thuận lợi là không làm tăng yêu cầu băng thông.
2.4.3. Cơ chế khôi phục gói tin bị mất chỉ dựa trên phía nhận
Lược đồ khôi phục gói tin bị mất kiểu này sẽ cố gắng tạo ra một gói tin thay thế cho gói tin bị mất làm sao cho gói tin thay thế sẽ thật giống gói tin bị mất nếu có thể. Điều này có thể thực hiện được với tín hiệu âm thanh. Kỹ thuật này sử dụng cho luồng lưu lượng có tỉ lệ mất gói tin là nhỏ (<15%) và kích thước gói tin nhỏ (ví dụ chỉ chứa dữ liệu mã hóa 4-40ms âm thanh). Khi gói tin có độ dài lớn thì kỹ thuật này không được áp dụng vì nó gây lỗi ở phía người nghe.
Các kỹ thuật phục hồi phía nhận được thể hiện trong hình 2.5 – Phân loại các kỹ thuật che dấu lỗi. Theo đó, các kỹ thuật này được phân làm 3 loại:
Chèn (Insertion): Là dạng đơn giản nhất. Nó thực hiện bằng cách chèn các gói lấp đầy vào vị trí gói mất. Gói được sử dụng để chèn có thể là khoảng lặng, tiếng ồn, hoặc chính là gói vừa nhận được ngay trước đó. Điều này có ưu điểm là yêu cầu khả năng tính toán thấp tại phía nhận.
Dạng thứ hai của lược đồ này là sử dụng phép nội suy (Interpolation): Khi một gói tin bị mất, phía nhận sẽ sử dụng gói tin tới trước và sau gói tin bị mất để nội suy ra một gói tin mới thay thế cho gói tin bị mất. Dạng này cho chất lượng tốt hơn dạng thứ nhất nhưng yêu cầu khả năng tính toán tại phía nhận cao hơn.
Tái tạo lại (Regeneration): Là kỹ thuật sử dụng các thuật toán nén thoại với các tham số mã hóa nhận được để tái tạo lại các gói tin bị mất. Kỹ thuật này cho chất lượng âm thanh tốt vì có lượng lớn thông tin được phục hồi nhưng chúng đòi hỏi nhiều tính toán.
2.5. Nén dữ liệu audio/video
Trước khi audio, video được truyền, chúng được số hóa và nén lại [19]. Việc số hóa là hiển nhiên bởi vì: Mạng máy tính truyền đi các bit, do đó phải số hóa. Trong khi đó, nén dữ liệu cũng rất quan trọng bởi vì audio, video nếu không nén sẽ tiêu tốn nhiều băng thông cũng như dung lượng lưu trữ. Ví dụ: Một hình ảnh 1024*1024*24 bit cần 3MB dung lượng bộ nhớ để chứa nếu không nén, nó cần đến 7 phút để truyền qua đường truyền 64Kbps. Nếu nó được nén lại với tỉ lệ 10:1, thì bộ nhớ cần là 300KB và thời gian truyền giảm xuống còn dưới 6 giây. Nén audio, video là lĩnh vực được nghiên cứu hơn 50 năm. Hiện nay có hàng trăm kĩ thuật phổ biến và các chuẩn cho nén video, audio.
2.5.1. Một số kĩ thuật nén audio
PCM (Pulse Code Modulation)
Tín hiệu tương tự được lấy mẫu ở tần số cố định, ví dụ: 8000 mẫu/giây. Giá trị của mỗi mẫu là một số thực.
Mỗi mẫu được làm tròn tới một số trong tập các giá trị định trước. Thao tác này được gọi là lượng tử hóa. Số lượng các số trong tập các giá trị hữu hạn gọi là các giá trị lượng tử, thường là lũy thừa của 2, ví dụ: 256 (2^8).
Mỗi giá trị lượng tử được biểu diễn bằng một số lượng cố định các bít. Mỗi giá trị mẫu được chuyển thành dãy bít (1 byte nếu có 256 giá trị lượng tử). Các biểu diễn bít này được chuyển thành dạng biểu diễn số của tín hiệu và được truyền đi.
Bình thường, quá trình lượng tử hóa gồm 2 bước: Lượng tử hóa tuyến tính 13 hay 14 bít, rồi nén theo logarit xuống 8 bít.
Nén 13 bít xuống 8 bít là biến đổi A-Law được sử dụng ở Châu Âu, nén 14 bít xuống 8 bít là biến đổi M-Law được sử dụng ở Bắc Mỹ và Nhật Bản.
Chúng ta xét một ví dụ: Nếu một tín hiệu audio tương tự được lấy mẫu ở tần số 8000 mẫu/giây, mỗi mẫu được lượng tử và được biểu diễn bởi 8 bít. Khi đó tín hiệu số sẽ có tốc độ bít là 64000 bít/giây. Tín hiệu số này có thể được chuyển trở lại thành tín hiệu tương tự để chạy. Tuy nhiên, tín hiệu analog được khôi phục từ tín hiệu số thường khác với tín hiệu ban đầu. Bằng cách tăng tần số lấy mẫu và số lượng các giá trị lượng tử, có thể làm cho tín hiệu được giải mã giống tín hiệu tương tự ban đầu hơn (thậm chí giống hệt - ở một mức nào đó). Do vậy, rõ ràng có một sự tương ứng giữa chất lượng của tín hiệu được giải mã với yêu cầu bộ nhớ lưu trữ và băng thông để truyền tín hiệu số. Mã hóa tiếng nói thường dùng PCM, với tốc độ lấy mẫu khoảng 8000 mẫu/giây, và 8 bít/mẫu cho ta tốc độ là 64Kbps. Đĩa CD audio cũng dùng phương pháp PCM với tốc độ lấy mẫu 44100 mẫu/giây và 16 bít/mẫu cho tốc độ 705.6Kbps ứng với âm thanh mono và 1.411Mbps ứng với âm thành stereo.
DPCM (Differential PCM)
Theo phương pháp này, các mẫu được so sánh với nhau, sau đó không mã hóa toàn bộ mẫu mà chỉ mã hóa sự khác nhau giữa các mẫu.
Sử dụng cơ chế đoán dựa trên các mẫu trước để giảm tốc độ bít (mã hóa sự khác nhau giữa mẫu đoán và mẫu thực tế - 4 bít/mẫu).
Theo phương pháp này, khi thời gian tăng lên, tỉ lệ lỗi giữa tín hiệu giải mã và tín hiệu mã hóa sẽ tăng, do đó theo định kì, một mẫu đầy đủ sẽ được mã hóa.
ADPCM (Adaptive DPCM)
Dùng chiến lược đoán sự khác nhau giữa các xung theo kiểu thích nghi.
Cung cấp chất lượng âm thanh như PCM, tốc độ bít là 32Bbps.
LPC (Linear Predictive Coding)
Cho âm thanh chất lượng tốt, tốc độ bít là 1.2-2.4Kbps. LPC mô hình hóa tiếng nói như một nguồn được truyền qua bộ lọc.
CELP (Code Excited Linear Predictor)
Sử dụng mô hình như LPC, nhưng có thêm nhiều thông tin về nguồn âm thanh.
Một bảng mã các vector nguồn có tại phía gửi và phía nhận
Nguồn phát sẽ tìm từ bảng mã trên phần phù hợp nhất với âm thanh vào và gửi đi.
GSM
Sử dụng mô hình tương tự LPC, chi phí tính toán thấp hơn CELP và thích hợp cho hệ thống điện thoại di động.
Tốc độ bít là 13Kbps.
MP3
Tốc độ bít là 128Kbps hoặc 112Kbps. Cho âm thanh chất lượng CD.
Chuẩn nén rất phức tạp, sử dụng cơ chế giảm thiểu sự dư thừa…
Lƣợc đồ mã hóa Băng thông (Kbps)
Chất lƣợng âm thanh
PCM 64 Âm thanh chất lượng điện thoại
ADPCM 32 Âm thanh chất lượng điện thoại
GSM 13 Âm thanh chất lượng điện thoại
CELP 4-9 Âm thanh chất lượng điện thoại
LPC 2 Âm thanh chất lượng rô bốt
MP3 128 Âm thanh chất lượng CD
Bảng 2.1. So sánh các lược đồ mã hóa âm thanh 2.5.2. Nén video
Video là một dãy tuần tự các hình ảnh, mỗi hình ảnh được hiển thị với tốc độ không đổi ví dụ 24 hoặc 30 hình/giây. Một ảnh không được nén gồm một