信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier

  • 【总目录】
    • (1) 简介 Intro
    • (2) 傅里叶 Fourier
      • 常用函数的傅里叶变换汇总
    • (3) LTI 系统 与 滤波器
      • 二次抑制载波振幅调制接收系统 Python
    • (4) 取样 Sampling
    • (5) 离散傅里叶 Discrete Fourier

文章目录

  • 5. 离散傅里叶 Discrete Fourier
    • 5.1. 傅里叶变换特性
    • 5.2. 傅里叶变换中连续到离散的演化
      • 5.2.1 演化 离散时间傅里叶变换(DTFT)
      • 5.2.2. 演化 离散傅里叶变换(DFT)
      • 5.2.3. 演化 离散傅里叶级数(DFS)
    • 5.3. 离散傅里叶变换(DFT)
      • 5.3.1. Python 分析两个信号离散傅里叶变换结果的差异

5. 离散傅里叶 Discrete Fourier

5.1. 傅里叶变换特性

变换
Transform
时域 时域特性
Time Domain
频域 频域特性
Frequency Domain
傅里叶变换
(FT)
Fourier Transform
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第1张图片 连续
非周期
x ( t ) = 1 2 π ∫ − ∞ ∞ X ( j ω ) e j ω t d ω \displaystyle x({\color{red}t}) = \frac{1}{2\pi}\int^{\infty}_{-\infty}X(j\omega)e^{j\omega {\color{red}t}}d\omega x(t)=2π1X(jω)ejωtdω
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第2张图片 连续
非周期
X ( j ω ) = ∫ − ∞ ∞ x ( t ) e − j ω t d t \displaystyle X({\color{red}j\omega}) = \int^{\infty}_{-\infty}x(t)e^{ {\color{red}-j\omega} t}dt X(jω)=x(t)ejωtdt
傅里叶级数
(FS)
Fourier Series
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第3张图片 连续
周期
x ~ ( t ) = ∑ k = − ∞ ∞ X ( j k Ω ) e j k Ω t \displaystyle \tilde{x}({\color{red}t}) = \sum^{\infty}_{k = -\infty} X(jk\Omega)e^{jk\Omega {\color{red}t}} x~(t)=k=X(jkΩ)ejkΩt
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第4张图片 离散
非周期
X ( j k Ω ) = 1 T ∫ 0 T x ~ ( t ) e − j k Ω t d t \displaystyle X( {\color{red}jk\Omega}) = \frac{1}{T} \int^{T}_{0} \tilde{x}(t) e^{ {\color{red}-jk\Omega} t} dt X(jkΩ)=T10Tx~(t)ejkΩtdt
离散时间傅里叶变换
(DTFT)
Discrete Time Fourier Transform
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第5张图片 离散
非周期
x [ n ] = 1 2 π ∫ − π π X ( j ω ) e j ω n d ω \displaystyle x[{\color{red}n}] = \frac{1}{2\pi}\int^{\pi}_{-\pi}X(j\omega)e^{j\omega {\color{red}n}}d\omega x[n]=2π1ππX(jω)ejωndω
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第6张图片 连续
周期
X ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n \displaystyle X(e^{ {\color{red}j\omega}}) = \sum^{\infty}_{n=-\infty} x[n] e^{ {\color{red}-j\omega} n} X(ejω)=n=x[n]ejωn
离散傅里叶级数
(DFS)
Discrete Fourier Series
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第7张图片 离散
周期
x ~ [ n ] = ∑ k = 0 N − 1 X ~ [ k ] e j 2 π N k n \displaystyle \tilde{x}[{\color{red}n}] = \sum^{N-1}_{k=0} \tilde{X}[k]e^{j\frac{2\pi}{N}k{\color{red}n}} x~[n]=k=0N1X~[k]ejN2πkn
− ∞ < n < + ∞ -\infty < {\color{red}n}< +\infty <n<+
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第8张图片 离散
周期
X ~ [ k ] = 1 N ∑ n = 0 N − 1 x ~ [ n ] e − j 2 π N k n \displaystyle \tilde{X}[{\color{red}k}] = \frac{1}{N}\sum^{N-1}_{n=0} \tilde{x}[n]e^{ {\color{red}-}j\frac{2\pi}{N}{\color{red}k}n} X~[k]=N1n=0N1x~[n]ejN2πkn
− ∞ < k < + ∞ -\infty < {\color{red}k}< +\infty <k<+
离散傅里叶变换
(DFT)
Discrete Fourier Transform
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第9张图片 离散
非周期
x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] e j 2 π N k n \displaystyle x[{\color{red}n}] = \frac{1}{N} \sum^{N-1}_{k=0} X[k]e^{j\frac{2\pi}{N}k{\color{red}n}} x[n]=N1k=0N1X[k]ejN2πkn 0 < n < N − 1 0 < {\color{red}n}< N-1 0<n<N1
信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第10张图片 离散
非周期
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n \displaystyle X[{\color{red}k}] = \sum^{N-1}_{n=0} x[n]e^{ {\color{red}-}j\frac{2\pi}{N}{\color{red}k}n} X[k]=n=0N1x[n]ejN2πkn 0 < k < N − 1 0 < {\color{red}k}< N-1 0<k<N1
  • 说明:
    • 除离散傅里叶变换外,若某个信号在时域(或频域)内是周期的,则经变换 (或反变换)后其变换结果在频域(或时域)内是离散的;若信号在时域(或频域)内是离散的,则其变换(或反变换)结果在频域(或时域)内是周期的。
    • 周期性和离散性呈现出对偶关系。
    • 离散傅里叶变换则提供了一种在时域和频域内均是离散的信号变换方法。

