Python numpy下几种fft函数的使用方式
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函数的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python multiprocessing多进程变量共享与加锁的实现
这篇文章主要介绍了python multiprocessing多进程变量共享与加锁的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-10-10python用pd.read_csv()方法来读取csv文件的实现
本文主要介绍了python用pd.read_csv()方法来读取csv文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-06-06
最新评论