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文档方法分享
Dec 27 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
flask框架视图函数用法示例
Jul 19 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
如何更优雅地写python代码
Jul 02 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
Python如何输出整数
Jun 07 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
Python ConfigParser模块的使用示例
Oct 12 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP新手入门学习方法
2011/05/08 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
javascript的事件描述
2006/09/08 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
javascript数组的使用
2013/03/28 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python获取当前路径实现代码
2017/05/08 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
TensorFlow的权值更新方法
2018/06/14 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
Django model select的多种用法详解
2019/07/16 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
python3中编码获取网页的实例方法
2020/11/16 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
华为慧通面试题
2012/09/11 面试题
新年联欢会主持词
2014/03/27 职场文书
毕业生实习证明
2014/09/19 职场文书
经验交流材料格式
2014/12/30 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
Python几种酷炫的进度条的方式
2022/04/11 Python