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的Twisted框架中reactor事件管理器的用法
May 25 Python
Python selenium文件上传方法汇总
Nov 19 Python
AI人工智能 Python实现人机对话
Nov 13 Python
详解python中的装饰器
Jul 10 Python
python实现三次样条插值
Dec 17 Python
python制作简单五子棋游戏
Jun 18 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
Python内存管理实例分析
Jul 10 Python
Python打印特殊符号及对应编码解析
May 07 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
基于Python 的语音重采样函数解析
Jul 06 Python
python实现简单的学生管理系统
Feb 22 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php 字符转义 注意事项
2009/05/27 PHP
php+mysql事务rollback&commit示例
2010/02/08 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python 剪切移动文件的实现代码
2018/08/02 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
日语专业个人的求职信
2013/12/03 职场文书
生日派对邀请函
2014/01/13 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
2014年超市工作总结
2014/11/19 职场文书
入党函调证明材料
2014/12/24 职场文书
公司规章制度范本
2015/08/03 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书