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实现拼接多张图片的方法
Dec 01 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Python字符串处理实现单词反转
Jun 14 Python
Python二叉树的镜像转换实现方法示例
Mar 06 Python
python SVM 线性分类模型的实现
Jul 19 Python
python已协程方式处理任务实现过程
Dec 27 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
Python远程方法调用实现过程解析
Jul 28 Python
python 如何调用远程接口
Sep 11 Python
Python 如何解决稀疏矩阵运算
May 26 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
PDO::errorCode讲解
2019/01/28 PHP
PHP时间函数使用详解
2019/03/21 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
js定时器实例分享
2016/12/20 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
使用pdb模块调试Python程序实例
2015/06/02 Python
12步教你理解Python装饰器
2016/02/25 Python
Python实现的文本编辑器功能示例
2017/06/30 Python
python版学生管理系统
2018/01/10 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python通过字典映射函数实现switch
2020/11/06 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
上课打牌的检讨书
2014/02/15 职场文书
技能竞赛活动方案
2014/02/21 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
2014年人事科工作总结
2014/11/19 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
选购到合适的激光打印机
2022/04/21 数码科技
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技