Băng lọc phân tích (Analysis Filterbank)

Một phần của tài liệu Kỹ thuật mã hóa thụ cảm (Trang 28)

IV. MÃ HOÁ MP3 (MP3 ENCODING)

3.Băng lọc phân tích (Analysis Filterbank)

Băng lọc phân tích bao gồm 32 băng thông lọc bằng nhau. Đầu ra của băng lọc là 1 mẫu tới hạn. Nghĩa là mỗi granules gồm 576 mẫu, có 18 mẫu ra từ 32 băng thông lọc, mà đưa ra tổng cộng là 576 mẫu subband. 4. MDCT với cửa sổ động

Mẫu subband được biến đổi đến miền tần số thông qua MDCT. MDCT thực hiện 18 mẫu (khối dài ) cùng thời điểm để đạt độ phân giải tần số cao, thực hiện 6 mẫu (khối ngắn ). Do có sự chồng cửa sổ lên nhau 50% nên kích thước cửa sổ là 36 mẫu cho khối dài và 12 mẫu cho khối ngắn. Khối ngắn cải thiện độ phân thời gian tốt hơn để dùng cho các tín hiệu chuyển tiếp và làm nhỏ tiếng vang lại. Khối dài cho phép độ phân giải tần số tốt hơn. Lớp 3 có 3 mode chọn khối : 2 mode khi tất cả các lối ra của băng lọc đều qua được biến đổi MDCT, và 1 mode hỗn hợp khi 2 băng tần thấp sử dụng khối dài còn 30 băng tần cao sử dụng khối ngắn . Trước mỗi đợt MDCT xuất ra subband, mỗi subband cũ phải nghịch đảo tần số (nhân -1) để dòng phổ xuất hiện theo thứ tự tăng dần.

Khi mã hóa thụ cảm entropy vượt quá giá trị 1800 sẽ xác định hằng số. Khối lọc MDCT sẽ được chuyển đến cửa sổ ngắn. Để duy trì thuộc tính tái tạo lại của MDCT, sự chuyển đổi giữa khối ngắn và khối dài không thể tức thì, vì vậy có cửa sổ chuyển đổi từ dài đến ngắn, từ ngắn đến dài.

Chiều dài của khối ngắn bằng 1/3 khối dài. Trong chế độ khối ngắn, 3 khối ngắn thay thế 1 khối dài mà không kể đến loại cửa sổ áp dụng, số dòng MDCT còn lại không đổi. Cho 1 khối riêng biệt của dữ liệu, tất cả các kênh khối lọc có thể cùng kiểu khối MDCT ( dài hoặc ngắn) hoặc 1 mode khối hỗn hợp nơi mà subband tần số nhỏ hơn 2 cho phép khối dài trong khi còn lại dãi trên 30 có khối ngắn. Chế độ hỗn hợp cung cấp độ phân giải tần số tốt hơn cho tần số thấp hơn trong khi duy trì độ phân giải thời gian cao hơn.

MDCT biến đổi tín hiệu âm thanh vào miền tần số, sinh ra biệt danh được đưa vào bởi mẫu con trong khối lọc có thể thoát khỏi từng phần (partially cancelled).

5. Chia tỉ lệ và lượng tử hóa (Scaling và Quantization)

Ngưỡng che được sử dụng để tính toán có bao nhiêu bit cần thiết trong mỗi băng tới hạn để mã hóa mẫu sao cho nhiễu lượng tử hóa không thể nghe được. Bộ mã hoá thường sử dụng tốc độ bit phù hợp với yêu cầu. Mã hoá Huffman là một phần của phép lặp bởi vì nó không có khả năng xác định số bit cần thiết cho việc mã hoá.

6. Mã hóa Huffman và sinh ra dòng bit (Huffman Coding and Bitstream Generation) Bitstream Generation)

Mẫu lượng tử hoá là lưu trữ và mã hoá Huffman trong dòng bit dọc theo hệ số tỉ lệ và thông tin (side infomation).

Huffman là phương pháp mã hoá không mất dữ liệu dùng từ mã (codeword) để lưu trữ bit nhị phân của “symbol”. Ví dụ các symbol A, B, C, D được mã hoá thông qua các code word như sau:

Symbol Code word

A B C D 0 10 110 111

Symbol A và B được phân biệt thông qua chiều dài của từ mã tương ứng là “0” và “10”. Thế mạnh của của mã hoá Huffman là tất cả code word có khả năng giải mã đồng nhất ( uniquely decodable). Vì vậy trình tự mã hoá của các bit là:

