1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lược đồ mã hóa MPEG hình ảnh động theo chuẩn lưu trữ số -2 pot

41 420 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 182,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Theo Shannon, entropy của một nguồn thông tin S được định nghĩa: HS =ipilog21/pi Trong đó: - pi là xác suất mà ký hiệu Si xuất hiện trong S.. Hình 5.2 Ký hiệu Số lần log1/p Mã Cộngsố bit

Trang 1

32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 kbps

32, 48, 56, 80 kbps chỉ có thể ở chế độ Mono; 64, 96, 112, 128, 160, 192 kbps có thể ở cả hai chế độ Mono và Stereo;224, 256, 320, 384 kbps chỉ có thể ở chế độ Stereo

Chuẩn MPEG có ba layer

Khi chọn lựa tốc độ bit cần xem xét các vấn đề:

• Ở cùng tốc độ bit, Layer II mang lại chất lượng âm thanh tốt hơn Layer I Kết luận này là chủ quan, vì sự chênh lệch là rất khó phân biệt ở tốc độ bit 128 kbps

Trang 2

Các điểm kỹ thuật mấu chốt

Chuẩn mã hóa âm thanh MPEG chỉ định việc ghi một số cố định các mẫu (384 cho Layer I và 1152 cho Layer II) để tạo ra một chuỗi các bytes gọi là “frame”

“Frame” là thực thể nhỏ nhất được điều khiển bởi một ứng dụng Việc chọn tốc độ bit(kbps) thiết lập nên kích thước của frame đó theo byte

Ví dụ:

Ở 48 kHz, 128 kbps, chế độ Mono, Layer II:

• 48,000 mẫu, tương ứng 1000 ms hay 1s, 1152 mẫu tương ứng 24 ms

• Ở tốc độ bit 128,000 bits/s, 3072 bits (384 bytes) cần cho 24 ms

• Chiều dài frame vì thế là 384 byte

• Để lưu 1 phút, cần 960,000 byte (hay khoảng 1 Megabyte) đĩa trống

CHƯƠNG 5 CÁC GIẢI THUẬT NÉN ÂM THANH

I NỀN TẢNG LÝ THUYẾT THÔNG TIN

Theo Shannon, entropy của một nguồn thông tin S được định nghĩa:

H(S) =ipilog2(1/pi) Trong đó: - pi là xác suất mà ký hiệu Si xuất hiện trong S

- log2(1/pi) chỉ ra số lượng thông tin chứa đựng trong Si, nghĩa là

số bit cần thiết để mã hóa Si

Trang 3

• Ví dụ: một hình ảnh được tô đều với cùng một cường độ màu xám, tức là pi=1/256, thì số bit cần thiết để mã hóa cho mỗi mức xám là 8 bits Entropy của hình này là 8

Giải thuật Shannon - Fano:

Ta dùng một ví dụ đơn giản để mô tả giải thuật:

-

Mã hóa cho giải thuật Shannon - Fano:

Dùng cách tiếp cận từ trên xuống

• Sắp thứ tự các ký hiệu theo tần số xuất hiện của nó, nghĩa là: ABCDE

• Chia thành hai phần, mỗi phần tương đương với cùng số lần đếm

Trang 4

• Khởi tạo: đưa tất cả các node vào danh sách OPEN theo thứ tự tại mọi thời điểm Ví dụ: ABCDE

• Lặp lại cho đến khi danh sách OPEN chỉ còn một node bên trái như sau:

- Từ danh sách OPEN, chọn hai node có xác suất thấp nhất, tạo node cha cho chúng

- Gán tổng các xác suất cho node cha và đưa node cha vào danh sách OPEN

- Gán các mã 0, 1 vào các nhánh của cây, xóa các node con khỏi danh sách OPEN Hình 5.2

Ký hiệu Số lần log(1/p) Mã Cộng(số bit)

• Tính chất tiền tố duy nhất: không có mã nào là tiền tố cho một mã khác (tất

cả các ký hiệu đều là node lá) rõ ràng là lớn đối với bộ giải mã

