第七章 数字信号处理中的有限字长效应
无论是专用硬件,还是在计算机上用软件来实现数字信号处理,输入信号的每个取样值、算法中要用到的参数,以及任何中间计算结果和最终计算结果,都是用有限位的二进制数来表示的。因此,在实际工程中所得到的数字信号处理结果,相对于理论计算所得到的结果必然存在着误差。在某些情况下,这种误差严重到使信号处理系统的性能变坏,以致达到令人不能容忍的程度。通常把这种由于二进制数的位数有限而造成的计算结果的误差或处理性能的变坏,称为有限字长效应。显然,有限字长效应,在数字信号处理软件实现或硬件实现中,在进行设计和对处理结果进行误差分析时,是必须进行考虑的重要问题。本章内容安排如下:
内容提要
1.举例说明在数字信号处理中,有限字长效应引起的误差的几种来源,以及这些误差的表现形式。
2.复习二进制数的表示方法和它们的算术运算方法,以及在运算中考虑字长的限制而对运算结果采取的处理方法。
3.对数字滤波器的系数的量化误差及其对滤波器的稳定性、零点和极点的位臵的影响进行分析,并对滤波器的频率特性的误差进行讨论。
4.有限字长定点运算IIR数字滤波器的极限环振荡现象和死带效应。
5.浮点运算有限字长效应。
7.1 有限字长效应及量化误差
现在用一个浅显的例子来分析有限字长效应产生误差的原因。设有一个一阶低通滤波器,其差分方程为
y(n)?e?0.15y(n?1)?2(1?e?0.15)x(n)
该滤波器输入端作用有一个离散时间信号x(n),它的前18个取样值列于表7-1中的第2列,其中用省略号表示这些取样值是无限精确的。理论上,为求出滤波器的输出信号y(n),只要将输入序列x(n)的值代入y(n)?e?0.15y(n?1)?2(1?e?0.15)x(n)中进行运算(首先要假设初始值y(0),例如取y(0)=0),即可得到y(n)的精确值,表7-1中的第3列是计算结果。应注意,y(n)的精确程度取决于x(n)和常数e?0.15的精确程度,也取决于中间计算结果e?0.15y(n?1)和2(1?e?0.15)x(n)的精确程度。
表7-1 y(n)?e?0.15y(n?1)?2(1?e?0.15)x(n)所代表的滤波器的输入和输出 n 精确计算结果 x(n) 1 2 3 4
用5位二进制数计算结果 y(n) ?yQ[x(n)] (n) 0.376757…… 0.104958…… 0.375 0.260489…… 0.102907…… 0.25 0.172122…… 0.188166…… 0.125 0.0625 0.0625 0.0 0.688332…… 0.353714…… 0.6875 0.125
5 6 7 8 9 0.580995…… 0.466300…… 0.5625 0.1875 0.290385…… 0.482245…… 0.25 0.514251…… 0.558334…… 0.5 0.1875 0.25 0.472043…… 0.612066…… 0.4375 0.25 0.204000…… 0.583642…… 0.1875 0.1875 10 0.975618…… 0.774137…… 0.9375 0.3125 11 0.017704…… 0.671238…… 0.0 0.25 12 0.325665…… 0.668456…… 0.3125 0.25 13 0.794654…… 0.796731…… 0.75 0.375 14 0.836935…… 0.918910…… 0.8125 0.4375 15 0.869722…… 0.033203…… 0.8125 0.5 16 0.685917…… 0.080372…… 0.625 17 0.288005…… 0.010118…… 0.25 18 0.554780…… 0.023970…… 0.5 0.5 0.4375 0.4375 在实际工程中,为了实现该滤波器,可以采用专用硬件来实现,也可以在通用数字计算机上用软件来实现。在这两种情况下,输入信号序列x(n)的各个取样值和e?0.15、2(1?e?0.15)系数,以及中间运算结果和最终输出结果,都是以二进制数的形式存储在有限长度的寄存器内。图7-1给出的是用数字硬件来实现该滤波器的结构图,也是在通用计算机上用软件实现时的计算过程示意图。为了数值上的简单起见,假设图中的存储器、寄存器、延时器、乘法器和加法器等都是5位字长的,其中的单位延时器实际上是一个5位字长的寄存器。这只
是一个为了说明问题的原理性结构图,实际上,所有算术运算可以统一由一个算术运算单元来完成,图7-2是其结构图。现在回到图7-1,图中所有数据,包括量化后的输入数据Q[x(n)]、滤波器的两个参数
e?0.15=0.8607079……和2(1?e?0.15)=0.2785842……;以及两个乘法器和?一个加法器的计算结果0.8125Q[x(n)]+ 0.25y(n?1)等,都要用5位
二进制数来表示。
(0.8125)5位存储器(0.8125)x(n)5位量化器Q[x(n)]5位乘法器(0.25)5位存储器0.8125Q[x(n)]5位加法器y(n)0.255位乘法器单位延时器
图7-1 用5位字长硬件实现数字滤波器的结构
5位存储器0.81250.25Q[x(n)]5位量化器算术运算单元(0.8125)x(n)y(n)Q[y(n-1)]5位寄存器
图7-2 用算术运算单元取代图7-1中的乘法器和加法器 假设采用原码定点小数来表示这些数和进行算术运算,即小数点在二进制表示中的位臵固定不变,小数点左边一位是符号位,0表示正数,1表示负数;小数点右边4位是数值的绝对值。这样,5位字长的二进制原码只能表示[-1,1]之间的31个不同的数值。表7-1中的第4
列是输入数据x(n)用5位字长量化后的结果,第5列是滤波器的输
?出。滤波器的输出y(n)是按下式计算的
??y(n)?0.8125y(n?1)?0.25Q[x(n)]
从图7-1可以看出,有限字长效应在以下3个方面造成滤波器输出的误差:
(1) A/D变换器中的量化误差。输入信号x(n)经5位字长量化后成为Q[x(n)],引入了量化误差。在一般情况下,若被处理的是模拟信号xa(t),则需经过A/D变换器变成二进制数的序列。A/D变换器主要包括取样和量化两个步骤,取样序列x(n)被量化后得到Q[x(n)]。下面将会看到,量化过程可以模型化为取样序列x(n)加上量化噪声e(n),即Q[x(n)]= x(n)+ e(n)。由于滤波器是一个线性系
?统,所以量化后的信号Q[x(n)]经滤波后得到的输出信号y(n)等于两
部分之和,一部分是x(n)通过滤波器产生的输出y(n)=x(n)*h(n),另一部分是量化噪声e(n)通过滤波器产生的输出e0=e(n)*h(n)。可见,输入信号的量化在滤波器输出引起了噪声,这个噪声的大小与输入信号量化时的字长有关系。
但当具体实现一个离散系统时,无论用软件方式还是硬件方式,都是以数字形式实现,因而都要对数据进行量化处理,即用有限字长来表示。
(2) 滤波器的系数量化误差。滤波器的系数e?0.15和2(1?e?0.15)用有限位二进制数表示,实际上也是一种量化处理,必然引入量化误差。例如,在前面所举的例子中,为了用5位二进制数表示这两个系数,