01101110100 tương ứng với chuỗi dữ liệu:

“ACDABA”

Giải thuật mã hoá Huffman dựa trên mô hình cây mã hoá (coding tree) dùng để phân biệt các symbol thông qua code word. Symbol nào có xác suất cao thì code word ngắn, ngược lại symbol có xác suất thấp thì code dài hơn. Trình tự thực hiện theo các bước sau:

• Sắp xếp số lần xuất hiện ( xác suất) các symbol theo thứ tự giảm dần.

• Nối 2 symbol lại với nhau theo thứ tự từ trên xuống để tạo symbol mới.

• Tiếp tục bước 2 cho đến khi còn lại 1 symbol với xác suất là 1. • Tiến hành đánh số cho cây mã hoá, bắt đầu từ gốc (symbol có xác

suất là 1) trở lên phía trên thì đánh số “0” ngược lại từ gốc đi xuống ta đánh số “1”.

Ví dụ ta có chuỗi cần mã hoá là “ EXAMPLE OF HUFFMAN

CODING”. Đầu tiên ta tính xác suất của từng symbol trong chuỗi ký tự. Symbol Xác suất E X A M P L O F H U C D I N G space 2/25 1/25 2/25 2/25 1/25 1/25 2/25 3/25 1/25 1/25 1/25 1/25 1/25 2/25 1/25 3/25

Tiếp tục sắp xếp các symbol theo xác xuất giảm dần.

7. Thông tin (Side Information)

Thông tin chứa các thông số điều khiển thao tác giải mã như là sự lựa chọn bảng Huffman, chuyển đổi cửa sổ, điều khiển độ lợi (gain control).

CHƯƠNG IV: GIẢI MÃ MPEG1 LỚP 3

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

• Sơ đồ cấu trúc :

1. Định dạng khung (Frame Format)

Khung là một khái niệm trung tâm khi giải mã dòng bit MP3. Nó bao gồm 1152 mẫu đơn hoặc mẫu miền tần số, được chia hai granules mỗi granules gồm 576 mẫu. Mỗi granules được chia làm 32 khối subband có 18 dòng tần số.

Phổ tần số dao động từ 0 tới FS/2 Hz. Subband phân chia phổ thành 32 phần bằng nhau. Mỗi subband chứa 18 mẫu mà đã được biến đổi đến miền tần số bằng phép biến đổi MDCT. (adsbygoogle = window.adsbygoogle || []).push({});

576 dòng tần số trong một “granule” được phân chia vào trong 21 hệ số tỉ lệ được thiết kế để phù hợp tần số băng tới hạn càng gần càng tốt. Dãi hệ số tỉ lệ được sử dụng chính cho việc lượng tử hóa lại (requantization) của các mẫu.

Khung (frame) bao gồm 4 phần: tiêu đề (header), thông tin (side infomation), dữ liệu chính (main data), dữ liệu phụ thuộc (ancillary data):

Chiều dài của khung cố định cho tốc độ bit phù hợp ,với độ lệch có thể là một byte để duy trì độ chính xác tốc độ bit.

a. Tiêu đề

File MPEG được xây dựng từ những phần tử nhỏ hơn gọi là khung, khung là 1 mục độc lập. Mỗi khung gồm header và thông tin âm thanh. Vì vậy bạn có thể cắt 1 phần nào đó của file MPEG và hát trực tiếp. Nhưng ở lớp III thì không đúng như vậy. Hướng đến tổ chức dữ

liệu bên trong MPEG Version 1 Layer III, khung thường lệ thuộc vào những thành phần khác và không thể cắt ra hát trực tiếp được. Khi bạn muốn đọc thông tin về file MPEG thông thường chỉ đọc về khung đầu tiên, về header và cho rằng những khung khác cũng tương tự. Điều này có thể không đúng trong mọi trường hợp. File MPEG có tốc độ bit khác nhau có thể được sử dụng thì gọi là chuyển đổi tốc độ bit (bitrate switching) có nghĩa là tốc độ bit chuyển đổi dọc theo nội dung của khung. Với cách này tốc độ bit thấp hơn có thể được sử dụng trong khung mà không làm giảm chất lượng âm thanh.

Khung có cơ chế kiểm tra lỗi CRC. Bộ kiểm tra lỗi dài 16 bit . Nếu có lỗi xảy ra thì được lưu trữ trong phần header. Sau khi kiểm tra lỗi, có thể tính chiều dài của khung và sử dụng nó nếu cần những thông tin khác về header hay tính CRC của khung.

