TRÌNH TỰ GIẢI MÃ MP3

Một phần của tài liệu Thiết kế và thực hiện chương trình đọc file âm thanh định dạng MP3 (Trang 58)

Quá trình giải mã âm thanh số MP3 là quá trình chuyển đổi dòng dữ liệu đầu vào MP3 thành dòng dữ liệu PCM đầu ra. Mỗi khung của tập tin MP3 được tạo thành từ 1152 mẫu và luôn có phần tiêu đề khung liên kết trong tập tin MP3. Nội dung trong phần tiêu đề và phần thông tin của mỗi khung rất quan trọng, nó cung cấp dữ liệu cần thiết để thực hiện quá trình giải mã.

Điều đầu tiên và quan trọng nhất trong quá trình giải mã là vấn đề đồng bộ hóa của bộ giải mã đối với dòng dữ liệu đầu vào. Đồng bộ hóa là quá trình tìm kiếm vị

trí tiêu đề đầu tiên và các phần tiếp theo. Một khi điều này được thực hiện, việc tổ

chức các dữ liệu được mã hóa hoàn toàn thực hiện được và quá trình giải mã diễn ra suôn sẻ. Sơđồ khối và lược đồ trình tự giải mã dưới đây minh họa cho quá trình giải mã: Hình 20:Sơđồ khối trình tự giải mã Mở gói khung (giải mã dòng dữ liệu) Tái tạo lại cấu trúc (lượng tử hóa lại) Ánh xạ ngược (dải lọc băng đa pha) Các mẫu PCM đầu ra Dòng dữ liệu đầu vào

Lun văn thc s Trn Th Bích Hng

Trình tự giải mã bao gồm ba quá trình chính:

• Mở gói khung (giải mã dòng dữ liệu)

• Tái tạo lại cấu trúc (lượng tử hóa lại)

• Ánh xạ ngược (dải lọc băng đa pha)

Để mở gói khung đòi hỏi phải thực hiện việc tìm kiếm các phần tiêu đề của dòng dữ liệu bit, giải mã phần thông tin, giải mã các hệ số tỷ lệ và giải mã dữ liệu Huffman. Để tái tạo lại khối đòi hỏi việc lượng tử hóa lại và sắp xếp lại quang phổ. Và để ánh xạ nghịch đảo yêu cầu quá trình xử lý âm thanh joint stereo, giảm hiệu

ứng Alias, quá trình tổng hợp thông qua dải lọc băng đa pha ngược IMDCT, cuối cùng cho ra các mẫu PCM.

Lun văn thc s Trn Th Bích Hng

Hình 21:Lược đồ trình tự giải mã MP3

Bắt đầu Nhận dòng dữ liệu bit, Xác nhận phần tiêu đề Giải mã phần thông tin

Giải mã các hệ số tỷ lệ

Giải mã các mẫu

Lượng tử hóa lại các mẫu Sắp xếp lại

Giải mã Joint Stereo

Giảm hiệu ứng Alias

IMDCT

Dải lọc băng

Các mẫu đầu ra PCM

Lun văn thc s Trn Th Bích Hng

Trong bộ giải mã MP3 đề tài đã giải quyết bốn bước đầu trong quá trình giải mã MP3: - Nhận dòng dữ liệu bit, xác nhận phần tiêu đề. - Giải mã phần thông tin. - Giải mã các hệ số tỷ lệ. - Giải mã các mẫu. II. SƠĐỒ KHỐI BỘ GIẢI MÃ MP3

Dòng dữ liệu đầu vào định dạng âm thanh nén MP3 đi qua bộ giải mã MP3 cho

đầu ra là dòng dữ liệu định dạng âm thanh số không nén PCM.

Khối đồng bộ (Synchrolizer): xác định khung, tách các phần tiêu đề khung, mã kiểm tra lỗi CRC, phần thông tin. Chúng xử lý thông tin trong phần thông tin và phần tiêu đềđểđưa ra các thông tin cần thiết phục vụ cho các khối tiếp theo .

