8 第八章 简单滤波器
我醉欲眠卿且去,明朝有意抱琴来。
滤波真的是一个很庞大的话题,在模拟电路的世界中滤波占据有三分天下,这一章我们会把视角更多地放在频域上,从不同的角度看待信号。
8.1 频域变换
首先滤波器是什么东西?根据名字可以知道它是过滤某些波的器件,滤波器可以根据频率来筛选掉某些特定的波。这是否意味着一个频率是1千赫兹的三角波,通过一个截止频率为2千赫兹的低通滤波器后三角波保持不变?
为了回答这个问题,我们需要从其他角度看待三角波,从一个例子入手:
在二维向量空间或三维向量空间中的任何一个点都可以被分解为 图 8.1 的形式,其中系数后面的项被称为“基”,基与基之间是相互正交的,正交满足内积等于0,内积定义如下:
\[ \binom{a}{b} \cdot \binom{c}{d} = ac + bd \tag{8.1}\]
而基前面的系数等于该点与每个积之间的内积除以基的模长,例如:
\[ x_1 = \frac{\binom{x_1}{y_1} \cdot \binom{1}{0}}{\sqrt{1^{2} + 0^{2}}} \tag{8.2}\]
从这个观点出发,一个函数也可以看成是无穷维向量空间中的某个点:
当\(n\)趋于无穷时,我们可以用一个无穷长的序列来表示这个函数,而这个序列是无穷维向量空间中的一个点。如何在这样一个向量空间中定义内积呢?假设有另一个函数序列\(g\)(\(x\)),定义函数内积\(\langle f, g \rangle\) 满足:
\[ \langle f, g \rangle = \sum_{i=1}^{n} f(x_i) g(x_i) \tag{8.3}\]
当\(n\)趋于无穷时有:
\[ \frac{b - a}{n - 1}\langle f, g \rangle = \int_a^{b} f(x) g(x) \, dx \tag{8.4}\]
\(\frac{b - a}{n - 1}\)是积分项里面的\(\Delta x\),用于收敛当\(n\)趋于无穷时 式 8.3 的发散(发散到无穷大),由此我们得到了函数的内积,通过函数内积我们可以判断哪些函数是正交的。
一系列的正交函数(正如 图 8.1 中的正交基一样)可以把任一函数分解为这些正交函数的线性组合。对于一个周期为\(L\)的函数,存在这样一组正交函数:\(1, \cos\left(1\frac{\pi}{L}x\right), \sin\left(1\frac{\pi}{L}x\right), \ldots, \cos\left(n\frac{\pi}{L}x\right), \sin\left(n\frac{\pi}{L}x\right)\),其中\(n\)从1取到正无穷。如果周期\(L\)趋于无穷大,可以想象对任意某个数\(m\)来说\(\sin\left((m - 1)\frac{\pi}{L}x\right)\)与\(\sin\left(m\frac{\pi}{L}x\right)\)之间的间隔会变得无穷小,最终这一组正交函数也由离散间隔变得连续。
总的来说现在我们知道了任意函数可以被分解为无穷多个一系列正余弦函数的线性组合,这一思想最早于1811年傅里叶在他的一篇论文中被证明出来,由此开启了分析学上一个新的领域。
由傅里叶变换发展而来的拉普拉斯变换多用在工程领域,对一个函数\(f\)(\(t\))做拉氏变换:
\[ \mathcal{L}\left\lbrack f(t) \right\rbrack = F(s) = \int_0^{\infty}{f(t)e^{- st}}dt \tag{8.5}\]
其中\(s\) = \(\delta\) + \(j\omega\),我们不用去了解 式 8.5 具体是怎么来的或代表什么意思,重要的是它对我们理解电路有什么帮助。
为了应用它,我们先来看两个常见的拉氏变换,首先是一个指数型函数\(f\)(\(t\)) = \(e^{-at}\):
\[ \begin{aligned} \mathcal{L}\left( f(t) \right) & = \int_0^{\infty} e^{-at} e^{-st} \, dt \\ & = \int_0^{\infty} e^{-(s + a)t} \, dt \\ & = \left. -\frac{1}{s + a}e^{-(s + a)t} \right|_0^{\infty} \\ & = \frac{1}{s + a} \end{aligned} \tag{8.6}\]
另一个函数是\(g(t) = \frac{df(t)}{dt}\):
\[ \begin{aligned} \mathcal{L}\left( g(t) \right) & = \int_0^{\infty}\frac{df(t)}{dt}e^{-st} \, dt = \int_0^{\infty} e^{-st} \, df(t) \\ & = \left. f(t)e^{-st} \right|_0^{\infty} - \int_0^{\infty} f(t) \, d(e^{-st}) \\ & = sF(s) - f(0) \end{aligned} \tag{8.7}\]
\(f\)(0)是\(f\)(\(t\))的初始值,它表明一个函数的微分的拉氏变换等于\(s\)乘以这个函数自身的拉氏变换减去初始值。这是一条很重要的信息,因为它表示我们可以把一个微分的东西转化成代数乘法上的东西。
同时还需要知道的是拉氏变换是一个线性变化,它满足线性和叠加性:
\[ \begin{aligned} \mathcal{L}\bigl(a f(t)\bigr) &= a F(s) \\ \mathcal{L}\bigl(f(t) + g(t)\bigr) &= F(s) + G(s) \end{aligned} \tag{8.8}\]
有了以上认识后再来看一个例子,如下图所示的RC电路:
我们知道流过电阻和电容的电流大小是相同的:
\[ \frac{V_{\text{in}} - V_{\text{out}}}{R} = C\frac{dV_{\text{out}}}{dt} \tag{8.9}\]
把\(V_{\text{in}}\)和\(V_{\text{out}}\)当成关于时间\(t\)的函数,可以通过 式 8.9 计算\(V_{\text{out}}\)。但求解微分方程是很麻烦的一件事情,至少一眼看过去并不知道\(V_{\text{out}}\)大概长什么样。现在我们对等式两边分别做拉氏变换(假设初始电容电压为0):
\[ \begin{aligned} \mathcal{L}\left( \frac{V_{\text{in}} - V_{\text{out}}}{R} \right)&=\mathcal{L}\left( C\frac{dV_{\text{out}}}{dt} \right) \\ \frac{1}{R}\left( V_{\text{in}}(s) - V_{\text{out}}(s) \right) &= C\left( sV_{\text{out}}(s) - V_{\text{out}}(0) \right) \\ \Rightarrow V_{\text{out}}(s) & = \frac{1}{1 + RCs}V_{\text{in}}(s)\\ \end{aligned} \tag{8.10}\]
如果\(V_{\text{in}}\)是个直流上的电压(常数),它的拉氏变换是:
\[ \int_0^{\infty} V_{\text{in}} e^{-st} \, dt = V_{\text{in}} \int_0^{\infty} e^{-st} \, dt = \frac{V_{\text{in}}}{s} \tag{8.11}\]
带入 式 8.10 最后得到:
\[ \begin{aligned} V_{\text{out}}(s) = & \frac{1}{1 + RCs}\frac{V_{\text{in}}}{s} \\ = & \left( \frac{1}{s} - \frac{RC}{1 + RCs} \right)V_{\text{in}}\\ \end{aligned} \tag{8.12}\]
从 式 8.12 我们可以还原出\(V_{\text{out}}\)在时域是什么样的,\(\frac{1}{s}\)对应常数项,\(\frac{RC}{1 + RCs}\)和指数函数的拉普拉斯变换很相似,没错,不难看出\(V_{\text{out}} = \left( 1 - e^{-\frac{t}{RC}} \right) V_{\text{in}}\),当\(t\) = 0时,\(V_{\text{out}}\) = 0,\(t\)趋于无穷大时,\(V_{\text{out}}\) = \(V_{\text{in}}\),由此画出输入-输出曲线:
在\(t\) = \(RC\)(一个时间常数)时,可以计算得到\(V_{\text{out}}\) = 0.63\(V_{\text{in}}\)。回顾我们的计算过程,虽然看起来比较繁琐,但相比于直接计算 式 8.9,这算得上是有比较明确的方向了。常见函数的拉氏变换表大家可以去网上或其他资料查看。
基于拉氏变化,我们可以对电容有更为便捷的描述:考虑电容在\(s\)域的等效阻抗。
给电容施加一个测试电压\(V_{\text{test}}\),等效阻抗等于\(\frac{V_{\text{test}}}{i}\),电容两端满足:
\[ i = C\frac{dV_{\text{test}}}{dt} \tag{8.13}\]
同样地左右两边分别做拉氏变换(假设无初始电压):
\[ \begin{aligned} & i(s) = CsV_{\text{test}}(s) \\ & \frac{V_{\text{test}}(s)}{i(s)} = \frac{1}{Cs} \end{aligned} \tag{8.14}\]
这是电容在\(s\)域的等效阻抗,怎么理解呢,同样考虑 图 8.3 的RC电路,这回电容用\(\frac{1}{Cs}\)代替电阻分压:
\[ \begin{aligned} V_{\text{out}}(s) & = \frac{\frac{1}{Cs}}{R + \frac{1}{Cs}}V_{\text{in}}(s) \\ & = \frac{1}{1 + RCs}V_{\text{in}}(s)\\ \end{aligned} \tag{8.15}\]
我们得到了和 式 8.10 一样的结论,现在定义传递函数\(H(s)\)等于输出的拉氏变换比上输入的拉氏变换,则 图 8.6 的传递函数等于\(H(s) = \frac{V_{\text{out}}(s)}{V_{\text{in}}(s)} = \frac{1}{1 + RCs}\),化成框图有如下形式:
对于传递函数(提醒一下只有线性系统或线性微分方程才能定义出传递函数),控制理论中有一个非常重要的结论:正弦波输入信号\(A_{i}\)sin (\(\omega_{i}t\) + \(\varphi_{i}\))(其中\(\omega_{i}\)为角频率(\(f = \frac{\omega}{2\pi}\)),\(A_{i}\)为初始振幅,\(\varphi_{i}\)为初始相位)通过传递函数\(H(s)\)后,输出频率保持不变,振幅变为原来的\(|H(j\omega_i)|\)倍,相位延迟\(\angle H(j\omega_i)\)度,\(j\)为虚数满足\(j^{2}\) = −1。
举个例子,对于 图 8.7 的传递函数,假设输入信号\(V_{\text{in}}\) = 2\(\sin\)(1000\(\pi t\))(角频率为1000\(\pi\),也就是500赫兹),要分析其响应,先计算\(H\)(1000\(\pi j\)):
\[ \begin{aligned} H(1000\pi j) & = \frac{1}{1 + RC1000\pi j} \\ & = \frac{1}{1 + RC1000\pi j} \cdot \frac{1 - RC1000\pi j}{1 - RC1000\pi j} \\ & = \frac{1 - RC1000\pi j}{1 - (RC1000\pi j)^{2}} \\ & = \frac{1}{1 + R^{2}C^{2}10^{6}\pi^{2}} - \frac{RC1000\pi}{1 + R^{2}C^{2}10^{6}\pi^{2}}j \\ \end{aligned} \tag{8.16}\]
如果\((RC)^2\) ≪ \(10^{-6}\),则上式可以化简为1 − $RC\(1000\)j\(。当化简成实部加虚部的形式后,|\)H\((1000\)j$)|等于根号下实部的平方加虚部的平方:
\[ \left| H(1000\pi j) \right| = \sqrt{1^{2} + ( - RC1000\pi)^{2}} \tag{8.17}\]
相位大小是:
\[ \angle H(1000\pi j) = \arctan{(\frac{- RC1000\pi}{1}}) \tag{8.18}\]
这样就得到了输出信号\(V_{\text{out}} = 2\sqrt{1 + (RC1000\pi)^{2}}\sin\left( 1000\pi t + \arctan( - RC1000\pi) \right)\)。
下面要介绍伯德图,因为\(H(s)\)的响应只对正弦输入的角频率\(\omega\)敏感而与初始振幅、初始相位无关,取\(\omega\)从0到趋于无穷大的一系列正弦信号输入到\(H(s)\),分别计算\(|H(j\omega)|\)和 \(\angle H(j\omega)\),并画在一张图里,就得到了传递函数\(H(s)\)的伯德图。
因为横纵坐标包含的范围可以足够地大,一般情况下横坐标从\(10^{0}\)(\(10^{0}\)等于数字1)开始,前后每10倍频标记一个刻度,纵坐标取\(|H(j\omega)|\)的对数20\(\log\)(\(|H(j\omega)|\))。
有很多在线网站和软件可以直接生成传递函数的伯德图,只需要输入传递函数,对 图 8.7 取R等于10千欧,C等于10微法,\(\frac{1}{1 + RCs}\)的伯德图如下:
它分为上下两个曲线,前者表示幅度响应(20\(\log\)(\(|H(j\omega)|\)))的变化情况,后者是相位响应。
可以看到角频率在10弧度/秒时(\(f = \frac{10}{2\pi} = 1.54\)hz)20\(\log\)(\(|H(j\omega)|\))出现转折(0dB对应放大倍数为1),转折点处的频率也被称为截止频率,此时 \(20\log |H(j10)| = -3\text{dB}\),\(|H(j10)|\) 在 0.7 左右。随着输入频率再升高,20\(\log\)(\(|H(j\omega)|\))持续下跌,在无穷远处到达−∞dB(对应\(|H(j\infty)|\)为0)。
所以 图 8.3 的电路到底是什么,其实就是个滤波器,它会对高于截止频率的正弦波输入产生抑制。滤波器的特性图也就是自身传递函数的伯德图,因此我们对滤波器的描述是建立在正弦输入这个前提下的。回到本小节开头的问题,1千赫兹的三角波通过截止频率为2千赫兹的低通滤波器后输出是否保持不变?答案是会产生变化,毕竟三角波可以看作由同频率的正弦波和高次谐波组合而成(傅里叶变换),滤波器对这些高次谐波的抑制最终会导致三角波有一定程度的失真。
8.2 滤波器分类
滤波器大致上可以分成低通、高通、带通和带阻:
听名字我们可以知道低通就是只让低频信号通过,高通也是只让高频信号通过,带通和带阻是相对于中间部分频率而言的。一个理想的滤波器在截止频率处应该“直上直下”,对不满足要求的信号马上就能切离,像图中灰色线条那样。但世上没有理想的滤波器,真实情况是绿色线条那样有一定的坡度上升或下降。
最基本的低通和高通滤波器由一个电阻和电容组成:
从频域的角度更好理解这两个电路,因为电容阻抗就是\(\frac{1}{Cs}\),正弦波输入频率越高\(\left| \frac{1}{Cj\omega} \right|\)也就越小,电容越呈现出“小电阻”的特性。它们的截止频率都是\(\frac{1}{RC}\)(弧度制),通过R和C可以调整截止频率,但因为滤波器是非理想的,除了截止频率外,我们还想知道它上升或下降的速度有多快,这被称为滤波器的滚降速率(roll-off rate)。
在此之前我们还需要了解伯德图的一个特性,对于两个串联的传递函数\(H_{1}\)(\(s\))和\(H_{2}\)(\(s\)),总传递函数为\(H_{1}\)(\(s\))\(H_{2}\)(\(s\)):
总传递函数的伯德图因为对数运算满足:
\[ 20\log\left( \left| H_1(j\omega)H_2(j\omega) \right| \right) = 20\log\left( \left| H_1(j\omega) \right| \right) + 20\log\left( \left| H_2(j\omega) \right| \right) \tag{8.19}\]
同样相位上有 \(\angle H_1(j\omega)H_2(j\omega) = \angle H_1(j\omega) + \angle H_2(j\omega)\)(从图就能看出来,相位只是延迟 \(\angle H_1(j\omega)\) 后再延迟 \(\angle H_2(j\omega)\))。这意味着总传递函数的伯德图等于其每个子传递函数伯德图相叠加:
回到 图 8.11 的高通滤波器,从s域列出传递函数:
单个\(H(s)\) = \(s\)的伯德图是怎样的,把\(s\)带入\(j\omega\):\(H(j\omega)\) = \(j\omega\),\(\left| H(j\omega) \right| = \sqrt{0 + \omega^{2}} = \omega\),\(\angle H(j\omega) = \lim\limits_{\varepsilon \rightarrow 0}{\arctan\frac{\omega}{\varepsilon}} = 90{^\circ}\):
从图中可以看出它具有每10倍频20分贝的滚降速率(20dB/decade),这点很好证明:
\[ 20\log\left( 10\omega_i \right) - 20\log\left( \omega_i \right) = 20\log\left( \frac{10\omega_i}{\omega_i} \right) = 20 \tag{8.20}\]
\(H_2(s) = \frac{RC}{1 + RCs} = RC\frac{1}{1 + RCs}\),为了得到一般性的结论,考虑传递函数\(H(s) = k\frac{1}{1 + as}\)(\(k\)为比例系数且\(k > 0\)),把\(s\)带入\(j\omega\):
\[ \begin{aligned} H(j\omega) & = k\frac{1}{1 + aj\omega} \\ & = k\frac{1}{1 + aj\omega}\cdot\frac{1 - aj\omega}{1 - aj\omega} \\ & = k\frac{1 - aj\omega}{1 + (a\omega)^{2}} \\ & = \frac{k}{1 + (a\omega)^{2}} - \frac{a\omega}{1 + (a\omega)^{2}}j \end{aligned} \tag{8.21}\]
可得\(|H(j\omega)|\)为:
\[ \left| H(j\omega) \right| = \sqrt{\left(\frac{k}{1 + (a\omega)^2}\right)^2 + \left(\frac{a\omega}{1 + (a\omega)^2}\right)^2} = k\sqrt{\frac{1}{1 + (a\omega)^{2}}} \tag{8.22}\]
当 \(\omega \ll \frac{1}{a}\) 时,\(|H(j\omega)| \approx k\),这时伯德图纵坐标维持在 \(20\log k\),当 \(\omega = \frac{1}{a}\) 时,\(\left| H(j\omega) \right| = \frac{1}{\sqrt{2}}k \approx 0.707k\),此时 \(20\log (|H(j\omega)|) = 20\log k - 3\text{dB}\),伯德图下降3dB,当 \(\omega \gg \frac{1}{a}\) 时,\(\left| H(j\omega) \right| \approx \frac{k}{a}\frac{1}{\omega}\),伯德图保持每10倍频下降20分贝(−20dB/decade):
\[ 20\log\left( \frac{k}{a}\frac{1}{10\omega_i} \right) - 20\log\left( \frac{k}{a}\frac{1}{\omega_i} \right) = 20\log\left( 10^{- 1} \right) = - 20 \tag{8.23}\]
对 图 8.15 的\(H_{2}\)(\(s\))来说,只需要把\(k\)和\(a\)都带入成\(RC\)即可,可以想象\(H_{1}\)(\(s\))和\(H_{2}\)(\(s\))伯德图相叠加后的情形:在转折频率\(\frac{1}{RC}\)之前,伯德图以每10倍频20分贝上升,过了转折频率后伯德图保持水平:
有了这两个基本类型后,根据伯德图的叠加特性,我们可以创造出 图 8.10 中任意一种滤波器。例如想获得更快的滚降速率,可以把两个相同的RC电路串联起来达到40分贝每10倍频,或者低通和高通的串联组成带通或带阻(别忘了加上缓冲器):
8.3 OTA压控滤波
压控滤波器就是可以通过输入电压改变截止频率的滤波器,RC电路要改变截止频率只能修改R或C的大小,可以想象电容应该是更难修改的电子元件,因为至少我们知道有滑动变阻器,却从没有听过某种元件可以改变电容大小。
事实上有种元件被称为变容二极管(varactor),变容二极管的外形与普通二极管相似,在不同的反向电压下会呈现出不同的容值。虽然听起来很不错,但其电容量变化范围较小,一般仅从数皮法至几十皮法。由于这一限制,为了使截止频率保持在音频范围内,就需要配合很大的电阻来使用。
剩下的只有想办法改变电阻了,一种方法是通过OTA来等效电阻,回忆一下OTA,它的输出电流大小\(i_{\text{out}}\) = \(g_{m}\)(\(V_{\text{in}}^+\) − \(V_{\text{in}}^-\)):
如上图所示一个带有负反馈的OTA可以充当压控电阻,那它的等效阻值是多大呢?正如我们以前提到过的观点,电容并不知道它到底连接到了什么东西,对电容而言外部接口只有电压电流关系,如果这个电压电流关系可以通过一个电阻的形式写出来,那它就是OTA的等效电阻,在 图 8.19 输出端有:
\[ i_{\text{out}} = g_m\left( V_{\text{in}} - V_{\text{out}} \right) \tag{8.24}\]
对RC低通滤波器而言,电容在输出端看到的电压电流关系是:
\[ i_{\text{out}} = \frac{1}{R}\left( V_{\text{in}} - V_{\text{out}} \right) \tag{8.25}\]
比较 式 8.24 和 式 8.25,为了让\(i_{\text{out}}\)和\(V_{\text{out}}\)在同一\(V_{\text{in}}\)下分别相等,最终可以计算出OTA等效的电阻大小\(R = \frac{1}{g_m}\),而\(g_{m}\)会随着输入偏置电流\(i_{\text{abc}}\)的变化而变化,根据\(g_{m}\)的计算公式,可以得到\(R \approx \frac{1}{20i_{\text{abc}}}\),如果\(i_{\text{abc}}\)的大小由某个电压控制,那它就是一个压控滤波器。
需要注意的是 式 8.24 只有在\(V_{\text{in}}\) − \(V_{\text{out}}\)足够小的时候才满足,可以通过在OTA输入端用两个电阻分压解决:
图 8.20 电路的截止频率为\(\frac{R_2}{R_1 + R_2}\frac{g_m}{2\pi C}\),类似的OTA高通滤波器形式如下:
它的截止频率同样为\(\frac{R_2}{R_1 + R_2}\frac{g_m}{2\pi C}\), 图 8.20 和 图 8.21 的\(i_{\text{abc}}\)可以用Howland电流泵产生,也可以用指数电压电流转换器产生,但\(i_{\text{abc}}\)不能太大,最好不要超过2毫安。然后我们可以把两个串联起来,得到−40dB/decade的滚降速率:
8.4 开关电容
开关电容这项技术是随着集成电路的发展才出现的,它最开始的目的是为了代替芯片上的电阻,让我们来看一个简单的例子,这个电路包含了两个开关和一个电容:
\(\phi_{1}\)和\(\phi_{2}\)分别是开关\(S_{1}\)和\(S_{2}\)的控制信号,当它们为高电平的时候开关导通,低电平时开关断开。端口电压分别是\(V_{1}\)和\(V_{2}\),\(\phi_{1}\)和\(\phi_{2}\)由非交叠时钟电路生成,使得它们具有相同的周期\(T\),但不会同时为高电平:
假设\(V_{1}\)、\(V_{2}\)在控制信号的周期\(T\)内保持稳定,当\(S_{1}\)导通的时候\(S_{2}\)断开,电容被充电至\(V_{1}\),然后\(S_{1}\)断开\(S_{2}\)导通,电容被放电到\(V_{2}\),再然后重复上述行为。如果有\(V_1 > V_2\),则电容在每个周期\(T\)内从\(V_{1}\)吸收的电荷量和向\(V_{2}\)提供的电荷量\(\Delta Q\)都等于\(C\)(\(V_{1}\) − \(V_{2}\)),由此定义出一个周期内的平均电流:
\[ i_{\text{avg}} = \frac{\Delta Q}{T} = fC\left( V_1 - V_2 \right) \tag{8.26}\]
其中\(f = \frac{1}{T}\),是控制信号的频率, 式 8.26 表明当\(f\)和电容大小确定了之后,电流只与施加在两端的电压差有关,仿照电阻电压电流的公式,我们可以定义出开关电容的等效电阻:
\[ R_{\text{avg}} = \frac{V_1 - V_2}{i_{\text{avg}}} = \frac{1}{fC} \tag{8.27}\]
从 式 8.27 可以看出开关电容的阻值大小只和控制信号的频率\(f\)有关,\(f\)越高阻值越小。如果用它代替RC电路中的电阻,则滤波器的截止频率为\(\frac{1}{\frac{1}{fC_1}C_2} = f\frac{C_1}{C_2}\),变得只和\(f\)有关(这里忽略了\(C_{2}\)的负载效应),这时我们只需要压控调整\(f\)就能改变截止频率(若考虑负载效应,还得要求\(C_{1}\) ≪ \(C_{2}\))。
需要注意的是上述公式在推导过程中假设了控制信号周期内端口电压\(V_{1}\)、\(V_{2}\)可以保持相对稳定,这就要求控制信号(\(\phi_{1}\)和\(\phi_{2}\))的频率要远大于输入信号的频率,大约需要50~100 : 1的关系,如何产生这些高频信号将会是一个重要的问题。
其次是开关的选择,机械开关肯定是不行的,我们可以使用专门的模拟开关芯片如CD4066,相比于直接用分立NMOS当开关,CD4066性能要好得多,它可以操作在需要高速切换控制信号的电路上。同时我们还需要一颗高质量的电容,要有很小的容值误差和很小的温度、电压漂移(容值不易因温度或电压而改变),NP0电容是我们为数不多的选择,NP0是Negative-Positive-Zero的缩写,0表示零温度漂移,这类电容基本上不会受到温度和外界电压的影响。
因为非交叠时钟信号需要由数字逻辑电路产生,数字芯片的供电电压常见是5伏,所以要先把±12伏的供电电压转化成±5伏的电压,在不需要特别大电流的场景下,可以使用L78L05和L7905完成电压转换。L78L05接受7~20伏的电压输入,输出稳定在5伏,最大输出电流可以达到100毫安,L7905接受负电压输入,输出稳定在-5伏:
有了±5伏电压,现在要着手生成开关控制信号,首先是一个压控方波源,它要能产生足够宽的频率范围,大约在50k~1M赫兹之间,然后再把这个方波信号输入到非交叠时钟电路,产生类似 图 8.24 的两个控制信号。一个压控方波源如下图所示:
\(Q_{1}\)、\(Q_{2}\)组成一个更简单的指数电压-电流源,\(V_{\text{in}}\)是控制电压输入(0~5伏左右),流过\(Q_{1}\)的参考电流在44微安左右,\(Q_{2}\)处电流会随着\(V_{\text{in}}\)增加呈指数增加,这个电流会对电容\(C_{1}\)放电,\(Q_{3}\)是一个开关,当连接到2号引脚和6号引脚的电压下降到\(\frac{1}{3}V_{CC}\)时,7号引脚处断路,\(Q_{3}\)导通对电容快速充电恢复到\(\frac{2}{3}V_{CC}\),\(Q_{3}\)再次关闭,\(Q_{2}\)电流对电容重新放电。
这个过程和555锯齿波振荡器非常相似,不同于锯齿波震荡器, 图 8.27 的输出是从3号引脚来的,回顾一下上一章关于555定时器的介绍,会发现3号引脚在电容\(C_{1}\)放电时保持低电平(接近0伏),在电容\(C_{1}\)恢复或\(Q_{3}\)短暂导通的时候变为高电平(接近供电电压5伏)。
相比于\(C_{1}\)恢复过程,从\(\frac{2}{3}V_{CC}\)放电到\(\frac{1}{3}V_{CC}\)的时间会长的多,(\(Q_{3}\)导通时等效阻值很小,所以充电电流会很大),因此3号引脚电压和电容下端电压满足下图关系:
3号引脚处的波形是一个占空比很小的矩形波,这个信号被送到CD4013中。CD4013内部包含有两个D触发器,什么是D触发器?这还得从RS触发器讲起。
首先要明白数字电路只会把输入信号解释为0或1,输入电压小于某个阈值被认为是逻辑0,大于某个阈值被认为是逻辑1,输出也只有\(V_{CC}\)(逻辑1)或GND(逻辑0)两种模式。
RS触发器在介绍555定时器时有提到过,其中R代表reset(会把输出\(Q\)置0),S代表set(输出\(Q\)被置1),\(\overline{Q}\)表示对\(Q\)取反。
当R和S都为0时,输出\(Q\)和\(\overline{Q}\)保持不变。当R或S其中某个为1(当成其中某个被激活?),另一个为0时,输出\(Q\)会分别被置0或置1。当R和S都为1时,\(Q\)和\(\overline{Q}\)同样保持不变,虽然电路上这样的输入是有意义的(有明确的输出),但从人们逻辑的角度来说不允许R和S同时为1,因为它暗示了我们希望输出\(Q\)被置0的同时又被置1,显然这是一个很无理的要求,为了避免R和S同时输入为1的情况,人们对RS触发器作出了改进,从而有了D锁存器(D Latch):
RS触发器在输入端加入了两个与门和一个非门后构成D锁存器,抛开细节,抽象后得到 图 8.29 右下角的符号,观察其真值表,可以看见只有在时钟信号CLK为1时,输入D可以传递到输出,CLK为0时输出保持不变。
因此D锁存器更像是一个由CLK控制的“门”,只有在CLK为1时“门”才打开,输入可以通过“门”到达输出,其余时候输出都保持不变。
把两个D锁存器结合在一起可以构成一个D触发器(D Flip-Flop),D触发器行为模式和D锁存器很相似,但是“门”导通条件从CLK=1变成了CLK上升沿触发:
所谓“上升沿”指的是信号从逻辑0到逻辑1的过程,这个过程需要一定的时间,可以认为D触发器只有在这个非常短暂的转换时间内信号是可以通过输入传递到输出的,其他时候输出都保持不变。
回到 图 8.27,555定时器3号引脚接到了D触发器的CLK端,\(\overline{Q}\)和D端相接,这样可以使输出\(V_{\text{out}}\)(CD4013的\(Q\))在每个CLK的上升沿变为\(\overline{Q}\),实现一次翻转:
结合 图 8.28 和 图 8.31 可以发现\(V_{\text{out}}\)的频率差不多是电容\(C_{1}\)处锯齿波频率的\(\frac{1}{2}\), 图 8.26 的电路在输入电压为0时锯齿波频率大约在83千赫兹,所以\(V_{\text{out}}\)从40千赫兹开始产生方波,在5伏\(V_{\text{in}}\)下输出频率可达兆赫兹。
再来详细说一下CD4013,它有14个引脚,内部包含了两个D触发器:
\(V_{CC}\)是供电引脚,可以输入3~16伏电压,芯片\(Q\)输出为逻辑1的时候输出电压接近\(V_{CC}\)(前面的电路我们都以5伏为逻辑1,所以搭建时\(V_{CC}\)供电也应该为5伏),\(V_{SS}\)一般接地(逻辑0输出电压也接近0伏)。其余部分则是D触发器的引脚,需要注意的是 图 8.31 的D触发器也有R和S引脚,但它不是某个RS触发器的R和S,而是D触发器的“强制开关”(逻辑1输入时强制让\(Q\)置0或置1且立即触发,忽略CLK上升沿),多数情况下接地即可。
还有一点要注意的是,假如电路中只用到了一个D触发器,另一个D触发器输入引脚最好不要悬空(也就是什么都不接),因为空接可能会对芯片造成干扰,可以把空闲的D触发器R和S接地,时钟也接地(或\(V_{CC}\)也可以,总之需要一个比较好的电压定义)。
除了 图 8.27 的电路,还可以使用专门的VCO芯片,例如LTC6990,它有很好的线性度和足够宽的频率范围,但是价格很贵。
有了方波源后,我们就可以用这个方波源来生成相同频率的两路非交叠信号\(\phi_{1}\)和\(\phi_{2}\),一个可以使用的非交叠时钟电路如下:
它由一个非门和两个或非门组成,非门和或非门分别可以用CD4049和CD4001,关于这些芯片我发现了一个很好的资源网:build-electronic-circuits。
最后按照 图 8.25,选择合适的\(C_{1}\)、\(C_{2}\),当\(\frac{C_1}{C_2} = 0.0785\)时,截止频率大约从500赫兹开始随着控制信号频率升高而升高,值得一提的是,在电容比值已经确定的情况下,还应当尽量满足\(C_{1}\) ≪ \(C_{2}\),所以\(\frac{10pF}{130pF}\)相比\(\frac{1pF}{13pF}\)是更好的选择。
8.5 噪声滤波
上一章提到过白噪发生器,白噪在不同频率下具有很平坦的能量分布,通过对白噪滤波可以获得其他颜色的噪声,例如棕色噪声在声音频率下有-20dB/decade的滚降速率,所以一个截止频率在10赫兹的RC低通滤波器就能滤出棕色噪声。
相对而言更麻烦的是粉红噪,从 图 7.83 会发现粉红噪滚降速率要更慢一些,处在-10dB/decade(或者约-3dB/Oct),即使是最简单的RC电路也无法保持这么慢的滚降速率,想要得到粉红噪声,必须另辟蹊径,从别处入手。
首先要知道在什么地方会遇到-10dB/decade,回到伯德图,我们说RC低通滤波器在截止频率之前保持水平,截止频率处下降3dB,在远高于截止频率的地方有-20dB/decade,那么从水平到-20dB/decade的过程中一定存在一些区域满足-10dB/decade,因为伯德图不是突变的(这一点很容易被我们忽略,特别是在手绘时往往从截止频率处突然转折,但那只是渐近线)。
考虑下面这个电路:
它的传递函数满足这样的现实:\(H(s) = \frac{1 + a_1 s}{1 + a_2 s}\),其中\(a_1 < a_2\),同样地可以把这个传递函数看成是\(1 + a_1 s\)和\(\frac{1}{1 + a_2 s}\)的串联,前者在角频率\(\frac{1}{a_1}\)处以20dB/decade上升,后者在\(\frac{1}{a_2}\)处以-20dB/decade下降,所以总的伯德图形式如下:
会发现在两个转折点(此时与水平值相差3dB)附近滚降速率差不多处在-10dB/decade,假如让这两个转折点靠得很近,那它们中间区域的平均滚降速率也会接近-10dB/decade。
选择合适的\(R_{1}\)、\(R_{2}\)和\(C\)可以改变转折点大小,最后再把多个 图 8.37 的电路叠加起来,就能得到平均滚降速率-10dB/decade的滤波器:
更多细节可以去syntherjack网站看到,里面还有其他类型的粉红噪声滤波器。
8.6 Sallen-Key滤波器
前面介绍过RC滤波器,RC滤波器是一阶滤波器,“阶”指让传递函数分母等于0的s的解的个数(让分母等于0的s也被称为传递函数的极点),单个RC电路无论高通还是低通,都只存在一个s使分母为0。
本小节将介绍Sallen-Key滤波器,Sallen和Key分别是两位作者的名字,他们在1955年提出了这种滤波器的构想。Sallen-Key滤波器属于二阶滤波器,在了解它之前,我们还得对二阶系统作一些介绍。
典型的二阶系统传递函数形式如下:
\[ H(s) = \frac{\omega_n^{2}}{s^{2} + 2\xi\omega_n s + \omega_n^{2}} \tag{8.28}\]
\(\xi\)和\(\omega_n\)都是常数项,分别是系统的阻尼系数和自然频率,求解 式 8.28 的极点,令 \(s^2 + 2\xi\omega_n s + \omega_n^2 = 0\):
\[ \begin{aligned} s & = \frac{- 2\xi\omega_n \pm \sqrt{\left( 2\xi\omega_n \right)^{2} - 4\omega_n^{2}}}{2} \\ \Rightarrow s_1 &= - \xi\omega_n + \omega_n\sqrt{\xi^{2} - 1}, s_2 = - \xi\omega_n - \omega_n\sqrt{\xi^{2} - 1} \end{aligned} \tag{8.29}\]
从 式 8.29 中会发现当 \(0 < \xi < 1\) 时,\(s_{1}\)和\(s_{2}\)是复数的形式,当\(\xi\) ≥ 1时\(s_{1}\)和\(s_{2}\)完全变成实数,但我们还并不清楚这意味着什么,从伯德图的角度入手,假设某个二阶系统的\(\omega_{n}\) = 10,画出\(\xi\)由小变大的一系列伯德图:
可以看到二阶系统的截止频率都在\(\omega_{n}\)附近(不全都是\(\omega_{n}\)),当\(\xi\) = 1时,二阶系统在\(\omega_{n}\)处下降3dB(和一阶系统类似),随着\(\xi\)不断变小并趋于0(数学上可以证明\(\xi\) = 0.707是一个分界点,\(\xi\) = 0.707时\(\omega_{n}\)处正好是0dB),伯德图在\(\omega_{n}\)附近出现凸起并变得越来越尖,此时系统对\(\omega_{n}\)周围频率的正弦波输入有放大作用(大于0dB)。最后伯德图在高频处以40dB/decade的速率下降。
这也是高阶系统不同于一阶系统的地方,高阶系统在截止频率周围可以有更丰富的特性, 式 8.29 和 图 8.40 暗示了传递函数复数极点与系统响应之间一定存在某些深刻联系,但我们不必为此感到烦恼,了解二阶系统的伯德图就足够使用了。
为了引入Sallen-Key滤波器,令\(Q = \frac{1}{2\xi}\),改写 式 8.28:
\[ H(s) = \frac{\omega_n^{2}}{s^{2} + 2\xi\omega_n s + \omega_n^{2}} = \frac{\omega_n^{2}}{s^{2} + \frac{\omega_n}{Q}s + \omega_n^{2}} \tag{8.30}\]
\(Q\)被称为品质因子,在\(\xi\) = 0.707时,计算\(Q\)也等于0.707,此时二阶滤波器角频率从0到\(\omega_{n}\)有着最高的平坦度,被称为巴特沃斯型滤波器。
\(Q > 0.707\) 对应着 \(\xi < 0.707\),从 图 8.40 中可以看到伯德图会出现凸起,这种类型的被称为切比雪夫型滤波器。\(Q < 0.707\)时被称为贝塞尔滤波器。
Sallen-Key滤波器基本模型如下:
无论低通还是高通,在音频领域最常用到的是巴特沃斯型滤波器,因为直到截止频率处,它都足够平坦,不会对原始信号引入额外的效果,如果想在截止频率处获得更快的滚降速率,可以在一个Sallen-Key滤波器后再串联一个Sallen-Key滤波器(串联系统伯德图相加),更方便的是,我们不需要自己动手计算合适的电阻电容值,网上有很多网站可以帮助计算,只需要提供滤波器设计指标。
8.7 压控四极滤波器
关于压控四极滤波器在ECE4450里有很详细的讲解,这儿只是简单总结一下结论,它由4个OTA滤波器和反馈回路构成,OTA滤波器就是8.3节的一阶滤波器,模型框图如下:
\(K\)是反馈路径上的增益,取值在0到4之间,它在截止频率处的变化很像一个二阶系统,但因为有4个极点,所以滚降速率达到了80dB/decade。
关于这种类型的滤波器一个应用实例是Fernando Loopez-Lezcano的Dual VCF,可以在他的主页看到电路图。
8.8 全通滤波器
全通滤波器根据“全通”二字可以判断它不对信号作阻拦,那仅仅是这样就和一条导线没有区别了,因此全通滤波器一定还有别的效果。没错!就是我们在前面小节一直没太去关注的相位变化,全通滤波器也叫移相器(phase shifter),它不改变信号的幅度大小,只会改变相位。
根据不同的电路结构,可以配制成相位超前和相位滞后两种模式:
前者会让输入信号相位滞后,后者相位超前,以滞后类型为例,因为运放处在负反馈下,所以同相端和反相端电压是相同的:
\[ V_{\text{in}}(s)\frac{\frac{1}{sC_1}}{R_1 + \frac{1}{sC_1}} = \frac{V_{\text{in}}(s) + V_{\text{out}}(s)}{2} \tag{8.31}\]
可以写出传递函数:
\[ H(s) = \frac{1 - R_1 C_1 s}{1 + R_1 C_1 s} \tag{8.32}\]
当输入信号角频率为 \(\omega_1 = \frac{1}{R_1 C_1}\),\(\angle H(j\omega_{1})\) = −\(90^\circ\),同理可以计算相位超前 \(90^\circ\) 时 \(\omega_2 = \frac{1}{R_2 C_2}\),可以把 \(\omega_{1}\) 或 \(\omega_{2}\) 称为移相器的中心频率。
单纯的相位变化其实可以看成是对原始信号的延时:
对原始信号\(V_{\text{in}}\)(\(t\)) = \(\sin\)(\(\omega_{0}t\) + \(\phi_{0}\))来说(\(\omega_{0}\)是弧度,\(\phi_{0}\)是角度),如果输出变为sin (\(\omega_{0}t\) + \(\phi_{0}\) + \(\phi_{1}\)),则可以定义出等效\(\Delta T\)为(单位是秒):
\[ \Delta T = - \frac{\phi_1}{\omega_1}\frac{\pi}{180} \tag{8.33}\]
移相器会因为输入信号频率的不同产生不同的相位响应,因此也可以把它当成是与输入频率有关的延时系统,那延时有什么用呢?作用之一是制作梳状滤波器。
8.9 梳状滤波器
从一个例子入手,如图所示假设信号路径上有两条并联通路,其中一条有0.001秒的延时,最后信号叠加输出:
考虑 \(V_{\text{in}1} = \sin(2\pi t)\) 和 \(V_{\text{in}2} = \sin(1000\pi t)\) 这两个不同频率的正弦波输入,前者频率为1赫兹,后者为500赫兹,它们的输出情况如下:
\(V_{\text{in}1}\) 的周期为1秒,在延时0.001秒后与原始信号几乎没有差别,所以 \(V_{\text{out}1} = 2V_{\text{in}1}\)。但 \(V_{\text{in}2}\) 周期是0.002秒,经过延时后图像极性和原始信号相反,叠加后输出 \(V_{\text{out}2} = 0\)。
可以看到 图 8.45 的系统会对某些特定频率的输入产生0输出,从而实现对这些频率的滤波,从伯德图的角度来看,它的幅度响应是这样的:
上图在500赫兹(注意横坐标单位是赫兹)处出现了第一个凹陷,之后分别在500赫兹的奇数倍频也出现凹陷(可以自己验证一下),因为其形状像一把梳子,也被称为梳状滤波器。
从相位角度来说,极性相反也就是与原始相位相差\(180^\circ\)的奇数倍,回到移相器,从 图 8.43 可以看到单个移相器最多只能提供\(180^\circ\)的相位变化,而且还得在0频或无穷大频率上,所以要有\(180^\circ\)相位变化,至少需要两个移相器串联,之后输出再与原始信号相加:
上图电路当输入信号的角频率是\(\frac{1}{10\text{k}\Omega \times 0.1\mu\text{F}} = 1000\)rad/s时,每个移相器提供\(90^\circ\)相位延迟,两个串联一起就是\(180^\circ\),可以想象这个电路的伯德图在角频率1000的地方有一个凹陷:
如果想获得更多的凹陷,就需要串联更多的移相器(思考一下为什么 图 8.49 的图形会和 图 8.47 不同),例如串联6个移相器:
因为每级的范围在\(0^\circ\)~\(180^\circ\),因此6级串联总的相位变化在\(0^\circ\)~\(1080^\circ\)之间,它的伯德图分别会在角频率满足\(\angle H(j\omega_{1})\) = \(180^\circ\)、\(\angle H(j\omega_{2})\) = \(540^\circ\)、\(\angle H(j\omega_{3})\) = \(900^\circ\)(单级分别贡献\(30^\circ\)、\(90^\circ\)、\(150^\circ\))处有凹陷。
根据 式 8.32,单级移相器的传递函数只与同相端电阻电容有关,用电压同时改变 图 8.50 同相端电阻或电容值能使其伯德图左右移动,实现压控的效果。