Python numpy下几种fft函数的使用方式

目录
  • fft
  • rfft
  • fftfreq
  • ifft
  • irfft
  • 总结

numpy下fft模块提供了丰富的fft函数,几种常用的在这里记录一下使用方式

fft

输入实数samples,如果输入的sample是带虚数部分的话,虚数部分会被默认删除。

t=np.arange(12)
b=np.sin(t)
print(b)
print("sum(b)=", np.sum(b))

s = np.fft.fft(b)
print(s)

运行结果截图如下

从图中可以看到,

  • [0]是一个实数,实数部分是所有input中各个元素之和。
  • [i]与[N-i]共轭;输入的N如果是偶数,那么[N/2]没有共轭的元素。 rfft

rfft

其实就是对fft的结果输出做了省略。 针对刚刚提到的共轭特性,其实输出结果是要保留(N+1)//2个结果就可以了。

t=np.arange(12)
b=np.sin(t)
print(b)
print("sum(b)=", np.sum(b))

s = np.fft.fft(b)
print("fft result:", s)

s = np.fft.rfft(b)
print("rfft result:", s)

fftfreq

返回fft的频率节点

上面的fft和rfft将时域数据转为频域,得到的数据的bin是哪些范围?

可以通过fftfreq来获取

第一个参数n是时域数据的数据个数,第二个参数d是表示每一个bin的尺度。一般是1/sample_rate

t=np.arange(12)
b=np.sin(t)
print(b)
print("sum(b)=", np.sum(b))

s = np.fft.fft(b)
print("fft result:", s)

s = np.fft.rfft(b)
print("rfft result:", s)

s= np.fft.fftfreq(12, d=1/8000)
print(s)

其结果为

[    0.          666.66666667                      1333.33333333                     2000.
  2666.66666667  3333.33333333                    -4000.                          -3333.33333333
 -2666.66666667 -2000.                            -1333.33333333                    -666.66666667]

那么结合rfft的数据就有

Bin Range Value
bin[1] 1~667HZ 0.46997981+0.41183211j
bin[2] 667~1334HZ -1.36179847-5.76500237j
bin[3] 1334~2000HZ 0.14669493-0.4965488j
bin[4] 2000~2667HZ 0.20513541-0.2233417j
bin[5] 2667~3333HZ 0.22157176-0.09538547j
bin[6] 3333~4kHZ 0.22563497+0.j

ifft

ifft是逆向fft操作,代码如下

import numpy as np

t=np.arange(12)
b=np.sin(t)
print(b)

s = np.fft.fft(b)
#print(s)

y = np.fft.ifft(s)
print("restore:", y)

它的结果虽然也是复数,但是在实数部分,可以看到,就是结果;

所以也可以直接输出实数部分np.fft.ifft(s).real

irfft

irfft是配合rfft使用的; 上面的例子可以看到,如果信号长度是n, 那么fft的输出结果的长度也是n;
但是rfft的结果是n//2+1;

irfft匹配的是rfft,所以它的参数长度与ifft是不同的;两者也不可混用。

import numpy as np

t=np.arange(12)
b=np.sin(t)
print(b)

s = np.fft.rfft(b)
#print(s)

y = np.fft.irfft(s)
print("restore:", y)

总结

