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


Posted in Python onJuly 21, 2018

本文介绍了Python实现快速傅里叶变换的方法(FFT),分享给大家,具体如下:

这里做一下记录,关于FFT就不做介绍了,直接贴上代码,有详细注释的了:

import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import seaborn


#采样点选择1400个,因为设置的信号频率分量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,所以这里设置采样频率为1400赫兹(即一秒内有1400个采样点,一样意思的)
x=np.linspace(0,1,1400)  

#设置需要采样的信号,频率分量有180,390和600
y=7*np.sin(2*np.pi*180*x) + 2.8*np.sin(2*np.pi*390*x)+5.1*np.sin(2*np.pi*600*x)

yy=fft(y)      #快速傅里叶变换
yreal = yy.real    # 获取实数部分
yimag = yy.imag    # 获取虚数部分

yf=abs(fft(y))    # 取绝对值
yf1=abs(fft(y))/len(x)   #归一化处理
yf2 = yf1[range(int(len(x)/2))] #由于对称性,只取一半区间

xf = np.arange(len(y))  # 频率
xf1 = xf
xf2 = xf[range(int(len(x)/2))] #取一半区间


plt.subplot(221)
plt.plot(x[0:50],y[0:50]) 
plt.title('Original wave')

plt.subplot(222)
plt.plot(xf,yf,'r')
plt.title('FFT of Mixed wave(two sides frequency range)',fontsize=7,color='#7A378B') #注意这里的颜色可以查询颜色代码表

plt.subplot(223)
plt.plot(xf1,yf1,'g')
plt.title('FFT of Mixed wave(normalization)',fontsize=9,color='r')

plt.subplot(224)
plt.plot(xf2,yf2,'b')
plt.title('FFT of Mixed wave)',fontsize=10,color='#F08080')


plt.show()

结果:

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

2017/7/11更新

再添加一个简单的例子

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import seaborn



Fs = 150.0;     # sampling rate采样率
Ts = 1.0/Fs;    # sampling interval 采样区间
t = np.arange(0,1,Ts)  # time vector,这里Ts也是步长

ff = 25;     # frequency of the signal
y = np.sin(2*np.pi*ff*t)

n = len(y)     # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T     # two sides frequency range
frq1 = frq[range(int(n/2))] # one side frequency range

YY = np.fft.fft(y)   # 未归一化
Y = np.fft.fft(y)/n   # fft computing and normalization 归一化
Y1 = Y[range(int(n/2))]

fig, ax = plt.subplots(4, 1)

ax[0].plot(t,y)
ax[0].set_xlabel('Time')
ax[0].set_ylabel('Amplitude')

ax[1].plot(frq,abs(YY),'r') # plotting the spectrum
ax[1].set_xlabel('Freq (Hz)')
ax[1].set_ylabel('|Y(freq)|')

ax[2].plot(frq,abs(Y),'G') # plotting the spectrum
ax[2].set_xlabel('Freq (Hz)')
ax[2].set_ylabel('|Y(freq)|')

ax[3].plot(frq1,abs(Y1),'B') # plotting the spectrum
ax[3].set_xlabel('Freq (Hz)')
ax[3].set_ylabel('|Y(freq)|')

plt.show()

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

相关文章:傅立叶级数展开初探(Python)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python多进程实现进程间通信实例
Nov 24 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python 日志增量抓取实现方法
Apr 28 Python
对python产生随机的二维数组实例详解
Dec 13 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 #Python
opencv python 傅里叶变换的使用
Jul 21 #Python
Numpy中的mask的使用
Jul 21 #Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 #Python
Flask框架WTForm表单用法示例
Jul 20 #Python
Python使用pymongo模块操作MongoDB的方法示例
Jul 20 #Python
Python闭包函数定义与用法分析
Jul 20 #Python
You might like
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
JavaScript延迟加载
2021/03/09 Javascript
Js四则运算函数代码
2012/07/21 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Django框架多表查询实例分析
2018/07/04 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
九年级英语教学反思
2014/01/31 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
一般党员对照检查材料
2014/09/24 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
护士长2015年终工作总结
2015/04/24 职场文书