Thông tin (side infomation)

Một phần của tài liệu Âm thanh số Chuẩn MPEG 1 Layer III Phân tích và ứng dụng (Trang 38 - 73)

I. GIẢI MÃ MP3 (MP3 DECODING)

b.Thông tin (side infomation)

Phần thông tin chứa thông tin cần thiết để giải mã dữ liệu chính như : lựa chọn bảng Huffman, hệ số tỉ lệ, các thông số lượng tử hoá lại và sự lựa chọn cửa sổ.

Thông tin phụ dài 17 byte ở kênh đơn, 32 byte ở kênh đôi.

Main data begin: Điểm bắt chứa những dữ liệu chính của khung SI granules 0 : thông tin về frame ở vị trí thứ 0

SI granules 1 : thông tin về frame ở vị trí thứ 1

(1): Bit dùng riêng ( private bits) do người sử dụng định nghĩa. (2): Thông tin về việc lựa chọn hệ số tỉ lệ.

Main data

c.

Dữ liệu chính (main data)

Chứa những thông tin về hệ số tỉ lệ (scale factor), mẫu subband được

mã hoá (coded subband samples), dữ liệu hỗ trợ (auxiliary data). Phần dữ liệu chính chứa hệ số tỉ lệ mã hoá và dòng tần số mã hoá Huffman, chiều dài phụ thuộc vào tốc độ bit và chiều dài của dữ liệu phụ.

Chiều dài của phần hệ số tỉ lệ phụ thuộc vào hệ số tỉ lệ có được sử dụng lại hay không và tương tự đối với chiều dài cửa sổ (dài hay ngắn). Hệ số tỉ lệ được sử dụng trong bộ lượng tử hoá của mẫu.

Yêu cầu bit mã hoá Huffman biến đổi theo thời gian trong suốt tiến trình mã hoá. Định dạng tốc độ bit biến đổi có thể được sử dụng để xử lý điều này nhưng tốc độ bit phù hợp thì thường yêu cầu cho một ứng dụng.

Bộ mã hoá thực hiện trên khối dữ liệu dài 1152 mẫu. Khi chiều dài dữ liệu mã hoá nhỏ hơn trung bình số bit cần thiết, bộ mã hoá đưa phần kích thước dư ra này vào bộ dự trữ ( reservoir). Khi kích thước bộ mã hoá quá lớn sẽ mượn lại những bit dư này. Bộ mã hoá chỉ có thể mượn bit dư từ khung trước nó (past frame), không thể mượn được từ khung sau nó (future frame) . Vì vậy có một kỹ thuật dự trữ bit được định nghĩa mà không cho phép sử dụng kho dữ liệu chính trong một khung để được dùng trong 2 khung liên tiếp nhau :

Trong ví dụ này frame 1 sử dụng bit từ frame 0 và frame 1. Frame 2 sử dụng bit từ frame1. Frame 3 yêu cầu cao hơn sử dụng bit từ frame1, 2và 3. Cuối cùng frame 4 chỉ sử dụng bit tại frame 4.

Tham số “main _data_begin” trong thông tin cho biết những bit từ khung phía trước cần thiết hay không. Tất cả dữ liệu cho một khung được lưu trữ trong khung trước đó. Kích thước lớn nhất của kho lưu trữ bit là 511 byte.

d. Dữ liệu phụ (Ancillary Data)

Phần dữ liệu này do người dùng định nghĩa , không cần thiết để giải mã dữ liệu audio.

2. Giải mã Huffman

Để giải mã Huffman chúng ta bắt đầu đi từ gốc của cây nhị phân Huffman. Nếu gặp bit “1” thì đi sang bên phải, ngược lại gặp bit “0” thì sang bên trái cho đến khi gặp nút lá thì dừng.

Ví dụ ta có 1 chuỗi bit “00110”, bit đầu là “0” nên ta đi sang trái đến nút F4. Vì chưa là nút lá nên tiếp tục bit thứ 2 (cũng đi sang trái) đến nút F2 , bit thứ 3 là “1” nên chuyển hướng sang phải. Tại đây vì đến nút lá nên xuất ra kí tự “i”.

