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

作者:安安爸Chris 时间:2022-06-21 07:19:55 

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)

运行结果截图如下

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

从图中可以看到,

  • [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)

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

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的数据就有

BinRangeValue
bin[1]1~667HZ0.46997981+0.41183211j
bin[2]667~1334HZ-1.36179847-5.76500237j
bin[3]1334~2000HZ0.14669493-0.4965488j
bin[4]2000~2667HZ0.20513541-0.2233417j
bin[5]2667~3333HZ0.22157176-0.09538547j
bin[6]3333~4kHZ0.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)

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

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

所以也可以直接输出实数部分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函数的使用方式

来源:https://blog.csdn.net/mimiduck/article/details/118549640

标签:numpy,fft函数,python
0
投稿

猜你喜欢

  • 浅谈keras使用预训练模型vgg16分类,损失和准确度不变

    2021-05-25 18:23:40
  • mysql启动报错MySQL server PID file could not be found

    2024-01-22 18:41:59
  • Jupyter notebook运行后打不开网页的问题解决

    2021-07-10 01:35:30
  • Windows10下mysql 8.0.19 winx64安装教程及修改初始密码

    2024-01-26 11:03:37
  • laravel框架中路由设置,路由参数和路由命名实例分析

    2024-06-05 09:43:33
  • Golang命令行进行debug调试操作

    2024-04-27 15:37:33
  • 浅谈Python中range和xrange的区别

    2021-04-18 14:52:13
  • 使用ACCESS做网络版程序的四种解决方案

    2009-01-14 16:22:00
  • SQL Server转换为XQuery及反向转换

    2009-01-20 13:32:00
  • python 生成器协程运算实例

    2021-11-22 05:27:51
  • 解决python大批量读写.doc文件的问题

    2023-11-05 03:20:02
  • Python单向链表和双向链表原理与用法实例详解

    2021-11-21 15:04:27
  • python爬虫之urllib,伪装,超时设置,异常处理的方法

    2022-07-23 23:47:10
  • Python多版本开发环境管理工具介绍

    2024-01-02 07:13:43
  • 解决win10 vscode 无法激活python 虚拟环境的问题

    2023-10-09 04:23:25
  • MySQL如何利用DCL管理用户和控制权限

    2024-01-14 13:33:21
  • 在asp.net中KindEditor编辑器的使用方法小结

    2023-03-11 21:13:41
  • PL/SQL 日期时间类型函数及运算

    2009-02-26 10:45:00
  • *.HTC 文件的简单介绍

    2008-11-24 17:36:00
  • MySQL动态字符串处理DYNAMIC_STRING

    2024-01-26 01:20:19
  • asp之家 网络编程 m.aspxhome.com