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 相关文章推荐
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Python Json序列化与反序列化的示例
Jan 31 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
python删除字符串中指定字符的方法
Aug 13 Python
python读取文本中的坐标方法
Oct 14 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
Django+Celery实现定时任务的示例
Jun 23 Python
bat批处理之字符串操作的实现
Mar 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
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
犀利的js 函数集合
2009/06/11 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
Java程序员面试题
2013/07/15 面试题
北京大学自荐信范文
2014/01/28 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
活动总结格式范文
2014/04/26 职场文书
法制演讲稿
2014/09/10 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP