数字低通:名称虽然不同,却仍是一种滤波器

分享到:

作者: Intersil公司 Tamara Schmitz 和 Dave Ritter

 

[Dave坐在实验室中,凝视着充满Verilog代码的屏幕……]

 
T:你好Dave,现在你在做什么?!
 
D:噢,你好T博士,这是一个新的芯片的印刷电路板PCB)原型,它是一个混合信号芯片。我们正在构建一个FPGA的数字部分。FPGA的Verilog代码看起来是这样的。(Dave手指着屏幕。)
 
 
 


 

图1:一个8位计数器的Verilog代码片段
 
T:它看起来很像一个程序,像C代码。是谁写的所有这些代码?
 
D:我们的一位首席工程师Warren Craddock,把这个放在一起,你是对的——虽然我不是专家,但我可以利用我以往在C语言方面经验修改别人的代码。一个很大的不同在于,软件C代码是由一个处理器执行的,而Verilog语言被编译成了硬件逻辑。他们说,Verilog是“并发的”(每个语句都是同时执行,因为每个语句都有其自己的专用逻辑),而C代码是“顺序的”(语句是顺序执行的,这是因为只有一个处理器)。
 
T:很有意思,但你仍然只是工作在这些位(bit)上。你不可能真正地处理这些信号,对吧?
 
D:这是模拟设计师一种常见的误解。的确,在大多数情况下,一个位并不能很好地代表一个模拟信号,即使你收集了进入一条总线一大堆位,它只代表一个数字。数字的数量随着位的数量急剧增加,这样8位就给了我256个选择,而12位可以给我4000个选择。
 
T:所以一条总线可以代表一个模拟信号,同样,A-D转换器代表了其输出端的模拟输入。时间和幅度都被量化了。
 
D:没错。一个8位转换器可将0至2V输入分成256个数字,并在每个时钟周期生成一个数字。现在信号是一个数字流。
 
T:听起来非常昂贵。你总得需要A-D和D-A转换器。
 
D:不一定。我们可以从模拟信号开始——但我们不是必须那样。我们可以在逻辑中内部生成信号,代表斜率、三角波、正弦波信号,等等。这些信号不一定能到达模拟世界,但我们可以用滤波器、调制器和峰值检测器将这些信号处理得像模拟信号一样。
 
