合成器基础:FM合成器(二)

上一篇文章里我们讲到了 FM 合成的基本原理。而在这篇文章里,我们将更进一步了解贝塞尔函数,以及它在 FM 合成里所起的作用。

上一篇文章中我们一边了解到,FM合成会产生对称分布的边带,一边又看到实际产生的频谱似乎没有很对称。这个问题在了解了贝塞尔函数之后就能得到解决。

hahaha好像这篇文章讲得太枯燥了,贝塞尔这一块看不看都得。如果没有兴趣,可以直接跳到本文的第二部分,或者我们下篇文章见哈哈

关于贝塞尔函数

贝塞尔函数(Bessel functions)是一系列函数的总称。贝塞尔函数在波的传播、热传导等方面都有广泛的应用。它就像圆周率 π 一样,虽然它叫做圆周率,但是我们却总能在各种其他不是算圆周的场合下见到它。

贝塞尔函数最早由伯努利提出,而后由贝塞尔提出了总体的框架。虽然我们在使用 FM 合成的时候,并不会直接使用到贝塞尔函数,但是生成的频谱,其实就是按贝塞尔函数进行分布的。


我们在 FM 合成中所使用到的,是第一类贝塞尔函数(Bessel functions of the first kind),它长这样:

它的定义如下:

J_\alpha (x)=\sum_{m=0}^{\infty}{\frac{(-1)^m}{m!\Gamma(m+\alpha +1)}(\frac{x}{2})^{2m+\alpha }}

其中, \Gamma(z)=\int_{0}^{\infty}{x^{z-1}e^{-x}dx}

当z是整数时,则可以简化为

\Gamma(n)=(n-1)!

此时,贝塞尔函数就变成了

J_n(I)=\sum_{m=0}^{\infty}{\frac{(-1)^m}{m!(n+m)!}(\frac{I}{2})^{2m+n}}

(求和符号后面的序列其实是一个收敛的序列,如果真的要进行计算,当m到第四第五项的时候,它的值已经接近于0,此时就可以近似认为它就是相应贝塞尔函数的值。

也可以在 Excel 中使用 BESSELJ() 函数,或者 Python 的 scipy.special 中的 jv(),Matlab 中 的 besselj() 进行计算)

特别地,当-n为负数时,有

J_{-n}(x)=(-1)^n J_n(x)

即贝塞尔函数的取值在n为奇数时,取相反数。


其中n为谐波次数,I为调制系数。

在上图中,我们可以看到,当I=1时,谐波分量依次是在x=1处,各阶贝塞尔函数的取值。


我们若把 FM 合成的公式展开,可以得到

\begin{equation} \begin{aligned} e&=Asin(\alpha t+Isin\beta t) \\ &=A\sum_{n=-\infty}^{\infty}{J_n(I)sin[(\alpha+n\beta )\cdot t]}\\ &=A\{J_0(I)sin\alpha t+\sum_{n=1}^{\infty}{J_n(I)[sin[(\alpha +n\beta )\cdot t + (-1)^nsin[(\alpha +n\beta )\cdot t]} \} \end{aligned} \end{equation}

也就是说,我们不必计算n为负数时的贝塞尔函数。将右侧的数值对称到左侧之后,当n为奇数时,直接取相反数即可。


贝塞尔函数与边带频率

在上图中,可以看到贝塞尔函数存在负值的部分。想象一下,当I=4的情况, J_0(4) 的取值为负值,也就是说,该点对应的振幅取值是负值,它的物理意义其实就是给波形前面加上一个负号反相。


在上一篇文章中,我们说到,FM 合成会在载波的两侧产生边带频率,由如下公式表示:

f_n=c±n\cdot m

两侧的边带频率的振幅大小由贝塞尔函数决定。而若对这些频率分量的幅值取绝对值,或者说忽略掉相位信息,那么它们会关于载波频率呈偶对称。


FM 合成在载波频率左侧产生的边带频率,就有可能落入负频率的范围内。

负频率的物理意义和负振幅相似,负振幅可以理解为在波形表达式的前边加上一个负号,而负的频率,则可以理解为相位相差了180度。

因此,我们可以把负频率关于0频率作轴对称,并取相反数,在正频率范围内得到频谱。又由于FM边带频率的频率间隔是一样的,因此作对称后的频率,会落在原有的一些频率值上。两个频率对应的振幅相减,得到的就是最终的结果啦。


如此一来,我们就得到了FM合成的频谱分布。由于负频率折叠的特性,使得 FM 合成得到的频率成分更加丰富多样。

这么倒腾来倒腾去,到最后,我们可以用一句话来概括 FM 合成的频谱分布:

FM 合成产生对称的边带频率分布,每个频率成分的大小由贝塞尔函数决定,落在负频率的频率分量,关于0频率轴折叠后与原有频率分量相加,得到最终的频率分布。


关于 FM 合成的理论知识就这么多啦,下一篇文章里,我们将运用这些知识,来让 FM 合成器发出声音!

编辑于 2019-08-24

文章被以下专栏收录