Mục lục bài họcĐang ở d01-b2
← IGCSE Computer Science
0/18 bài đã học xong
Chương 1 · Data Representation · Bài 2/2 của chương · bài 2/18 của IGCSE Computer Science

Text, images, sound and compression

Văn bản, hình ảnh, âm thanh và nén dữ liệu
← Mục lục bài học
Lý thuyết · English

Representing text

Every character is stored as a binary code from a character set.

  • ASCII — $7$ or $8$ bits per character, giving $128$ or $256$ characters. Enough for English letters, digits and punctuation, but not for other alphabets;
  • Unicode — uses more bits per character, so it covers far more characters: Chinese, Arabic, Cyrillic, emoji.

The trade-off is direct: Unicode supports every writing system, but each character takes more storage, so files are larger.

Representing images

A bitmap image is a grid of pixels, each storing a colour as a binary number.

  • resolution — the number of pixels, given as width $\times$ height;
  • colour depth — the number of bits used for each pixel.

These two are constantly confused, and the file size formula needs both:

$$\text{file size (bits)}=\text{width}\times\text{height}\times\text{colour depth}$$

Colour depth decides how many colours are available: $n$ bits give $2^n$ colours. So $1$ bit gives $2$ colours, $8$ bits give $256$, and $24$ bits give over $16$ million.

Increasing either resolution or colour depth improves quality but increases file size.

Representing sound

Sound is analogue, so it must be sampled: its amplitude is measured at regular intervals and each measurement stored as a binary number.

  • sample rate — the number of samples taken per second;
  • sample resolution — the number of bits per sample.
$$\text{file size (bits)}=\text{sample rate}\times\text{sample resolution}\times\text{duration in seconds}$$

A higher sample rate captures the sound more accurately, and a higher sample resolution records each amplitude more precisely. Both improve quality and both increase file size — the same trade-off as with images.

Storage units

$8$ bits$=1$ byte
$1\,000$ bytes$=1$ kilobyte (kB)
$1\,000$ kB$=1$ megabyte (MB)
$1\,000$ MB$=1$ gigabyte (GB)
$1\,000$ GB$=1$ terabyte (TB)

Note the distinction in symbols: a lower-case b means bit and an upper-case B means byte. File size formulas give an answer in bits, so divide by $8$ to get bytes.

Compression

losslessno data is permanently removed; the original file can be restored exactly
lossysome data is permanently removed; the original cannot be restored

Run-length encoding is the standard lossless example: a run of identical values is replaced by the value and a count, so $\text{WWWWWWBB}$ becomes $\text{6W2B}$. Nothing is lost, and the original is rebuilt exactly.

Lossy methods — MP3 for audio, JPEG for images — discard detail the human ear or eye is least likely to notice. They achieve much greater size reduction, which is why they are used for streaming and for photographs.

Choosing between them: use lossless where every bit matters — text documents, program code, spreadsheets, medical images. Use lossy where a small quality loss is acceptable in exchange for a much smaller file.

Giải thích tiếng Việt

Biểu diễn văn bản. Mỗi ký tự được lưu bằng một mã nhị phân lấy từ một bộ ký tự.

  • ASCII — $7$ hoặc $8$ bit mỗi ký tự, cho $128$ hoặc $256$ ký tự. Đủ cho chữ cái tiếng Anh, chữ số và dấu câu, nhưng không đủ cho các hệ chữ viết khác;
  • Unicode — dùng nhiều bit hơn cho mỗi ký tự, nên nó bao được rất nhiều ký tự: chữ Hán, chữ Ả Rập, chữ Kirin, biểu tượng cảm xúc.

Sự đánh đổi rất trực tiếp: Unicode hỗ trợ mọi hệ chữ viết, nhưng mỗi ký tự chiếm nhiều dung lượng hơn nên tệp lớn hơn.

