由DAC谐波频谱成分重构其传递函数

所有DAC都会表现出一定程度的谐波失真,谐波失真是用来衡量当DAC输入端采用一个理想的均匀采样正弦波的数值序列驱动时,其输出端能在多大程度上再现这个理想的正弦波。由于DAC的瞬态和静态特性并不理想,因此输出频谱将会包含谐波成分。DAC的瞬态输出特性包括压摆率限制、非对称上升和下降时间、有限建立时间。静态特性与传递函数偏离直线的程度有关。本文将重点讨论静态特性,并阐述一种由输出频谱中观察到的谐波成分导出DAC 传递函数的方法。分析中假设,传递函数而非瞬态输出特性是所观察到的谐波失真的主要来源。此假设在低频时成立。

DAC传递函数

图1显示一个理想的DAC传递函数,它是一条斜线,y=mx+b. 数字输入位于x轴,模拟输出位于y轴。

Figure 1
图1. 理想的DAC传递函数

x轴上的目标范围是从左边的最小码(A)到右边的最大码(B)。y轴上的目标范围是从底部的最小输出值(C)到接近顶部的最大输出值(D)。定 义理想传递函数的斜率(m)和y轴截距(b)的方程式用边界值A、B、C、D表示。信号g(t)代表一个无失真的正弦波,由A至B范围内的数字输入组成,时间轴向下。信号 u(t)代表模拟输出,其值在C至D范围内,时间轴向右。

输出信号是通过传递函数反射的输入信号。请注意,输出信号是将g(t)上各点链接到u(t)上相应点的结果。图1显示在特定时间点 t=tk的传递操作例子,该时 间 点 确定输入信号上的点g(tk)。传递函数进而将g(tk)链接到输出信号上的相应点u(tk)。对于理想的线性传递函数, u(t)与g(t)成比例关系。请注意,g(tk)对应于x轴上的点xk,它通过传递函数反射至y轴上的点yk。借助关于耦合点集(g(t n),u(tn))的已有知识,可以确定传递函数上的相关点(x n,y n)。因此,通过输入信号g(t)上的点与输出信号u(t) 上的点之间的关系,完全可定义传递函数。

对于N位DAC,边界值A和B取特定值,即 A = 0 且 B = 2N–1。 而为了方便起见,指定边界值C和D为 C = A 且 D = B。 这样意味实际DAC 输出信号的比例和偏移,因而其峰峰值范围为0至 2N–1。 利用A、B、C、D的这些值,因为斜率 m = 1 且截距 b = 0。所以理想传递函数可简化为 y=x

到目前为止,讨论的重点还是理想的DAC传递函数,但现在我们有了可以处理失真DAC传递函数f(x)的工具,如图2所示。需要注意的主要 特点是:传递函数不再是直线y=x,而是一个形状函数f(x);图中随意以平滑弧形来表示。f(x)对输出函数u(t)的影响也同样重要。理想输入 g(t)通过传递函数f(x)反射,产生失真输出u(t)。与现成DAC的传递函数相比,图中所示的弧形传递函数较为夸张,仅为加强说明效果而已。 现代DAC的传递函数与理想的直线几乎没有偏差,但即使最微小的偏差也会导致输出频谱中出现谐波杂散。

Figure 2
图2. 失真的DAC传递函数

能否成功重构DAC传递函数,取决于是否能通过已知的g(t)和u(t)确定 各点(xk,f(xk))。这一过程分为两步:首先采用一个代表理想采样正弦 波的数值序列驱动DAC输入,利用频谱分析仪测量DAC输出,并记录 基波信号和尽可能多谐波成分的幅值;然后将测得的谐波幅值转换 为特定形状的传递函数。如果操作得当,将g(t)代入f(x)仿真u(t)将产 生与测量结果相同的谐波失真值。

第一步:测量DAC谐波

第一步需要一个输入序列,用来代表一个以等距时间间隔采样的 理想正弦波周期。目标是重构DAC传递函数,因此从0到2N–1的每个 DAC码必须在输入信号中至少出现一次。输入序列需要2N以上的采 样点才能以等距间隔使用每个DAC码,实际上至少需要2N+3个采样 才能保证每个码都出现。下式可产生2K DAC码的理想正弦序列(K≥ N+3)。函数round{x}x舍入为最近的整数。

