首页 > 编程问答 >防止反向 FFT 中的吉布斯现象

防止反向 FFT 中的吉布斯现象

时间:2024-07-25 16:27:24浏览次数:10  
标签:python numpy fft

我目前正在过滤一些数据,但在从大趋势中过滤较小的频率时遇到了麻烦。反向 FFT 似乎在开始和结束时有很大的尖峰。这是过滤较小频率之前和之后的数据。 Before filtering After Filtering

我研究了数学现象,它被称为吉布斯现象。有没有办法解决这个问题,以清除一些重叠频率的数据而不产生这种效果。或者是否有一种解决方法可以使尖峰尽可能小。

顺便说一句,这是代码:

fourier_transformation= np.fft.fft(Sensor_4)
frequencies = np.fft.fftfreq(len(time), d=1/Values_per_second) 
fourier_transformation[np.abs(frequencies) > 0.18] = 0
Sensor_4 = np.fft.ifft(fourier_transformation)

完全正确,在过滤后的信号中观察到的“振铃”是吉布斯现象造成的。当使用具有非连续性的急剧截止频率在频域中截断信号时,就会发生这种情况(例如,使用 frequencies > 0.18 设置为零的情况)。

可以通过几种方法减少或减轻吉布斯现象的影响:

1. 使用窗函数:

  • 这是在频域中平滑截止频率的最常用方法。通过将的信号与窗函数相乘,可以衰减截止频率附近的突变,从而减少振铃。
  • 有许多不同的窗函数可用,每种窗函数都有其优缺点。一些常见的窗口包括:

    • 汉明窗: 具有良好的整体性能,是不错的起点。
    • 汉宁窗: 类似于汉明窗,但中心波瓣略宽。
    • 布莱克曼窗: 在主瓣中具有更大的衰减,但过渡区域更宽。
  • 在的代码中,可以通过以下方式实现汉明窗:

```python import numpy as np

fourier_transformation = np.fft.fft(Sensor_4) frequencies = np.fft.fftfreq(len(time), d=1/Values_per_second)

# 生成汉明窗并将其应用于傅里叶变换 window = np.hamming(len(Sensor_4)) fourier_transformation = fourier_transformation * window

fourier_transformation[np.abs(frequencies) > 0.18] = 0 Sensor_4 = np.fft.ifft(fourier_transformation) ```

2. 增加截止频率处的过渡区域:

  • 不要在的截止频率处进行突然的跳跃,而是创建一个从通带来阻带的更平滑的过渡。这可以通过使用在截止频率附近逐渐滚降的滤波器来实现。
  • 这将减少振铃的幅度,但它也会使滤波器的截止频率不那么尖锐。

3. 使用不同的滤波器设计技术:

  • 正在使用一种非常简单的矩形滤波器(也称为理想低通滤波器)的频域方法。还有其他滤波器设计技术,如 FIR 或 IIR 滤波器,它们可以创建具有不同特性的滤波器,并且可以最大限度地减少振铃。这些滤波器可以在频域或时域中实现。

  • 以下是使用 scipy.signal 库设计 FIR 低通滤波器并将其应用于的数据的示例:

    ```python import numpy as np from scipy.signal import firwin, lfilter

    # 定义滤波器参数 order = 100 # 滤波器阶数(越高,截止越陡峭) cutoff_freq = 0.18 # Hz 中的截止频率

    # 设计 FIR 低通滤波器 taps = firwin(order, cutoff_freq, fs=Values_per_second)

    # 使用设计的滤波器对信号进行滤波 Sensor_4_filtered = lfilter(taps, 1.0, Sensor_4) ```

最佳方法将取决于的具体应用和要求。在许多情况下,使用窗函数是一个很好的起点。它相对容易实现,并且可以显着减少振铃的量。

标签:python,numpy,fft
From: 78788533

相关文章

  • 如何在Mac电脑上安装Python 2
    Python是一种高级编程语言,广泛应用于数据科学、网络开发、人工智能等领域。本文将介绍如何在Mac电脑上安装Python2,帮助初学者快速入门。一、下载Python2安装包在Python官网上下载Python2的安装包,网址为https://www.python.org/downloads/release/python-2718/ 。下载完......
  • 我的 python 抓取数据是空的,不确定我的代码出了什么问题
    我的结果是空的,不确定我的代码出了什么问题:这里是我的代码:#尝试从该网站获取数据https://www.watsons.com.sg/health/c/2100000?currentPage=1importrequestsfrombs4importBeautifulSoupimportpandasaspd#Settingdisplayoptionsforpandaspd.......
  • Chrome 浏览器更新后,我的 python tagui 代码工作不稳定。问题的解决方法是什么
    我编写了一个pythontagui脚本来在chrome中操作Intranet网页。它运行良好。但是在chrome浏览器更新后,脚本每次都会在某个时刻随机停止,并且也不会抛出错误。请帮忙。我尝试重新启动电脑,但这并没有解决问题。Chrome浏览器更新后,TagUI脚本工作不稳定的问题可能由以......
  • 如何从另一个文件运行 python 文件
    我正在尝试从另一个名为LoginOrReg的文件运行一个名为HabitTracker的python文件,但是当我这样做时,它会重新运行LoginOrReg文件。我已经尝试过这个classLoginOrReg:def__init__(self,db,cursor,login_username,data):self.db=mysql.connector.......
  • Python的字典和集合
    一、字典1.定义字典字典和列表虽然类似,但是字典是无序的可变序列,并且可以像查字典一样去查找。字典的元素都是成对出现的,每个元素都是由冒号“:”和键值对(“:”左边的称为键或者Key,“:”右边的称为值或者Value)构成的,用“{}”标识,元素之间用逗号“‘,”分隔。字典的键必须是唯一......
  • 在Python中字典是如何通过哈希表实现的以及哈希冲突是如何解决的
    哈希表(散列表)的工作原理哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过哈希函数将输入的键(key)映射到表中的一个位置(即索引或槽位),从而以接近常数时间复杂度进行查找、插入和删除操作。哈希表的基本工作流程如下:哈希函数:哈希函数接受一个输入(键),并......
  • python cobs协议编解码算法demo
    1.SummaryCOBS(ConsistentOverheadByteStuffing)是一种算法,直译为一致的开销字节填充。简而言之,无论数据包的内容如何,都能通过产生高效可靠明确的数据包帧,从而使接受端能够从损坏的包中恢复。通常使用0x00来作为数据包的分隔符,即切割数据包的片分隔符。当使用0x00作为......
  • 如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中
    在python3.11中,我们可以对字符串进行编码,如:string.encode('ascii','backslashreplace')这对于说:hellö=>hell\\xf6但是当我插入时hellöw\\xf6rldIgethell\\xf6w\\xf6rld(注意第二个有一个看起来像字符转义序列的文字部分)......
  • python flask允许跨域
    flask接口支持跨域设置方法在Flask中,可以通过安装flask-cors扩展来支持跨域请求。下面是使用flask-cors扩展的示例代码:fromflaskimportFlaskfromflask_corsimportCORS#ipinstallflask-corsapp=Flask(__name__)CORS(app)可以通过CORS扩展的origins参数......
  • 在 Python 中动态定义文字字符串排列的并集
    我有一个字符串列表:strings=['a','b','c']我想声明列表中所有可能的有序对的Union类型。硬编码,这看起来像:Literal我如何动态定义CustomType=Literal['ab','ac','aa','ba','bb','bc�......