1 正交变换
令x[n]表示长度为N的时域序列,X[k]表示其N点正交变换的系数。正交变换的一般形式如下:
X [ k ] = ∑ n = 0 N − 1 x [ n ] Ψ ∗ [ k , n ] , 0 ⩽ k ⩽ N − 1 x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] Ψ [ k , n ] , 0 ⩽ n ⩽ N − 1 X[k] = \sum_{n=0}^{N-1}x[n]\Psi^*[k,n],0\leqslant k\leqslant N-1 \\ x[n] = \frac 1N\sum_{k=0}^{N-1}X[k]\Psi[k,n],0\leqslant n\leqslant N-1 X[k]=n=0∑N−1x[n]Ψ∗[k,n],0⩽k⩽N−1x[n]=N1k=0∑N−1X[k]Ψ[k,n],0⩽n⩽N−1
通常前者称为分析式,后者称为综合式。 Ψ [ k , n ] \Psi[k,n] Ψ[k,n]为基序列应该满足条件:
1 N ∑ n = 0 N − 1 Ψ [ k , n ] Ψ ∗ [ k , n ] = { 1 , l = k 0 , l ≠ k \frac 1N\sum_{n=0}^{N-1}\Psi[k,n]\Psi^*[k,n] = \left\{ \begin{matrix} 1,l=k \\ 0,l\not ={k} \end{matrix} \right. N1n=0∑N−1Ψ[k,n]Ψ∗[k,n]={
1,l=k0,l=k
2 离散傅里叶变换
2.1 定义
-
长度为N 的有限长序列x[n]的DTFT 为:
X ( e j ω ) = ∑ n = 0 N − 1 x [ n ] e − j ω [ k ] n X(e^{j\omega}) = \sum_{n = 0}^{N - 1}x[n]e^{-j\omega[k] n} X(ejω)=n=0∑N−1x[n]e−jω[k]n -
对频谱进行离散化操作,即对 ω \omega ω在[0, 2π)范围的频率均匀采样:
ω [ k ] = 2 π k N , k = 0 , 1 , ⋯ , N − 1 \omega[k] = \frac {2\pi k} N, k = 0,1,\cdots ,N-1 ω[k]=N2πk,k=0,1,⋯,N−1 -
经过采样,DTFT中 e − j ω n e^{-j\omega n} e−jωn的第k 个样本变成
e − j ω [ k ] n = e − j 2 π k n N e^{-j\omega [k]n} = e^{-j\frac {2\pi kn}N} e−jω[k]n=e−jN2πkn -
因此,DTFT e − j ω n e^{-j\omega n} e−jωn的第k个样本变成(定义记号 W N = e − j 2 π N W_N = e^{-j\frac {2\pi}N} WN=e−jN2π):
X N [ k ] = X ( e j ω [ k ] ) = ∑ n = 0 N − 1 x [ n ] W N k n X_N[k] = X(e^{j\omega[k]}) = \sum_{n=0}^{N-1}x[n]W_N^{kn} XN[k]=X(ejω[k])=n=0∑N−1x[n]WNkn -
离散时间信号x[n] 的N 点离散傅里叶变换(DFT):
X [ K ] = ∑ n = 0 N − 1 X[K] = \sum_{n=0}^{N - 1} X[K]=n=0∑N−1 -
DFT 序列X[k] 的N 点离散傅里叶逆变换(IDFT) :
x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] W N − k n , 0 ⩽ n ⩽ N − 1 x[n] = \frac 1N\sum_{k=0}^{N-1}X[k]W_N^{-kn}, 0\leqslant n \leqslant N-1 x[n]=N1k=0∑N−1X[k]WN−kn,0⩽n⩽N−1
2.2 DFT矩阵形式
DFT可用矩阵的形式表示:
X = D N x X = D_Nx X=DNx
其中,X是由N个DFT样本组成的向量
X = [ X [ 0 ] X [ 1 ] ⋯ X [ N − 1 ] ] T X = \left[\begin{matrix} X[0]&X[1]&\cdots&X[N-1]\end{matrix}\right]^T X=[X[0]X[1]⋯X[N−1]]T
x是N个输入样本的向量
x = [ x [ 0 ] x [ 1 ] ⋯ x [ N − 1 ] ] T x = \left[\begin{matrix} x[0]&x[1]&\cdots&x[N-1]\end{matrix}\right]^T x=[x[0]x[1]⋯x[N−1]]T
D N D_N DN是大小为N*N的DFT矩阵 ∣ B ∣ = [ 1 1 1 ⋯ 1 1 W N 1 W N 2 ⋯ W N N − 1 1 W N 2 W N 4 ⋯ W N 2 ( N − 1 ) ⋮ ⋮ ⋮ ⋯ ⋮ 1 W N N − 1 W N 2 ( N − 1 ) ⋯ W N ( N − 1 ) ( N − 1 ) ] |B| = \left[\begin{matrix} 1&1&1&\cdots&1\\1&W_N^1&W_N^2&\cdots&W_N^{N-1}\\1&W_N^2&W_N^4&\cdots&W_{N}^{2(N-1)}\\ \vdots&\vdots&\vdots&\cdots&\vdots\\1&W_N^{N-1}&W_N^{2(N-1)}&\cdots&W_N^{(N-1)(N-1)} \end{matrix}\right] ∣B∣=⎣⎢⎢⎢⎢⎢⎢⎡111⋮11WN1WN2⋮WNN−11WN2WN4⋮WN2(N−1)⋯⋯⋯⋯⋯1WNN−1WN2(N−1)⋮WN(N−1)(N−1)⎦⎥⎥⎥⎥⎥⎥⎤
2.3 MATLAB计算DFT
- DFT 矩阵DN 可以通过调用dftmtx(N) 函数来获得,它的求逆形式可以通过conj(
dftmtx(N))/N 得到,然后通过矩阵相乘计算DFT; - DFT 和IDFT 在MATLAB 中通常通过调用fft 和ifft 来获得,这更加高效便捷;
- fftshift 用于移位DFT,以确保频谱中间点为零频。
3 DTFT与DFT及其逆之间的关系
3.1 与离散时间傅里叶变换的关系
长度为N的序列x[n]的N点DFT序列X[k]就是其傅里叶变换 X ( e j ω ) X(e^{j\omega}) X(ejω)在N个等间隔频率 ω k = 2 π k / N \omega_k=2\pi k/N ωk=2πk/N上的一组频率样本。
即:
- 通过插值将DFT变为DTFT
- 通过采样将DTFT变为DFT
3.2 用DFT对DTFT进行数值计算
通过对序列进行补零,使其长度为2的整数次方,就可以使用FFT快速算法。
4 圆周卷积
定义:
y C [ n ] = ∑ m = 0 N − 1 g [ m ] h [ < n − m > N ] y_C[n] = \sum_{m=0}^{N-1}g[m]h[<n-m>N] yC[n]=m=0∑N−1g[m]h[<n−m>N]
和线性卷积一样圆周卷积满足交换律和结合律。
5 有限长序列的分类
5.1 根据共轭对称分类:
-
循环共轭对称序列(circular conjugate-symmetric sequence)
-
循环共轭反对称序列(circular conjugate-antisymmetric sequence)
-
一个N点DFTX[k]在满足以下情况时被称为循环共轭对称序列:
X [ k ] = X ∗ [ < − k > N ] = X ∗ [ < N − k > N ] X[k] = X^*[<-k>_N] = X^*[<N-k>_N] X[k]=X∗[<−k>N]=X∗[<N−k>N]- 实部为循环偶对称
- 虚部为循环奇对称
-
一个N点DFT X[k]在满足以下情况时被称为循环共轭反对称序列:
X [ k ] = − X ∗ [ < − k > N ] = − X ∗ [ < N − k > N ] X[k] = -X^*[<-k>_N] = -X^*[<N - k>_N] X[k]=−X∗[<−k>N]=−X∗[<N−k>N]- 实部为循环奇对称
- 虚部为循环偶对称
一个复序列DFT X[k]可以表示为一个循环共轭对称部分 X c s [ k ] X_{cs}[k] Xcs[k]和一个循环共轭反对称部分 X c a [ k ] X_{ca}[k] Xca[k]的和:
X [ k ] = X c s [ k ] + X c a [ k ] , 0 ⩽ k ⩽ N − 1 X[k] = X_{cs}[k] + X_{ca}[k],0\leqslant k\leqslant N-1 X[k]=Xcs[k]+Xca[k],0⩽k⩽N−1
其中:
X c s [ k ] = 1 2 ( X [ k ] + X ∗ [ < − k > N ] ) , 0 ⩽ k ⩽ N − 1 X c a [ k ] = 1 2 ( X [ k ] − X ∗ [ < − k > N ] ) , 0 ⩽ k ⩽ N − 1 X_{cs}[k] = \frac 12(X[k] + X^*[<-k>_N]),0\leqslant k\leqslant N-1\\ X_{ca}[k] = \frac 12(X[k] - X^*[<-k>_N]),0\leqslant k\leqslant N-1 Xcs[k]=21(X[k]+X∗[<−k>N]),0⩽k⩽N−1Xca[k]=21(X[k]−X∗[<−k>N]),0⩽k⩽N−1
5.2 根据几何对称分类:
- 对称序列(symmetric sequence)
- 反对称序列(Anti-symmetric sequence)
- 一个长度为N 的对称序列x[n] 满足以下条件:
x [ n ] = x [ N − 1 − n ] x[n] = x[N − 1 − n] x[n]=x[N−1−n]- 当N 为奇数时,x[n] 关于n = (N − 1)/2 对称
- 当N 为偶数时,x[n] 关于半样本点n = (N − 1)/2 对称
- 一个长度为N 的反对称序列x[n] 满足以下条件:
x [ n ] = − x [ N − 1 − n ] x[n] = −x[N − 1 − n] x[n]=−x[N−1−n]- 当N 为奇数时,x[n] 关于n = (N − 1)/2 反对称
- 当N 为偶数时,x[n] 关于半样本点n = (N − 1)/2 反对称
6 DFT对称关系
-
复数序列的DFT对称性质
-
根据共轭定理:
x ∗ [ n ] ⇄ X ∗ [ < − k > N ] x^*[n] \rightleftarrows X^*[<-k>_N] x∗[n]⇄X∗[<−k>N]
可得到以下的复数序列的DFT对称性质:
- 序列x[n]的实部 x r e [ n ] x_{re}[n] xre[n]的DFT为 X [ k ] X[k] X[k]的圆周共轭对称部分 X c s [ k ] X_{cs}[k] Xcs[k]:
x r e [ n ] = 1 2 ( x [ n ] + x ∗ [ n ] ) ⇄ 1 2 ( X [ k ] + X ∗ [ < − k > N ] ) = X c s [ k ] x_{re}[n] = \frac 12 (x[n] + x^*[n]) \rightleftarrows \frac 12(X[k] + X^*[<-k>_N]) = X_{cs}[k] xre[n]=21(x[n]+x∗[n])⇄21(X[k]+X∗[<−k>N])=Xcs[k] - 序列x[n]的虚部 j x i m [ n ] jx_{im}[n] jxim[n]的DFT为X[k]的圆周共轭反对称部分 X c a [ k ] X_{ca}[k] Xca[k]:
j x i m [ n ] = 1 2 ( x [ n ] − x ∗ [ n ] ) ⇄ 1 2 ( X [ k ] − X ∗ [ < − k > N ] ) = X c a [ k ] jx_{im}[n] = \frac 12 (x[n] - x^*[n]) \rightleftarrows \frac 12(X[k] - X^*[<-k>_N]) = X_{ca}[k] jxim[n]=21(x[n]−x∗[n])⇄21(X[k]−X∗[<−k>N])=Xca[k]
- 根据圆周共轭时间反转定理:
x ∗ [ < − k > N ] ⇄ X ∗ [ k ] x^*[<-k>_N]\rightleftarrows X^*[k] x∗[<−k>N]⇄X∗[k]
可得到以下的复数序列的DFT对称性质:
- 序列x[n]的圆周共轭对称部分 x c s [ n ] x_{cs}[n] xcs[n]的DFT 为X[k] 的实部 X r e [ k ] X_{re}[k] Xre[k]:
x c s [ n ] = 1 2 ( x [ n ] + x ∗ [ < − n > N ] ) ⇄ 1 2 ( X [ k ] + X ∗ [ k ] ) = X r e [ k ] x_{cs}[n] = \frac 12 (x[n] + x^*[<-n>_N]) \rightleftarrows \frac 12(X[k] + X^*[k]) = X_{re}[k] xcs[n]=21(x[n]+x∗[<−n>N])⇄21(X[k]+X∗[k])=Xre[k] - 序列x[n] 的圆周共轭反对称部分 x c a [ n ] x_{ca}[n] xca[n]的DFT 为X[k]的虚部 j X i m [ k ] jX_{im}[k] jXim[k]:
j x c a [ n ] = 1 2 ( x [ n ] − x ∗ [ < − n > N ] ) ⇄ 1 2 ( X [ k ] − X ∗ [ k ] ) = j X i m [ k ] jx_{ca}[n] = \frac 12 (x[n] - x^*[<-n>_N]) \rightleftarrows \frac 12(X[k] - X^*[k]) = jX_{im}[k] jxca[n]=21(x[n]−x∗[<−n>N])⇄21(X[k]−X∗[k])=jXim[k]
- 实数序列的DFT对称性质
- 实数序列是复数序列当虚部为零时的特殊情况:
x [ n ] ∈ R x[n] ∈ R x[n]∈R
- 共轭等于信号本身 x [ n ] = x ∗ [ n ] x[n] = x^∗[n] x[n]=x∗[n],满足圆周共轭对称:
X [ k ] = X ∗ [ ⟨ − k ⟩ N ] X[k] = X^∗[⟨−k⟩N] X[k]=X∗[⟨−k⟩N]
2 实数序列DFT的实部满足圆周对称:
X r e [ k ] = X r e [ ⟨ − k ⟩ N ] X_{re}[k] = X_{re}[⟨−k⟩N] Xre[k]=Xre[⟨−k⟩N]
3 实数序列DFT 的虚部满足圆周反对称:
X i m [ k ] = − X i m [ ⟨ − k ⟩ N ] X_{im}[k] = − X_{im}[⟨−k⟩N] Xim[k]=−Xim[⟨−k⟩N]
7 离散傅里叶变换定理
1、线性定理
a x 1 [ n ] + b x 2 [ n ] ⟷ a X 1 [ k ] + b X 2 [ k ] ax_1[n]+bx_2[n]\longleftrightarrow aX_1[k]+bX_2[k] ax1[n]+bx2[n]⟷aX1[k]+bX2[k]
2、圆周时移定理
x [ < n − n 0 > N ] = W N k n 0 X [ k ] x[<n-n_0>_N]=W_N^{kn_0}X[k] x[<n−n0>N]=WNkn0X[k]
3、圆周频移定理
W N − k n 0 x [ n ] = X [ < k − k 0 > N ] W_N^{-kn_0}x[n]=X[<k-k_0>_N] WN−kn0x[n]=X[<k−k0>N]
4、对偶定理
X ∗ [ n ] = N x [ < − k > N ] X^*[n]=Nx[<-k>_N] X∗[n]=Nx[<−k>N]
5、圆周卷积定理
g [ n ] Ⓝ h [ n ] ⟷ G [ k ] H [ k ] g[n]Ⓝh[n] \longleftrightarrow G[k]H[k] g[n]Ⓝh[n]⟷G[k]H[k]
6、调制定理
g [ n ] h [ n ] ⟷ 1 N G [ k ] Ⓝ H [ k ] g[n]h[n] \longleftrightarrow \frac 1{N}G[k]ⓃH[k] g[n]h[n]⟷N1G[k]ⓃH[k]
7、帕塞瓦尔定理
∑ n = 0 N − 1 ∣ x [ n ] ∣ 2 = 1 N ∑ k = 0 N − 1 ∣ X [ k ] ∣ 2 \sum_{n=0}^{N-1} |x[n]|^2 = \frac 1{N}\sum_{k=0}^{N-1} |X[k]|^2 n=0∑N−1∣x[n]∣2=N1k=0∑N−1∣X[k]∣2
8、共轭定理
x ∗ [ n ] ⟷ X ∗ [ < − k > N ] x^*[n] \longleftrightarrow X^*[<-k>_N] x∗[n]⟷X∗[<−k>N]
9、圆周时间反转定理
x [ < − k > N ] ⟷ X [ < − k > N ] x[<-k>_N] \longleftrightarrow X[<-k>_N] x[<−k>N]⟷X[<−k>N]
8 计算实序列的DFT
8.1 用单个N点DFT计算两个实序列的N点DFT
设 g [ n ] 和 h [ n ] g[n]和h[n] g[n]和h[n]是长度为N的两个实序列, G [ k ] 和 H [ k ] G[k]和H[k] G[k]和H[k]分别代表其N点DFT。这两个N点DFT可以通过长度为N的复序列 x [ n ] x[n] x[n]的单个N点DFT序列 X [ k ] X[k] X[k]来有效计算, x [ n ] x[n] x[n]定义为:
x [ n ] = g [ n ] + j h [ n ] x[n] = g[n] + jh[n] x[n]=g[n]+jh[n]
可以求得:
G [ k ] = 1 2 { X [ k ] + X ∗ [ < − k > N ] } H [ k ] = 1 2 { X [ k ] − X ∗ [ < − k > N ] } G[k] = \frac 12\{X[k] + X^*[<-k>_N]\}\\ H[k] = \frac 12\{X[k] - X^*[<-k>_N]\} G[k]=21{
X[k]+X∗[<−k>N]}H[k]=21{
X[k]−X∗[<−k>N]}
8.2 用单个N点DFT计算一个个实序列的2N点DFT
令 v [ n ] v[n] v[n]是长度为2N的实序列, V [ k ] V[k] V[k]表示该实序列的2N点DFT。定义两个长度为N的实序列 g [ n ] 和 h [ n ] g[n]和h[n] g[n]和h[n]为:
g [ n ] = v [ 2 n ] h [ n ] = v [ 2 n + 1 ] g[n] = v[2n]\\h[n] = v[2n+1] g[n]=v[2n]h[n]=v[2n+1]
G [ k ] 和 H [ k ] G[k]和H[k] G[k]和H[k]表示他们的N点DFT。定义一个长度为N的复序列 x [ n ] = g [ n ] + j h [ n ] x[n] = g[n] + jh[n] x[n]=g[n]+jh[n]可以从序列 x [ n ] x[n] x[n]的N点DFT X [ k ] X[k] X[k]来计算DFT G [ k ] 和 H [ k ] G[k]和H[k] G[k]和H[k]
V [ k ] = ∑ n = 0 2 N − 1 v [ n ] W 2 N n k = ∑ n = 0 N − 1 v [ 2 n ] W 2 n 2 n k + ∑ n = 0 N − 1 v [ 2 n + 1 ] W 2 N 2 n + 1 = ∑ n = 0 N − 1 g [ n ] W N n k + ∑ n = 0 N − 1 h [ n ] W N n k W 2 N k = ∑ n = 0 N − 1 g [ n ] W N n k + W 2 N k ∑ n = 0 N − 1 h [ n ] W N n k = G [ < k > N ] + W 2 N k H [ < k > N ] V[k] = \sum_{n=0}^{2N-1}v[n]W_{2N}^{nk} = \sum_{n=0}^{N-1}v[2n]W_{2n}^{2nk} + \sum_{n=0}^{N-1}v[2n+1]W_{2N}^{2n+1}\\=\sum_{n=0}^{N-1}g[n]W_{N}^{nk} + \sum_{n=0}^{N-1}h[n]W_N^{nk}W_{2N}^{k}\\=\sum_{n=0}^{N-1}g[n]W_{N}^{nk} + W_{2N}^k\sum_{n=0}^{N-1}h[n]W_{N}^{nk}\\=G[<k>_N] + W_{2N}^kH[<k>_N] V[k]=n=0∑2N−1v[n]W2Nnk=n=0∑N−1v[2n]W2n2nk+n=0∑N−1v[2n+1]W2N2n+1=n=0∑N−1g[n]WNnk+n=0∑N−1h[n]WNnkW2Nk=n=0∑N−1g[n]WNnk+W2Nkn=0∑N−1h[n]WNnk=G[<k>N]+W2NkH[<k>N]
9 用DFT实现线性卷积
9.1 两个有限长序列的线性卷积
为了用基于DFT的方法实现线性卷积,先用(M-1)个零对 g [ n ] g[n] g[n]进行补零得到长度为L的序列 g c [ n ] g_c[n] gc[n],接着用(N-1)个零对 h [ n ] h[n] h[n]进行补零得到长度为L的序列 h c [ n ] h_c[n] hc[n]。然后分别计算 g c [ n ] g_c[n] gc[n]和 h c [ n ] h_c[n] hc[n]的L点DFT,得到 G c [ k ] 和 H c [ k ] G_c[k]和H_c[k] Gc[k]和Hc[k],最后对乘积 G c [ k ] ∗ H c [ k ] G_c[k]*H_c[k] Gc[k]∗Hc[k]做L点IDFT,得到 y L [ n ] y_L[n] yL[n]。这个流程如下图所示:
9.2 有限长序列和无限长序列的线性卷积
另 h [ n ] h[n] h[n]是一个长度为M的有限长序列,而 x [ n ] x[n] x[n]是一个无限长序列(或者是一个长度远大于M的有限长序列)。计算两者的线性卷积
重叠相加法
- 首先分割 x [ n ] x[n] x[n](不失一般性,假定它为因果序列),得到一组长度为N的连续有限长子序列 x m [ n ] x_m[n] xm[n]:
x [ n ] = ∑ m = 0 ∞ x m [ n − m N ] x[n] = \sum_{m=0}^{\infty}x_m[n - mN] x[n]=m=0∑∞xm[n−mN]
其中
x m [ n ] = { x [ n + m N ] , 0 ⩽ n ⩽ N − 1 0 , 其 他 x_m[n] = \left\{ \begin{aligned} x[n+mN],~~0\leqslant n \leqslant N-1 \\ 0,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~其他 \end{aligned} \right. xm[n]={ x[n+mN], 0⩽n⩽N−10, 其他 - 将 x m [ n ] x_m[n] xm[n]代入卷积计算公式中得:
y [ n ] = ∑ l = 0 M − 1 h [ l ] ( ∑ m = 0 ∞ x m [ n − l − m N ] ) = ∑ m = 0 ∞ y m [ n − m N ] y[n] = \sum_{l=0}^{M-1}h[l](\sum_{m=0}^{\infty}x_m[n-l-mN])\\ = \sum_{m=0}^{\infty}y_m[n - mN] y[n]=l=0∑M−1h[l](m=0∑∞xm[n−l−mN])=m=0∑∞ym[n−mN]
其中:
y m [ n ] = h [ n ] ⊗ x m [ n ] y_m[n] = h[n]\otimes x_m[n] ym[n]=h[n]⊗xm[n] - 计算完每个短卷积后,每两个相邻的短卷积之间会发生重叠,因此,在进行最后的加法时,需要将重叠部分进行相加(重叠部分为 r N ⩽ n ⩽ r N + M − 2 rN\leqslant n\leqslant rN + M -2 rN⩽n⩽rN+M−2)。
重叠保留法
将 x [ n ] x[n] x[n]分割为重叠的块 x m [ n ] x_m[n] xm[n],在计算过程中,保留 h [ n ] 和 x m [ n ] h[n]和x_m[n] h[n]和xm[n]的圆周卷积中与 h [ n ] h[n] h[n]和 x m [ n ] x_m[n] xm[n]的线性卷积对应的项,丢弃圆周卷积的其他部分。
在长度为M的序列 h [ n ] h[n] h[n]和长度为N的序列 x [ n ] x[n] x[n]的N点圆周卷积中,其中 N > M N>M N>M,通常最前面的 M − 1 M - 1 M−1个样本是不正确的并被丢弃,而余下的 N − M + 1 N - M + 1 N−M+1个样本对应于 h [ n ] 和 x [ n ] h[n]和x[n] h[n]和x[n]的线性卷积的正确样本。