Tiếp tục giải mã 2 bit còn lại “10”, trước tiên vì là bit “1” nên ta đi sang phải đến nút F3, tiếp tục bit “0” đi sang trái đến nút lá => xuất ra ký tự “a”.

• Thực thi quá trình giải mã

byte huffman_decode_byte ( pointer to binary tree node )

{

//trước tiên chúng ta kiểm tra xem nút hiện tại là nút lá hay nút trung gian //nếu là nút trung gian thì kiểm tra chiều dài bit tìm kiếm phải nhỏ hơn 8 if( node->value != 256 ) { // Nếu là nút lá thì xuất ra ký tự return node->value; } else {

//chúng ta đang đúng tại node trung gian ( fictive node), tiếp tục đi sang //phải hay trái tuỳ thuộc vào bit kế tiếp

//trả về giá trị byte được giải mã if( get_bit() == 0)

{

// đi sang bên trái

return ( huffman_decode_byte( node->left_node ) ); }

else { (adsbygoogle = window.adsbygoogle || []).push({});

// đi sang bên phải

return ( huffman_decode_byte( node->right_node ) ); }

} }

3. Lượng tử hoá lại (requantization)

Khối lượng tử hoá lại sử dụng hệ số tỉ lệ để biến đổi giá trị mã hoá Huffman isi thành giá trị phổ xri sử dụng công thức sau:

C: dải toàn cục và dải hệ số tỉ lệ phụ thuọâc hệ số đạt được từ thông tin phụ và hệ số tỉ lệ.

4. Sắp xếp lại thứ tự ( reordering)

“Bộ lượng tử hoá lại” phải sắp xếp lại thứ tự theo băng hệ số tỉ lệ sử dụng cửa sổ ngắn. Trong ví dụ sau đây có 1 băng gồm 18 mẫu chứa 3 cửa sổ của 6 mẫu.

Những cửa sổ ngắn được sắp xếp lại theo thứ tự trong bộ mã hoá để mã hóa Huffman hiệu quả hơn, bởi vì mẫu gần nhau (sample close) trong miền tần số( thấp hoặc cao) có cùng giá trị.

5. Giải mã stereo

Dòng bit nén có thể hổ trợ 1 hoặc 2 kênh audio trong 4 chế độ: • Một chế độ “monophonic” cho kênh âm thanh đơn.

• Một chế độ“dual_momophonic” cho 2 kênh âm thanh độc lập.

• Một chế độ“stereo” cho những kênh “stereo” mà những bit dùng chung nhưng không được sử dụng mã hoá joint_stereo.

• Một chế độ “joint_stereo” mà có những thuận lợi về mối tương quan giữa những kênh stereo (MS stereo) hoặc không thích hợp đối với những pha khác nhau giữa các kênh (cường độ stereo) hoặc cả hai.

Trong chế độ kênh trái và phải được chuyển đổi vào tổng (M), sai phân (difference) (S) của 2 kênh. Trong đó tổng tín hiệu có nhiều thông tin hơn tín hiệu sai phân. Để giải mã kênh trái và phải có thể được tái tạo lại bằng công thức:

Giải mã âm thanh (stereo)

Trong đó: i là chỉ số dòng tần số.

Và việc xử lý MS stereo là nén không tổn thất.

b. Giải mã cường độ stereo

Bộ giải mã tái tạo lại kênh trái và phải dựa trên tín hiệu đơn L+R (L‘ i) được chuyển đổi trong kênh trái và sự cân bằng mà được chuyển đổi thay vì dùng hệ số tỉ lệ (isratio sfb ) cho kênh phải.

Giải mã joint stereo

Trong đó : ispossfb : giới hạn trong khoảng 0 ->6. Vì thế tan() được thay thế bằng bảng có sẳn.

6. Giảm biệt danh (Alias Redution)

Giảm biệt danh được yêu cầu để loại bỏ hiệu ứng biệt danh của khối lọc đa pha trong bộ mã hoá (không ứng dụng cho granule sử dụng khối ngắn). Giảm biệt danh gồm 8 buttrefly cho mỗi subband.

Mỗi butterfly chống biệt danh luân phiên (rotation) được áp dụng đến 1 trong 8 cặp thiết kế của dòng quang phổ. Nó không ảnh hưởng hoàn toàn đến thuộc tính tái cấu trúc (reconstructor) của khối lọc, nhưng cải tiến hệ số nén của bộ mã hoá bằng cách cố gắng chứa năng lượng trong mỗi subband. Một granule ánh xạ đến miền thời gian - tần số của ½ khung dữ liệu vào. Không giống như vùng thời gian - tần số thông thường nó được sắp xếp lại cho giảm biệt danh , đầu tiên sắp xếp trong miền tần số và sau đó tiếp tục trong miền thời gian. Vì vậy 18 mẫu trong miền thời gian của mỗi subband được nhóm lại với nhau. Butterfly được áp dụng cho mỗi mẫu luân phiên trong mỗi subband luân phiên.

Bộ mã hoá đã gỡ bỏ điểm này để đảo ngược MDCT để tái cấu trúc mẫu subband trong hệ thống giảm alias cho tái cấu trúc bằng khối lọc tổng hợp. Bộ giải mã butterfly cũng tương tự trừ phi có sự biến đổi trong kí hiệu.

7. IMDCT

IMDCT( Inverse Modified Discrete Cosine Transform)biến đổi vạch phổ (Xk) thành khối lọc đa pha mẫu subband (Si ) (adsbygoogle = window.adsbygoogle || []).push({});

Biến đổi IMDCT n=12 : khối ngắn

n=36: khối dài.

Trong khối dài IMDCT xuất ra 36 giá trị cho 18 giá trị vào. Đầøu xuất được lấy cửa sổ phụ thuộc vào kiểu khối (bắt đầu, lượng trung bình, kết thúc), nửa đầu (first haft) được chồng lên nhau, nửa sau được lưu vào khối.

Đối với khối ngắn 3 lần biến đổi được thực hiện để sinh ra 12 giá trị xuất. Ba vector được lấy cửa sổ và chồng lên nhau. Có 6 giá trị “0” nối vào vector kết quả cho nên vector có độ dài 36.

8. Khối lọc đa pha tổng hợp ( Synthesis Polyphase Filterbank)

Khối lọc đa pha tổng hợp biến đổi 32 khối subband của 18 mẫu miền thời gian trong mỗi granule đến 18 khối của 32 mẫu PCM. Khối lọc hoạt động trên 32 mẫu tại cùng 1 thời điểm, 1 trong số khối subband được minh hoạ theo hình dưới đây:

32 giá trị subband được biến đổi thành 64 giá trị vector V sử dụng biến thể của IMDCT (ma trận). Vector V được đặt vào hàng đợi FIFO lưu trữ 16 vector cuối cùng.

Vector U được tạo ra từ 32 khối thành phần trong FIFO, cửa sổ D được áp vào vector U để sinh ra vector W. Mẫu tái tạo lại sẽ thu được từ vector W bằng cách phân tích nó thành 16 vector có kích cỡ 32 và tính tổng các vector đó.

II. NHÌN CHUNG VỀ HIỆU QUẢ CÁC GIẢI THUẬT GIẢI MÃ MP3 MP3

• Định nghĩa :

Bộ giải mã Huffman chuyển đổi các mã có chiều dài thay đổi trong dòng bit thành các vạch phổ. Giải mã dùng 32 bảng cố định từ chuẩn ([1]) chứa thông tin về quá trình mã hóa đã được tiến hành như thế nào.

Dòng bit trong vùng thông tin được dùng để chọn lựa các bảng cho các phần khác nhau của phổ tần số.

Có một cơ chế đặc biệt trong bộ giải mã dùng cho việc giải mã các giá trị lớn.

Từ mã có chiều dài thay đổi dài nhất cho mọi bảng là 19 bit. Chỉ có 16 bảng khác nhau được định nghĩa theo chuẩn .

• Tìm kiếm cây nhị phân :