Khối giải mã Huffman : giải mã các ký tự biểu diễn các line tần số dựa trên 32 bảng mã Huffman khác nhau. Ngõ ra của bộ giải mã Huffman là 576 lines tần số có

Khối kiểm tra lỗi đồng bộ Giải mã dữ liệu Huffman Giải mã Huffman phần thông tin Giải mã các hệ số tỷ lệ Lượng tử hóa lại Sắp xếp lại Các bit mã Huffman Phần thông tin Huffman Phần thông tin hệ số tỷ lệ Dòng dữ liệu bit hóa stereo Giảm hiệu ứng Alias Giảm hiệu ứng Alias IMDCT Nghịch đảo tần số IMDCT Nghịch đảo tần số Dải lọc đa pha tổng hợp Dải lọc đa pha tổng hợp Kênh phải Kênh trái PCM

Lun văn thc s Trn Th Bích Hng

giá trị nguyên. Các line tần số này được chia thành 3 phần : Big_values, Count1, rzero.

Hình 22:Ngõ ra của bộ giải mã Huffman

Khối lượng tử hóa lại: lượng tử hóa lại các giá trị line tần số tự ngõ ra của khối Huffman sử dụng các hệ số tỷ lệ (lấy từ phần thông tin).

Khối sắp xếp lại : sắp xếp lại các line tần số, phụ thuộc loại cửa sổ sử dụng. Khối stereo : giải mã kênh khi chế độ kênh sử dụng là stereo, joint stereo, làm nhiệm vụ tách các tín hiệu sau khi được sắp xếp lại thành 2 kênh (trái và phải).

Khối giảm hiệu ứng Alias: giảm sự chồng lấn phổ do sử dụng các bộ lọc không lý tưởng ở bộ mã hoá.

Khối biến đổi ngược cosin rời rạc IMDCT: biến đổi ngược côsin rời rạc cải biên, biến đổi tín hiệu âm thanh từ miền tần số sang miền thời gian.

Khối lọc đa pha tổng hợp : làm nhiệm vụ biến đổi biến đổi 32 băn con (mỗi băng con chứa 18 mẫu tần sốở miền thời gian) thành 32 mẫu PCM đồng thời.

III.TRIỂN KHAI

Quá trình giải mã MP3 đã được đề cập chi tiết ở chương trước. Trong phần triển khai bộ giải mã MP3 đề tài tập trung vào quá trình giải mã huffman, đi sâu giải quyết hai khối: khối đồng bộ (Synchrolizer), khối giải mã huffman.

III.1. Quá trình giải mã huffman

Quá trình giải mã Huffman là quá trình xử lý dòng dữ liệu MP3 đầu vào, đưa ra giá trị (các mức năng lượng) cho các line tần số. Quá trình này bao gồm hai khối:

Lun văn thc s Trn Th Bích Hng

1. Khối đồng bộ (Synchrolizer)

1.1. Chc năng

Chức năng của khối đồng bộ (Synchrolizer) là nhận dòng dữ liệu vào là chuỗi bit MP3 rồi tiến hành xác định các thông tin về một khung, bóc tách dữ liệu chính truyền cho khối Huffman.

Khối đồng bộ phân tích các thông tin trong phần tiêu đề. Gửi tới bộ giải mã huffman các thông tin về: biên độ, tần số lấymẫu, tốc độ bit, chếđộ làm việc…..

Khối đồng bộ đọc các thông tin thực trong phần thông tin chuyển tới khối giải mã huffman.

1.2. Quá trình

Dòng dữ liệu MP3 đầu vào bao gồm nhiều phần nhỏđược gọi là các khung. Các khung có mối liên hệ với nhau, dữ liệu của khung này có thể nằm ở các khung trước

đó, không thể cắt rời các phần. Khi đọc dòng dữ liệu đầu vào, trước hết khối đồng bộ

phải xác nhận sự đồng bộ và kiểm tra lỗi của tất cả khung rồi thực hiện bóc tách dòng dữ liệu.

