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中的条件判断语句基础学习教程
Feb 07 Python
深入理解Django中内置的用户认证
Oct 06 Python
Python enumerate函数功能与用法示例
Mar 01 Python
python实现倒计时小工具
Jul 29 Python
Python编写带选项的命令行程序方法
Aug 13 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
python 循环数据赋值实例
Dec 02 Python
Python将列表中的元素转化为数字并排序的示例
Dec 25 Python
Python模块future用法原理详解
Jan 20 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
Python中常用的高阶函数实例详解
Feb 21 Python
Python 绘制多因子柱状图
May 11 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
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
pycharm导入源码的具体步骤
2020/08/04 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
教师实习自我鉴定
2013/12/13 职场文书
学生思想表现的评语
2014/01/30 职场文书
交通事故私了协议书
2014/04/16 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
卫生标语大全
2014/06/21 职场文书
英文升职感谢信
2015/01/23 职场文书
资料员岗位职责范本
2015/04/13 职场文书
董存瑞观后感
2015/06/11 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python