5.2. 傅里叶变换中连续到离散的演化

5.2.1 演化 离散时间傅里叶变换(DTFT)

F ( j ω ) = ∫ − ∞ ∞ f ( t ) e − j ω t d t F(j\omega) = \int^{\infty}_{-\infty} f(t) e^{-j\omega t} dt F(jω)=f(t)ejωtdt

  • 傅里叶变换式中,不论在时域还是在频域,信号都是连续的。

  • 但以计算机为代表的数字处理系统只能存储和处理有限长度的离散数字信号,且无法直接进行连续积分运算。

  • 所以需要对信号离散化。

  • 由采样定理知,序列可以看作在满足采样定理的条件下对连续信号进行采样得到,则有:
    X ( j ω ) = ∑ n = − ∞ ∞ x [ n ⋅ Δ t ] e − j ω n Δ t Δ t X(j\omega) = \displaystyle \sum^{\infty}_{n=-\infty} x\big[ n\cdot \Delta t\big] e^{-j\omega n \Delta t} \Delta t X(jω)=n=x[nΔt]ejωnΔtΔt

  • 离散时间傅里叶变换DTFT-Discrete-time Fourier Transform), 将时域间隔单位归一化后 Δ t = 1 \Delta t = 1 Δt=1 ,得到 :
    X ( j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n X(j\omega) = \displaystyle \sum^{\infty}_{n=-\infty} x\big[ n\big] e^{-j\omega n} X(jω)=n=x[n]ejωn

    • 上式是将连续傅里叶变换中的时域信号进行离散化后得到
  • 分析:DTFT仍未达到便于数字系统处理的目的:

    1. 时域序列的长度仍然是无限长
    2. 信号在频域仍然是连续

5.2.2. 演化 离散傅里叶变换(DFT)

  • 对DTFT而言,其频域变换结果是以 2 π 2\pi 2π为周期的连续周期函数
  • 为此,对时限信号在频域内以 2 π / N 2\pi/N 2π/N 为间隔对 DFTF 的变换结果进行频域取样
    X [ k ] = ∑ n = 0 N − 1 x [ n ] e − h 2 π N n k ,   k = 0 , ⋯   , N − 1 X[k] = \displaystyle \sum^{N-1}_{n=0} x[n] e^{-h\frac{2\pi}{N}nk} , \, k =0,\cdots , N-1 X[k]=n=0N1x[n]ehN2πnk,k=0,,N1
  • 上式在频域内也是离散且有限的,这非常适合于计算机等数字信号处理系统来进行处理。
  • 该式实际上给出的是非周期离散序列的 离散傅里叶变换 (DFT- Discrete Fourier Transform)。

5.2.3. 演化 离散傅里叶级数(DFS)

  • 对周期为 T T T 的连续信号 x ( t ) x(t) x(t) 而言,其傅里叶级数为
    X ( j k Ω ) = 1 T ∫ 0 T x ~ ( t ) e − j k Ω t d t \displaystyle X(jk\Omega) = \frac{1}{T}\int^{T}_{0}\tilde{x}(t) e^{-jk\Omega t}dt X(jkΩ)=T10Tx~(t)ejkΩtdt

  • 其中 Ω = 2 π T \Omega = \frac{2\pi}{T} Ω=T2π , 它也是频域中两条相邻谱线的间隔。

  • 若要将周期信号在时域内进行离散化,只需以恰当采样率进行采样,即可得到对应的周期序列。

  • 离散傅里叶级数DFS- Discrete Fourier Series):

    • 对周期为 N N N 的周期离散序列 x ( n ) x(n) x(n) 而言,时域积分演变为离散求和
      X ~ ( j k Ω ) = 1 N ∑ n = 0 N − 1 x ~ ( n ) e − j k Ω n \displaystyle \tilde{X}(jk\Omega) = \frac{1}{N}\sum^{N-1}_{n=0} \tilde{x}(n)e^{-jk\Omega n} X~(jkΩ)=N1n=0N1x~(n)ejkΩn
  • 若离散周期序列 x ~ ( n ) \tilde{x}(n) x~(n) 的一个周期取出来,记作 x ( n ) x(n) x(n)

    • 且将DFS变换结果中的一个周期取出来,记作 X ( j k Ω ) X(jk\Omega) X(jkΩ) , 则:
      X ~ ( j k Ω ) = 1 N ∑ n = 0 N − 1 x ~ ( n ) e − j 2 π N k n \displaystyle \tilde{X}(jk\Omega) = \frac{1}{N}\sum^{N-1}_{n=0} \tilde{x}(n)e^{ -j\frac{2\pi}{N}kn} X~jkΩ)=N1n=0N1x~(n)ejN2πkn
    • 上式本质上与离散傅里叶变换DFT)相同。由此可见,离散傅里叶变换(DFT)可以从DTFT延伸而来,也可以认为是从DFS演变得到。
  • 需要说明的是,在常见的信号处理应用中,离散傅里叶变换(DFT)占据主导地位。

