Môi trường phần cứng 36

Một phần của tài liệu Ứng dụng công nghệ tính toán đa dụng trên các bộ xử lý đồ họa đa lõi của NVIDIA trong bài toán mã hóa âm thanh chuẩn AAC (Trang 36 - 68)

1. 4.Nén 15

2.5.1. Môi trường phần cứng 36

Vì các ứng dụng CUDA được viết để chạy trên các GPU của Nvidia, nên điều kiện đầu tiên là phải có một GPU mà tính năng CUDA trên đó được thiết lập sẵn. Hiện náy các dòng GPU thiết lập sẵn CUDA bao gồm các dòng:

 GeForce 8, 9, 100, 200. Bộ nhớ nhỏ nhất trên các GPU này là 256Mb

 Các GPU Tesla như S870, D870, C870, C1060, C1070

Các thành phần phần cứng còn lại tùy thuộc vào khả năng tài chính của bạn nhưng cấu hình tối thiểu để chạy các ứng dụng CUDA có thể là như sau:

- 1.6 GHz Intel or AMD dual core CPU

- NVIDIA GeForce 8 series or later CUDA enabled GPU

- Windows XP/Vista 32-bit or 64-bit

- Linux 32 or 64-bit

- Mac OS

2.5.2.B công c phát trin phn mm

Bộ công cụ phát triển CUDA của NVIDA gồm có 3 thành phần mà bạn phải lấy bao gồm]:

1. Driver CUDA mới nhất.

2. Một bộ Toolkit CUDA bao gồm: - nvcc C compiler

- CUDA FFT and BLAS libraries for the GPU

- Profiler

- gdb debugger for the GPU

- CUDA runtime driver (also available in the standard NVIDIA GPU driver)

CHƯƠNG III. PHÂN TÍCH GIẢI THUẬT MÃ HÓA AAC.

Chương này tập trung tìm hiểu, phân tích quá trình mã hóa (encoding) của chuẩn MPEG-2 AAC để có thông tin chi tiết, cụ thể về các bước thực hiện mã hóa. Dựa trên các phân tích về thời gian thực hiện từng pha, đề xuất khả năng song song hóa của cả quá trình hoặc của một biến đổi cụ thể. Nội dung chương bao gồm ba phần: phần đầu tiên mô tả cụ thể các bước thực hiện trong quá trình mã hóa AAC, phần thứ hai đưa ra các nhận xét về khả năng song song hóa quá trình mã hóa, và phần thứ 3 phân tích về thời gian thực hiện của các bước trong quá trình mã hóa.

3.1.Thuật Toán Mã Hóa AAC.

Chuẩn âm thanh AAC được đưa mô tả chi tiết trong tài liệu ISO/IEC 13818- 7,[7] các bước của quá trình mã hóa được trong hình minh họa 3.1. Các công cụ xử lý được sử dụng trong quá trình mã hóa bao gồm:

 Bộ điều khiển khuếc đại (Gain Control)

 Filter Bank

 Bộ dự đoán (Prediction)

 Lượng Tử hòa và mã hóa (Quantization and Coding)

 Mã hóa không mất mát thông tin (Noiseless Coding)

 Bộ dồn kênh (Bitstream Multiplexing)

 Định dạng nhiễu thời gian(Temporal Noise Shaping - TNS)

 Mã hóa cạnh/giữa Stereo (Mid/Side(M/S) Stereo Coding )

Hình 3.1.Mô hình mã hóa AAC

Để tăng thêm khả năng tùy biến cho bài toán, cân bằng giữa yêu cầu về chất lượng và tài nguyên tính toán, hệ thống MPEG-2 AAC cũng đưa ra ba chuẩn mẫu mã hóa khác nhau: Main Profile, Low Complexity (LC) Profile và Scaleable Sampling Rate(SSR) Profile. Trong cấu hình Main Profile, hệ thống AAC cung cấp chất lượng âm thanh tốt nhất ở bất kì tỷ lệ nén nào. Cấu hình này sử dụng tất cả các công cụ ngoại trừ bước tiền xử lý Gain Control và cấu hình này cũng yêu cầu nhiều bộ nhớ và tính toán hơn so với bước cấu hình LC Profile. Trong cấu hình LC