• Nếu việc thống kê có thể tiến hành được trước đó và với độ chính xác cao, thì mã Huffman là rất tốt

Trong ví dụ trên:Entropy=(15x1.38+7x2.48+ 6x2.7 + 6x2.7 + 5x2.96)/39

Trang 5

= 85.26 / 39 = 2.19

Số bit cần thiết cho mã hóa Huffman là : 87 / 39 = 2.23

2 Mã Huffman sửa đổi

(a) Các giải thuật trên đây yêu cầu kiến thức về thống kê là điều mà khó có thể thực hiện (ví dụ âm thanh, hình ảnh sống )

(b) Ngay cả khi nếu điều đó là có thể làm được thì chi phí cho nó khá nặng, đặc biệt khi có nhiều bảng phải được truyền mà mô hình non-order() được sử dụng, nghĩa là việc đưa vào tính toán sự ảnh hưởng của các ký hiệu trước đó với xác suất của ký hiệu hiện hành (ví dụ: “qu” thường đi với nhau, )

Giải pháp đưa ra là dùng giải thuật sửa đổi cho thích hợp Như ví dụ, việc mã hóa Huffman sửa đổi được khảo sát sau đây với ý tưởng là làm thế nào có thể áp dụng vào các giải thuật nén thích hợp khác

• Mấu chốt ở đây là cả hai bộ mã hóa và giải mã đều dùng cùng các hàm Initialize_model và update_model

• Hàm update_model có hai lưu ý: (a) Tăng biến đếm

Trang 6

3 Mã hóa số học

Mã hóa Huffman sử dụng một số nguyên k các bit cho mỗi ký hiệu, vì thế k không bao giờ nhỏ hơn 1 Đôi khi, ví dụ phải truyền một hình ảnh 1 bit, thì không thể nén được

Ý tưởng: giả sử mẫu tự là [X,Y] và P(X) = 2/3

P(Y) = 1/3

• Nếu ta chỉ quan tâm với chiều dài mã hóa là 2 thông điệp, thì ta có thể ánh

xạ tất cả thông điệp có thể có vào những đoạn trong phạm vi [0 1]

• Để mã hóa thông điệp, chỉ dùng vừa đủ số bit cần thiết cho mỗi đoạn

• Tương tự, ta có thể ánh xạ tất cả chiều dài 3 thông điệp vào các đoạn trong [0 1]

• Nói chung, số bit được xác định bằng kích thước của đoạn

Ví dụ: Đoạn đầu tiên là 8/27, cần 2 bit 2/3 bit cho mỗi ký tự

Đoạn cuối là 1/27, cần 5 bit

• Tóm lại, cần -[logp] bit để biểu diễn cho đoạn có kích thước p

• Vấn đề đặt ra là làm thế nào để xác định được xác suất?

Ý tưởng đơn giản là dùng mô phỏng: bắt đầu bằng việc đoán tần số của một

ký hiệu Cập nhật tần số cho mỗi ký hiệu mới

4 Giải thuật Lempel-Ziv-Welch(LZW)

Giả sử chúng ta muốn mã hóa cho một cuốn tự điển Tiếng Anh 159,000 từ Như vậy mỗi từ cần 18 bit để mã hóa

Nhược: - Dùng qúa nhiều bit

- Chỉ làm việc cho ký tự tiếng Anh

Trang 7

Giải pháp: - Cần phải tìm một cách mã hóa cuốn từ điển cho thích hợp

- Các phương pháp ban đầu được đề xuất bởi Ziv và Lempel vào năm 1978 và

1979 Terry Welch phát triển lược đồ vào năm 1981 và trở thành giải thuật LZW Giải thuật:

w = NIL;

while (read a character k)

{ if wk exists in the dictionary

w = wk;

else

add wk to the dictionary;

output the code for w;

w = k; } LZW nguyên gốc sử dụng từ điển với 4K mục từ, 256 từ đầu tiên là mã ASCII

Trang 8

while ( read a character k ) /* k could be a character or a code */

{entry = dictionary entry for k;

output entry;

add w + entry[0] to dictionary;

Trang 9

w = entry;}

III CÁC GIẢI THUẬT NÉN CÓ TỔN THẤT

