Advertisement

傅里叶变换-学习过程记录

阅读量:

在达姆经过Pro.Zoubir的DSP洗礼之后,回来上Money老师的DSP,依然听着一脸懵逼。。嗐,很多原因就是学了忘吧,于是打算记录一下。这篇blog就专门用来记录关于傅里叶变换的一些知识点与坑。

文章目录

  • 1 四种傅里叶变换与DFT及FFT的关系
  • 2 傅里叶变换中时域与频域信号强度对应关系的问题
    • 2.1 问题描述:
    • 2.1 连续信号
    • 2.2 离散信号
    • 2.3 实验检验
      • 2.3.1 对一个两种频率的正弦信号进行fft
      • 2.3.2 功率谱估计(周期图法)
      • 2.3.3 整周期采样的影响
      • 2.3.4我们来计算一下当我们采取1.2s,400Hz的采样频率的时候,我们可以准确得到哪些频率点的值

1 四种傅里叶变换与DFT及FFT的关系

这里我就直接用一张手写的笔记汇总了

核心思路是从基础的傅里叶级数开始逐步向适用于离散且具有有限长度的应用场景迁移。

这个图片方向不对也是很难受,但我不会旋转过来,有看到的大哥求指导。

2 傅里叶变换中时域与频域信号强度对应关系的问题

2.1 问题描述:

通常情况下,在获取信号后我会依次进行傅里叶变换分析以及完成功率谱估计这一过程来观察频域特征。其中较为显著的是强频成分及其对应的强弱对比情况。然而关于该傅里叶变换所得振幅值(强度绝对值)的真实准确性我们仍无法完全确定因此需要重点解决这一问题

2.1 连续信号

讨论连续信号,即讨论FS和FT,两个的傅里叶正变换的公式如下:
FS: X(k\Omega_0)=\frac{1}{T}\int_{-T/2}^{T/2}x(t)e^{-jk\Omega_0 t}\\ FT: X(j\Omega)=\int_{-\infty}^{\infty}x(t)e^{-j\Omega t}d\Omega
对于FS,其幅值为对应谐波的幅值 ,对于FT,由于频谱是连续的,所以对应的是频谱密度 的概念
这个感觉就没什么好说的了,并不是很重要,因为只存在理论中

2.2 离散信号

这一section就比较重要了,主要关注实际使用的DFT。x(n) = \frac{1}{N}\sum^{N-1}_{k=0}X(k)e^{j\frac{2\pi}{N}nk}, n=0,1,2,...,N-1需要注意的是,在完成DFT后所得到的结果具有离散性特征,并与傅里叶级数(FS)所得结果相似。值得注意的是,在完成反变换时必须除以N才能获得正确的幅度值。此外,在进行功率谱分析时所得到的结果反映了该谐波信号的实际功率水平。需要注意的是,在完成反变换时必须除以N才能获得正确的幅度值。此外,在进行功率谱分析时所得到的结果反映了该谐波信号的实际功率水平。

2.3 实验检验

2.3.1 对一个两种频率的正弦信号进行fft

复制代码
    # 生成正弦周期信号
    t = 1 # signal time in second
    fs = 400 # sample frequency in Hz
    n = np.arange(0, t, 1/fs)
    N = len(n)
    f1 = 4 # 4Hz
    f2 = 25 # 25Hz
    x = 2*np.sin(2 * np.pi * f1 * n) + np.sin(2 * np.pi * f2 * n)
    
    X_w = np.fft.fft(x)/N # 傅里叶变换
    X_w = np.abs(X_w)
    
    
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释
在这里插入图片描述
  1. 为了使傅里叶变换的结果正确呈现幅值信息,在计算过程中应将计算出的结果除以对应的信号长度N。
  2. 对于实信号而言,在其分解过程中会被投影为一对共轭基向量的作用,在频谱分析中表现为偶对称性的存在。这导致若要获得真实的幅值,则需将负频率分量与正频率分量相加(即乘以2)。

2.3.2 功率谱估计(周期图法)

还是对于上面的信号,对其进行功率谱估计

在这里插入图片描述
  1. 对于正弦信号而言,在计算其功率时采用的方法是将单个周期的能量除以该周期的时间长度来计算平均功率(而非瞬时功率)。由此可知这两个具体数值分别为2和1,并且这与图形中的数据相对应。
  2. 在进行快速傅里叶变换运算时同样会执行对数据长度进行归一化的操作。
  3. 对于实数信号而言,则同样会遇到上述偶对称性问题。

2.3.3 整周期采样的影响