Biểu diễn hình ảnh. Ảnh bitmap là một lưới các điểm ảnh, mỗi điểm lưu một màu dưới dạng số nhị phân.

  • độ phân giảisố điểm ảnh, ghi dạng rộng $\times$ cao;
  • độ sâu màusố bit dùng cho mỗi điểm ảnh.

Hai đại lượng này liên tục bị lẫn, và công thức cỡ tệp cần cả hai:

$$\text{cỡ tệp (bit)}=\text{rộng}\times\text{cao}\times\text{độ sâu màu}$$

Độ sâu màu quyết định có bao nhiêu màu: $n$ bit cho $2^n$ màu. Vậy $1$ bit cho $2$ màu, $8$ bit cho $256$ màu, và $24$ bit cho hơn $16$ triệu màu.

Tăng độ phân giải hay tăng độ sâu màu đều làm chất lượng tốt hơn nhưng cỡ tệp lớn hơn.

Biểu diễn âm thanh. Âm thanh là tín hiệu tương tự, nên nó phải được lấy mẫu: biên độ được đo ở những khoảng đều nhau và mỗi lần đo được lưu thành một số nhị phân.

  • tần số lấy mẫu — số mẫu lấy mỗi giây;
  • độ phân giải mẫu — số bit cho mỗi mẫu.
$$\text{cỡ tệp (bit)}=\text{tần số lấy mẫu}\times\text{độ phân giải mẫu}\times\text{thời lượng (giây)}$$

Tần số lấy mẫu cao hơn ghi lại âm thanh chính xác hơn, và độ phân giải mẫu cao hơn ghi mỗi biên độ chi tiết hơn. Cả hai đều cải thiện chất lượng và cả hai đều làm tệp lớn hơn — đúng sự đánh đổi như với hình ảnh.

Đơn vị lưu trữ.

  • $8$ bit $=1$ byte;
  • $1\,000$ byte $=1$ kilobyte (kB);
  • $1\,000$ kB $=1$ megabyte (MB);
  • $1\,000$ MB $=1$ gigabyte (GB);
  • $1\,000$ GB $=1$ terabyte (TB).

Chú ý phân biệt ký hiệu: chữ b thường là bit, chữ B hoa là byte. Các công thức cỡ tệp cho kết quả tính bằng bit, nên phải chia cho $8$ để ra byte.

Nén dữ liệu.

  • Nén không mất dữ liệu — không xoá vĩnh viễn dữ liệu nào; khôi phục lại được tệp gốc y nguyên;
  • Nén mất dữ liệu — một phần dữ liệu bị xoá vĩnh viễn; không khôi phục lại được bản gốc.

Mã hoá độ dài chuỗi là ví dụ chuẩn của nén không mất dữ liệu: một dãy giá trị giống nhau được thay bằng giá trị đó kèm số lần lặp, nên $\text{WWWWWWBB}$ thành $\text{6W2B}$. Không mất gì cả, và bản gốc được dựng lại chính xác.

Các phương pháp mất dữ liệu — MP3 cho âm thanh, JPEG cho ảnh — loại bỏ những chi tiết mà tai và mắt người ít có khả năng nhận ra nhất. Chúng giảm cỡ tệp nhiều hơn hẳn, và đó là lý do chúng được dùng cho phát trực tuyến và cho ảnh chụp.

Cách chọn: dùng không mất dữ liệu ở nơi từng bit đều quan trọng — văn bản, mã chương trình, bảng tính, ảnh y khoa. Dùng mất dữ liệu ở nơi chấp nhận được một chút giảm chất lượng để đổi lấy tệp nhỏ hơn nhiều.

