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计算牛顿迭代多项式实例分析
May 07 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
numpy下的flatten()函数用法详解
May 27 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
Python for循环搭配else常见问题解决
Feb 11 Python
用Python提取PDF表格的方法
Apr 11 Python
numpy数据类型dtype转换实现
Apr 24 Python
只用40行Python代码就能写出pdf转word小工具
May 31 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python 调用有道api接口的方法
2019/01/03 Python
Python判断telnet通不通的实例
2019/01/26 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
品质标语大全
2014/06/21 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
《司马光》教学反思
2016/02/22 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python