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程序与C++程序的联合使用
Apr 07 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
python定时器(Timer)用法简单实例
Jun 04 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
python实现屏保计时器的示例代码
Aug 08 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
python 标准库原理与用法详解之os.path篇
Oct 24 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
基于mysql的bbs设计(一)
2006/10/09 PHP
dedecms中常见问题修改方法总结
2007/03/21 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
10个实用的PHP代码片段
2011/09/02 PHP
PHP查询网站的PR值
2013/10/30 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
python实现连接mongodb的方法
2015/05/08 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python实现k-means聚类算法
2018/02/23 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
三年级科学教学反思
2014/01/29 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android