Python scipy利用快速傅里叶变换实现滤波

 更新时间:2024年01月22日 09:02:25   作者:微小冷  
这篇文章主要为大家详细介绍了Python scipy如何利用快速傅里叶变换实现滤波,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

fft模块简介

scipy官网宣称,fftpack模块将不再更新,或许不久之后将被废弃,也就是说fft将是唯一的傅里叶变换模块。

Fourier变换极其逆变换在数学上的定义如下

下表整理出一部分与Fourier变换相关的函数,其中FFT为快速Fourier变换(Fast Fourier Transform);DCT为离散余弦变换(Discrete Cosine Transform);DST为离散正弦变换(discrete sine transform),另外,函数的前缀和后缀有如下含义

  • i表示逆变换;
  • 2, n分别表示2维和n维
正变换逆变换
通用fft, fft2, fftnifft, ifft2, ifftn
实数域rfft, rfft2, rfftnirfft, irfft2, irfftn
厄米对称hfft, hfft2, hfftnihfft, ihfft2, ihfftn
离散余弦变换dct, dctnidct, idctn
离散正弦变换dst, dstnidst, idstn
汉克尔变换fhtifht
移动零频fftshiftifftshift
DFT采样频率fftfreqifftfreq

fft函数示例

在数值计算中,一切输入输出均为离散值,所以实际上用到的是离散Fourier变换,即DFT,其功能是将离散的采样变换为一个离散的频谱分布。

下面将手动创建一组采样点,并添加一点噪声,然后通过FFT获取其频域信息。

import numpy as np
from scipy import fft

PI = np.pi*2
fs = 60     #采样频率
T = 100     #采样周期数
N = fs*T    #采样点
t = np.linspace(0, T, N)
noise = 2 * np.random.randn(*t.shape)
s = 2 * np.sin(PI * t) + 3 * np.sin(22 * PI * t) + noise
F = fft.fft(s)
f = fft.fftfreq(N, 1.0/fs)

其中,t为时间序列,s为模拟的采样点,F是Fourier变换之后的结果。但由于fft默认是在复数域上的,故而可以查看其实部、虚部、模和辐角的值。

下面对采样点以及Fourier变换的结果进行绘制

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2,2,1)
ax.plot(t, s)
ax.set_title("t vs s")
f_abs = np.abs(F)
ax = fig.add_subplot(2,2,2)
ax.plot(f, f_abs)
ax.set_title("fs vs |F|")

xlims = [[0,2], [21,23]]
for i, xlim in enumerate(xlims):
    ax = fig.add_subplot(2,2,3+i)
    ax.stem(f, f_abs)
    ax.set_title("fs vs |F|")
    ax.set_xlim(xlim)

plt.show()

结果为

即f=1和f=22处被筛选了出来。

滤波

有了这个,就可以在频域上对数据进行滤波,其思路是,对f_abs中的值进行阈值分割,例如,只筛选出低频部分,然后看一下滤波效果

fig = plt.figure(1)
f_filt = F * (np.abs(f) < 2)
s_filt = fft.ifft(f_filt)
ax = fig.add_subplot()
ax.plot(t, s, lw=0.2)
ax.plot(t, s_filt.real, lw=2)
ax.set_title("threshold=2")
ax.set_xlim([0,10])
plt.show()

效果如下

到此这篇关于Python scipy利用快速傅里叶变换实现滤波的文章就介绍到这了,更多相关Python scipy实现滤波内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现指定数组下标值正序与倒序排序算法功能举例

    Python实现指定数组下标值正序与倒序排序算法功能举例

    在程序中,经常需要按数组倒序或反序重新排列数组,下面这篇文章主要给大家介绍了关于Python实现指定数组下标值正序与倒序排序算法功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • flask框架配置mysql数据库操作详解

    flask框架配置mysql数据库操作详解

    这篇文章主要介绍了flask框架配置mysql数据库操作,结合实例形式详细分析了flask框架配置mysql数据库及连接访问等相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • Python中按钮(BUTTON)样式属性及说明

    Python中按钮(BUTTON)样式属性及说明

    文章介绍了Python中tkinter库中的Button组件,用于在GUI中添加按钮,按钮可以包含文本或图像,并且可以通过点击执行特定函数,文章详细说明了Button组件的构造语法和常用参数,并提供了一个代码示例
    2025-01-01
  • 如何利用itertuples对DataFrame进行遍历

    如何利用itertuples对DataFrame进行遍历

    这篇文章主要介绍了如何利用itertuples对DataFrame进行遍历问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python 关于模块和加载模块的实现

    Python 关于模块和加载模块的实现

    这篇文章主要介绍了Python 关于模块和加载模块的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 使用sklearn对多分类的每个类别进行指标评价操作

    使用sklearn对多分类的每个类别进行指标评价操作

    这篇文章主要介绍了使用sklearn对多分类的每个类别进行指标评价操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • IDEA安装python插件并配置的详细图文教程

    IDEA安装python插件并配置的详细图文教程

    要在IDEA开发环境中配置Python程序,你需要先安装Python,可以从官网上下载Python的安装包,按照提示进行安装即可,下面这篇文章主要给大家介绍了关于IDEA安装python插件并配置的详细图文教程,需要的朋友可以参考下
    2024-03-03
  • Windows系统下使用flup搭建Nginx和Python环境的方法

    Windows系统下使用flup搭建Nginx和Python环境的方法

    这篇文章主要介绍了Windows系统下使用flup搭建Nginx和Python环境的方法,文中使用到了flup这个Python的FastCGI工具,需要的朋友可以参考下
    2015-12-12
  • Python组合数据类型详解

    Python组合数据类型详解

    这篇文章主要介绍了Python组合数据类型详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Python实现字典按key或者value进行排序操作示例【sorted】

    Python实现字典按key或者value进行排序操作示例【sorted】

    这篇文章主要介绍了Python实现字典按key或者value进行排序操作,结合实例形式分析了Python针对字典按照key或者value进行排序的相关操作技巧,需要的朋友可以参考下
    2019-05-05

最新评论