Các bảng giải mã Huffman có thể chuyển thành trong các cây nhị phân. Mỗi cây thể hiện một bảng cụ thể. Những cây được duyệt qua theo từng bit trong dòng bit , trong đó ‘0’ đi bên ‘trái’ và ‘1’ đi bên ‘phải’.

Toàn bộ từ mã được giải mã một cách đầy đủ khi gặp một nút lá. Các nút lá chứa các giá trị của đường phổ .

• Bảng tìm kiếm trực tiếp (Direct Table Lookup) :

Đối với phương pháp bảng tìm kiếm trực tiếp, bộ giải mã sử dụng các bảng lớn. Chiều dài của mỗi bảng là 2b , trong đó b là số bit lớn nhất trong từ mã dài nhất của bảng đó .

Để giải mã một từ mã, bộ giải mã đọc “b” bit, các bit này được dùng như một chỉ số trực tiếp trỏ vào bảng. Trong bảng, mỗi mục chứa một giá trị đường phổ và thông tin về chiều dài thực của từ mã. • Giải mã theo cụm (Clustered Decoding) :

Phương pháp giải mã theo cụm kết hợp phương pháp cây nhị phân và bảng tìm kiếm trực tiếp .

Một số bit cố định (ví dụ như 4) được đọc từ dòng bit và được dùng như một chỉ số tìm kiếm trong một bảng. Mỗi phần tử bảng chứa một “miss” bit hay một “hit” bit cho biết liệu từ mã đã được giải mã đầy đủ chưa .

Nếu một “hit” bit được phát hiện giá trị được đọc từ phần tử bảng cũng như số bit mà được dùng cho từ mã. Nếu là “miss” bit giải mã tiếp tục bằng cách dùng thông tin từ phần tử bảng để xác định cần bao nhiêu bit thêm nữa để đọc từ dòng bit dùng cho chỉ số tiếp theo, cũng như địa chỉ bắt đầu của bảng kế tiếp được dùng.

2 . Bộ lượng tử hóa lại (Requantizer)

• Định nghĩa :

Công thức của lượng tử hóa lại mô tả việc xử lý để định tỉ lệ lại đối với dữ liệu đã được mã hóa Huffman. Độ lợi toàn cục và độ lợi của khối con ảnh hưởng tất cả các giá trị trong một cửa sổ thời gian. Ngoài ra, các hệ số tỉ lệ và cờ hiệu chỉnh độ lợi trong mỗi băng hệ số tỉ lệ .

Sau đây là phương trình lượng tử hóa lại của các cửa sổ ngắn. Giá trị được mã hóa Huffman tại chỉ số tại bộ đệm thứ i được gọi là isi , ngõ vào của khối sắp thứ tự lại thứ i được gọi là xri : Dùng cho khối ngắn :

A=global_gain [gr]-210 –(8)*subblock_gain[window][gr] B=scalefac_multiplier*scalefac_s[gr][ch][sfb][window]

Cho khối dài, công thức là: (adsbygoogle = window.adsbygoogle || []).push({});

A=global_gain [gr]-210

B=scalefac_multiplier*scalefac_l[gr][ch][sfb]+ preflag[gr]*pretab[sfb]

preflag[sfb], được sử dụng cho việc khuyếch đại băng hệ số tỉ lệ ở tần số cao. Giá trị 210 là một hằng số cần để chia tỉ lệ các mẫu. Giá trị cao nhất của isi là 8206, không là 8191 như đã định bởi chuẩn [1]. Nguyên nhân là do bộ giải mã cấp thêm 15 vào giá trị của linbits. Linbits có thể dài 13 bit do đó có gía trị cao nhất là

213 – 1 = 8191 cho mỗi phần linbits . • Thực hiện :

Cả hai hàm mũ isi4/3 và 2A,B rất khó tính nếu dùng hàm thư viện toán học chuẩn pow(). Ngay cả khi dùng đơn vị xử lý dấu chấm động (FPU) hay DSP việc tính toán cũng không phải đơn giản .

Hàm isi4/3 trong bộ lượng tử hóa lại chấp nhận 8207 giá trị khác nhau. Bảng tìm kiếm sẽ nhanh, nhưng đòi hỏi khoảng 256 kbits bộ nhớ, chúng ta sẽ tìm một thuật toán được đề cập trong mục phương pháp Newton dưới đây.