T:时间就是一个例子。我能想到的最简单的滤波器是一个RC低通滤波器(LPF)。让我来画出电路和它的波特图。
 
 
图2:模拟RC的波特图和脉冲响应
(图字:连续时间(模拟)单极RC低通滤波器;原理图;脉冲响应(时域)波特图振幅响应(频域)
 
D:看起来不错。难道你要我告诉你数字等效(digital equivalent)?比方说,我需要平滑数字信号,像你想要平滑VRef信号的方式来消除噪声。
 
T:当我过滤一个VRef信号时,我试图消除“失真(fuzz”,高频内容恰恰代表了噪声,而不是信号。你用数字信号做什么,使方形的位(square bits)变圆?
 
D:不是。当我们“平滑”数字信号时,我们希望消除代表噪声的快速变化,就是你说的VRef“失真”。
 
T:因此,一个有噪声的数字信号一组跳来跳去的(jump around数字流吗
 
D:是的。我们要平滑这些跳跃。
 
T:好了,那么我再问问,我的简单的RC滤波器数字等效是什么呢?
 
D:嗯,首先我们要看看你的模拟RC中的一个小细节。
 
T:这很简单,它有一个RxC的时间常数,它以20dB/decade(6dB/octave)的速度在2pRC(以弧度表示)的极点频率以上下降
 
D:是这样。但是,在这种情况下,它更容易配合脉冲响应。脉冲响应非常容易。它只是一个指数衰减。
 
T:所以,脉冲迅速对电容器充电,然后电压随着电阻两端电荷的消耗而衰减。
 
D:是的。当然,我们永远都不会有真正的脉冲,但它们是有用的“数学小说(mathematical fiction)”。问题的关键在于RC滤波器呈指数衰减:衰减率永远与剩余的电压成正比,因为这决定了电阻中的电流。
 
T:好吧……是否你要看看时域。
 
D:我们就在这一点。这里是数字等效:
 
 
 
图3:数字IIR LPF的脉冲响应和波特图
(图字:离散时间(数字)单极点低通滤波器;脉冲响应(时域);波特图振幅响应(频域)
 
 
T:等一下,我看到了一个加法器、一个增益模块,我假设z-1 是一个延迟块(delay block)。这些都是模拟块。我想我们是在讨论数字吧?
 
D:我们是在讨论数字。这些块的每一个都有模拟和数字表示。以加法器为例。
 
T:它可能只是一个电阻,或者是一个运算放大器电路。
 
D:或者它也可以是一个数字门和一个加法器的集合。下面是我们如何构建一个数字加法器的方法:
 
                 
图4:加法器——晶体管、门、半加器,加法器的演变
(图字:晶体管成为了多个门,门又成为了半加器。两个半加器和一个OR门来自于全加器,全加器抽象为一个函数。一个4位加法器是由4个全加器组装起来的。不会限制可以添加的位数。
 
T:你让我回想起了我的逻辑课!第一个集合门的一个半加器,其中两个是全加器,其中的许多可以用二进制形式把两个数字加在一起。好了,但它看起来像一堆废物。在模拟条件下,我可以用三个电阻和一个运算放大器实现它。
 
D:这可能有几倍那么大!图4中的集合门是几百个晶体管。利用现代CMOS工艺,在图4电路的键合点(bonding pad你可以放进数十个这样的东西。你的运算放大器可能是这个大小的几倍。
 
T:好了,但它可以做什么?它是如何工作的?
 
D:要弄清楚它可以做什么,我们可以施加一个离散脉冲,该脉冲在0点时为1,而在其他各处为0。因此,第一个输入为1,第一输出也为1,如图3中的脉冲响应曲线所示。
 
T:好了,这就是你把它放在那里的原因!到目前为止很容易……
 
D:在接下来的时钟周期,输入下降到零(因为它是一个脉冲),而唯一的条件是通过增益块“a”来反馈,“a”通常小于1。
 
T:所以接下来的输出是“a”,然后下一个输出是“a*a”,再下一个是“a*a*a”……由于“a”小于1,它们在不断变小。这看起来就像在kth 样本的输出只是ak !?
 
D:没错。它呈指数下降,就像模拟RC滤波器的脉冲响应。
 
T:所以它必须有与数字信号类似的效果,即RC已经有了模拟信号。
 
D:的确如此!下图是一个简单的脉冲信号及增加的噪声(图5)。第三张图显示了处理噪声信号的数字和模拟滤波器的输出覆盖。模拟处理的信号是红色,数字处理的信号是蓝色,但这并不重要,因为它们基本上是相同的。
 
 
图5:模拟和数字域的低通信号
(图字:无噪声的输入信号;加入了噪声的输入信号;模拟和数字滤波器处理的有噪声的信号)
 
T:它们是完全一样的……
 
D:有很多小的功能模块,这样就使数字信号处理像模拟一样简单。
 
T:但我仍然需要了解z-1 块。图3中的波特图似乎再次向上摆回了。为什么?怎样实现一个数字增益块?我不能只让“位”更大或更小。
 
D:不,不能,但我们现在没有时间。下一次我会告诉你怎样使之成为一个真正的数字电路,然后,如果你运气好,将会谈谈一个数字设计师如何把它变成Verilog代码。
 
T:我不明白。首先,你要继续研究时域,而不是频域,现在它是数字,而不是模拟。我对此不能肯定。
 
D:不,不是“而不是”,我们的想法是一起使用“时间和频率”,以得到一个更好的信号及其处理的图像。而且,我们一起使用模拟与数字,尽可能做到最好、最有效的信号处理。这是“都有”,而不是“非此即彼”。时域图像可以补充频域图像。数字信号处理的各种技巧可以补充模拟方法。我认为,未来的工程师不应该只针对模拟或数字,或者频域或时域,他们应该精通信号处理器:灵活、有创意、非常强大的信号处理器。
 
T:好的,不过,我想现在到了午餐的时间。
 
D:我们今天去Tex-Mex?