Tập tin đầu vào MP3 hỗ trợ tốc độ bit biến đổi, nghĩa là các tốc độ bit thấp hơn

được sử dụng ở một số nơi trong dòng dữ liệu mà không làm giảm chất lượng âm thanh. Do đó các tốc độ bit thấp hơn được sử dụng trong các khung, nó cho phép tỷ

số nén cao hơn mà vẫn đảm bảo về mặt chất lượng tín hiệu âm thanh.

Các thông tin trong phần tiêu đề là cơ sở để khối đồng bộ xác định được sự đồng bộ của khung, lỗi dữ liệu. Phần tiêu đề khung gồm bốn byte hoặc 32 bit, cấu trúc phần này đã được đưa chi tiết trong chương I. Quá trình bắt đầu của khung phải

được tìm thấy trước khi bắt đầu quá trình giải mã. 12 bit đầu tiên của khung được gọi là từ mã đồng bộ hóa gồm 12 số liên tiếp của hệ nhị phân (1111 1111 1111) hoặc số

hexa là (F FF) phải được tìm thấy để cho biết sự bắt đầu của phần tiêu đề như trong hình dưới. Các mô hình này có thể tồn tại trong bất kỳ một phần của khung. Các bộ

giải mã sẽđọc thông tin từ CRC để xác nhận nếu nó là một tiêu đề mới, hoặc một số

Lun văn thc s Trn Th Bích Hng

Các bit còn lại chứa thông tin về tốc độ bit, phiên bản MPEG, tần số lấy mẫu... (được

đưa ra chi tiết ở phần cấu trúc tiêu đề trong chương I).

Các khung đều được kiểm tra lỗi nhờ các bit kiểm tra CRC. CRC dài 16 bit, nằm ngay sau phần tiêu đề. Sau khi các bit dữ liệu CRC đi vào, chiều dài của của khung có thể được tính toán để đọc tiếp các tiêu đề khác. Đây là một phương pháp hay để kiểm tra sự hợp lệ của tập tin MP3.

Sau đó khối đồng bộ đọc thông tin trong phần thông tin để tiến hành bóc tách dòng dữ liệu chính làm 3 phần: phần thông tin, các hệ số tỷ lệ, dữ liệu, đưa tới khối giải mã huffman.

2. Khối Huffman

2.1. Chc năng

Chức năng của khối Huffman là nhận chuỗi bit dữ liệu chính (main_data) và các thông tin, dữ liệu về số tỷ lệ từ khối đồng bộđể tiến hành giải mã:

- Giải mã phần thông tin

- Giải mã dữ liệu Huffman đã được mã hóa - Giải mã các hệ số tỷ lệ

Đưa tới khối lượng tử hoá lại (Requantilizer).

2.2. Quá trình

Các mẫu lượng tử hóa của tập tin MP3 sử dụng các mẫu mã hóa độ dài biến đổi. Trong quá trình mã hóa Huffman, mã Huffman sinh ra từ các biểu tượng đầu vào sử

dụng dòng mã ít suy giảm. Mã Huffman được ánh xạ dựa trên các thống kê chuỗi

đầu vào. Biểu tượng xảy ra thường xuyên hơn được mã hoá với một mã ngắn, trong khi đó các biểu tượng xảy ra ít thường xuyên hơn được mã hoá với từ mã dài hơn.

Lun văn thc s Trn Th Bích Hng

Có 32 bảng Huffman được sử dụng để ánh xạ các bit mã Huffman với những biểu tượng x và y. Bộ giải mã Huffman so sánh các bit đầu vào mã Huffman với 32 bảng mã Huffman để tìm một kết quả đại diện cho các bit mã Huffman. Các bảng mã Huffman được xác định trước căn cứ vào số liệu thống kê của tiêu chuẩn ISO 11172-3.

a. Giải mã phần thông tin

Phần thông tin gồm 17 byte cho một kênh và 32 byte cho hai kênh. Các thông tin trong phần này giúp bộ giải mã các dữ liệu chính xác. Cấu trúc cơ bản của phần thông tin (xem chi tiết ở chương I) được đưa ra trong hình sau:

Thông tin bắt đầu dữ liệu chính (Main_data_begin) Các bit riêng (Private_bits) Scfsi Thông tin của gr0 Side_Info_gr0 Thông tin của gr1 Side_Info gr1

9 bit 5 bit /3 bit 4 bit / 8 bit 59 bit / 118 bit 59 bit / 118 bit

Cấu trúc chi tiết của phần thông tin thể hiện trong bảng sau (chi tiết chức năng, nhiệm vụ của từng trường xem trong chương I):

Tên các trường Một kênh Hai kênh

Bắt đầu dữ liệu chính (Main_data_begin) 9 9

Các bít riêng (Private_bits) 5 3

Share (Scfsi) 4 4+4

Tổng cộng 18 20

Thông tin cho grannule 1

Part2_3_length 12 12+12 Big_values 9 9+9 Global_gain 8 8+8 Scalefac_compress 4 4+4 Window_switching 1 1+1 Tổng cộng 34 68

Cho các khối thông thường (nomal blocks)

Bảng lựa chọn (table_select) 3*5 3*5 + 3*5

Region0_count 4 4+4

Lun văn thc s Trn Th Bích Hng

Cho các khối bắt đầu, khối dừng, khối ngắn (start, stop, short block)

Loại khối (block type) 2 2+2

Cờ khối hỗn hợp (mixed block flag) 1 1 + 1

Bảng lựa chọn cho hai vùng 2*5 2*5 + 2*5

Hệ số khuếch đại của các khối con (sublock gain) 3*3 3*3 + 3*3

Tổng cộng cho các khối hỗn hợp 22 44

Cờ (preflag) 1 2

Dải các hệ số tỷ lệ (scalefac_scale) 1 2

Bảng lựa chọn count1 (count1table_select) 1 2

Tổng cộng 3 6

Tổng cộng cho grannule 1 34+22+3 = 59 68+44+6 = 118 Tổng cộng cho grannule 2 34+22+3 = 59 68+44+6 = 118

Tổng số các bit 59*2+18 = 136 118*2+20 = 256

Tổng số các byte 17 32

Bảng trên cho ta một cái nhìn rõ ràng về việc tổ chức các trường thông tin trong phần thông tin cho cả chếđộ một kênh và hai kênh.

b. Giải mã dữ liệu Huffman

Dữ liệu chính trong dòng dữ liệu đầu vào được chia thành hai “grannule”. Mỗi “grannule” gồm 576 mẫu tần số với các giá trị nguyên. Như đã nói ở trên, 576 line tần số đầu ra chia thành 3 vùng: Big_values (vùng: vùng 0, vùng 1 vùng 2), count1 (quadruples) và rzero như trong hình dưới. Vùng Big_values chứa các line tần số

thấp nhất và được mã hoá với độ chính xác cao nhất với các giá trị khác nhau, từ -15 tới 15. Để giải mã các giá trị trong vùng big_values lớn hơn 15, một dãy thoát được thực hiện. Giá trị 15 được sử dụng như là mã thoát. Giá trị thoát được thêm vào các mã thoát. Các bảng Huffman cho biết số lượng bit để đọc mỗi dãy thoát và được gọi linbit.

Lun văn thc s Trn Th Bích Hng

Hình 23:Phân vùng dữ liệu tập tin MP3 cho một kênh

Khi tất cả các giá trị trong vùng big_values được giải mã. Bộ giải mã Huffman sẽ chuyển đến các phân vùng tiếp theo, vùng count1 được mã hoá với các giá trị 0, 1 hoặc -1. Các bit mã Huffman trong phân vùng này được giải mã bởi các giá trị

count1table_select được cung cấp bởi trường thông tin. Giải mã này sẽ được hoàn thành khi tất cả các bit mã Huffman được giải mã hoặc tất cả các giá trị lượng tử hóa

đại diện cho 576 line tần sốđã được giải mã, phụ thuộc vào điều kiện nào đến trước. Phân vùng cuối cùng, rzero sẽ đại diện cho các tần số cao nhất, chúng được loại bỏ

