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中的类与对象之描述符详解
Mar 27 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
python修改操作系统时间的方法
May 18 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
Python读取指定日期邮件的实例
Feb 01 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python实现证件照换底功能
Aug 20 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
Django nginx配置实现过程详解
Sep 10 Python
Python自动创建Excel并获取内容
Sep 16 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
多重?l件?合查?(二)
2006/10/09 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
司法建议书范文
2014/05/13 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android
详解如何使用Nginx解决跨域问题
2022/05/06 Servers