Hai đại lượng KHÁC NHAU — công thức cần CẢ HAI ĐỘ PHÂN GIẢI = SỐ điểm ảnh 6 × 3 = 18 điểm ảnh ĐỘ SÂU MÀU = BIT mỗi điểm MỘT điểm ảnh lưu bằng n bit n bit → 2ⁿ màu 8 bit → 256 màu cỡ tệp (bit) = rộng × cao × độ sâu màu Bỏ quên độ sâu màu → kết quả nhỏ hơn nhiều lần. Kết quả ra BIT — chia 8 để đổi sang BYTE (b thường = bit, B hoa = byte).
Cùng công thức ba thừa số áp cho âm thanh: tần số lấy mẫu × độ phân giải mẫu × thời lượng. Nhận ra khuôn chung này là nhớ được cả hai.
Ví dụ — tính cỡ tệp ảnh và tệp âm thanh

(a) Một ảnh có độ phân giải $800\times 600$ và độ sâu màu $24$ bit. Tính cỡ tệp theo megabyte. (b) Một đoạn âm thanh dài $30$ giây, tần số lấy mẫu $44\,100$ Hz, độ phân giải mẫu $16$ bit. Tính cỡ tệp theo megabyte. (c) Nêu hai cách giảm cỡ tệp ảnh và cái giá của mỗi cách.

Giải.

(a) Cỡ tệp ảnh.

$$\text{cỡ tệp}=800\times 600\times 24=11\,520\,000\ \text{bit}$$

Đổi sang byte (chia $8$):

$$\frac{11\,520\,000}{8}=1\,440\,000\ \text{byte}$$

Đổi sang megabyte (chia $1\,000$ hai lần):

$$\frac{1\,440\,000}{1\,000\,000}=1{,}44\ \text{MB}$$

(b) Cỡ tệp âm thanh.

$$\text{cỡ tệp}=44\,100\times 16\times 30=21\,168\,000\ \text{bit}$$$$\frac{21\,168\,000}{8}=2\,646\,000\ \text{byte}=2{,}646\ \text{MB}$$

Lưu ý chung cho cả hai phép tính. Công thức cho kết quả tính bằng bit, nên bước chia cho $8$ là bắt buộc. Bỏ quên bước này làm kết quả lớn gấp tám lần — đây là lỗi mất điểm phổ biến nhất.

(c) Hai cách giảm cỡ tệp ảnh.

Cách một — giảm độ phân giải. Chẳng hạn từ $800\times 600$ xuống $400\times 300$. Số điểm ảnh giảm bốn lần nên cỡ tệp cũng giảm bốn lần, còn $0{,}36$ MB.

Cái giá: ảnh ít chi tiết hơn và trông vỡ hạt khi phóng to.

Cách hai — giảm độ sâu màu. Chẳng hạn từ $24$ bit xuống $8$ bit. Cỡ tệp giảm ba lần, còn $0{,}48$ MB.

Cái giá: số màu dùng được tụt từ hơn $16$ triệu xuống chỉ còn $256$, nên các vùng chuyển màu mượt sẽ bị rạn thành từng dải.

Cách thứ ba — nén. Dùng nén mất dữ liệu như JPEG giảm được rất nhiều mà mắt thường khó nhận ra, nhưng bản gốc không khôi phục lại được.

Ví dụ — chọn đúng kiểu nén cho từng loại tệp

Với mỗi trường hợp, nêu nên dùng nén mất dữ liệu hay không mất dữ liệu và giải thích: (a) một tệp mã nguồn chương trình; (b) một bài hát để phát trực tuyến; (c) ảnh chụp X-quang dùng để chẩn đoán bệnh.

Giải.

Nguyên tắc chung: hỏi “có bit nào được phép mất không?” Không được mất bit nào → không mất dữ liệu. Chấp nhận mất chút chi tiết để đổi lấy tệp nhỏ hơn nhiều → mất dữ liệu.

(a) Mã nguồn chương trình → NÉN KHÔNG MẤT DỮ LIỆU.

Lý do. Trong mã nguồn, từng ký tự đều quan trọng. Mất hoặc đổi một dấu chấm phẩy, một dấu ngoặc là chương trình không chạy được.

Nén mất dữ liệu ở đây không có nghĩa gì cả: nó sẽ phá huỷ chính thứ cần bảo toàn. Nén không mất dữ liệu cho phép khôi phục lại y nguyên từng ký tự.

