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自动重试HTTP连接装饰器
Apr 28 Python
Python用模块pytz来转换时区
Aug 19 Python
python访问抓取网页常用命令总结
Apr 11 Python
python算法表示概念扫盲教程
Apr 13 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
Python 中的lambda函数介绍
Oct 10 Python
python对象与json相互转换的方法
May 07 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
Python爬虫之爬取某文库文档数据
Apr 21 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
js里面的变量范围分享
2020/07/18 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
《画家乡》教学反思
2014/04/22 职场文书
七一建党日演讲稿
2014/09/05 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
Python Matplotlib绘制动画的代码详解
2022/05/30 Python