数字信号处理——有限长离散变换

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=0N1x[n]Ψ[k,n],0kN1x[n]=N1k=0N1X[k]Ψ[k,n],0nN1
通常前者称为分析式,后者称为综合式。 Ψ [ 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=0N1Ψ[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=0N1x[n]ejω[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,,N1

  • 经过采样,DTFT中 e − j ω n e^{-j\omega n} ejωn的第k 个样本变成
    e − j ω [ k ] n = e − j 2 π k n N e^{-j\omega [k]n} = e^{-j\frac {2\pi kn}N} ejω[k]n=ejN2πkn

  • 因此,DTFT e − j ω n e^{-j\omega n} ejωn的第k个样本变成(定义记号 W N = e − j 2 π N W_N = e^{-j\frac {2\pi}N} WN=ejN2π):
    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=0N1x[n]WNkn

  • 离散时间信号x[n] 的N 点离散傅里叶变换(DFT):
    X [ K ] = ∑ n = 0 N − 1 X[K] = \sum_{n=0}^{N - 1} X[K]=n=0N1

  • 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=0N1X[k]WNkn,0nN1

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[N1]]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[N1]]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=11111WN1WN2WNN11WN2WN4WN2(N1)1WNN1WN2(N1)WN(N1)(N1)

2.3 MATLAB计算DFT

  1. DFT 矩阵DN 可以通过调用dftmtx(N) 函数来获得,它的求逆形式可以通过conj(
    dftmtx(N))/N 得到,然后通过矩阵相乘计算DFT;
  2. DFT 和IDFT 在MATLAB 中通常通过调用fft 和ifft 来获得,这更加高效便捷;
  3. 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=0N1g[m]h[<nm>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[<Nk>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[<Nk>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],0kN1
其中:
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]),0kN1Xca[k]=21(X[k]X[<k>N]),0kN1

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[N1n]
    • 当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[N1n]
    • 当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对称性质:

  1. 序列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]
  2. 序列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对称性质:
  1. 序列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]
  2. 序列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
  1. 共轭等于信号本身 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[kN]
    2 实数序列DFT的实部满足圆周对称:
    X r e [ k ] = X r e [ ⟨ − k ⟩ N ] X_{re}[k] = X_{re}[⟨−k⟩N] Xre[k]=Xre[kN]
    3 实数序列DFT 的虚部满足圆周反对称:
    X i m [ k ] = − X i m [ ⟨ − k ⟩ N ] X_{im}[k] = − X_{im}[⟨−k⟩N] Xim[k]=Xim[kN]

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[<nn0>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] WNkn0x[n]=X[<kk0>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=0N1x[n]2=N1k=0N1X[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=02N1v[n]W2Nnk=n=0N1v[2n]W2n2nk+n=0N1v[2n+1]W2N2n+1=n=0N1g[n]WNnk+n=0N1h[n]WNnkW2Nk=n=0N1g[n]WNnk+W2Nkn=0N1h[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的有限长序列)。计算两者的线性卷积
重叠相加法

  1. 首先分割 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=0xm[nmN]
    其中
    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],  0nN10,                                    
  2. 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=0M1h[l](m=0xm[nlmN])=m=0ym[nmN]
    其中:
    y m [ n ] = h [ n ] ⊗ x m [ n ] y_m[n] = h[n]\otimes x_m[n] ym[n]=h[n]xm[n]
  3. 计算完每个短卷积后,每两个相邻的短卷积之间会发生重叠,因此,在进行最后的加法时,需要将重叠部分进行相加(重叠部分为 r N ⩽ n ⩽ r N + M − 2 rN\leqslant n\leqslant rN + M -2 rNnrN+M2)。

重叠保留法
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 M1个样本是不正确的并被丢弃,而余下的 N − M + 1 N - M + 1 NM+1个样本对应于 h [ n ] 和 x [ n ] h[n]和x[n] h[n]x[n]的线性卷积的正确样本。

猜你喜欢

转载自blog.csdn.net/m0_55818687/article/details/127954252