Mã hóa nguồn
206
Lưu ý:
Các bạn có thể nhận được các kết quả khác với hình vẽ trên vì chuỗi bit nhận được từ
hàm randint sẽ thay đổi ngẫu nhiên sau mỗi lần thực thi chương trình
.
14.2. LÖÔÏNG TÖÛ HOÙA TÍN HIEÄU
Lượng tử hoá là quá trình rời rạc hoá tín hiệu về mặt biên độ, cụ thể là thay thế tất cả các giá
trị của tín hiệu nằm trong một khoảng xác định nào đó thành một giá trị duy nhất. Miền giá trị
của tín hiệu được chia thành một số hữu hạn các khoảng chia. Như vậy, độ lớn của tín hiệu
sau khi lượng tử chỉ có thể nhận một trong số hữu hạn các giá trị cho trước.
Tập hợp các khoảng chia gọi là sự phân hoạch của tín hiệu (partition). Tập các giá trị thay thế
cho mỗi khoảng chia gọi là bộ mã (codebook).
MATLAB biểu diễn phân hoạch của tín hiệu bằng một vector mà các phần tử của nó là các
điểm ranh giới giữa hai khoảng chia liên tiếp. Ví dụ, nếu tín hiệu có miền xác định là R, được
phân hoạch thành các khoảng (-
∞, 0], (0,2], (2,4] và (4,+∞) thì có thể biểu diễn sự phân hoạch
này bằng vector:
>> partition = [0,2,4];
Tương ứng với vector phân hoạch tín hiệu là vector biểu diễn bộ mã tín hiệu. Các phần tử của
nó là các giá trị thay thế trong mỗi khoảng chia tương ứng của phân hoạch. Nếu ta thay thế
các giá trị trong khoảng (-
∞, 0] bằng -1, các giá trị trong khoảng (0,2] bằng 1, các giá trị trong
khoảng (2,4] bằng 3 và các giá trị trong khoảng (4, +
∞] bằng 5 thì vector biểu diễn bộ mã sẽ
là:
>> codebook = [-1,1,3,5];
Để thực hiện quá trình lượng tử hoá, MATLAB cung cấp hàm quantiz:
>> [indx, quant, distor] = quantiz(sig, partition, codebook)
trong đó sig là tín hiệu trước khi lượng tử và partition, codebook lần lượt là phân
hoạch và bộ mã lượng tử.
Hàm quantiz trả về:
o tín hiệu sau khi lượng tử hoá quant
o vector
indx
có chiều dài bằng chiều dài tín hiệu, mỗi phần tử của nó là chỉ số của giá trị
tương ứng của tín hiệu trong bộ mã lượng tử. Nói cách khác, vector
indx
cho biết mỗi phần
tử của tín hiệu vào nằm trong khoảng chia nào. Giữa các vector
indx, quant
và
codebook
có mối liên hệ:
quant = codebook(indx+1);
o nhiễu lượng tử do phép lượng tử hoá này gây ra. Nhiễu lượng tử là sai số bình phương
trung bình giữa tín hiệu gốc và tín hiệu sau khi lượng tử
Ví dụ:
>> parti=[0,2,4];
>> codebook=[-1,1,3,5];
>> samp=[-3,-1,1,1,5,3,5,4,2,1];
>> [index,quantized]=quantiz(samp,parti,codebook);
>> index’
ans =
0 0 1 1 3 2 3 2 1 1
cho biet thu tu muc luong tu
distor