hình này có yêu cầu bộ nhớ giảm hơn so với cấu hình Main Profile. Bước tiền xử lý Gain Control sẽ được thực hiện trong cấu hình SSR Profile. Cấu hình này có độ phức tạp thập hơn cấu hình Main Profile và LC Profile và có thể cung cấp các tín hiệu có khả năng mở rộng về tần số.

3.1.1.Mô hình âm thanh.

Mô hình âm thanh (Psychoacoustic Model) có vai trò để tính toán khả năng biến đổi cực đại của tín hiệu, được gọi là ngưỡng. Quá trình sinh ngưỡng này có ba tham số đầu vào là:

1. Độ dài dịch chuyển của quá trình sinh ngưỡng, được gọi là iblen.Iblen

phải là hằng số trong suốt một ứng dụng cụ thể của quá trình sinh ngưỡng. Có hai iblen có độ dài cố định cho 2 biến quá trình xử lý khác nhau đó là iblen =1024 với FFT dài và iblen = 128 với FFT ngắn. 2. Mỗi biến đổi FFT sẽ sử dụng iblen mẫu mới nhất kết hợp với iblen mẫu

được lưu lại trước đó để tính toán trong biến chuyển đổi thời gian/tần số.

3. Tỷ lệ lấy mẫu. Hệ thông AAC cung cấp một tập các tỷ lệ lấy mẫu chuẩn . Cũng giống như iblen, tỷ lệ lấy mẫu cũng phải là hằng số trong toàn bộ quá trình tính toán ngưỡng.

Đầu ra của mô hình âm thanh:

1. Một tập các SMR(Signal-to-Mask Ratios) và các ngưỡng.

2. Dữ liệu miền thời gian được giữ lại, được sử dụng trong biến đổi MDCT.

3. Kiểu khối (Block type) cho biến đổi MDCT (kiển khởi tạo, dừng, dài hoặc ngắn).

4. Ước tính số bit nên được thêm vào so với trung bình các bit đang được sử dụng để mã hóa.

Các bước được sử dụng trong quá trình tính toán ngưỡng (hình 3.2): 1. Tạo lại 2 x iblen mẫu tín hiệu đầu vào si.

2. Tính toán phổ phức của tín hiệu đầu vào:

a. Đầu tiên, một hàm cửa số Hann được sử dụng trên si ta thu được sw

b. Thứ hai, biến đổi FFT trên sw

c. Thứ ba, mô tả cực của chuyển đổi sẽ được tính toán. r(w) và f(w) là mô tả cho các thành phần biên độ và pha của sw được chuyển đổi.

3. Tính toán r(w) và f(w) được dự đoán.

4. Tính toán các tiêu chí không dự đoán được c(w).

5. Tính toán năng lượng và khả năng không dữ đoán được trong các phân vùng tính toán ngưỡng.

6. Tính toán các năng lượng phân vùng và khả năng không dự đoán được với các chức năng mở rộng. được kết kết quả cb(b)

7. Chuyển đổi cb(b) thành chỉ số âm điệu tb(b). 8. Tính toán SNR được yêu cầu trong mỗi phân vùng. 9. Tính toán tỉ lệ nguồn (power ratio).

12. Entropy âm thanh (PE) được tính toán đổi với mỗi kiểu block từ từ lệ e(b)/nb(b), trong đó nb(b) là ngưỡng và e(b) là năng lượng với mỗi phân vùng ngưỡng.

13. Quyết định kiểu khối (block type) là ngắn hay dài sẽ được sử dụng để mã hóa.

14. Tính toán các tỉ lệ SMR(n) và ngưỡng codec xmin(n). 15. Tính toán cấp phát bit bên ngoài Entropy âm thanh.

