Miscellaneous of Fourier Transform


傅里叶级数

傅里叶认为, 对于周期为$2\pi$的函数, 均可展开为如下的级数形式:

系数$a_0, a_i, b_i$称为傅里叶系数.

由于三角函数系具有正交性, 即:

上式可由定积分与积化和差公式证明.

同时有:

所以可得(需满足一致收敛):

若$f(x)$为奇函数, $a_n$均为0, 此时傅里叶级数为正弦级数; 同理, 若$f(x)$为偶函数傅里叶级数为余弦级数.

由欧拉公式($\rm j$为虚数单位):

$$ e^{{\rm j}x} = \cos x + {\rm j}\sin x $$

可将傅里叶级数扩展至复数域:

$$\begin{aligned} f(x) &= \frac{a_0}{2} + \sum_{i=1}^{\infty}(a_i\cos ix + b_i\sin ix) \\ &= \frac{a_0}{2} + \sum_{i=1}^{\infty}(a_i\frac{e^{{\rm j}ix} + e^{-{\rm j}ix}}{2} - b_i{\rm j}\frac{e^{{\rm j}ix} - e^{-{\rm j}ix}}{2}) \\ &= \sum_{i=-\infty}^{+\infty} c_ie^{{\rm j}ix} \end{aligned}$$

其中:

三式合并即得:

对于傅里叶级数, 有帕塞瓦尔定理:

使用三角函数系的正交性即可得证.

傅里叶变换

当周期不为$2\pi$时, 设周期为$T$, 则有:

$$ f(x) = \sum_{i=-\infty}^{+\infty} c_ie^{{\rm j}\frac{2\pi ix}{T}} \\ c_i = \frac{1}{T}\int_{-T/2}^{T/2}f(x)e^{-{\rm j}\frac{2\pi ix}{T}}\ {\rm d}x $$

设$\omega_i = 2\pi i/T$, 令$F(\omega)=\alpha\displaystyle\int_{-T/2}^{T/2}f(x)e^{-{\rm j}\omega x} {\rm d}x$, 则:

$$ c_i = \frac{1}{T\alpha}F(\omega_i) \\ f(x) = \frac{1}{2\pi\alpha} \sum_{i=-\infty}^{+\infty} F(\omega_i)e^{{\rm j}\omega_i x} \frac{2\pi}{T} $$

当$T \to +\infty$时, $f(x)$变为非周期函数, 级数变为黎曼和, 则有:

$$ F(\omega) = \alpha\int_{-\infty}^{+\infty}f(x)e^{-{\rm j}\omega x}\ {\rm d}x \tag{1} $$ $$ f(x) = \frac{1}{2\pi\alpha}\int_{-\infty}^{+\infty}F(\omega)e^{{\rm j}\omega x}\ {\rm d}\omega \tag{2} $$

式$(1)$即为傅里叶变换, 式$(2)$为逆变换, 一般视为算子将其记作$FT[f(x)]$与$IFT[F(\omega)]$. $\alpha$称为规范化因子, 通常取为$1$, 有时会取$\frac{1}{ \sqrt{2\pi} }$

需要注意的是式中的$\int_{-\infty}^{+\infty}$均为柯西主值积分, 也即$\lim \limits_{M\to +\infty}\int_{-M}^M$的缩写

与傅里叶级数同理, 若$f(x)$为奇函数则变换后为纯虚函数, 若$f(x)$为偶函数则变换后为实函数, 分别称为正弦变换与余弦变换.

对于傅里叶变换, 有线性性质:

频移特性与时移特性:

比较重要的有时域卷积定理频域卷积定理:

实数域$\mathbb{R}$上的卷积定义如下:

若计算$F(-\omega)$

若函数为实函数则变换后的复函数实部为偶函数, 虚部为奇函数. 负频率部分的幅值与正频率一致, 相位角相反.

对于傅里叶变换也有帕塞瓦尔定理:

离散时间傅里叶变换

