To see a World in a Grain of Sand 一沙一世界 And a Heaven in a Wild Flower, 一花一天堂 Hold Infinity in the palm of your hand 握无穷于掌心 And Eternity in an hour. 永恒即刹那时光
滤波器
最近阅读《发明者电子设计宝典》[1],了解到一些滤波器方面的知识(玩业余无 线电必定要涉及到这个东西),滤波器主要分下面这几种:
-
低通(low-pass),允许低于某个频率(称为截止频率,通常记作 F_cutoff)的信 号通过,高于这个频率的信号将被衰减
-
高通(high-pass), 和低通相反,它允许某个频率以上的信号通过
-
带通(band-pass), 允许某个频率范围的信号通过,低于这个频率和高于这个频 率都衰减(这也说明了“带”字在这里的含义,滤波器里有通带和阻带的概念,通 带就是让信号通过的那个频率波段,阻带就是不让信号通过的那个波段)
-
带阻(band-stop), 和带通相反,它在某个频率范围内阻止信号通过
电话拨号与 RC 滤波
说到滤波器,我为外婆制作的电话机 facephone [2]就用到了 RC 低通滤波器, 它由一个电阻 R 和一个电容 C 组成,如插图 fig-01 所示。那为什么要用 RC 滤波器呢?这得从电话拨号的原理说起。
电话机的拨号方法有好几种,其中最常见的一种拨号信号就是 DTMF (即 Dual Tone Multi Frequency,双音多频)[3],它最初由贝尔实验室开发,在你打电话 拨号时按下按键时发出的音就是 DTMF 信号的声音,每个数字都是由两个不同频 率的正弦波相加在一起形成的,就是 Asin(f_H) + Bsin(f_L),这可以从下面的 表格看出来(普通的电话没有 ABCD 键)。
1209Hz |
1336Hz |
1477Hz |
1633Hz |
|
697Hz |
1 |
2 |
3 |
A |
770Hz |
4 |
5 |
6 |
B |
852Hz |
7 |
8 |
9 |
C |
941Hz |
* |
0 |
# |
D |
这种 DTMF 信号有多种方法可以生成,可以用专用的电话拨号 IC,比如 MT8880,也可以用微控制器通过软件直接生成(这样可以让电路更简单,因为省去 了 IC),facephone 是基于 AVR 单片机设计的。AVR 应用笔记 "AVR314: DTMF Generator" 就详细讲解了如何用 PWM (Pulse Width Modulation,脉冲宽度调 制)[4]来生成 DTMF 信号,这个应用笔记含有 C 语言源程序,只要接好实验电 路,给 AVR 烧写好程序,接一个小喇叭到 AVR 的 PWM 输出脚上,按 4x4 键 盘,就可以听到电话拨号音。
说到 DTMF 信号,据说某些经过训练的人听到 DTMF 声音可以直接说出你按的是 数字几。某次公司的经理告诉我一个新闻:有骗子叫别人把座机在免提模式输入 银行卡的密码,过了不多久,上当者卡里的钱就被转走了。因为我正好知道 DTMF,就讲了上述的原理。解码 DTMF 很容易,固定电话的来电显示几乎是标准 配置功能。而且可以用 IC 如 MT8870 来解码电话号码。此外,计算机软件也能 直接解码。
回到那篇应用笔记,AVR 输出的 DTMF 信号是用 PWM 表示的,是数字信号,笔记 中说要在输出引脚上接一个低通滤波器去掉高频信号以把 PWM 信号变成频率低一 些的模拟信号,可是我并不知道怎么计算 R 和 C 的值,后来看到网友 sunge 在 它的 DTMF 实验程序[5]中提到 R 和 C 的值可以通过它的截止频率 F_cutoff = 1/(2*pi*RC) 计算出来,当时我并不知道这个公式是什么意思,不知道这个公式 是怎么来的,这让我很困惑(困惑并不是一件坏事),我想知道更深层的原理。
我按照 sunge 的方法取 R = 1k, C = 0.1uF,电话拨号正常。虽然 facephone 已经在外婆家工作了一段时间,但这个 RC 电路问题一直困扰着我,直到最近 看到《发明者电子设计宝典》上的讲解才差不多明白其中的一些道理。书中第 2.21 小节“用复阻抗分析正弦电路”引入了复数[6] z = x + iy 来分析正弦电 路,复数应用在这里真是太神奇了,利用它,电阻,电容,电感可以用复阻抗 (impedance, 这个词由 Oliver Heaviside [7] 创造)来处理。以前一直没有读这 个部分是因为有点害怕复数,以为它很难,不敢去碰。应用这个方法,三种基本 电子元件的阻抗可以表示如下:
-
电阻器 R 的复阻抗 Z_R = R
-
电容器 C 的复阻抗 Z_C = 1/(jwC)
-
电感器 L 的复阻抗 Z_L = jwL
其中,j 是虚数单位,j^2 = -1,本来在数学上用 i 表示虚数单位,但是在电学 中往往用 i 表示电流,为了不引起误会,就用 i 的后继字母 j 来表示了。 w 是正弦信号的角频率,在书上一般是用希腊字母 ω 表示,这里打字不便就用了 w.
这些公式的具体推导在一般的电工学书里都有讲述,下面来试试电容 C 的复阻抗 的推导过程:
正弦电压的公式:
V = V0cos(wt)
其中,V0 是正弦电压的幅度,w 是角频率,单位是 rad/s,t 是时间,正弦电压 是时间的函数。另外,这里用的 cos 而不是 sin 没有关系,只是相位差了 90 度。
引入复数来表示它,公式就变成了:
V = V0cos(wt) + jV0sin(wt)
书上说后面的虚部 jV0sin(wt) 没有物理意义,不影响实电压的表示,但是在叠 加过程中要用到它。
复数可以被表示成指数形式:
V = V0e^(jwt)
其根据是欧拉公式 cos(t) + isin(t) = e^(it),随便提及,这个公式可以通过 分别把 cos(t), sin(t) 和 e^t 展开成泰勒级数的形式证明[8]。
交流电压在复平面也可以被表示成一个向量,起始点在原点,这样正弦电压就很 好理解,当角度 wt 随时间变化的时候,电压的幅度 V0 就像一根指针沿着圆周 转动,电压随之变化。
好,接下来我们看看电容器,电容器的数学模型是 Q = CV,其中 Q 是电量,C 是电容(也就是经常提到的 0.1uF 等等数值),V 是电压。这个公式是说:电容 器上存储的电荷量与电容大小和加在其上的电压成正比,这是可以理解的,因为 想象电容器的两个金属极板越大,那同样的电压,它能存储的电荷就越多,如果 极板一样大,要是电压 V 越高,则存储的电荷也越多,因为电场变强了。再顺便 提到电感器的数学模型 v = L(di/dt),di/dt 是电流对时间 t 的导数(就是电流 变化的快慢程度),这个公式说:电流变化越快,电感两端感生的电压就越高(电 磁感应),其中的 L 是就是我们常提到的电感,如 100mH,H 是纪念美国科学家 Joseph Henry.
好,回到电容器的数学模型,加个电压到电容器上,流过的电流 I_C 可以这样计 算:
i = dQ/dt (这是电流的定义,单位时间流过的电荷数量即是电流)
I_C = dCV/dt (代入 Q = CV 得到)
I_C = CdV/dt (常数 C 提到前面)
I_C = Cd(V0e^(jwt))/dt = jwCV0e^(jwt) (代入正弦电压的复数表示,并对时间 t 求导)
好,这个时候我们得到了经过电容器的电流的复数表示方法,如果用电压除以电 流,会得到什么呢?(对于电阻 R 来说,V/I = R),我们来算一下:
V V0e^(jwt) --- = -------------- = 1/(jwC) = Z_C I_C jwCV0e^(jwt)
啊,分母和分子中的 V0e^(jwt) 都波消掉了!我们 1/(jwC) 就是上面提到的电 容器的复阻抗 Z_C,电感 L 的复阻抗 Z_L = jwL 也可以相同的方法求得。
为什么能这样干(除)呢?奥秘就在于复数,因为用复数来表示电压和电流,在复 平面上复数 re^(jθ) 可以看成是以原点为起始点的向量,这个向量的实部就是在 x 轴上的投影 rcos(θ),它就是电压和电流的大小,而 θ 则表示了相位关系,复 数比实数包含了更多的信息。对于电容器来说,如果给它通上 V = V0cos(wt) 的 余弦电压,通过的电流的相位就会比电压的相位超前 π/2,就是 90 度。
注意到前面提到的电流 I_C = jwCV0e^(jwt) 是个纯虚数,这个数实际上就包含 了相位超前 90 度的信息,把指数表示换算成三角表示就能看出来(实际上不用换 算也能看出,因为纯虚数就在虚轴上,它的相位比正实轴上的值超前 90 度):
I_C = jwCV0e^(jwt) = j[wCV0*cos(wt) + jwcV0*sin(wt)] = jwCV0*cos(wt) - wCV0*sin(wt) = -wCV0*sin(wt) + wCV0*cos(wt) = wCV0*cos(wt + π/2) - wCV0*sin(wt + π/2)
上面的变形利用了三角函数关系 -sin(x) = cos(x + π/2)
I_C = wCV0*cos(wt + π/2) - wCV0*sin(wt + π/2) V = V0cos(wt) + jV0sin(wt)
把电压的复数形式和电流的复数形式进行对比,就看出来了,电流的相位超前了 90 度,因此,给电容引入复阻抗就可以直接用 Ohm 定律来计算电流了。实际 上,我们可以认为对于纯电阻电路,电压和电流的相位相同,因此,电阻的复阻 抗是实数。
将复数引入到电路分析中,这真是一个天才的想法!在后面我们会看到拉普拉斯 变换 F(s) = ∫(0,∞) e^(-st)f(t)dt 可以把实函数变换为复变函数,然后进行分 析,我猜想这两者之间存在着某种联系。
现在有趣的事情发生了,这个复阻抗 Z_C 是个复数,是频率 w 的函数,但是这 样做有什么好处呢?
我们都知道两个电阻 R1 和 R2 串联的分压电路(voltage divider):
V_in | [ ] [ ] R1 [ ] | o----------- V_out | [ ] [ ] R2 [ ] | GND R2 V_out = ---------V_in R1 + R2
这是一个比例分配关系。
好,基本知识都准备就绪了,下面回到我们前面的 RC 低通滤波器电路,这个时 候电路有一点改变(和 fig-01 里的一样,为了方便好看变化了一下形状,变成了 分压器的形式):
V_in | [ ] [ ] R [ ] | o----------- V_out | --- C --- | GND
和上面的电阻分压电路一样,引入了复阻抗之后这里可直接应用分压电路的计算 方法即可求出电容两端的电压 V_out
Z_C V_out = -----------V_in Z_R + Z_C V_out 1/(jwC) 1 ----- = ------------ = --------- V_in R + 1/(jwC) 1 + jwRC
然后我们把分母表示成复数的指数形式
1 + jwRC = Ae^(ja)
基中
A = sqrt(1^2 + (wRC)^2) a = atan(wRC/1), 角 a 是相位 V_out 1 1 1 ----- = ------- = ---e^(-ja) = -----------------e^(-jatan(wRC)) V_in Ae^(ja) A sqrt(1 + (wRC)^2)
这时已经得到了输入电压 V_in 和输出电压 V_out 之间的关系,但是这个比值同 样是一个复数,我们如果想知道 V_out 和 V_in 比值的幅度,这时,上面那个等 式 e 前面的部分就是幅度(把虚指数项去掉,虚指数项中包含了相位的信息):
| V_out | 1 | ----- | = --------------- | V_in | /------------ / 1 + (wRC)^2
显然,这个 | V_out / V_in | 表示信号的衰减。这个公式是非常有意义的,它 表示输入的电压有多少可以到达输出端,我们可以从中读出很多信息。其中的 w 是信号的角速度,如果 w = 0 那分母就为 1,这时 | V_out / V_in | = 1,这 是说低频(w=0)的信号(如直流电压)完全到达输出端。如果 w 很大(信号的频率很 高)如交流电,则分母会非常大,| V_out / V_in | 甚至会接近 0,表示高频信 号不容易通过,这就是低通滤波器应该有的属性!当然,我们这里是从它的数学 模型来考虑,从物理上可以直接看出高频信号容易通过电容到地,但是用数学模 型可以进行定量分析。
好,那我们前面提到的截止频率 F_cutoff = 1/(2*pi*RC) 又是从何而来的呢?
注意,如果 w = 1/(RC) 那式子中的分母就变成了 sqrt(2),| V_out / V_in | = sqrt(2)/2 = 0.707… 这个时候输出电压就是输入电压的 0.707 倍(相当于输 出电压的功率相对输入电压减半)。这个频率 w_c = 1/(RC) 就被定义为截止频率。
在实际应用中,一般是用 dB 即分贝来表示信号的衰减,根据 dB 的定义:
A_dB = 20log| V_out / V_in | = 20log(sqrt(2)/2) = -3dB
截止频率这个点就是被定义为在 -3dB 这个点,这在设计滤波器的时候经常用到。
角频率 w_c 在这里的单位是 rad/s,可以把它除以 2*pi 转换成频率 F_cutoff:
w_c 1/(RC) 1 F_cutoff = ------ = -------- = ------- 2 * pi 2 * pi 2*pi*RC
看,我们得到了 RC 低通滤波器的截止频率公式,实际计算一下 facephone 中的 R=1k, C = 0.1uF 的截止频率:
F_cutoff = 10^6/(2*pi*1000*0.1) = 1592 Hz
从 DTMF 频率表格中可以看出频率最高的正弦波是 1633Hz,而我们设计出的 RC 电路的截止频率是 1592Hz,基本吻合,实际上对于普通的电话机,后面的 ABCD 这四个键是没有用到的,因此电路满足实际的应用。
Bode plot, 传递函数
| V_out | 1 | ----- | = --------------- | V_in | /------------ / 1 + (wRC)^2
我试了一下用数学软件把上面这个式子的图形描绘出来,比如在 wxmaxima 中输 入下面两个命令就能看到图形,如插图 fig-02 所示,从图上可以看出 -3dB 对 应的频率差不多就是 1590Hz(光标那个位置,频率显示在左下角)。
log10(x) := log(x) / log(10); plot2d(20*log10(1/(sqrt(1 + (w*2*%pi*0.0001)^2))), [w, 0, 2000]);
在网上搜索一些相关资料,在一篇文档里也讲到串联 RC 电路,oops, 原来上面 的 V_out/V_in = 1/(1 + jwRC) 就是传递函数(transfer function)!以前看书 知道有传递函数这个东西,但是具体的内容和应用却并不熟悉,它竟然出现在了 这里。
查阅 Wikipedia, 得知书上的滤波器对频率的响应曲线的图形就是 Bode Plot (得名于控制领域的大牛 Hendrik Wade Bode),在 maxima 中用 bode_gain 和 bode_phase 函数可以打印传递函数的 Bode plot.
一个更强大的工具:拉氏变换
随着学习的推进(阅读 Wikipedia 可以给出很多线索),原来电路系统可以用 Laplace 变换[9]来分析,经它变换,一些系统的关系就变成了线性方程,这样就 避免了求解微分方程。Laplace 变换一直在听说,如雷灌耳,可是从未用过,因 为它是一种积分变换,而且经过变换后的函数是复变函数,而自己又不懂复分析。 于是我硬着头皮读了一点《控制系统基础》[10]和《信号与系统》[11]中的相关 章节,发觉只要认真看,还是可以理解一些东西的。
《控制系统基础》中提到可以把 Laplace 变换和对数算术作类比,这是非常有趣 的。在我们初中学数学时都发有一本小册子,上面有个常用对数表,在我们这一 代成长起来之前,电子计算器就已经开始流行了,计算尺(slide rule)我是没有 见过的(不过可以作为孩子的玩具),下面用一个实际例子来温习一下用对数表来 作算术运算:
对数有如下两个基本性质(这里底是 10)
log(x*y) = log(x) + log(y) log(x/y) = log(x) - log(y)
这样乘法和除法就变成了加法和减法来计算,例如,我们想计算 456/123。
步骤1:取对数(对运算进行对数变换) log(456/123) = log(100*4.56) - log(100*1.23) = log(4.56) - log(1.23)
步骤2:查常用对数表( http://myhandbook.info/table_commonlog.html )
log(4.56) = 0.658965 log(1.23) = 0.089905
然后算出两个数相减的结果
log(456/123) = log(4.56) - log(1.23) = 0.658965 - 0.089905 = 0.56906
步骤3:利用这个 0.56906 查反对数表,可以知道它应对的数字是 3.707,用 PC 上的计算器算一下: 456/123 = 3.707317073
小数点后第 3 位是吻合的,从这个过程可以看到,如果一个人并不懂得乘除法的 计算方法,让他用上面这套规则同样可以进行乘除法计算,计算机不也是这样 吗?这让人想到了“中文房间”(Chinese room)这一思想实验。
Laplace 变换与此类似,我们回到前面那个串联 RC 电路,这回我们用插图 fig-03 来帮助分析,在电路中,记:
-
v_C: 电容两端的电压
-
v_R: 电阻两端的电压
-
v: 加载到电路上的电池的电压
根据基尔霍夫电压定律,电容两端的电压 + 电阻两端的电压 = 电源电压
v_C + v_R = v
根据电容的定义 Q = Cv_C, 电流 i = dQ/dt = Cdv_C/dt,因为电容和电阻串 联,流过电阻的电流大小也是 i,因此 v_R = Ri,得到:
v_C + Ri = v dv_C v_C + RC------ = v dt
这个微分方程就描述了这个电路的行为,如果直接求解这个微分方程我们就能得 到电容两端电压的数学表达式 v_C = v(1 - e^(-t/RC)),v_C 是时间 t 的函 数,其图形是一条上升的曲线,当电容被充满电之后(即时间 t 达到 +∞ 时,e 的指数项会变成 0, v_C = v),v_C 最终会等于电源电压 v.
不用分析的方法同样可以解出这个微分方程,那就是利用 Laplace 变换,《控制 系统基础》和《信号与系统》中都讲到了 Laplace 变换的一些基本性质和常用变 换表,我们来试试这个方法。
步骤1:对这个微分方程两端进行 Laplace 变换
dv_C L[ v_C + RC------ ] = L[v] dt
其中,符号 L 表示对函数进行 Laplace 变换,如 L[f(t)] = F(s), F(s) 就是 变换的结果,这种变换相当于一个处理函数的机器,它吃进一个函数,吐出另一 个函数,只不过这个函数现在是复变函数了。这让人想到一个笑话:A 和 B 吹 牛,A 说:“我有一台机器,你把活猪从机器的一端赶进去,另一端就会直接出香 肠。” B 说:“你这算啥,我也有一台机器,你把香肠从机器的一端塞进去,活猪 就会从另一端蹦出来!”嗯,在我看来,他们俩是在谈论“香肠变换”和“香肠逆变 换”,Laplace 变换与此类似,也有相应的 Laplace 逆变换,就是说 F(s) 可以 变回 f(t),当然,Laplace 变换机器吃进的是函数,而不是猪。另外,A 说的机 器实际上是存在的,香肠工厂就可以看成是这样的一个机器,只不过我们一般认 为的机器都比较小,要实现 B 说的机器就有点难度了。
因为 v_C, v 实际上都是 t 的函数 v_C(t) 和 v(t),上面的方程实际上可以写 成:
dv_C(t) L[ v_C(t) + RC-------- ] = L[v(t)] dt
应用线性叠加规则:
dv_C(t) L[ v_C(t) ] + L[ RC-------- ] = L[v(t)] dt
步骤2:查 Laplace 变换表,并利用 Laplace 变换规则处理一下,得到:
V_C(s) + RCsV_C(s) = V(s)
其中
V_C(s) = L[v_C(t)] V(s) = L[v(t)] RCsV_C(s) = L[RCdv_C(t)/dt]
最后一顶是利用了函数的一阶导数变换规则 L[df(t)/dt] = sF(s) - f(0),对上 面的电容电压 v_C(t) 而言,V_C(0) = 0,因为一开始时电容上电压为 0,这是 初始条件。
提取公因式,并求出我们感兴趣的 V_C(s) 的表达式:
V_C(s)(RCs + 1) = V(s)
这样立即就求出了电容上的电压的表达式,它是个复变函数:
1 V_C(s) = -------------V(s) RCs + 1
输出/输入,这就是这个电路的传递函数:
V_C(s) 1 output ------ = --------- = -------- V(s) RCs + 1 input
上面式子中 s 是一个复数,s = σ + jw
回想前面用复阻抗推出的公式:
V_out 1 ----- = -------- V_in 1 + jwRC
如果 s = σ + jw 中的 σ = 0,那 s = jw(纯虚数),在这种情况下
1 1 ------- = -------- 1 + sRC 1 + jwRC
有资料上讲当 v(t) 是正弦信号时 σ = 0,此时 σ 为什么为 0,这个我还不懂, 资料上说 σ 在这里是 exponential decay constant,我也还不懂。
步骤3:对结果进行 Laplace 逆变换,可以得到
v_C(t) = v(1 - e^(-t/RC))
哇,通过运用 Laplace 变换,微分方程变成了多项式,利用简单的代数方法就解 出来了。
我们来考查一下刚才得到的电容电压的公式,它包含着一些信息。
1 V_C(s) = -------------V(s) RCs + 1
Laplace 变换有一个 Final value theorem (终值定理),它说 f(∞) = lim(s→0)sF(s),就是函数 f(t) 在 t 为正无穷时的值等于经过 sF(s) 在 s→0 时的极限值,Wikipedia 上说这个可以预测系统的长期表现(因为时间 t→∞),也说 Laplace 变换可以用来分析控制系统的稳定性,这个目前我还不懂。 好,我们把这个定理应用到我们上面的公式中。
在我们闭合串联 RC 电路开关的一瞬间,实际上我们是执行了一个输入,也就是 一个函数,即 V0*u(t),V0 是电池的电压,u(t) 是单位阶跃函数(即 Heaviside step function, 赫维赛德阶跃函数,前面提到过他),这个函数在 t<0 时为 0,t>0 时其值 1,t=0 时的值和具体情况有关,它的 Laplace 变换 L[u(t)] = 1/s,想象这个函数在实数轴上,在 0 点一下子跳到 1,这就是阶 跃,我们闭合开关正是干了这样的事情,因为 u(t) 在 t>0 时值为 1,因此要乘 上电池电压 V0.
因此
V(s) = L[V0*u(t)] = V0*L[u(t)] = V0/s
代入前面的 V_C(s) 表达式中
1 V_C(s) = -------------V0 (RCs + 1)s
应用终值定理求 v_C(∞)
1 1 v_C(∞) = sV_C(s){s->0} = s-----------V0 = ---------V0 = V0 (RCs + 1)s RCs + 1
和前面的电容电压的解析表达式一样,它告诉我们,当充电时间很长,电容器被 充满时,电容器两端的电压就等于电池电压 V0,这也就达到了一个稳定状态,因 为电容器极板上的电场被建立起来了。作为对比,我们来看一下 RL 电路,这个 电路由一个电阻 R 和一个电感 L 构成,如下图所示。
/ / +---------o --------/\/\/\/\------+ | | | Switch Resistor | --- B ----- B Inductor --- Battery B ----- B | | | | +-----------------------------------+
我们来求一下流经电路的电流 i(t),这是一个串联电路,串联阻抗是 R + sL, 电压除以阻抗就是电流:
V(s) I(s) = -------- R + sL I(s) = L[i(t)] V(s) = L[V0*u(t)] = V0/s
应用终值定理求时间 t→∞ 时的电流 i(∞)
V0 V0 i(∞) = sI(s) {s->0} = s---------- = --- s(R + sL) R
完全正确!我们想象一下这个电路的物理过程,当闭合开关时,电感器会阻止电 流变化(这是它是本性),慢慢地,电流会变大,当一旦电感器上建立起磁场时, 电流就稳定了,它的值就是 V0/R,此时电感器相当于一条导线。这个电路也达到 了一个稳定状态。
从这两个例子可以看出 Laplace 变换确实是非常强大的工具,在电路分析,机械 系统分析和控制理论中都非常有用。
西瓜和频谱分析
某天在去公司的路上想到时域(time domain)和频域(frequency domain)的概念, 一个信号它是时间 t 的函数就是时域,如果某个量是频率 f 的函数,那它就是 频域。我粗略知道时域和频域之间可以通过傅立叶变换来转换(但具体细节我并不 懂得)。比如一个声音信号,从时域变换到频域后就可以知道哪个频率的声音要强 一些。可以把声音和光作类比(“音色”这个词中的“色”字用得非常好),为什么我 们听声音就可以分辨出不同的人说话呢?因为不同的人发出的音的频率成分不一 样。
光也是一样,光谱分析仪可以用来分析光谱,看看哪个频率的光的成分多一些等 等(我一直在想,要是自己有台质谱分析仪就好了,可以方便地分析出食品中各种 化学元素的含量,因为现在吃的东西让人很不放心,我还想把乡下老家地里的土 壤,水质也通通分析一遍,因为没有人管这个事情)
不懂傅立叶变换,那怎样来体验一下频谱分析实验呢?GNU/Linux 上一定是有这样的 软件,我想到了以前录音用过的软件 Audacity,回到家我就试了一试,果然有频 谱分析功能,从 Audacity 的源代码中可以看到,它是利用 FFT 即快速傅立叶变 换算法来生成频谱的。
有次买东西商家送了一个 54 键的玩具电子琴,我想,要是自己都不会弹奏,以 后怎么教女儿玩呢?我的音乐感觉不行,找了半天没有找到中央 C 在哪里,我决 定用 Audacity 来找出中央 C 那个键,于是弹奏几个键并录音查看频谱,最后还 是没有找出中央 C :(
这时正好看到墙角有个西瓜,以前我们在 SZDIY Lab 讨论过如何制作一种电子设 备来分辨西瓜好坏的问题,嗯,西瓜正好是一个不错的实验对象。我把西瓜放到 电脑旁边拍了几下,然后把声音录了下来(以后每次买西瓜我都准备录个音,看个 波形),波形如 fig-04 所示,fig-05 是频谱,说实话,从这个图中我看不出什 么名堂,切开西瓜才给了我更多信息:瓜有点生 :)
前面提到电话拨号的 DTMF 信号是两个不同频率的正弦波的叠加,真的是这样 吗,我们来看一下它的频谱吧!同样,把手机键盘音打开,按键时对着电脑录 音,然后查看频谱,如 fig-06 所示,中间那两个高峰的频率分别是 767Hz 和 1335Hz,再对照前面的 DTMF 频率表格,表格中 770Hz 和 1336Hz 相交处的数字 是 5,完全正确,我就是按的数字 5.
后记
拍完西瓜录完音后决定写下这篇学习笔记,算是对我近段时间学习的一个总结。 越来越觉得这些东西实在是非常有趣,但是又感觉到自己的基础还太差:不懂复 变函数,控制理论、信号与系统,傅立叶变换,拉普拉斯变换。有时感觉一个很 简单的问题想了很久也不明白。然而,古埃及谚语说:这个世界上只有两种生物 可以越过金字塔的顶端,一个是老鹰,一个是蜗牛。悟性慢的人只要努力,还是 能学到一些东西的。大自然的美它一直在那里,等待我们去了解。
参考资料,链接及注释
[1] Paul Scherz 著,蔡声镇等译,《发明者电子设计宝典》,(福建科学技术出版社,2004) http://book.douban.com/subject/1191080/
作者 Paul Scherz 是个物理学家,本书写作风格不同于一般的电子学教科书,它 涵盖了电子学各个领域的基础知识用实践应用,讲解清晰明了,用水路模拟电子 器件的工作行为,书中有大量作者手绘的精美电路图,另外书中很多电路是直接 能用的(标有参数)。
第 8 章则详细介绍了各种滤波器的概念(如切比雪夫滤波器,巴特沃斯滤波器)和 怎样一步一步进行设计(用归一化方法)。
[2] facephone http://www.atommann.com/make/facephone/index.html
[3] DTMF (双音多频) http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling
[4] PWM (脉冲宽度调制) http://en.wikipedia.org/wiki/Pulse-width_modulation 这是一种非常有趣的技术,很多场合都会用到,是一种简易的 D/A 转换方法。
[5] sunge 的 DTMF 实验硬件说明 http://sunge.awardspace.com/dtmf-en-de/node3.html
[6] 复数 下面这两本书讲到了复数引入的精彩历史
保罗·J·纳欣著,朱惠霖译,《虚数的故事》,(上海教育出版社, 2008) http://book.douban.com/subject/3535356/
本书里讲了英国的瑞利勋爵用复数分析电路的内容(解释天空为何是蓝色的那个瑞 利)。也提到用复数来分析交流电路的主要贡献者是施泰因梅茨(Charles Steinmetz)引入的,1893 年在国际电学大会的主题是“复数及其在电工学中的应 用”,施泰因梅茨被称为“用 -1 的平方根产生电的魔法师”。
William Dunham, 《天才引导的历程》,(科学与人译丛) http://book.douban.com/subject/1030974/
作者用精彩的笔墨讲述了卡尔达诺和塔塔利亚的解三次方程挑战赛,非常有趣, 虚数单位 sqrt(-1) 在解三次方程时不可避免地出现。
[7] Oliver Heaviside (奥利弗·赫维赛德) http://en.wikipedia.org/wiki/Oliver_Heaviside
传奇的英国自学成才的通才,物理学家。他发明了 operator calculus 来求解微 分方程,而且有张表格,后来发现他的方法和 Laplace 变换等效。当别人说他的 方法不严谨时,他说了一句有名的话: I do not refuse my dinner simply because I do not understand the process of digestion.
[9] 拉普拉斯变换 http://en.wikipedia.org/wiki/Laplace_transform 在这个词条中列出了电子学里的例子。
[10] Sudhir K. Gupta, 《控制系统基础》,(机械工业出版社,2004) http://book.douban.com/subject/1189942/
[11] Alan V. Oppenheim, Alan S. Willsky, S. Hamid, 《信号与系统》(第二版) http://book.douban.com/subject/3759690/
[12] James Ward Brown, Ruel V. Churchill, 《复变函数及应用》(第7版),(机械工业出版社, 2005) http://book.douban.com/subject/1231386/
[13] RC电路 http://en.wikipedia.org/wiki/RC_circuit