1 Các phương pháp nén âm thanh đơn giản:

• Các phương pháp nén khảo sát ở trên không hiệu quả trong việc nén âm thanh

• Sau đây là các phương pháp nén có tổn thất:

- Nén “silence” : dò các khoảng “yên lặng”, giống như mã hoá run-length

- LPC (Linear Predictive Coding)

- CELP (Code Excited Linear Predictor)

2 Nén âm thanh dùng mô hình ââm - tâm lý

a Hệ thống nghe và phát âm của con người

• Phạm vi nghe được từ 20 Hz đến 20 kHz, nhạy cảm ở 2 - 5kHz

• Phạm vi phát âm bình thường từ 500 Hz đến 2 kHz

b Che tần số (Frequency masking)

“Ngưỡng che” (Threshold masking): sinh ra từ hiệu ứng che, mỗi âm với một tần số

và mức to (dB) xác định sẽ có một “ngưỡng che” (xem hình 4.3 và 4.4)

• Định nghĩa một đơn vị mới cho tần số là bark ( Barkhausen)

1 Bark = bề rộng của băng giới hạn:

- Tần số <500Hz : 1 bark = freq/100

Trang 10

- Tần số >500Hz : 1 bark = 9 + 4log(freq/1000)

• Ngưỡng che trên thước đo băng giới hạn:

Hình 5.3

d Che nhất thời (Temporal masking): che theo thời gian

Tai người cũng có đặc tính lưu âm

Nếu có một âm thanh lớn, rồi ngưng nó lại, mãi một lúc sau ta mới có thể nghe được một âm lân cận nhỏ hơn (xem hình 4.5 và 4.6)

3 Nén âm thanh MPEG

Vài thông số:

• MPEG-1 : 1.5Mbits/s cho âm thanh và hình ảnh

Khoảng 1.2 Mbits cho hình ảnh và 0.3Mbits/s cho âm thanh

Aâm thanh CD không nén dùng: (44,100 mẫu/s * 16bit/mẫu * 2 kênh) > 1.4 Mbits/s

• Aâm thanh MPEG cung cấp các tần số lấy mẫu là 32, 44.1 và 48 kHz

3 Nếu mức to của một băng mà nhỏ hơn ngưỡng che thì không mã hóa nó

4 Ngược lại, xác định số bit cần thiết để mã hóa sao cho nhiễu sinh ra bởi việc lượng tử hóa này thấp hơn đường cong che

5 Định dạng dòng dữ liệu bit :

Hình 5.4

Trang 11

Ví dụ:

Sau khi phân tích, 16 band đầu tiên trong số 32 band như sau:

_ Band 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Level(dB) 0 8 12 10 6 2 10 60 35 20 15 2 3 5 3 1 _

• Nếu mức to của âm thứ 8 là 60dB, nó sẽ che band thứ 7 ở mức 12dB và band thứ 9 ở mức 15dB

Mức to ở band 7 là 10dB (<12dB) nên bị bỏ qua, không mã hóa

Mức to band 9 là 35 (> 15dB) nên được tiếp tục xử lý

• Layer I: bộ lọc loại DCT với 1 frame và độ rộng tần số như nhau trên mỗi sub-band Mô hình âm-tâm lý chỉ sử dụng hiệu quả che tần số (Frequency masking)

• Layer II: sử dụng 3 frame trong bộ lọc (trước, hiện tại và kế tiếp, tổng cộng

1152 mẫu) Mô hình âm-tâm lý có sử dụng hiệu quả che nhất thời (Temporal masking)

• Layer III: dùng bộ lọc băng giới hạn tốt hơn, mô hình âm-tâm lý có sử dụng hiệu quả che nhất thời, và có dùng bộ mã hoá Huffman

Trang 12

- Tập tin tiêu đề : <types.h>

- Sử dụng : truy xuất các tập tin dạng *.wav và *.mp3 Trong chương trình, các cấu trúc này sử dụng ở các giai đoạn mở file, đọc cấu hình file, truy xuất các thông tin

Trang 13

2 Cấu trúc dòng bit dữ liệu: bitstream_t