3.1.2.Điều chỉnh khuếch đại (Gain Control).

Bước này chỉ được thực hiện trong cấu hình SSR Profile. Bước này bao gồm một bộ lọc PQF (Polyphase Quadrature Filter – Bộ lọc đa pha cầu phương), các bộ phát hiện khuếch đại và các bộ chỉnh sửa khuếch đại.

Hình 3.3.Công cụ Điều khin khuếch đại

3.1.3.Filter Bank và Block Switching.

Đây là một bước cơ bản trong quá trình mã hóa âm thanh nhằm biến đổi tín hiệu miền thời gian thành tín hiệu miền tần số. Biến đổi này được thực hiện bởi một biến đổi cosine rời rạc.

Biến đổi này sẽ được thực hiện trên một khối mẫu tín hiệu theo thời gian và được biến đổi qua hai bước xử lý, đầu tiên tín hiệu sẽ được điều chỉnh thông qua một hàm cửa số, tiếp theo một biến đổi cosine rời rạc sẽ được thực hiện. Mỗi khối

Kích thước của khối đầu vào có thể được thiết lập là 2048 hoặc là 256 mẫu. Do đó hàm cửa sổ có ảnh hưởng đáng kể tới đáp ứng tần số trong Filterbank, và Filterbank được thiết kể để có thể cho phép thay đổi dạng cửa sổ sao cho phù hợp nhất với điều kiện tín hiệu đầu vào. Dạng cửa sổ cũng được thay đổi tương ứng trong bộ mã hóa và bộ giải mã để cho phép filterbank có thể phân chia các thành phần phổ của tín hiệu đầu vào một cách hiệu quả đối với các tín hiệu có khoảng biến đổi lớn.

3.1.4.Bộ Dự Đoán (Prediction).

Bộ dự đoán có thể được sử dụng trong lược đồ mã hóa AAC để cái giảm độ dư thừa của thông tin lưu trữ. Bộ dự đoán đặc biệt có hiệu quả trong trường hợp các thành phần tín hiệu tĩnh và có yêu cầu nén dữ liệu cao. Bởi ứng dụng của cửa số ngắn trong filterbank chỉ dành cho những thay đổi tín hiệu tức là các thuộc tính tín hiệu không tĩnh, nên prediction chỉ được sử dụng trong các cửa số dài.

Đối với mỗi kênh, bộ dự đoán được áp dụng lên các thành phần phổ thu được từ phân tích phổ của filterbank. Đối với mỗi thành phần phổ lên tới 16kHz thì sẽ có một bộ dự đoán tương ứng, kết quả sẽ thu được một dải(bank) của các bộ dự đoán, tại đó mỗi bộ dữ đoán sẽ khai phá mối liên hệ giữa các giá trị thành phần phổi của các frame liên tiếp nhau. Nếu bộ dự đoán được kích hoạt, bộ lượng tử hóa sẽ nhận được lỗi dự đoán (prediction error) thay vì thành phần lượng tử gốc, kết quả thu được hiệu quả mã hóa cao hơn.

Hình 3.4.Sơ đồ Prediction

3.1.5.Định dạng nhiễu thời gian(Temporal Noise Shaping(TNS)).

TNS được sử dụng để điều khiển dạng thời gian (temporal shape) của nhiễu lượng tử trong mỗi của sổ chuyển đổi. Điều này được thực hiện bằng cách áp dụng một quá trình lọc tới các phần của dữ liệu phổ đối với mỗi kênh.

Xử lý TNS có thể được sử áp dụng trên toàn bộ phổ hoặc chỉ cho một phần phổ. Đặc biệt, có thể sử dụng một số thao tác lọc dự đoán trên các miền tần số khác nhau.

3.1.6.Mã hóa nối Stereo(Joint Stereo Coding).

Trong hệ thống MPEG AAC bao gồm hai kĩ thuật để mã hóa tín hiệu stereo: M/S stereo coding và intensity stereo coding. Cả hai chiến lược mã hóa này có thể

