1 从数学和视觉上展示信号去趋势是如何影响傅里叶变换的-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从数学和视觉上展示信号去趋势是如何影响傅里叶变换的

冬至子 来源:Deephub 作者:Deephub 2023-08-16 15:26 次阅读

在计算傅里叶变换之前对信号去趋势是一种常见的做法,特别是在处理时间序列时。在这篇文章中,我将从数学和视觉上展示信号去趋势是如何影响傅里叶变换的。

这篇文章的目的是让介绍理解什么是常数和线性去趋势,为什么我们使用它们,以及它们是如何影响信号的傅里叶变换的。

傅里叶变换快速回顾

我们将使用傅里叶变换的如下定义:对于输入序列x[n],当n=0到n时,傅里叶变换的第k个系数为以下复数:

常量去趋势

序列x[n]可以分解如下:将其写成两个信号的和:“常数部分”等于信号的平均值,“平均值周围的可变性”部分给出实际信号与其平均值之间的差值:

对于所有样本n,我们有:

首先,求x均值的傅里叶变换

这是一个简单的序列,所以在k=0处x的均值为0,在其他地方的值也为0。

使用下面代码绘制所有指数也可以看到为什么它们的和总是为0(除了k=0)。

import numpy as np
 import matplotlib.pyplot as plt
 
 N = 10
 ns = np.arange(N)
 
 fig, axes = plt.subplots(1, N//2+1, figsize=(18,8), sharex=True, sharey=True)
 
 for k in range(0, N//2+1):
     eiks = np.exp(-2*1J*np.pi*ns/N*k)
     pretty_ax(axes[k])
     plot_sum_vector(eiks, axes[k])
     axes[k].set_title(f'k={k}')
     axes[k].set_aspect('equal')
 fig.suptitle(f'Complex plot of the $e^{{-2ipi kn/N}}$ families')

现在我们把x的傅里叶变换写成这样,分为两部分

分解x的傅里叶变换,结果是2个傅里叶变换的和:“可变性”部分的傅里叶变换,以及k=0时等于平均值的系数。

也就是说x的傅里叶变换等于其可变性在均值附近的傅里叶变换的和,再加上除k = 0处之外的序列,这个序列都为0,所以他的均值是x。

这就常数去趋势,是在进行傅里叶变换之前去除信号的均值。对于傅里叶系数,就傅里叶系数而言,它对应于将k = 0系数设置为0。

k = 0的系数始终等于信号的平均值,可以使用下面方法证明:

线性去趋势

方法与前面相同:将输入信号写为2个部分的和:“线性”部分,以及围绕该线性部分的其余变化:

这里的线性部分是从最小二乘拟合计算。利用指数,可以将线性部分写为:

其中b是信号的平均值。让我们来看看它的傅里叶变换:

线性部分的傅里叶变换为,给定傅里叶变换的线性性质:

线性去趋势包括在进行傅里叶变换之前去除x的线性部分:它从结果中去除aFT(n)+b项,其中a是常数因子(对应于线性拟合的斜率),FT(n)是线性序列[0,1,…]的傅里叶变换,b是信号的平均值(因此第一个傅里叶系数将为0,就像常数去趋势一样)。

python代码

在Python中使用numpy和scipy实现非常简单。

Scipy在它的signal 包中提供了detrend函数,带有一个类型参数来指定我们是想让信号保持常量趋势还是线性趋势。

在下面的例子中,创建了一个长度为20个样本的信号,其中包含一个前导系数为2的线性部分,一个噪声,一个偏移量为4的正弦部分。

import numpy as np
 from scipy.signal import detrend
 import matplotlib.pyplot as plt
 
 N = 20
 # create a sample signal, with linear, offset, noise and sinus parts
 ys = np.arange(N) * 2 + 4 + np.random.randn(N) + 4*np.sin(2*np.pi*np.arange(N)/5)
 # constant and linear detrend
 ys_c = detrend(ys, type='constant')
 ys_l = detrend(ys, type='linear')
 
 fig, axes = plt.subplots(1, 2)
 
 ax = axes[0]
 ax.plot(ys, label='raw')
 ax.plot(ys_c, label='constant-detrended')
 ax.plot(ys_l, label='linear-detrended')
 ax.legend()
 ax.set_title('Input signal')
 
 ax = axes[1]
 # we use rfft since our input signals are real
 ax.plot(np.abs(np.fft.rfft(ys)))
 ax.plot(np.abs(np.fft.rfft(ys_c)))
 ax.plot(np.abs(np.fft.rfft(ys_l)))
 ax.set_title('Module of Fourier-transform')

在左边我们有原始输入信号,以及它的常数去趋势和线性去趋势版本。

常数去趋势有效地去除信号的平均值,使其在0附近居中。线性去趋势不仅去掉了信号的平均值,而且还去掉了它的线性趋势(又名“直线斜率”)。从视觉上看,在线性去趋势信号上比在原始信号上更容易发现正弦部分。

右边是每个信号的傅里叶变换模块:如果不去除趋势,我们得到蓝色模块。使用常数去趋势法去除平均值可以有效地将0系数设置为0,这在大多数情况下使得图表更容易分析。自线性去趋势的结果是最好的:输出傅里叶系数很好地显示了输出频谱中的频率,线性去趋势的主要优点是它大大减少了频谱泄漏。

线性信号的傅里叶变换

对于不同的K值,我们可以很容易地画出线性信号Kn (K为斜率)的傅里叶变换:

import numpy as np
 import matplotlib.pyplot as plt
 
 N = 10
 ns = np.arange(N)
 Ks = [-5, 2, 5]
 
 fig, axes = plt.subplots(len(Ks), N//2+1, figsize=(18,8), sharex=True, sharey=True, gridspec_kw={'hspace':0, 'wspace':0})
 
 for i, K in enumerate(Ks):
     xs = K*np.arange(N)
     for k in range(0, N//2+1):
         Zs = xs * np.exp(-2*1J*np.pi*ns/N*k) / N
         ax = axes[i, k]
         pretty_ax(ax)
         plot_sum_vector(Zs, ax)
         ax.set_aspect('equal')
         ax.set_xlabel(f'k={k}')
     axes[i, 0].set_ylabel(f'K={K}')
 fig.tight_layout()

对于给定的k值,用红色箭头表示的傅里叶系数总是对齐的,并且等于一个比例。所以输出频谱中被去掉的部分总是序列[0,1,…N]的傅里叶变换的部分,其比例因子由线性拟合的斜率给出。

总结

在这篇文章中,我们介绍了常量和线性去趋势:它们分别由去除输入信号的平均值或线性拟合组成。在计算傅里叶变换之前的预处理步骤有助于使输出谱更容易解释。

去除信号的平均值使第0个系数为0。结果图更容易检查,因为大多数情况下,平均值与频谱的其余部分相比可能相当大。如果我们去掉这个系数,y轴的尺度就更容易设定。

线性去趋势除了去掉平均值也去掉了信号中的总体趋势,这通常是原始信号的主导部分,这样可以去掉其他成分例如季节行为等,所以如果需要对季节性进行分析还需要另外的处理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信号处理器
    +关注

    关注

    1

    文章

    254

    浏览量

    25270
  • 最小二乘法
    +关注

    关注

    0

    文章

    22

    浏览量

    8446
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84624
  • 频谱仪
    +关注

    关注

    7

    文章

    340

    浏览量

    36027
  • 傅里叶变换
    +关注

    关注

    6

    文章

    441

    浏览量

    42590
收藏 人收藏

    评论

    相关推荐

    学习傅里叶变换意义和方法

    学习傅里叶变换需要面对大量的数学公式,数学功底较差的同学听到傅里叶变换就头疼。事实,许多数学
    发表于 06-28 07:31

    傅里叶变换和拉普拉斯变换有什么区别

    傅里叶变换在物理学、数论、组合数学信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用(例如在信号处理中,傅里叶
    发表于 06-28 06:52

    傅里叶变换就是这么简单

    学习傅里叶变换需要面对大量的数学公式,数学功底较差的同学听到傅里叶变换就头疼。事实,许多数学
    的头像 发表于 10-10 18:03 2.3w次阅读
    <b class='flag-5'>傅里叶变换</b>就是这么简单

    傅里叶变换信号处理的意义

    傅里叶变换信号处理的意义  傅里叶变换是一种基本的数学工具,它经常用于信号处理中。在这篇文章中,我们将探讨
    的头像 发表于 09-07 16:14 2351次阅读

    傅里叶变换数学意义

    一个函数拆分成若干个正弦函数的方法,并将每个正弦函数的振幅、相位和频率表示出来,从而对原函数进行分析的方法。 傅里叶变换是物理学、工程学和数学领域中广泛使用的一个工具,它被应用于信号处理、图像处理、量子力学、电子学
    的头像 发表于 09-07 16:18 928次阅读

    傅里叶变换的时移特性

    傅里叶变换的时移特性 傅里叶变换是一种非常重要的数学工具,可以将任何周期性信号或非周期性信号进行频域分析,从而在通信、电子工程等领域中得到广
    的头像 发表于 09-07 16:23 4703次阅读

    傅里叶变换公式总结

    傅里叶变换公式总结  傅里叶变换是一种将时域信号转换为频域信号数学方法。它是通过将一个连续或离散的时域
    的头像 发表于 09-07 16:47 7441次阅读

    傅里叶变换的实现方法

    傅里叶变换的实现方法  傅里叶变换是一种将信号在时间域和频率域之间相互转换的数学工具。它的实现方法有很多种,其中最常见的是离散傅里叶变换(D
    的头像 发表于 09-07 16:47 1305次阅读

    傅里叶变换公式理解

    傅里叶变换公式理解 傅里叶变换是一种在数学、物理、工程和其他科学领域中常用的工具,它是一种将一个函数时域转换到频域的方法。傅里叶变换可以将
    的头像 发表于 09-07 16:53 4139次阅读

    傅里叶变换和离散傅里叶变换的关系

    傅里叶变换和离散傅里叶变换的关系 傅里叶变换(Fourier Transform)是一种将时间域(或空间域)的信号转换为频率域(或波数域)的信号
    的头像 发表于 09-07 17:04 2554次阅读

    什么是傅里叶变换和逆变换?为什么要用傅里叶变换?

    傅里叶变换和逆变换是一对数学变换,用于分析信号和数据的频域特征。傅里叶变换将一个
    的头像 发表于 01-11 17:19 3838次阅读

    傅里叶变换的应用 傅里叶变换的性质公式

    傅里叶变换(Fourier Transform)是一种数学方法,可以将一个函数在时间或空间域中的表示转化为频率域中的表示。它是由法国数学家约瑟夫·傅里叶(Jean-Baptiste Joseph
    的头像 发表于 02-02 10:36 1338次阅读

    傅里叶变换和拉普拉斯变换的关系是什么

    变换的定义和基本概念。 其中,**f(t)**代表原始信号,**F(jomega) 表示信号 f(t)**在频域的表示, j 为虚数单位。傅里叶变
    的头像 发表于 02-18 15:45 1678次阅读

    傅里叶变换数学原理

    傅里叶变换数学原理主要基于一种将函数分解为正弦和余弦函数(或复指数函数)的线性组合的思想。以下是对傅里叶变换数学原理的介绍: 一、基本原理 傅里叶级数 :对于周期性连续
    的头像 发表于 11-14 09:27 390次阅读

    傅里叶变换信号处理中的应用

    在现代通信和信号处理领域,傅里叶变换(FT)扮演着核心角色。它不仅帮助我们分析信号的频率成分,还能用于滤波、压缩和信号恢复等多种任务。 傅里叶变换
    的头像 发表于 11-14 09:29 904次阅读