Hàm 2 0.25 * A * 2 -B không chấp nhận hơn 384 giá trị khác nhau.

Điều đó có nghĩa là bảng tìm kiếm sẽ là sự lựa chọn tốt nhất, lưu ý rằng bảng có thể tạo ra thậm chí nhỏ hơn (196 giá trị ) bằng cách làm tròn giá trị nhỏ (< 2-35) khi hàm giảm xuống gần zero bởi vì không ảnh hưởng đến kết quả cuối cùng.

• Tiệm cận dựa trên bảng y=x4/3( Table-based Approach for y=x4/3): Bảng tìm kiếm cho hàm y=x4/3 có thể thực hiện dễ dàng. Bảng này có thể gộp vào như một phần của dữ liệu khởi tạo, hoặc nó có thể được tạo ra tại thời điểm thực thi nếu hàm pow() có sẵn .

Nếu có đủ bộ nhớ bảng tìm kiếm có thể bao gồm giá trị âm của isi . Điều này sẽ tăng tốc độ việc giải mã .

• Phương pháp Newton cho y=x4/3 (Newton’s Method for y=x4/3): Hàm y= x4/3 được viết lại thành y3-x4=0. Dạng này có thể thích hợp với phương pháp Newton tìm kiếm nó sẽ cho giá trị y xấp xỉ với x4/3.

Kết quả của hàm được tính thông qua việc lặp đi lặp lại quá trình giảm sai số | y-x4/3| :

Công thức được viết lại thành dạng thứ hai để tránh sự ước luợc dấu chấm động.

Giá trị bắt đầu là y0 của công thức lặp ảnh hưởng đến số lần lặp cần thiết để đạt được độ chính xác mong muốn. Với ứng dụng, độ chính xác lớn hơn 16 bits xem như có hiệu quả. Một giá trị khởi đầu tốt của y0 được tính toán thông qua hàm đa

thức y0 = a0 + a1 * x + a2 * x2 . Hàm này được thiết kế tương tự với y=x4/3 càng gần càng tốt với 0< x < 8207.

4. Phép biến đổi cosin rời rạc cải tiến đảo ngược (IMDCT)

• Định nghĩa :

IMDCT biến đổi các mẫu subband từ miền tần số sang miền thời gian. Biểu thức phân tích của IMDCT là :

Giá trị của n trong biểu thức có thể là 12 cho khối ngắn hoặc là 36 cho khối dài.

Đầu ra từ IMDCT phải được lấy cửa sổ với một hàm cố định được nạp chồng với dữ liệu từ khối trước.

• Thực hiện :

Thao tác IMDCT thì rất khó tính toán để tiến hành như được định nghĩa bởi chuẩn. Một bảng tìm kiếm có thể được dùng để thay thế cho hàm cos() , nhưng vòng lặp bên trong phương trình vẫn còn đòi hỏi việc xử lý. Thay vì chúng ta sẽ khảo sát giải thuật nhanh hơn cho IMDCT ở mục dưới.

Các hàm cửa sổ được thay thế bằng một bảng tìm kiếm 4 kbits.

• Tính toán trực tiếp ( Direct calculation) :

Tự tính toán trực tiếp IMDCT dễ thực hiện bởi vì nó chỉ bao gồm hai vòng lặp for đơn giản. Một bảng tìm kiếm có thể được dùng để thay thế cho hàm cos() gọi bên trong vòng lặp. • Thực hiện IMDCT nhanh ( Fast IMDCT implementation ):

Marovich đã nêu ra trong [2] rằng phương pháp của Konstantinides về việc tăng tốc độ tính toán của ma trận băng lọc đa pha cũng có thể dùng cho IMDCT 12 và 36 điểm :

Kết quả N điểm tương đồng với IMDCT N điểm như được định nghĩa trong chuẩn.

Điều này chỉ cần tính 6 và 8 điểm tương ứng. Những điểm này

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Âm thanh số Chuẩn MPEG 1 Layer III Phân tích và ứng dụng (Trang 38 - 73)