5.3. 离散傅里叶变换(DFT)

  • 定义:

    • :对于一个长度为 N N N 的离散信号 x [ n ] ( n = 0 , ⋯   , K , ⋯   , N − 1 ) x[n] _{(n = 0,\cdots,K,\cdots, N-1)} x[n](n=0,,K,,N1) 其离散傅里叶变换(DFT)为
      X [ k ] = ∑ n = 0 N − 1 x [ n ] W N n k ,    ( k = 0 , ⋯   , K , ⋯   , N − 1 ) X[k] = \displaystyle \sum^{N-1}_{n=0} x[n] W^{nk}_{N}, \;(k= 0,\cdots,K,\cdots, N-1) X[k]=n=0N1x[n]WNnk,(k=0,,K,,N1)
    • 其中 W N = e − j 2 π N W_N = e^{-j\frac{2\pi}{N}} WN=ejN2π
  • 可验证: w k = [ 1 ,    W N − k ,    W N − 2 k ,    ⋯   ,    K ,    ⋯   ,    W N − ( N − 1 ) k ] T w^k = \big[ 1 ,\; W_N^{-k} ,\; W_N^{-2k},\; \cdots ,\; K ,\; \cdots ,\; W_N^{-(N-1)k} \big]^T wk=[1,WNk,WN2k,,K,,WN(N1)k]T 构成 N N N 维复数空间 C N C^N CN 中的一组 正交基, 也是 DFT 的基数。

  • 由于 ∥ w ( k ) ∥ 2 = N \lVert w^{(k)} \rVert^2 = N w(k)2=N , 为了使其成为正交规范基,可以通过 1 N \frac{1}{\sqrt{N}} N 1 的缩放因子而使其规范化。

  • 由离散傅里叶变换的公式可知,信号在经过变换后的长度不变,但是由于 DFT 的基是复数,所以通常变换系数也为复数,因此可以从幅度和相位两个方面来分析 DFT 的特性。

  • 离散傅里叶反变换: 若 X [ k ] ( k = 0 , ⋯   , K , ⋯   , N − 1 ) X[k]_{(k=0,\cdots,K,\cdots, N-1)} X[k](k=0,,K,,N1) 长度为 N N N 的离散傅里叶变换系数序列,则称:
    x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] W N − n k ,    ( n = 0 , ⋯   , K , ⋯   , N − 1 ) \displaystyle x[n] = \frac{1}{N} \sum^{N-1}_{k=0} X[k] W_N^{-nk}, \; (n=0,\cdots,K,\cdots, N-1) x[n]=N1k=0N1X[k]WNnk,(n=0,,K,,N1)

    • X [ k ] X[k] X[k]离散傅里叶反变换(IDFT)
  • 离散傅里叶变换的物理意义:

    • 离散傅里叶反变换是将一个有限信号 x [ n ] x[n] x[n] 表示成了 N N N 个离散正弦分量的加和,每个正弦分量的振幅和初始相位由系数 X [ k ] X[k] X[k] 给出。
    • 更直观地,可以将离散傅里叶反换描述为:
      1. 设计一组包含 N N N 个复正弦分量信号发生器;
      2. 将其中第 k k k 个正弦量发生器的频率设置为 2 π k N \displaystyle \frac{2\pi k}{N} N2πk
      3. 将其中第 k k k 个正弦量发生器的振幅设置为 ∣ X [ k ] ∣ N \displaystyle \frac{\lvert X[k]\rvert}{N} NX[k]
      4. 将其中第 k k k 个正弦量发生器的相位设置为 ∠ X [ k ] \angle X[k] X[k]
      5. 同时启动发生器,将它们的输出相加。按照先后顺序,前 N N N 个输出值为 x [ n ] ,    n = 0 , ⋯   , K , ⋯   , N − 1 x[n], \; n=0,\cdots , K, \cdots, N-1 x[n],n=0,,K,,N1