到此这篇关于Python numpy下几种fft函数使用的文章就介绍到这了,更多相关numpy fft函数的使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python利用FFT进行简单滤波的实现

    1.流程 大体流程如下,无论图像.声音.ADC数据都是如下流程: (1)将原信号进行FFT; (2)将进行FFT得到的数据去掉需要滤波的频率: (3)进行FFT逆变换得到信号数据: 2.算法仿真 2.1 生成数据: #采样点选择1400个,因为设置的信号频率分量最高为600Hz,根据采样定理知采样频率要大于信号频率2倍,所以这里设置采样频率为1400Hz(即一秒内有1400个采样点) x=np.linspace(0,1,1400) #设置需要采样的信号,频率分量有180,390和600 y=2*

  • Python实现快速傅里叶变换的方法(FFT)

    本文介绍了Python实现快速傅里叶变换的方法(FFT),分享给大家,具体如下: 这里做一下记录,关于FFT就不做介绍了,直接贴上代码,有详细注释的了: import numpy as np from scipy.fftpack import fft,ifft import matplotlib.pyplot as plt import seaborn #采样点选择1400个,因为设置的信号频率分量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,所以这里设置采样频率为1400赫兹(即

  • Python numpy下几种fft函数的使用方式

    目录 fft rfft fftfreq ifft irfft 总结 numpy下fft模块提供了丰富的fft函数,几种常用的在这里记录一下使用方式 fft 输入实数samples,如果输入的sample是带虚数部分的话,虚数部分会被默认删除. t=np.arange(12) b=np.sin(t) print(b) print("sum(b)=", np.sum(b)) s = np.fft.fft(b) print(s) 运行结果截图如下 从图中可以看到, [0]是一个实数,实数部分

  • python numpy中array与pandas的DataFrame转换方式

    目录 numpy array与pandas的DataFrame转换 1.numpy的array转换为pandas的DataFrame 2.pandas的DataFrame转换为numpy的array Pandas DataFrame转换成Numpy中array的三种方法 1.使用DataFrame中的values方法 2.使用DataFrame中的as_matrix()方法 3.使用Numpy中的array方法 numpy array与pandas的DataFrame转换 1.numpy的arr

  • Python numpy 常用函数总结

    Numpy是什么 在没给大家介绍numpy之前先给大家说下python的基本概念. Python 是一种高级的,动态的,多泛型的编程语言.Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法. numpy很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数. 数组 数组常用函数 1.w

  • 简单了解Python中的几种函数

    几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >>> g = lambda x,y:x+y #x+y,并返回结果 >>> g(3,4) 7 >>> (lambda x:x**2)(4) #返回4的平方 16 lambda函数的使用方法: 在lambda后面直接跟变量 变量后面是冒号 冒号后面是表达式,表达式计算

  • windows 下python+numpy安装实用教程

    如题,今天兜兜转转找了很多网站帖子,一个个环节击破,最后装好费了不少时间. 希望这个帖子能帮助有需要的人,教你一篇帖子搞定python+numpy,节约科研时间. 水平有限,难免存在不足,敬请指正. *******************python安装**************************************************** step1:官网下载安装包: https://www.python.org/ 我下载的是python-3.4.4.msi step2:pyt

  • python 读取文件并把矩阵转成numpy的两种方法

    在当前目录下: 方法1: file = open('filename') a =file.read() b =a.split('\n')#使用换行 len(b) #统计有多少行 for i in range(len(b)): b[i] = b[i].split()#使用空格分开 len(b[0])#可以查看第一行有多少列. B[0][311]#可以查看具体某行某列的数 import numpy as np b = np.array(b)#转成numpy形的 type(b) # 输出<输出clas

  • Python从列表推导到zip()函数的5种技巧总结

    在本文中,作者介绍了 5 种方法,也许在入门阶段时,我们还不太了解它们,但在实战中这 5 个技巧非常实用. 字符串运算 字符串本质上也是一种元组,但是字符串有很多「运算」方式.最直观的是字符串的 + 和 * 运算,它们分别表示重复和连接. >>> my_string = "Hi Medium..!" >>> print(my_string * 2) Hi Medium..!Hi Medium..! >>> print(my_stri

  • Python NumPy实用函数笔记之allclose

    目录 numpy 数组及运算 创建数组 allclose() 总结 numpy 数组及运算 扩展库 numpy 是 Python 支持科学计算的重要扩展库,是数据分析和科学计算领域如 scipy.pandas.sklearn 等众多扩展库中必备的扩展库之一,提供了强大的 N 维数组及其相关的运算.复杂的广播函数.C/C++和Fortran代码集成工具以及线性代数.傅里叶变换和随机数生成等功能. 创建数组 数组是用来存储若干数据的连续内存空间,其中的元素一般是相同类型的,例如都是浮点数.数组运算是

  • 利用Python NumPy库及Matplotlib库绘制数学函数图像

    目录 前言 NumPy与Matplotlib 函数绘图 所需库函数语法 导入所需模块 一元一次函数 一元二次函数 指数函数 正弦函数 余弦函数 高级玩法 总结 前言 最近开始学习数学了,有一些题目的函数图像非常有特点,有一些函数图像手绘比较麻烦,那么有没有什么办法做出又标准又好看的数学函数图像呢? 答案是有很多的,有很多不错的软件都能画出函数图像,但是,我想到了Python的数据可视化.Python在近些年非常火热,在数据分析以及深度学习等方面得到广泛地运用,其丰富的库使其功能愈加强大. 这里我

  • 浅析python中numpy包中的argsort函数的使用

    概述 argsort()函数在模块numpy.core.fromnumeric中. 在python中排序数组,或者获取排序顺序的时候,我们常常使用numpy包的argsort函数来完成. 如下图所示,是使用python获取到数组中的排序的顺序. data=numpy.array([1,2,3,4,5]) datasort=numpy.argsort(data) datasort Out[39]: array([0, 1, 2, 3, 4], dtype=int64) data Out[40]:

随机推荐