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 相关文章推荐
Python3中的2to3转换工具使用示例
Jun 12 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python内建模块struct实例详解
Feb 02 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python实现自动化上线脚本的示例
Jul 01 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
浅谈Python3中print函数的换行
Aug 05 Python
Django crontab定时任务模块操作方法解析
Sep 10 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/12/06 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
Python函数学习笔记
2008/10/07 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python autoescape标签用法解析
2020/01/17 Python
详解Flask前后端分离项目案例
2020/07/24 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
祖国在我心中演讲稿
2014/01/15 职场文书
教师个人剖析材料
2014/02/05 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
骨干教师申报材料
2014/12/17 职场文书
行政复议答复书
2015/07/01 职场文书
高一语文教学反思
2016/02/16 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
MySQL创建管理LIST分区
2022/04/13 MySQL