được kết hợp bằng cách áp dụng một cách có chọn lọc tới các miền tần số khác nhau.

3.1.6.1.Mã hóa cạnh/giữa Stereo (M/S Stereo Coding).

Trong AAC, M/S stereo coding được áp dụng trong mỗi cặp kênh của tín hiệu đa kênh, tức là mỗi cặp kênh được sắp xếp một cách có hệ thống trên trục tai nghe phải trái. Ở cấp độ lớn hơn, xử lý M/S giúp bỏ qua các vấn đề ảo bởi việc loại bỏ không.

Quyết định để mã hóa các hệ số phải và trái như là cả phải cộng trái(L/R) hoặc là giữa/biên(M/S) được tạo ra trên một dải mã hóa không mất mát thông tin cơ sở cho tất cả các hệ số lượng tử trong các khối hiện tại.

3.1.6.2.Mã hóa cường độ Stereo (Intensity Stereo Coding).

Intensity stereo coding được xử dụng để khai phá sự không liên quan giữa hai kênh của cặp kênh trong miền tần số cao. Cũng có cơ chế phức tạp hơn để không bị giới hạn bởi khái niệm cặp kênh và cho phép điều khiển tốt hơn thông qua các tham số mã hóa. Cơ chế này được gọi là mà phần tử mã hóa AAC và cung cấp hai chức năng. Đầu tiên, các cặp kênh có thể được sử dụng để thực hiện intensity stereo một cách tổng quát trong đó phổ có thể được chia sẻ thông qua các biên giới kênh bao gồm việc chia sẻ giữa các cặp kênh khác nhau. Chức năng thứ hai của phần tử cặp kênh là để thực hiện một trộn lẫn các đối tượng âm thanh thêm vào tới phần ảo stereo.

3.1.7.Lượng tử hóa và Mã Hóa

Mục đích chính của giai đoạn lượng tử hóa và mã hóa là để lượng tử dữ liệu phổ trong một cách mà nhiễu lượng tử thỏa mãn yêu cầu của mô hình âm thanh.

 Lượng tử hóa không đồng bộ.

 Mã hóa Huffman của các giá trị phổ bằng cách sử dụng các bảng khác nhau.

 Tạo hình nhiễu bằng cách khuếch đại một nhóm các giá trị phổ. Thông tin khuếch đại được lưu trữ trong các giá trị hệ số tỉ lệ.

 Mã hóa Huffman của các hệ số tỉ lệ khác nhau.

3.1.8.Mã hóa không mất mát thông tin.

Trong bộ mã hóa AAC, đầu vào của mô đun mã hóa không mất mát thông tin là một tập 1024 hệ số phổ. Mã hóa không mất mát thông tin được thực hiện trong vòng lặp lượng tử trong và là một phần của quá trình lặp hội tụ khi tổng số bit nằm xung quanh một giá trị số bit được cấp phát .

Mã hóa không mất mát thông tin được thực hiện qua các bước sau:

 Cắt tỉa phổ

 Mã hóa Huffman sơ bộ bằng cách sử dụng số lượng cực đại của các phần.

3.2.Khả Năng Song Song Hóa của quá trình mã hóa AAC.

Đầu vào của giải thuật mã hóa AAC là một tập N mẫu âm thanh được lấy từ tệp dữ liệu âm thành PCM. Trên thực tế, với một tệp âm thanh 2 kênh có thời gian là khoảng 5 phút, chu kì lấy mẫu là 44.1kHz thì sẽ có số mẫu tương ứng là:

2 x 5 x 60 x 44100 = 26460000 mẫu.

