主要内容

计算量化误差

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

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

接下来,分别用“fix”、“floor”、“ceil”、“nearest”和“convergent”的舍入方法对信号进行量化,并估计信号的统计量。

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

均匀分布随机信号

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

Q =量化器([8 7]);R = realmax(q);U = r*(2*rand(50000,1) - 1);%均匀分布(-1,1)ξ= linspace (2 * eps (q), 2 * eps (q), 256);

修正:四舍五入零。

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

量化器(“修复”7 [8]);Err =量化(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.788e-06理论均值= 0

地板:圆向负无穷。

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

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

西尔:四舍五入到正无穷。

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

转:转到最近。在一个平局,四舍五入最大星等。

舍入比下限更准确,但所有小于eps(q)的值都舍入为零,因此丢失。

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

收敛:四舍五入到最近。平手时,圆对平。

收敛四舍五入消除了普通“四舍五入”所带来的偏差,因为总是以同一方向四舍五入领带。

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

最近邻和收敛的比较

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

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

F (err) = 1/eps(q),-eps(q)/2 <= err <= eps(q)/2,并且0否则

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

F (err) = 1/eps(q),-eps(q)/2 < err <= eps(q)/2, and0否则

请注意,收敛的误差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 00 0.5000 0 1.0000 1.5000 2.0000 2.0000 2.5000 2.0000 3.0000 4.0000 4.0000

Plot Helper功能

下面列出了本例中用于生成图的辅助函数。

类型(fullfile (matlabroot“工具箱”“定点”“fidemos”' + fidemo '“qerrordemoplot.m”))% #好< * NOPTS >
function qerrordemoplot(q,f_t,xi,mu_t,v_t,err) % qerrordemoplot QERRORDEMO的绘图函数。F_T为ERRPDF计算量化器Q %的理论%量化误差概率密度函数;MU_T为ERRMEAN计算量化器Q %的理论量化误差均值;V_T为ERRVAR计算量化器Q的理论量化误差%方差;ERR是通过量化器q对随机信号进行量化所产生的误差%。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')