Equation 1
     where n=0,1,2,3, ... 2K–1

此方程式假设DAC将标准二进制格式的数字输入字解码为0至2N–1 范围内的无符号整数。对于偏移二进制或二进制补码DAC,必须调 整gn以表示负值。

数值序列(gn)以采样速率f s重复提供给DAC,因此DAC输出频谱含有 频率f0=f s/2k的基波信号。谐波出现在2f0、3f0、4f0和f0的其它整数倍。 由于DAC输出频谱具有采样性质,因此这些谐波的幅度受sin(x)/x响 应的限制。不过,f0与fs相比微不足道,因此sin(x)/x响应实际上是平 坦的,可忽略不计。例如,对于一个8位DAC,K≥11且f0≤fs/2048,100次 谐波的sin(x)/x将不超过0.39%(0.034 dB)。

为了准确重构传递函数f(x),需要根据谐波数(h)集尽可能记录更多谐 波的幅值。这些整数从h=1(基波频率)至h=H,其中H表示取测量幅 值的最高谐波数。例如,对于10次谐波的测量,H=10,该谐波数集为 h={1, 2, 3, .. 10}。

然后,将各测量谐波的幅值(M)与其谐波数关联。例如,M1是1次谐波 (基波)的幅值,M2是2次谐波的幅值,依此类推至MH。谐波幅值通常 用相对于基波幅值的分贝数(dBc)来衡量。dBc转换为线性单位的公 式如下:

Equation 2

其中D表示测得的谐波幅值,单位为dBc。例如,如果3次谐波的幅值 为–40 dBc,则线性幅值M3=10–40/20或0.01。M1始终等于1,因为根据 定义,基波的幅值为0 dBc。

第二步:重构DAC传递函数

该过程的第二步涉及到将谐波测量结果与传递函数相关。f(x)上的点 取决于g(t)和u(t)上对应点之间的关系,因此首先必须将频域中的谐 波幅值转换到时域。请注意,组成g(t)的DAC码与g(t)正弦形式的相关 时间点一一对应。因此,构成g(t)的DAC码与时域相关。此外,u(t)通 过f(x)与g(t)相关,而g(t)是一个时域函数,因此u(t)也必须表示为时域 函数。这样就能将g(t)中的各时间点tk链接到u(t)中的相关时间点,从 而由g(t)和u(t)确定f(x)。

将谐波幅值转换到时域非常困难,因为f(x)必须明确与g(t)中的各可 能DAC码(0至2N–1)相关。g(t)是一个理想正弦波,因此确保唯一性 的唯一方法是将范围限制在该正弦波单调增加的位置,如图3加粗 部分所示。如果没有这一限制条件,f(x)上的一个点可能会映射到g(t) 上的两个点,从而导致不明确。

为演示这种不定性,请想象将区间T向下移动。现在,f(x)上的点(xk, f(xk))可以与g(t)上的两个点相关,这是不可接受的。将范围T限制在 图中所示位置,将不存在不定性。g(t)为正弦波,因此所需范围T对应 于½周期,其初始相位偏移为3π/2弧度。

Figure 3
图3. f(x)与g(t)之间的关系

g(t)的范围受T限制意味着u(t)也具有类似的范围限制。因此,将所记录的谐波幅值转换到时域时,必须确保将u(t)限制在与g(t)相同的范围T,如图4所示。

Figure 4
图4. g(t)和u(t)的时域范围

请注意,实际的时间范围T无关紧要,因为f(x)仅在g(t)和u(t)二者的幅 值之间起转换作用。为简化分析,将基波频率(f0)归一化为1。因此,2 次谐波的频率为2,3次谐波的频率为3,如此类推。所以,谐波频率 与谐波数(h)相等:fh=h。这一便捷关系可简化从谐波测量结果Mh创 建u(t)的数学计算。

正弦波的一般时域表达式为:

Equation 3
     其中β为峰值振幅,θ为初始相位偏移。

用h代替f,并用Mh代替β,可以获得各谐波uh(t)的时域表达式。不过 应记住,g(t)偏 移3π/2弧度。此外,g(t)与u(t)之间通过f(x)关联意味着 g(t)和u(t)在相位上是对准的。用3π/2代替θ可提供所需的对准。下式 中,请注意0≤t<1且π取代了2π,目的是将基波限制在范围T所表示的 半个周期:

Equation 4