Tiêu đề có chiều dài 4 bytes (32 bits) và chứa thông tin về lớp , tốc độ bit, tần số mẫu và chế độ stereo được mô tả cụ thể như sau:

AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM Sign Length (bits) Position (bits) Description

A 11 (31-21) Đồng bộ khung( tất cả các bit đều được đặt ở trạng thái 1)

B 2 (20,19) MPEG Audio version ID 00 - MPEG Version 2.5 01 – Bit dự trữ

10 - MPEG Version 2 (ISO/IEC 13818-3) 11 - MPEG Version 1 (ISO/IEC 11172-3)

C 2 (18,17) Phần mô tả Layer 00 – dự trữ 01 - Layer III 10 - Layer II 11 - Layer I D 1 (16) Bit bảo vệ

0 – kiểm tra lỗi CRC (16bit CRC follows header)

1 - không kiểm tra.

E 4 (15,12) Chỉ số tốc độ bit

bits V1,L1 V1,L2 V1,L3 V2,L1 V2, L2 & L3 0000 free Free Free free Free

0001 32 32 32 32 8 0010 64 48 40 48 16 0011 96 56 48 56 24 0100 128 64 56 64 32 0101 160 80 64 80 40 0110 192 96 80 96 48 0111 224 112 96 112 56 1000 256 128 112 128 64 1001 288 160 128 144 80 1010 320 192 160 160 96 1011 352 224 192 176 112 1100 384 256 224 192 128 1101 416 320 256 224 144 1110 448 384 320 256 160

1111 bad Bad bad bad Bad V

1 - MPEG Version 1

V2 - MPEG Version 2 và Version 2.5 L1 - Layer I

L2 - Layer II L3 - Layer III

"free" : format tuỳ ý.

"bad" :giá trị không được phép sử dụng.

File MPEG có tốc độ bit thay đổi (VBR). Mỗi khung có thể được tạo ra với tốc độ bit khác nhau và được sử dụng trong tất cả các lớp( giải mã lớp 3 cũng dùng phương pháp này).

F 2 (11,10) Chỉ số tần số tốc độ mẫu

bits MPEG1 MPEG2 MPEG2.5 00 44100 Hz 22050 Hz 11025 Hz 01 48000 Hz 24000 Hz 12000 Hz 10 32000 Hz 16000 Hz 8000 Hz 11 Reserv. reserv. reserv.

G 1 (9) Bit đệm (padding bit)

0 - khung không sử dụng bit đệm (adsbygoogle = window.adsbygoogle || []).push({});

1 - khung sử dụng bit đệm với 1 khe cắm mở phụ.

Cách tính chiều dài khung : trước tiên ta hãy phân biệt kích thước khung và chiều dài khung. Kích thước khung là số mẫu có trong 1 khung . thông thường ở lớp I có 384 mẫu, lớp II và III có 1152 mẫu.

Chiều dài khung là chiều dài cuả khung khi đã nén xong và được tính trên slot. Ơû lớp I , 1 slot có 4 byte còn ở lớp II và III chỉ có 1 byte. Chiều dài khung có thể thay đổi thông qua bộ đệm hoặc sự biến đổi tốc độ bit.

Lớp I :

FrameLengthIn Bytes = (12 * BitRate / SampleRate + Padding) * 4

Lớp II và III:

FrameLengthIn Bytes = 144 * BitRate / SampleRate + Padding

H 1 (8) Bit dành riêng.

00 - Stereo

01 - Joint stereo (Stereo)

10 - Dual channel (2 mono channels) 11 – Single channel (Mono)

J 2 (5,4) Mode mở rộng (chỉ sử dụng trong Joint stereo) K 1 (3) Bản quyền

0 - Audio không bản quyền 1 – Audio có bản quyền L 1 (2) Nguyên bản 0 – bản phụ media 1 – bản gốc media M 2 (1,0) Tầm quan trọng (Emphasis) 00 - none 01 - 50/15 ms 10 – bit dự trữ 11 - CCIT J.17

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) (adsbygoogle = window.adsbygoogle || []).push({});

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 {

// đ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. a. Giải mã Stereo MS (adsbygoogle = window.adsbygoogle || []).push({});

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ố.

Một phần của tài liệu Kỹ thuật mã hóa thụ cảm (Trang 28)