Copy Link
Add to Bookmark
Report
d3_0x01_hacking_on_hw_filter
|=-----------------------------------------------------------------=|
|=-----=[ D O N O T F U C K W I T H A H A C K E R ]=-----=|
|=-----------------------------------------------------------------=|
|=------------------------[ #3 File 0x01 ]-------------------------=|
|=-----------------------------------------------------------------=|
|=-----------------=[ 滤波器,电话拨号,西瓜和频谱分析 ]=----------=|
|=-----------------------------------------------------------------=|
|=------------------------=[ By Atommann ]=------------------------=|
|=-----------------------------------------------------------------=|
|=-----------------=[ Friday, July 01 2011 ]=---------------------=|
|=-----------------------------------------------------------------=|
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. 永恒即刹那时光
——[英国诗人]威廉·布莱克(William Blake)
滤波器
======
最近阅读《发明者电子设计宝典》[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 键)。
表1: DTMF 键盘频率
-------------
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.
[8] 欧拉公式
http://en.wikipedia.org/wiki/Euler's_formula#Using_power_series
[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
begin 644 filter.tar.bz2
M0EIH.3%!62936?);G=L`PT/_____________________________________
M________XD9_/J`A7T````````MGM]P:IT#W9KH^V!7NS73X]?<&OIOO=]L!
(.....)
M>:H.#4KJ(K=.&CKE!UT*=,+AS#`_@Q^;ZNQU9\T\$N/G+4#6L'`DNMZ:DY\"
M=!F8]Z*Z]CW,)2<&\NVVOFY95W^>#&V/)(10W3[91%HY#_Q=R13A0D/);G=L
`
end