Nhưng khi xử lý, thì sẽ không mã hóa từng mẫu một, mà chương trình sẽ xử lý đọc ra tuần tự N mẫu một để mã hóa (như hình minh họa 3.4). Việc mã hóa sẽ được tiến hành trên N mẫu này để thu được dữ liệu mã hóa, sau đó dữ liệu mã hóa này sẽ được đống gói thành một khung dữ liệu (frame) độc lập theo định dạng ADTS (Audio Data Transport Stream). Đây là một định dạng lưu trữ các dữ liệu audio mã hóa trong các gói một cách độc lập nhau, điều này giúp cho chương trình mã hóa có thể giải mã có thể thực hiện từ một gói ở giữa (như trong hình minh họa). Số lượng mẫu N được chọn thường tương ứng với độ dài các biến đổi FFT và MDCT mà ứng dụng đó sử dụng, dạng dài là 2048 và dạng ngắn là 256.

Như vậy nhìn vào sơ đồ trên thì chúng ta có thể nhận thấy được là khả năng thực hiện song song đồng thời trên các bộ mẫu N1, N2,.. Nk mẫu khác nhau để đưa ra đồng thời các khung dữ liệu 1,2,..k. Nếu như có thể thực hiện việc mã hóa trên các bộ mẫu này một cách song song thì có thể tăng tốc hàng nghìn lần tùy thuộc vào dung lượng tệp và khả năng của bộ nhớ. Tuy nhiên, quy trình mã hóa AAC được thiết kế để có thể chống lại việc chèn một khung dữ liệu vào giữa gọi một tệp là cơ chế chồng (overlapped), do đó các tập mẫu N1, N2.. không được mã hóa một cách độc lập hoàn toàn. Tức là dữ liệu mã hóa của Ni tập mẫu hiện tại sẽ được trộn với Ni-1 của tập mẫu trước đó. Điều này gây khó khăn cho việc thực hiện mã hóa các tập mẫu một cách song song. Như vậy để có thể thực hiện song song được thì chúng ta cần phải có cơ chế để có thể giải quyết được bài toán chồng trong quá trình mã hóa.

Mặt khác, chúng ta cũng có thể thực hiện song song hóa trong các bước biến đổi, mà có hai biến đổi có khả năng song song lớn nhất đó chính là biến đổi Furier Nhanh (FFT) và biến đổi Cosine rời rạc (MDCT). Đây là hai bước biến đổi quan trọng và là một thành phần không thể thiếu trong quá trình mã hóa AAC. Các biến đổi này là các biến đổi vector được thực hiện trên một bộ N mẫu ( N= 1024 với dạng dài và N= 128 với dạng ngắn). Do đó chúng ta hoàn toàn có khả năng thực hiện song song hóa các biến đổi này đặc biệt là trong các chip đồ họa có xử lý song

tốc cho các xử lý dưới dạng vector, ma trận. Đặc biệt với biến đổi FFT là một biến đổi được sử dụng rất nhiều trong quá trình mã hóa AAC thì bộ công cụ lập trình Cuda lại cung cấp một thư viện FFT trên C có thể gọi đến một cách dễ dàng và thuận tiện.

Tuy nhiên, việc ứng dụng các chip đồ họa để nhằm song song hóa các biến đổi có dạng vector, ma trận cũng có một nhược điểm đó là chúng ta sẽ phải tiêu tốn thời gian cho việc chuyển đổi dữ liệu giữa CPU với chip đồ họa mà cụ thể là với GPU. Do đặc điểm của việc mã hóa AAC là kích thước dữ liệu biến đổi dữ liệu là nhỏ (kích thước vector là 1024 hoặc 128) nhưng số lần thực hiện lại rất lớn ví dụ như với tệp có thời gian 5 phút ở trên thì cũng phải mất đến hàng trục, trăm nghìn lần gọi tới biến đổi FFT. Nên nếu được thực hiện một cách tuần tự thì số lượng truyền dữ liệu qua lại giữa CPU và GPU cũng sẽ là rất lớn và điều này cũng sẽ chiếm khá

Một phần của tài liệu Ứng dụng công nghệ tính toán đa dụng trên các bộ xử lý đồ họa đa lõi của NVIDIA trong bài toán mã hóa âm thanh chuẩn AAC (Trang 36 - 68)

Tải bản đầy đủ (PDF)

(68 trang)