Mã hóa nguồn
212
>> out = compand(in, param, v, method)
in là tín hiệu vào còn
out
là tín hiệu ra
V là biên độ đỉnh của tín hiệu vào
param
là thông số của luật nén giãn (hằng số A hoặc
μ)
method
có thể nhận một trong các giá trị sau:
method
Chức năng
'mu/compressor'
Nén theo luật
μ
'mu/expander'
Giãn theo luật
μ
'A/compressor'
Nén theo luật A
μ
'A/expander'
Giãn theo luật A
Ví dụ sau đây minh hoạ quá trình nén giãn theo luật
μ.
Ví dụ 14-6. Thực hiện quá trình lượng tử hoá tín hiệu hàm mũ theo hai phương pháp:
lượng tử hoá đều và lượng tử hoá có nén giãn theo luật
μ. So sánh sai số bình phương trung
bình của hai phương pháp.
Với phương pháp đầu tiên ta sử dụng trực tiếp hàm quantiz đối với tín hiệu lũy thừa. Tín hiệu
được phân hoạch thành các khoảng đều nhau có chiều dài bằng 1.
Với phương pháp thứ hai, đầu tiên ta sử dụng hàm compand để nén tín hiệu theo luật
μ, sau
đó dùng hàm quantiz để lượng tử hoá tín hiệu thu được và cuối cùng lại dùng hàm compand
để phục hồi tín hiệu ban đầu.
Kết quả xuất ra gồm sai số bình phương trung bình của hai phương pháp và đồ thị biểu diễn
tín hiệu gốc và tín hiệu đã được nén. Có thể nhận thấy rằng sai số lượng tử ở phương pháp thứ
hai nhỏ hơn so với phương pháp thứ nhất.
Mu = 255; % Thông số cho bộ nén giãn theo luật μ
sig = -4:.1:4;
sig = exp(sig); % Tín hiệu hàm mũ cần lượng tử
V = max(sig);
% 1. Lượng tử hoá đều (không nén giãn).
[index,quants,distor] = quantiz(sig,0:floor(V),0:ceil(V));
% 2. Sử dụng cùng phân hoạch và bộ mã lượng tử nhưng có nén trước khi lượng
tử
% hoá và giải nén sau đó
compsig = compand(sig,Mu,V,'mu/compressor');
[index,quants] = quantiz(compsig,0:floor(V),0:ceil(V));
newsig = compand(quants,Mu,max(quants),'mu/expander');
distor2 = sum((newsig-sig).^2)/length(sig);
[distor, distor2] % Hiển thị sai số lượng tử của hai phương pháp.
plot(sig); % Vẽ tín hiệu gốc .
hold on;
plot(compsig,'r--'); % Vẽ tín hiệu đã nén giãn.