bằng cách mã hóa từ phần không thuộc dòng bit này. Khi có ít hơn 576 line tần số, bộ giải mã sẽđiền vào phân vùng cuối cùng với số không để bù đắp sự thiếu dữ liệu. Ngược lại nếu có nhiều bit mã Huffman để giải mã 576 line tần số, thì chúng được coi là bit nhồi (stuffing bits) và bỏđi.

Ranh giới các phân vùng được chỉ ra trong phần thông tin và được lựa chọn bởi các mô hình cảm nhận âm học trong quá trình mã hóa.

c. Giải mã các hệ số tỷ lệ

Mỗi grannule trong dòng dữ liệu bit, đầu tiên bao gồm các hệ số tỷ lệ và sau đó là các mẫu mã hóa Huffman. Việc chia sẻ các hệ số tỷ lệđã được kiểm tra trước khi

đọc các hệ số tỷ lệ. Chúng không được chia sẻ trong “granule” đầu tiên. Nếu cho phép chia sẻ các hệ số tỷ lệ, thì các hệ số tỷ lệ của “grannule” đầu tiên được sử dụng

Lun văn thc s Trn Th Bích Hng

cho “grannule” thứ 2. Khối ngắn trong “grannule” thứ nhất hoặc thứ 2 đều bị cấm chia sẻ.

Hầu hết các hệ số tỷ lệ của “grannule” 1 được sử dụng cho “grannule” thứ 2. Việc đọc hệ số tỷ lệ được thực hiện theo các băng tần số thấp slen 1 và các băng tần số cao len 2 (đã đưa ra ở chương I). Số lượng các bit để giải mã hệ số tỷ lệ gọi là part2_length và phụ thuộc vào loại khối được sử dụng trong “grannule”.

+ Nếu loại khối sử dụng trong “grannule” là loại 0, 1, 3, thì số lượng bit để giải mã hệ số tỷ lệđược tính theo công thức:

số lượng bit = 11*slen1 + 10*slen2

+ Nếu loại khối sử dụng trong “grannule” là loại 2, và cờ xác định khối hỗn hợp (mixed_block_flag) không được thiết lập thì số lượng bit để giải mã hệ số tỷ lệ được tính theo công thức:

số lượng bit = 18*slen1 + 18*slen2

+ Nếu loại khối sử dụng trong “grannule” là loại 2, và cờ xác định khối hỗn hợp (mixed_block_flag) được thiết lập thì số lượng bit để giải mã hệ số tỷ lệ được tính theo công thức:

số lượng bit = 17*slen1 + 18*slen2

III.2. Cấu trúc dữ liệu

Cấu trúc dữ liệu của quá trình giải mã Huffman bao gồm: - Cấu trúc dữ liệu cho khối đồng bộ (synchrolizer) - Cấu trúc dữ liệu cho khối giải mã huffman

1. Cấu trúc dữ liệu khối đồng bộ

Khối đồng bộ lấy dòng dữ liệu chính và các thông tin từ phần tiêu đềđưa tới khối huffman. Cấu trúc dữ liệu khối đồng bộ bao gồm:

- Phần tiêu đề

Lun văn thc s Trn Th Bích Hng

a. Phần tiêu đề

Cấu trúc dữ liệu phần tiêu đề gồm rất nhiều trường, cung cấp các thông tin quan trọng vềđồng bộ dòng dữ liệu, tốc độ bít, tần số lấy mẫu, phiên bản MPEG, vấn đề bản quyền tập tin…, mang các giá trị nguyên. Cấu trúc dữ liệu phần thông tin bao gồm:

- Chếđộ làm việc (mode) - Lớp (layer) - ID - Mã kiểm tra lỗi (CRC) - Tần số lấy mẫu (sampling) - Tốc độ bit (bit_rate) - Bản quyền (copyright)

- Tập tin gốc hay bản sao (original)

Một phần của tài liệu Thiết kế và thực hiện chương trình đọc file âm thanh định dạng MP3 (Trang 58)