假设均匀量化器的输出为对称的偶数个电平,则平均失真为:
对Δ求导,即可得到最小的量化失真D。
对上式求导为:
给定一个p(x),可以通过计算机编程设计得到最佳量化的矢量步长。
Max首先对输入信号为均值为0,单位方差的高斯信号进行了计算。
四.Lloyd—Max算法
对于输入信号分布函数p(x),量化输出电平 ,量化电平数为L,量化区间端点值为
当 时则量化为 . , .
则失真度为:
对和进行优化以减小D,同时对和分别求导,得到下面两个等式:
采用均方误差则,所以可以得出:
这两个式子可以通过计算机编程进行连续的迭代计算,求出最佳的和,以尽可能达到最小的D。
五.MATALB的编程实现
给定量化电平L和输入信号概率密度函数p(x)和信号可能的最大值,最小值进行迭代,求出最佳量化电平和量化范围。
并给出了一个结果。
其中的失真度D的绝对值过大,仅仅是为了说明情况,具体的计算可以根据需要的值进行设置两次迭带中的D值之差,进而计算出比较精确的结果。
(程序清单和计算结果见附录)
六.结束语
Lloyd—Max算法的特点是:
量化电平集中在信号概率大的区域。
在量化电平极小的情况下,均匀量化和非均匀量化的性能差不多。
但是随着量化电平数的增加,非均匀量化产生的失真度明显比均匀量化小。
根据信号的概率密度函数进行量化,将时间离散,幅度连续的信号量化到各个离散的电平上,它们对应了相应的概率。
可以据此进行熵编码,以期在相同的失真度条件下得到最小的码长R。
非均匀量化简单有效的实现且应用在商业电话的对数量化器,根据人的语音特点,在低幅度时用比较多的量化电平(量化台阶小),而在信号不常发生的大幅度电平值时,量化电平就大,常用的技术有美国的
律压缩和欧洲的A-律压缩。
参考文献:
[1]:
John..G.ProakisDigitalCommunication,电子工业出版社影印版
[2]:
Theodore.S.RappaportWirelesscommunication,电子工业出版社影印版
[3]:
傅祖芸信息论基础,电子工业出版社
[4]:
沈振元,聂志泉,区雪荷通信系统原理西安电子科技大学出版社
附录:
源程序清单:
1:
MAIN
functionmain
clearall;
string1=input('Pleaseinputthepdfofthesignal:
');
string2=string1;
disp('Pleaseinputthemaxamplitudeofthesignal:
');
xmax=input('');
disp('Pleaseinputtheminamplitudeofthesignal:
');
xmin=input('');
disp('Pleaseinputthenumberofthequantizationlevels:
');
qsteps=input('');
lloyedmax(string2,xmax,xmin,qsteps)
2:
Lloyd—Max
functiond=lloyedmax(pdf,xmax,xmin,qsteps)
g=inline(pdf);
step=abs((xmax-xmin))/qsteps;
fori=1:
qsteps
xvalue(i)=xmin+(i-0.5)*step;
end;
dold=1;
dsum=0;
j=0;
whileabs(dold-dsum)>0.01
j=j+1;
x(j)=dsum;
dold=dsum;
xdomin
(1)=xmin;xdomin(qsteps+1)=xmax;
fori=2:
qsteps
xdomin(i)=(xvalue(i-1)+xvalue(i))./2;
end
dsum=0;
fori=2:
qsteps+1
xstemp=xdomin(i-1):
abs(xdomin(i)-xdomin(i-1))/100:
xdomin(i);
y=((xvalue(i-1)-xstemp).^2).*g(xstemp);
d=trapz(xstemp,y);
dsum=dsum+d;
end
fori=2:
qsteps+1
xstemp=xdomin(i-1):
abs(xdomin(i)-xdomin(i-1))/100:
xdomin(i);
y1=xstemp.*g(xstemp);
y2=g(xstemp);
d1=trapz(xstemp,y1);
d2=trapz(xstemp,y2);
xvalue(i-1)=d1/d2;
figure(j);
plot(xvalue,1:
1:
qsteps,'*',xdomin,1:
1:
qsteps+1,'x')
ylabel('thecomputenumbers')
xlabel('regions(x)andoutputlevels(*)')
end
outputlevel=xvalue
regions=xdomin
distortion=dsum
end
j=j+1;
x(j)=dsum
outputlevel=xvalue
regions==xdomin
figure(j);
ylabel('thecomputenumbers')
xlabel('regions(x)andoutputlevels(*)')
plot(xvalue,1:
1:
qsteps,'*',xdomin,1:
1:
qsteps+1,'x')
figure(j+1)
clearc;
fori=2:
j
c(i-1)=x(i);
end
plot(1:
1:
j-1,c,'*')
xlabel('thecomputenumbers')
ylabel('everyonedistortion')
附录:
计算举例:
例子:
1.当时,量化电平数L=16;=2。
输入[-20,+20]
过程参数与图示:
说明:
main为主函数,outputlevel为量化输出电平值,regions为量化区域,distortion为量化失真度,x为每次迭代得出的量化失真度
main
Pleaseinputthepdfofthesignal:
'exp((-x.^2)/(2*4))/sqrt(2*pi*4)'
Pleaseinputthemaxamplitudeofthesignal:
20
Pleaseinputtheminamplitudeofthesignal:
-20
Pleaseinputthenumberofthequantizationlevels:
16
outputlevel=
-17.7225-15.2575-12.8047-10.3710-7.9677-5.6117
-3.3209-1.09691.09693.32095.61177.9677
10.371012.804715.257517.7225
regions=
-20.0000-17.5000-15.0000-12.5000-10.0000-7.5000
-5.0000-2.500002.50005.00007.5000
10.000012.500015.000017.500020.0000
distortion=0.5209
outputlevel=
-16.7250-14.3051-11.9139-9.5678-7.2895-5.1032
-3.0152-0.99730.99733.01525.10327.2895
9.567811.913914.305116.7250
regions=
-20.0000-16.4900-14.0311-11.5878-9.1694-6.7897
-4.4663-2.208902.20894.46636.7897
9.169411.587814.031116.490020.0000
distortion=0.4092
outputlevel=
-15.7636-13.4011-11.0891-8.8534-6.7213-4.7050
-2.7849-0.92210.92212.78494.70506.7213
8.853411.089113.401115.7636
regions=
-20.0000-15.5151-13.1095-10.7408-8.4286-6.1963
-4.0592-2.00630.00002.00634.05926.1963
8.428610.740813.109515.515120.0000
distortion=0.3390
F4
F6
F8
F10
F12
outputlevel=
-9.8274-8.3387-6.9523-5.6241-4.3372-3.0791
-1.8402-0.61220.61221.84023.07914.3372
5.62416.95238.33879.8274
regions=
-20.0000-9.4395-7.9327-6.5133-5.1524-3.8325
-2.5406-1.26610.00001.26612.54063.8325
5.15246.51337.93279.439520.0000
distortion=0.1354
x=0.52090.40920.33900.29000.25360.2254
0.20290.18450.16920.15620.14510.1354
2.同样条件,输入为[-60,60]时的情况。
outputlevel=
-10.1614-8.5297-7.0115-5.6234-4.3137-3.0524-1.8207
-0.60520.60521.82073.05244.31375.62347.0115
8.529710.1614
regions=
-60.0000-9.8716-8.1112-6.5563-5.1407-3.8037-2.5136
-1.25060.00001.25062.51363.80375.14076.5563
8.11129.871660.0000
distortion=0.1332
3.同样函数,输入为[-20,20],L=8时
outputlevel=
-4.9505-3.3100-1.9443-0.64360.64361.94433.3100
4.9505
regions=
-20.0000-4.2345-2.7073-1.33600.00001.33602.7073
4.234520.0000
distortion=0.1651
4.同样函数,输入为[-60,60],L=32时
outputlevel=-31.8333-28.4797-25.0944-21.8405-18.7849-16.0125-13.5971
-11.5539-9.8169-8.2835-6.8751-5.5461-4.2694-3.0277
-1.8083-0.60140.60141.80833.02774.26945.5461
6.87518.28359.816911.553913.597116.012518.7849
21.840525.094428.479731.8333
regions=-60.0000-31.7736-28.3413-24.9372-21.6598-18.5750-15.7669
-13.3094-11.2202-9.4397-7.8702-6.4306-5.0723-3.7663
-2.4941-1.24220.00001.24222.49413.76635.0723
6.43067.87029.439711.220213.309415.766918.5750
21.659824.937228.341331.773660.0000
distortion=0.1308
5.输入为[-20,20],L=16时
outputlevel=
-18.7500-16.2500-13.7500-11.2500-8.7500-6.2500-3.7500
-1.25001.25003.75006.25008.750011.250013.7500
16.250018.7500
regions=
-20.0000-17.5000-15.0000-12.5000-10.0000-7.5000-5.0000
-2.50000.00002.50005.00007.500010.000012.5000
15.000017.500020.0000
distortion=0.5209
6.
(Laplacian函数),=4,
输入为[-20,20],L=16;
outputlevel=-17.6367-14.4158-11.6987-9.1889-6.8127-4.5851-2.5525
-0.76080.76082.55254.58516.81279.188911.6987
14.415817.6367
regions=-20.0000-16.1299-13.1992-10.5930-8.1362-5.8057-3.6387
-1.68870.00001.68873.63875.80578.136210.5930
13.199216.129920.0000
7.和1。
相同的条件:
当时,量化电平数L=16;=2。
输入[-20,+20];改变迭代终止条件,即ΔD<0.01,改为ΔD<0.001的情况。
outputlevel=
-6.3968-5.1605-4.2401-3.4217-2.6430-1.8811-1.1266
-0.37520.37521.12661.88112.64303.42174.2401
5.16056.3968
regions=
-20.0000-5.8227-4.7440-3.8704-3.0654-2.2875-1.5210
-0.75950.00000.75951.52102.28753.06543.8704
4.74405.822720.0000
distortion=0.0509