利用各谐波uh(t)的时域表达式,便可以重构复合输出u(t),表示为基 波和谐波信号的和:

Equation 5

如前所述,我们的目标是将g(t)与u(t)相关以重构DAC传递函数f(x)。此 外,g(t)必须恰好由2N个样本组成,以便与f(x)上的点一一对应。因此, g(t)的样本计算公式为:

Equation 6
     (n=0,1,2,3 .. 2N–1)

g(t)由2N个样本组成,因此由包括2N个采样的u(t)采样值集重构f(x)似 乎是合理的。然而,事实却是至少需要2N+3个采样才能为较小的Mh 值提供适当的精度。这种情况下,u(t)各采样点的计算公式应如下:

Equation 7
     (n=0,1,2,3 .. 2N+3–1)

请注意,这将导致u(t)所含的采样数多于g(t),u(t)的多个样本可能与 f(x)和g(t)上的一个点对应,从而使u(t)和g(t)到f(x)的映射关系复杂化。 因此,必须对特定的样本组求平均值,以便提供到f(x)的合理映射。 下面的伪代码反映了所需的映射关系,其中假设使用一个N位DAC, g(t)有2N个点,u(t)有2N+3个点。阵列DacXfr含有2N个元素,初始值均为0。执行该代码后,阵列DacXfr的元素包含归一化的DAC传递函数。

n = 0
FOR i = 0 TO 2N–1
     AvgCnt = 0
     WHILE i = g[n]
          AvgCnt = AvgCnt + 1
          DacXfr[i] = DacXfr[i] + u[n]
          n = n + 1
          IF n >= 2N+3
               EXIT WHILE
          END IF
     END WHILE
     IF AvgCnt = 0
          EXIT (fail because array, g[ ], is missing a DAC code)
     END IF
     DacXfr[i] = (DacXfr[i]/AvgCnt)/2N
END FOR

验证

为验证本文所述的方法,使用一台频谱分析仪来测量一个14位DAC 的输出;该DAC由一个代表理想正弦波的输入序列驱动。记录了前 14次谐波的幅值(2次到15次,单位dBc),并利用这些值重构DAC传 递函数f(x)。然后,将理想正弦输入序列g(t)代入重构的DAC传递函数 f(x)进行模拟,产生一个输出序列。一个FFT将u(t)转换为频域等效值 U(ω)。从U(ω)提取谐波幅值,并将其与频谱分析仪的测量结果相比较, 如表1所示。请注意,与7次谐波相关的最大误差仅为0.065 dB。

Table 1
Harmonic Number Measured Magnitude (dBc) Simulated magnitude (dBc) Deviation (dB)
1 0.00 0.00 0.000
2 -75.1 -75.100 0.000
3 -74.5 -74.502 -0.002
4 -90.5 -90.501 -0.001
5 -86.5 -86.498 0.002
6 -92.0 -91.999 0.001
7 -95.5 -95.565 -0.065
8 -93.8 -93.801 -0.001
9 -97.2 -97.187 0.013
10 -89.6 -89.599 0.001
11 -94.2 -94.204 -0.004
12 -98.8 -98.802 -0.002
13 -95.6 -95.649 -0.049
14 -99.3 -99.298 0.002
15 -91.1 -91.080 0.020

由于比例关系,重构传递函数的图形呈现为一条直线(y=x)。事实上, 该传递函数与y=x的偏差足以产生表1所示的谐波成分。为帮助理解, 图5仅显示了该传递函数与理想直线的偏差。垂直轴的单位为LSB。

Figure 5
图5. DAC传递函数的残差

作者

Ken Gentile

Ken Gentile

Ken Gentile 于1998 年加入ADI 公司,担任时钟与信号频率合成产品线系统设计工程师,办公地点在北卡罗来纳州格林斯博罗。他的专长是直接数字频率合成、模拟滤波器设计和编写MATLAB 中基于GUI 的工程工具。Ken 拥有10 项专利。他在各种行业杂志上发表了14 篇文章以及十几篇ADI 应用笔记,另外还出席了2001、2005 和2006 年的ADI 年度技术研讨会(GTC)。他于1996年毕业于北卡罗来纳州立大学,获得电气工程学士学位。业余时间,Ken 喜欢阅读、玩数学智力游戏,以及从事与科学、工程和"后院"天文学相关的大部分活动。