看完这两个情况后是不是觉得太简单了几乎到了极限呢?大言不惭地自嘲一句自己还是太年轻无经验。接下来让我们探索将上述信号的时间长度从1秒调整至1.2秒后会产生的变化。(值得一提的是这里的功率谱估计采用的是DFT方法由于信号较为简单所以直接计算其频谱即可无需复杂的处理流程)

在这里插入图片描述

与之前对比观察后发现, 形状未呈现理想中的清晰形态, 幅值出现了不寻常的波动. 其中一个参数明显降至约0.9水平, 而另一个参数仍维持原有数值. 进一步观察此时信号在时域的表现如何

在这里插入图片描述

注意:这个笔记指出,在处理离散非周期信号时(即DTFT),当对其进行频谱采样或者对傅里叶级数(FS)进行时间采样并转化为DFT时

在这里插入图片描述

该图为模拟信号在时间域的真实表现,
另一图则展示了经过1.2秒采样后进行周期延拓后的结果,
特别关注红框区域,
因为进行了周期延拓操作,
导致原有4Hz和25Hz信号的时间特性被破坏,
同时人为附加了一个新的1.2秒周期。

为了计算起见,在采用1.2秒的采样周期和400赫兹的采样频率时,请问我们可以求得相应的频谱成分位置吗?

该信号由480个数据点构成,
由此可知,在频域中也划分了480个区间,
进而可得各频率值为:

f = 400 \times \frac{n}{480}, \quad n\in [0, 479]

将这一关系式绘制于上述频谱图上即可得到。

在这里插入图片描述
在这里插入图片描述

通过图表清晰展示了FFT栅栏效应的现象及其影响范围

并且,在这种情况下,此误差不会随着你的测量时间的增长而减弱。这些图像分别展示了上述信号在不同时间段下的傅里叶变化结果:分别是1.1秒、1.2秒、10.1秒和10.2秒时的频谱绝对值曲线。

  • 当时间由1.2秒减少至1.1秒时,在25Hz处同样出现了误差。
  • 在时间从1秒增长至10秒的过程中,在提高频率分辨率的同时,整个峰的宽度变得更狭窄;然而,在峰值点上的误差并未得到改善。
复制代码
    # 生成正弦周期信号
    ts = [1.1, 1.2, 10.1, 10.2] # signal time in second
    fig, axs = plt.subplots(2,2, figsize=(12,6))
    
    for idx,t in enumerate(ts):
    fs = 400 # sample frequency in Hz
    n = np.arange(0, t, 1/fs)
    N = len(n)
    f1 = 4 # 4Hz
    f2 = 25 # 25Hz
    x = 2*np.sin(2 * np.pi * f1 * n) + np.sin(2 * np.pi * f2 * n)
    
    X_w = np.fft.fft(x)/N # 傅里叶变换
    X_w = np.abs(X_w)
    
    axs[idx//2, idx%2].plot(np.arange(0, fs, fs/N), X_w, 'r')
    axs[idx//2, idx%2].set_xlim(0,50)
    axs[idx//2, idx%2].set_ylim(0,1)
    axs[idx//2, idx%2].set_xlabel("Frequency[Hz]", fontsize=15)
    axs[idx//2, idx%2].set_ylabel("Amplitude", fontsize=15)
    axs[idx//2, idx%2].set_title("sample time t=%s"%ts[idx], fontsize=15)
    axs[idx//2, idx%2].grid(which='both', axis='y')
    
    plt.tight_layout()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释
在这里插入图片描述

解决办法:
为了使FFT的栅格精确对齐到目标频率点上, 可以通过观察以下式子, 从而要求采样频率fs除以N后乘以某个整数Z, 这样就能够精确捕获该目标频率. 进而通过适当的数学处理, 可以发现该关系等价于测量时间t与采样率fs之间需满足特定比例关系. 由此可得一个简明扼要的规则如下:

  • 若目标频率的最小值仅为个位整数值(如 1Hz, 10Hz, 101Hz 等),则要求采样周期取正整数值的 1 秒周期。
  • 若目标频率最低精度达到小数点后一位(如 0.1Hz, 10.2Hz, 234.567 Hz 等),则要求采样周期取正整数值的十秒周期。
  • 以此类推
    f_{signal} = Z \frac{f_s}{N}\\ f_{signal}*N*\frac{t}{f_s} = Z

这意味着,在执行傅里叶变换的过程中,只有当采样点数量为完整周期数时才有可能恢复信号在该频率的真实幅值。

全部评论 (0)

还没有任何评论哟~