为了在计算机中表示信号, 需要对连续的信号进行采样将其变为一个离散的数列.

为了对其进行分析, 需要从数学上定义采样, 为此首先需要引入冲激函数(狄拉克$\delta$函数), 它由两个式子定义:

也可定义为:

$u(x)$为单位阶跃函数.

若函数$f(t)$在$t_0$处有值, 显然有:

同时显然$\delta$函数为偶函数, 所以:

也即$\delta$函数为卷积的单位元. 由时域卷积定理可以设$FT[\delta] = 1$; 同时若对常函数$1$进行IFT, 则有:

下面给出采样的数学定义. 对于连续信号$f(t)$, 对其进行采样即为:

其中的$T_s$称为采样间隔, 一般记$f_s=1/T_s$为采样频率, $\omega_s=2\pi f_s$为采样角频率.

若对$f^*$进行傅里叶变换, 则有:

该变换即为离散时间傅里叶变换(DTFT), 需要注意积分与求和的交换需要级数的一致收敛性.

DTFT有一个重要性质. 对$s(t) = \sum_{i=-\infty}^{+\infty}\delta(t-iT_s)$求傅里叶级数:

所以:

再对$s(t)$进行傅里叶变换:

对$f^*$的傅里叶变换可以由频域卷积定理重新求得:

也即在时域内以$T_s$采样间隔进行采样, 相当于在频域内以$\omega_s$为周期进行周期延拓.

由此便有奈奎斯特采样定理: 若要保留$\omega_N$以内的角频率信息, 采样角频率要大于等于$2\omega_N$, 否则将会发生频率混叠:

frequency_overlap

工程上由于后期处理的需求可能会略高于两倍, 常用的音频采样率44100Hz便是由此而来(人耳最多只能听到20Hz-20kHz的信息).

令$x(n) = f(nT_s)$, 即频率归一化, 则可将DTFT化简为:

同理, 有逆DTFT:

离散傅里叶变换

DTFT解决了离散信号频率分析的问题, 但仍有问题需要解决: 一方面变换为一个无限长的级数求和, 另一方面得到的函数仍然是连续函数.

第一个问题很好解决, 实际输入的信号都是有限长度的, 可记为$x_0, x_1, \cdots, x_{L-1}$, 其余部分均取为0即可.

对于另外一个问题, 可以考虑对频域同样进行”采样”, 即在一个周期的区间$[0, 2\pi)$中只取$N$个等间距的点计算.

设计算的第$k$个频率为$\omega_k = 2\pi k/N$, 记$X_k=X^*(\omega_k)$, 则有:

通常记$w_N = e^{-{\rm j}2\pi /N }$, 也即:

现在问题是$N$的取值. 若$N<L$则有:

发生了时域混叠, 所以$N$的取值必须大于等于$L$, 为了方便起见一般令$N=L$, $N>L$时向时域序列填充0即可:

这便是离散傅里叶变换(DFT), 类似地, 有逆DFT:

证明可见这里(FFT)

若$n \geq N$则所得即为$x_{n \mod N}$, 相当于对原信号进行了周期延拓.

同样在离散卷积的意义下DFT有时域卷积定理与频域卷积定理. 同时可以看出DFT与IDFT实际上是特殊点的多项式求值.

若计算$X_{N-k}$:

当$x_n$均为实数时其值为$\overline{X_n}$, 也即DFT所得的序列是一个共轭对称序列.

若计算$X_0$:

为$x_n$的累加和, 一般称该值为直流分量.

对DFT也有帕塞瓦尔定理:

Bluestein算法

普通的FFT只能得到长度为2的整数次幂的DFT, 对于其它情况则需要使用Bluestein算法快速计算.

对序列$x_0, x_1, \cdots, x_{N-1}$进行DFT, 有:

可以发现后面的求和为一个卷积, 使用FFT计算卷积即可. 时间复杂度为$O(N\log N)$, 常数大约是FFT的六倍.

IDFT也同理可得:

若使用的是NTT则可能需要计算二次剩余, 此时可以使用:

来拆解$kn$, 可避免计算二次剩余.

离散余弦变换

DFT得到的结果为复数, 有时不方便解释. 此时便可引入离散余弦变换(DCT).

如前文所述, 当信号是偶函数时进行傅里叶变换得到的便是实函数, 所以对原信号进行偶延拓后再进行DFT便得到了DCT. 偶延拓的方法不同得到的DCT也不同, 其中最常用的一种如下:

相当于将信号右移$1/2$个单位后进行偶延拓再进行DCT. $\alpha_k$通常取$1$, 有时为了使转移矩阵正交化会取为:

DCT可以更好的聚集低频能量(由于进行了偶延拓后再周期延拓相比于DFT直接周期延拓函数图像更加平滑, 高频部分能量更少), 经常被用于图像处理之中. JPEG即是利用了该性质进行图像压缩.

需要注意的是通常一维DCT的实现时间复杂度为$O(N^2)$, 因此对于一维信号的分析仍较多使用DFT.

短时傅里叶变换

对信号直接进行DFT可以得到整个信号各频率的强度. 然而对于实际的信号如音频信号, 信号在各时间上的频率信息是不一样的. 直接对整个信号进行DFT则丢失了时间信息.

一个办法是将信号按照时间截取短的等长的”帧”, 再对每帧进行DFT, 这便是短时傅里叶变换(STFT). 由于每帧时间较短可以假定信号在一帧之内频率信息基本一致, 对于音频信号一般的共识是在10ms-40ms内信号基本是平稳的.

若直接对截取的信号进行DFT则可能因为周期延拓时的跳变导致频率泄露, 此时需要对截取后的信号乘上一个窗函数再进行DFT以减小频率泄露. 一个比较常用的窗函数为汉宁窗:

其中的$N$为帧长度.

加窗后, 信号$x_n$在第$t$帧(从0开始)的强度值$x_{t,n}$则为:

其中的$H$通常称为hop size, 即两帧之间”越过”的采样点数量.

对第$t$帧进行DFT, 第$k$频率的强度$X_{t,k}$即为:

对于逆STFT则较为复杂, 由于每个帧之间可能有重叠, 对修改后的STFT每帧进行DFT可能每帧的重叠部分有冲突, 无法对应到真实存在的信号.

其中一种想法是使用窗函数进行加权平均, 但使用最多的是如下的方法:

假设有一信号$y_i$, 对其进行STFT可得$Y_t[k]$, 考虑修改后的STFT$X^*_{t,k}$与$Y_{t,k}$的距离的平均平方和:

由DFT的线性性质以及帕塞瓦尔定理, 则有:

对$y$求导, 等于0时$D$为极小值, 有:

对比$\sum_n$各项, 即有:

如上所述, 据此重建的信号的STFT与原来修改得到的STFT的平均平方误差最小.

需要注意分母$\sum_t W^2_{N,(n-tH)}$不能为0, 因此对于以0开头的窗函数可能需要向前填充0并且保留一定的帧重叠.

由一维到二维

对于二维的信号, 有二维傅里叶变换2FT:

可以发现基底$e^{-{\rm j} (\omega x + \nu y)}$实际上是两个一维的傅里叶变换的乘积.

由此即可推出二维离散傅里叶变换2DFT:

可以看出实际上可以对每行进行DFT后再对每列进行DFT即可得到二维的2DFT. 时间复杂度即为$O(MN\log MN)$

同样也有二维DCT, 设$c_{N,k,m}=\cos( \pi k(2m+1)/2N)$, $\beta_{m,n}=\alpha_m\alpha_n$:

二维DCT经常用于图像有关的处理, 如图像压缩(JPEG)或图像隐水印. JPEG即是对图像分为$8\times 8$的块后对每块进行DCT, 然后对DCT参数进行量化丢弃部分人眼无法辨别的高频参数后进行游程编码. 隐水印则是将水印信息嵌入人眼难以观察的中高频参数中.