- Tập tin tiêu đề : <bitstream.h>

Trang 14

- Sử dụng: dùng trong quá trình đọc hoặc ghi dữ liệu từ file lên vùng đệm và ngược lại

typedef struct bit_stream_struc {

FILE *pt; /* con trỏ đến file bit dữ liệu */

unsigned char *buf; /* vùng đệm cho dòng bit dữ liệu */

int buf_size; /* kích thước vùng đệm tính theo số byte */

long totbit; /* đếm bit */

int buf_byte_idx; /* chỉ byte trên cùng trong vùng đệm */

int buf_bit_idx; /* bit trên cùng của byte trên cùng trong vùng đệm */ int mode; /* mở dòng bit ở chế độ đọc hay ghi */

int eob; /* chỉ đến cuối vùng đệm */

int eobs; /* đầu cuối của cờ dòng bit */

char format; /* định dạng file ở chế độ đọc (BINARY/ASCII) */

} bitstream_t;

3 Các cấu trúc để định dạng dòng bit dữ liệu:

- Tập tin tiêu đề : <FormatBitstream.h>

a Kiểu số nguyên:

typedef unsigned int uint32; /* định nghĩa số nguyên không dấu 32 bit */ typedef unsigned short uint16; /* định nghĩa số nguyên không dấu 16 bit */

b Con trỏ hàm (*BitsFcnPtr):

Đây là một nguyên mẫu hàm con trỏ cần phải có để ghi các bit vào dòng dữ liệu

Nó ghi “length” bits từ “value” bits, theo cách ghi msb-first Các bit trong value giả định là right-justified

typedef void (*BitsFcnPtr)( uint32 value, uint16 length );

Trang 15

c Cấu trúc BF_BitstreamElement:

Một BitstreamElement chứa đựng dữ liệu đã mã hoá sẽ được ghi vào dòng bit

“length” bit trong số “value” sẽ được ghi vào dòng bit theo msb-first

Cấu trúc này chứa đựng tất cả những thông tin cần thiết cho bộ định dạng dòng bit

để mã hoá một frame dữ liệu Ta phải điền đầy nó và trỏ tới khi định dạng

typedef struct BF_FrameData

{

BitsFcnPtr putbits; /* your low-level bitstream function */

int frameLength;

int nGranules;

Trang 16

} BF_FrameData;

f Các cấu trúc liên quan dến bộ định dạng:

Cấu trúc này chứa đựng thông tin được cung cấp bởi bộ định dạng dòng bit Ta có thể sử dụng nó để kiểm tra và xem thử bộ mã của ta có chấp nhận các kết quả của việc gọi bộ định dạng hay không

typedef struct BF_FrameResults

Trang 17

4 Cấu trúc huffcodetab:

- Tập tin tiêu đề : <Huffman.h>

- Sử dụng : dùng trong quá trình mã hoá dữ liệu theo thuật toán Huffman

struct huffcodetab {

unsigned int xlen; /*max x-index+ */

unsigned int linbits; /*number of linbits */ unsigned int linmax; /*max number to be stored in linbits */ HUFFBITS *table; /*pointer to array[xlen][ylen] */

unsigned char *hlen; /*pointer to array[xlen][ylen] */ };

5 Các cấu trúc tính MDCT

- Tập tin tiêu đề : <Layer3.h>

- Sử dụng : trong tính toán MDCT, định dạng dòng bit, tính toán mô hình tâm lý,

mã hoá dữ liệu

Trang 18

unsigned mixed_block_flag; unsigned table_select[3];

int /* unsigned */ subblock_gain[3]; unsigned region0_count;

unsigned region1_count;

unsigned preflag;

unsigned scalefac_scale;

unsigned count1table_select; unsigned part2_length;

Trang 20

int s[2][2][13][3]; /* [window][cb] */

} L3_scalefac_t;

6 Cấu trúc scalefac_struct:

- Tập tin tiêu đề : <Tables.h>

struct scalefac_struct

{ int l[23];

int s[14]; };

B Các định nghĩa

1 Các định nghĩa dùng trong truy xuất dòng bit dữ liệu:

- Tập tin tiêu đề : <bitstream.h>

#define MINIMUM 4 /* Minimum size of the buffer in bytes */

#define MAX_LENGTH 32 /* Maximum length of word written or read from bit

stream */

#define READ_MODE 0

#define WRITE_MODE 1

#define ALIGNING 8

#define BINARY 0

#define ASCII 1

#define TRUE 1

#define FALSE 0

#ifndef BS_FORMAT

Trang 21

#define BS_FORMAT ASCII /* BINARY or ASCII = 2x bytes

*/

#endif

#define BUFFER_SIZE 4096

#define MIN(A, B) ((A) < (B) ? (A) : (B))

#define MAX(A, B) ((A) > (B) ? (A) : (B))

2 Các định nghĩa dùng trong tính toán FFT:

- Tập tin tiêu đề : <FFT.h>

#define BLKSIZE_S 256

#define LOGBLKSIZE_S 8

3 Các định nghĩa dùng trong định dạng dòng dữ liệu:

- Tập tin tiêu đề: <Format.h>

#define MAX_CHANNELS 2

#define MAX_GRANULES 2

4 Các định nghĩa dùng trong bộ mã hoá Huffman:

- Tập tin tiêu đề: <Huffman.h>

#define HUFFBITS unsigned long int

#define HTN 34

#define MXOFF 250

5 Các định nghĩa dùng trong phân tích dữ liệu :

- Tập tin tiêu đề: < L3loop.h>

#define e 2.71828182845

#define CBLIMIT 21

#define SFB_LMAX 22

Trang 22

#define SFB_SMAX 13

#define PRECALC_SIZE 1024 /* WAS 256 !!! */

6 Các định nghĩa dùng trong mô hình âm tâm lý:

- Tập tin tiêu đề: <L3psy.h>

#define maximum(x,y) ( (x>y) ? x : y )

#define minimum(x,y) ( (x<y) ? x : y )

7 Các định nghĩa dùng trong truy xuất dữ liệu nhâp:

- Tập tin tiêu đề: <portableio.h>

#define Read32BitsLowHigh(f) Read32Bits(f)

#define WriteString(f,s) fwrite(s,strlen(s),sizeof(char),f)

Trang 23

#define Read32BitsLowHigh(f) Read32Bits(f)

8 Các định nghĩa dùng trong cấu trúc file wave và file mpeg:

#define PI 3.14159265358979

#define PI4 PI/4

#define PI64 PI/64

Trang 24

có một cái nhìn bao quát, thậm chí phải hiểu sâu về giải thuật của chương trình thì mới có thể loại trừ những sai lầm khi sử dụng

Lập trình trong Windows là lập trình theo tình huống Mọi nút nhấn, ô đối thoại trên giao diện đều có thể được truy cập tới bất kỳ lúc nào mà không theo một trình

tự nhất định Do đó người lập trình cần phải dự trù đến mọi tình huống và cần phải đưa ra một số đề nghị dưới dạng những thông số định sẵn cho người sử dụng theo

đó mà vận hành Ngoài ra, giao diện cần có phần trợ giúp để hướng dẫn cho người

sử dụng ở bất kỳ lúc nào

II Giao diện

Dựa trên sơ đồ khối và lưu đồ giải thuật Giao diện bao gồm các phần như hình vẽ sau:

1 Input group

Trang 25

Nhóm các thông tin cấu hình và lệnh về tập tin nguồn ( *.wav) Bao gồm các thông tin như : bitrates, samplerates, mode, File path name

2 Open button

Mở hộp thoại File Open của Windows để chọn file cần nén Phần mở rộng mặc định là wav

3 Text Edit box

Dùng gõ file nguồn bằng tay Mặc định là *.wav

8 Text Edit box

Dùng gõ đường dẫn à tên tập tin đích bằng tay Mặc định là *.mp3

Khi đã chọn được tập tin nguồn trong phần 2 hoặc 3 thì trong ô này sẽ tự động xuất hiện đường dẫn và tên tập tin đích

Ngày đăng: 09/08/2014, 08:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w