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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
python实现K最近邻算法
Jan 29 Python
Python查找文件中包含中文的行方法
Dec 19 Python
python实现简单图片物体标注工具
Mar 18 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
适合Python初学者的一些编程技巧
Feb 12 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Python字符串的15个基本操作(小结)
Feb 03 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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php生成验证码函数
2015/10/20 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
防暑降温通知书
2015/04/27 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
入党后的感想
2015/08/10 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