Python实现快速傅里叶变换的方法(FFT)
作者:落叶_小唱 发布时间:2022-09-18 07:21:47
标签:Python,傅里叶变换
本文介绍了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()
结果:
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)
来源:https://blog.csdn.net/ouening/article/details/71079535


猜你喜欢
- 一、数据地址实体抽取的目的及问题对数据的地址进行实体识别,主要作用是确定我们的数据主体最终可以归到哪一行政单位,从而在各行政单位上对数据主体
- <script>function getJsFile(url, callBack){
- 之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB、CBC、CFB、OFB,这四种用的是
- 之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量。这样不是不
- 本页面破解不止一种,选择适合你的使用----------------------------------------------------
- 从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始比较好……很久很久
- 1.表结构 2.表数据 3.查询teacher_name字段不能等于空并且也不能等于空字符SELECT * FROM s
- 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码
- 本文实例讲述了PHP实现的XXTEA加密解密算法。分享给大家供大家参考,具体如下:<?php/** * Xxtea 加密实现类 */c
- 在《 详解Python拼接字符串的七种方式 》这篇文章里,我提到过,字符串是程序员离不开的事情。后来,我看到了一个英文版本的说法:There
- Anaconda是Python的一个开源发行版本,主要面向科学计算,预装了丰富强大的库。使用Anaconda可以轻松管理多个版本的Pytho
- 如下所示:#抽象 (函数)# 1、callable 判断一个对象是否可以被调用x = 1def y(): &nbs
- 本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下:如果有一个对象,当需要对其进行修改属性时,有
- 这篇论坛文章(赛迪网技术社区)主要介绍了一些特别有用但文档中没有介绍的sql server DBCC命令,详细内容请参考下文:以下是一些sq
- 新建label与button,并设置位置(grid)import tkinter as tkroot = tk.Tk()label = tk
- /* Cookie Library -- "Night of the Living Cookie" Version (2
- 1.请实现一个装饰器,把函数的返回值+100然后返回def wapper(func):def innner(*args,**kwargs):
- 本文主要介绍了在python3.9下如何安装scrapy的方法,分享给大家,具体如下:安装命令:pip install scrapy -i
- 新建一个Spring Initializr项目2.把pom.xml文件中的oracle依赖换成自己的oracle版本依赖:原来的:现在的:
- 一、jupyter notebook是什么官网的介绍是:Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,