主要内容

计算量化误差

这个例子展示了如何计算和比较使用各种舍入方法时信号量化误差的统计量。

首先,创建一个跨越量化器范围的随机信号。

然后,分别用四舍五入的方法‘fix’、‘floor’、‘cell’、‘nearest’和‘convergent’对信号进行量化,并估计信号的统计量。

用ERRPDF计算量化误差的理论概率密度函数,用ERRMEAN计算量化误差的理论均值,用ERRVAR计算量化误差的理论方差。

均匀分布随机信号

首先,我们创建一个均匀分布的随机信号,它跨越1到1的定位点量化器域。

Q =量化器([8 7]);r =最大浮点数(q);U = r*(2*兰特(50000,1)- 1);均匀分布(-1,1)ξ= linspace (2 * eps (q), 2 * eps (q), 256);

修正:四舍五入接近零。

注意,使用“fix”舍入,概率密度函数的宽度是其他函数的两倍。因此,方差是其他方差的4倍。

q =量化器(“修复”7 [8]);Err = quantize(q,u) - u;f_t = errpdf (q, xi);mu_t = errmean (q);v_t = errvar (q);%理论方差= eps(q)^2 / 3%理论均值= 0fidemo.qerrordemoplot (q, f_tξ,mu_t v_t,犯错)
估计误差方差(dB) = -46.8586理论误差方差(dB) = -46.9154估计均值= 7.788 -06理论均值= 0

层数:向负无穷圆。

当整数和定点数用二的补数表示时,舍入通常被称为截断。它是DSP处理器中最常见的舍入模式,因为它不需要硬件来实现。Floor不会像ROUND那样产生与真实值一样接近的量化值,但它具有相同的方差,并且符号变化的小信号将被检测到,而在ROUND中它们将丢失。

q =量化器(“地板”7 [8]);Err = quantize(q,u) - u;f_t = errpdf (q, xi);mu_t = errmean (q);v_t = errvar (q);%理论方差=每股收益(q)^2 / 12%理论均值= -eps(q)/2fidemo.qerrordemoplot (q, f_tξ,mu_t v_t,犯错)
估计误差方差(dB) = -52.9148理论误差方差(dB) = -52.936估计均值= -0.0038956理论均值= -0.0039062

cell: Round Towards Plus Infinity。

q =量化器(“装天花板”7 [8]);Err = quantize(q,u) - u;f_t = errpdf (q, xi);mu_t = errmean (q);v_t = errvar (q);%理论方差=每股收益(q)^2 / 12%理论均值= eps(q)/2fidemo.qerrordemoplot (q, f_tξ,mu_t v_t,犯错)
估计误差方差(dB) = -52.9148理论误差方差(dB) = -52.936估计均值= 0.0039169理论均值= 0.0039062

整数:整数到最近的。在一个平局,四舍五入到最大的震级。

Round比floor更精确,但是所有小于eps(q)的值都被四舍五入为零,所以就丢失了。

q =量化器(“最近的”7 [8]);Err = quantize(q,u) - u;f_t = errpdf (q, xi);mu_t = errmean (q);v_t = errvar (q);%理论方差=每股收益(q)^2 / 12%理论均值= 0fidemo.qerrordemoplot (q, f_tξ,mu_t v_t,犯错)
估计误差方差(dB) = -52.9579理论误差方差(dB) = -52.936估计均值= -2.212 -06理论均值= 0

收敛:四舍五入到最近。平局,平局。

收敛四舍五入消除了由普通“圆”引入的偏置,因为总是在相同的方向上四舍五入领带。

q =量化器(“收敛”7 [8]);Err = quantize(q,u) - u;f_t = errpdf (q, xi);mu_t = errmean (q);v_t = errvar (q);%理论方差=每股收益(q)^2 / 12%理论均值= 0fidemo.qerrordemoplot (q, f_tξ,mu_t v_t,犯错)
估计误差方差(dB) = -52.9579理论误差方差(dB) = -52.936估计均值= -2.212 -06理论均值= 0

最接近与收敛的比较

收敛四舍五入的误差概率密度函数很难与最接近四舍五入的误差概率密度函数区分开来。

收敛的误差p.d.f.为

f (err) = 1 / eps (q),-eps(q)/2 <= err <= eps(q)/20否则

而圆的误差P.D.F.为

f (err) = 1 / eps (q),-eps(q)/2 < err <= eps(q)/20否则

注意收敛的误差p.d.f.是对称的,而圆的误差稍微偏向正数。

唯一的区别是领带的舍入方向。

x = (-3.5:3.5) ';[x收敛(x)最近的(x))
Ans = -3.5000 -4.0000 -3.0000 -2.5000 -2.0000 -2.0000 -1.5000 -2.0000 -1.0000 -0.5000 -1.0000 -0.5000 00 0.5000 0 1.0000 1.5000 2.0000 2.0000 2.5000 2.0000 3.5000 4.0000 4.0000

情节Helper函数

下面列出了在本示例中用于生成绘图的helper函数。

类型(fullfile (matlabroot“工具箱”“定点”“fidemos”' + fidemo '“qerrordemoplot.m”))% #好< * NOPTS >
function qerrordemoplot(q,f_t,xi,mu_t,v_t,err) % qerrordemoplot QERRORDEMO的绘图函数。% QERRORDEMOPLOT(Q,F_T,XI,MU_T,V_T,ERR)生成示例函数QERRORDEMO使用的图形并显示%,其中Q是正在分析其属性的量化器%;F_T为ERRPDF计算的量化器Q %的理论%量化误差概率密度函数;XI是由% ERRPDF计算的值的域;MU_T是用ERRMEAN计算的量化器Q %的理论量化误差均值;V_T为ERRVAR计算的量化器Q的理论量化误差%方差;ERR是由量化器Q. % %量化随机信号所产生的错误%。% Copyright 1999-2014 The MathWorks, Inc. v=10*log10(var(err));disp(['估计误差方差(dB) = ',num2str(v)]);disp(['理论误差方差(dB) = ',num2str(10*log10(v_t))]); disp(['Estimated mean = ',num2str(mean(err))]); disp(['Theoretical mean = ',num2str(mu_t)]); [n,c]=hist(err); figure(gcf) bar(c,n/(length(err)*(c(2)-c(1))),'hist'); line(xi,f_t,'linewidth',2,'color','r'); % Set the ylim uniformly on all plots set(gca,'ylim',[0 max(errpdf(quantizer(q.format,'nearest'),xi)*1.1)]) legend('Estimated','Theoretical') xlabel('err'); ylabel('errpdf')