计算机 · 2021年12月19日 0

DFT

Basic Mathematics

正弦波(Sinewave)

$ x[n] = A\cos {(\omega nT+\phi)} = A\cos{(2\pi fnT+\phi)} $

  • \( A \) : amplitude
  • \( \omega \) : angular frequency in radians/seconds
  • \( f=\omega / 2\pi \) : frequency in Hertz(cycles/seconds)
  • \( \phi \) : initial phase in radians
  • \( n \) : time index
  • \( T=1/f_s \) : sampling period in seconds\( t=nT=n/f_s \)

这里的\(T\)不是指的此三角函数的周期,而是指的采样点之间间隔的时间。所以这里的\(f\)和\(f_s\)也是不同的概念,\(f\)和\(\omega\)指的是此三角函数自身的频率,而\(f_s\)指的是采样的频率。

所以这个公式的含义就是对于一个振幅为\(A\),初始相位为\(\phi\),角速度为\(\omega\)或者说频率为\(f\)的\(cos\)这种形式的三角函数,我们按照采样间隔为\(T\)或者说采样频率为\(f_s\)的方式去采样,那么对于下标为\(n\)的采样点,我们可以通过这个公式去计算其采样值。

点积(Scalar Product, Dot Product)

$ <x,y> = \sum\limits_{n=0}^{N-1}{x[n]\times y^{*}[n]} $ 这里的星号表示取共轭,即两个序列的点积等于前一个序列和后一个序列的共轭序列的内积。 如果点积为\(0\),那么表示这两个序列是正交的。

卷积(Convolution)

$ y[n]=(x_1[n]*x_2[n])n = \sum\limits{m=0}^{N-1}x_1[m]x_2[n-m] $

离散傅里叶变换的公式

$ X[k] = \sum\limits_{n=0}^{N-1}x[n]e^{-j2\pi kn/N} k=0,…,N-1 $

  • \(n\): discrete time index (normalized time, \(T=1\))
  • \(k\): discrete frequency index
  • \(\omega_k=2\pi k/N\): frequency in radians
  • \(f_k=f_sk/N\): frequency in Hz(\(fs\):sampling rate)

可以这样理解:

  1. 我们有一系列的基本正弦波:\(s[n] = e^{j2\pi kn/N} = e^{j2\pi k/N \times n}\),这些正弦波的频率从\(0\)开始,按照\(f_s/N\)的间隔递增,一直到\(f_s(N-1)/N\)。频率为\(0\)可以理解为常数,或者说该正弦波的频率等于采样频率,这样每次采样出来的值都是相等的。因此这组正弦波的频率到\(f_s(N-1)/N\)就截止了。至于频率大于\(f_s\)的正弦波,由于其频率大于了采样频率,因此在这里考虑这些正弦波是没有意义的。
  2. 我们有了这组基本的正弦波之后,然后由于”点积正好可以计算出原始信号中每个正弦波所占的比例”,于是就有了这个离散傅里叶变换的公式。

对于上面这个公式,由于已经说了使用normalized time, T=1,因此采样频率\(f_s\)也为1。

关于相位

对于算出来的\(X[k]\),如果我们取模(\(X[k]\)是一个复数,那么算出来的就是该正弦波所占的能量/Amplitude,如果算幅角,那么算出来的就是该正弦波在这个信号中的位置/Phase/初始相位。

Inverse DFT

$ x[n] = \frac{1}{N} \sum\limits_{k=0}^{N-1}{X[k]s_k[n]} = \frac{1}{N}\sum\limits_{k=0}^{N-1}{X[k]e^{j2\pi kn/N}} n=0,1,…,N-1 $ 逆向离散傅里叶和正向离散傅里叶变换的区别有两点:

  1. 使用的是\(e^{j2\pi kn/N}\)
  2. 求和结果需要除以\(N\)