5.3.1. Python 分析两个信号离散傅里叶变换结果的差异

  • 试分析两个信号离散傅里叶变换结果的差异
    x 1 [ n ] = cos ⁡ ( π 8 n ) ,    n = 0 , ⋯   , 63 x 2 [ n ] = cos ⁡ ( π 8 n + π 3 ) ,    n = 0 , ⋯   , 63 \begin{aligned}x_1[n] & = \cos\Big(\frac{\pi}{8} n\Big), \; & n= 0, \cdots, 63 \\ x_2[n] & = \cos\Big(\frac{\pi}{8} n + \frac{\pi}{3}\Big), \; & n= 0, \cdots, 63\end{aligned} x1[n]x2[n]=cos(8πn),=cos(8πn+3π),n=0,,63n=0,,63
    # 导入 需要的 library 库  
    import numpy as np # 科学计算
    import matplotlib.pyplot as plt # 画图工具
    import scipy.signal as sg # 导入 scipy 的 signal 库 重命名为 sg
n = np.linspace(0,63,64)
x_1 = np.cos(np.pi/8*n)
x_2 = np.cos(np.pi/8*n+np.pi/3)
plt.figure(figsize=(9,4))
plt.title(r'$x_1[n] = \cos(\frac{\pi}{8} n); n= 0, \cdots, 63$')
plt.stem(n, x_1, '-',label='x_1', markerfmt='C3o',  use_line_collection=True)
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第11张图片

plt.figure(figsize=(9,4))
plt.title(r'$x_2[n] = \cos(\frac{\pi}{8} n + \frac{\pi}{3}); n= 0, \cdots, 63$')
plt.stem(n, x_2, '-',label='x_1', markerfmt='C3o',  use_line_collection=True)
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第12张图片

K = np.linspace(0,63,64)
W_64 = np.exp(-1j * 2*np.pi / 64)
X1 = np.array([np.sum(x_1*np.power(W_64,n*k)) for k in K])
X2 = np.array([np.sum(x_2*np.power(W_64,n*k)) for k in K])
plt.figure(figsize=(9,4))
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(r'$x_1[n]$幅度')
plt.stem(n, X1.real, '-',label='x_1', markerfmt='C3o',  use_line_collection=True)
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第13张图片

plt.figure(figsize=(9,4))
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(r'$x_2[n]$幅度')
plt.stem(n, X2.real, '-',label='x_2', markerfmt='C3o',  use_line_collection=True)
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第14张图片

plt.figure(figsize=(9,4))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.title(r'$x_1[n]$相位')
plt.stem(n, X1.imag/180*np.pi, '-',label='x_1', markerfmt='C3o',  use_line_collection=True)
plt.ylim((-np.pi,np.pi))
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第15张图片

plt.figure(figsize=(9,4))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.title(r'$x_2[n]$相位')
plt.stem(n, X2.imag/180*np.pi, '-',label='x_2', markerfmt='C3o',  use_line_collection=True)
plt.ylim((-np.pi,np.pi))
plt.show()

信号与系统(Python) 学习笔记 (5) 离散傅里叶 Discrete Fourier_第16张图片

  • 从上述图可以看出,两个信号的幅频特性相同,但相频特性有明显差异,这与时域表达式中两信号具有相同的角频率但初相不同的结果是一致的。

To TOP 至目录

你可能感兴趣的:(#,信号与系统,信号处理,傅立叶分析,python)