ФОСМС_1 2015 fokin
.pdfКомпандеры
•Логарифмический компрессор μ имеет характеристику «вход-выход» следующего вида:
= |
|
= |
|
|
|
ln 1+ |
|
|
|
(4.1.7a) |
|||
|
|
|
|
||||||||||
|
|
|
|
|
ln 1+ |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
= −1 |
= |
|
|
|
1+ |
−1 |
|
(4.1.7a) |
|||||
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
Логарифмический компрессор A имеет характеристику «вход-выход» следующего вида:
|
|
|
|
|
|
|
|
|
при |
|
|
≤ 1 |
|
|
|
||||||
|
= |
|
= |
|
1+ln |
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
1+ln |
|
|
при |
|
> 1 |
|
|
|||||||
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
1+ln |
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
1 + |
1 + ln |
|
|
|
|
при |
1 + ln |
|
|
|
≤ 1 |
||||||
= −1 |
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
exp 1 + ln |
|
|
− 1 |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
при других |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В примере неравномерного квантования с компандером используется 16 уровней для квантования синусоиды. Анализ графиков, представленных на рисунках, позволяет сделать следующие выводы: при равномерном квантовании абсолютная ошибка квантования меньше, а при неравномерном квантовании меньше относительная ошибка квантования.
11
Характеристики компандеров
% sim_Compander x=[-1:0.01:1];
slines = {'-', ':', '--', '-.'}; colors = {'r', 'g', 'b', 'k'};
subplot(2,1,1); mu=[1,10,255]; legendstr1=cell(1,length(mu)); for i=1:length(mu)
[y1,xmax]=mulaw(x,mu(i));
plot(x,y1,strcat(slines{i},colors{i}), 'LineWidth', 2); hold on; legendstr1{i}=sprintf('\\mu=%d', mu(i));
end legend(legendstr1,'Location','northwest'); xlabel('x'); ylabel('y'); title('\mu-law');
subplot(2,1,2); A=[1,5,87]; legendstr2=cell(1,length(A)); for i=1:length(A)
[y2,xmax]=Alaw(x,A(i)); plot(x,y2,strcat(slines{i},colors{i}),'LineWidth', 2); hold on;
legendstr1{i}=sprintf('A=%d', A(i)); end
legend(legendstr1,'Location','northwest'); xlabel('x'); ylabel('y'); title('A-law');
function [y,xmax]=mulaw(x,mu,ymax) if nargin<3, ymax=1; end
if nargin<2, mu=255; end xmax=max(abs(x));
y=ymax*log(1+mu*abs(x/xmax))./log(1+mu).*sign(x);
function x=mulaw_inv(y,mu,xmax) if nargin<3, xmax=1; ymax=1;
else ymax=max(abs(y)); end
if nargin<2, mu=255; end x=xmax.*(((1+mu).^(abs(y)/ymax)-1)/mu).*sign(y);
12
Пример квантования с компандером
function [d,dcode]=adc(a,b,c,code_table)
%Analog-to-Digital Conversion
%Input : analog signal a, boundary vector b, centroid vector c,
%and code_table
%Output: quantized samples d and the corresponding code dcode N=length(c);
if nargin<4, code_table=[0:N-1]'; end
Na=length(a); % dcode=zeros(Na,size(code_table,2)); for n=1:Na
I=find(a(n)<b(2:N)); if ~isempty(I)
d(n)=c(I(1)); dcode(n,:)=code_table(I(1),:);
else
d(n)=c(N); dcode(n,:)=code_table(N,:);
end
end
%dc040e03.m for Example 4.3 (Non-uniform Quantization of sin t) clear, clf
t=[0:0.05:7]; x=sin(t);
b0=-1; bN=1; xmax=max(abs([b0 bN]));
N=16; delta=(bN-b0)/N; % Width of the quantization interval b=b0+[0:N]*delta; % Boundary vector
c=b(1:N)+delta/2; % Midpoint vector x_q16=adc(x,b,c); % Uniform quantization bn=mulaw_inv(b/xmax,50)*xmax; cn=mulaw_inv(c/xmax,50)*xmax; xn_q16=adc(x,bn,cn); % Non-uniform quantization subplot(311);
plot(t,x,'k', t,x_q16,'b:', t,xn_q16,'r-','LineWidth', 2); legend('x','uniform','non-uniform','Location','southwest'); title('Analog and quantized signals');
e=x-x_q16; en=x-xn_q16; % Absolute error subplot(312);plot(t,e,'b:', t,en,'r-','LineWidth', 2); legend('uniform','non-uniform','Location','southwest'); title('Absolute quantization error');
tmp= abs(x)+0.01; re=e./tmp; |
ren=en./tmp; % Relative error |
|
subplot(313);plot(t,re,'b:', |
t,ren,'r-','LineWidth', 2); |
|
legend('uniform','non-uniform','Location','southwest'); |
|
|
title('Relative quantization |
error'); |
13 |
|
|