(b) Bài hát để phát trực tuyến → NÉN MẤT DỮ LIỆU.

Lý do. Ưu tiên hàng đầu là cỡ tệp nhỏ để truyền nhanh qua mạng và không tốn băng thông.

Nén mất dữ liệu như MP3 loại bỏ những tần số mà tai người ít có khả năng nghe ra nhất, nên nó giảm cỡ tệp rất nhiều mà người nghe bình thường khó phân biệt được.

Việc không khôi phục lại được bản gốc là chấp nhận được, vì người nghe chỉ cần nghe chứ không cần chỉnh sửa bản gốc.

(c) Ảnh X-quang chẩn đoán bệnh → NÉN KHÔNG MẤT DỮ LIỆU.

Lý do. Đây là trường hợp nguy hiểm nhất nếu chọn sai.

Nén mất dữ liệu loại bỏ những chi tiết mà mắt người ít có khả năng nhận ra — nhưng đó chính là loại chi tiết mà bác sĩ đang tìm: một vết nứt xương rất mảnh, một khối u giai đoạn sớm.

Thuật toán nén không biết chi tiết nào có ý nghĩa y khoa; nó chỉ biết chi tiết nào ít nổi bật về mặt thị giác. Mất đúng những chi tiết đó có thể dẫn tới chẩn đoán sai.

Vì thế phải dùng nén không mất dữ liệu, chấp nhận tệp lớn hơn.

Nhận xét. Hai câu (b) và (c) đều là tệp đa phương tiện, nhưng câu trả lời ngược nhau — vì thứ quyết định không phải loại tệp mà là hậu quả của việc mất chi tiết.

Bẫy hay mất điểm — Nhầm độ phân giải với độ sâu màu, và bỏ một trong hai ra khỏi công thức cỡ tệp. Độ phân giảisố điểm ảnh (rộng $\times$ cao); độ sâu màusố bit dùng cho mỗi điểm ảnh. Công thức cần cả ba thừa số: rộng $\times$ cao $\times$ độ sâu màu. Bỏ quên độ sâu màu làm kết quả nhỏ đi nhiều lần — với ảnh $24$ bit thì nhỏ đi đúng $24$ lần. Bẫy thứ hai, và là lỗi mất điểm phổ biến nhất của cả chương: quên chia cho $8$. Công thức cho kết quả tính bằng bit, còn đề thường hỏi byte, kB hay MB. Quên bước này làm đáp số lớn gấp tám lần. Ký hiệu cũng phân biệt: chữ b thường là bit, chữ B hoa là byte. Bẫy thứ ba: nghĩ nén không mất dữ liệu chỉ là “nén ít hơn”. Khác biệt không phải mức độ mà là bản chất: không mất dữ liệu thì khôi phục lại được y nguyên, còn mất dữ liệu thì bản gốc biến mất vĩnh viễn.
Phải nhớ — ASCII đủ cho tiếng Anh; Unicode bao mọi hệ chữ viết nhưng tốn nhiều bit hơn. Ảnh: độ phân giải là số điểm ảnh, độ sâu màu là số bit mỗi điểm, và $n$ bit cho $2^n$ màu. Cỡ tệp ảnh $=$ rộng $\times$ cao $\times$ độ sâu màu; cỡ tệp âm thanh $=$ tần số lấy mẫu $\times$ độ phân giải mẫu $\times$ thời lượng — cùng một khuôn ba thừa số, và kết quả tính bằng bit nên phải chia $8$. Nén không mất dữ liệu khôi phục được y nguyên (mã hoá độ dài chuỗi); nén mất dữ liệu xoá vĩnh viễn nhưng giảm được nhiều hơn hẳn.

Đọc xong rồi — làm thử ngay

Bài tập của chương Data Representation gồm 14 câu trắc nghiệm và 5 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.

Làm bài tập chương →