Python实现快速傅里叶变换(FFT)

2023-11-03

相关文章:傅立叶级数展开初探(Python)

这里做一下记录,关于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()

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现快速傅里叶变换(FFT) 的相关文章

随机推荐

  • VSCode配置之Opencv4x终极奥义

    苦于windows下编译opencv的效率和对于大型软件如Visual Studio 2017 Visual Studio S2019等的不习惯 希望VScode也能够快速 高效编译第三方库 如opencv等 花了大概两天的时间 分析了主流
  • 【Where和having的区别】条件语句where和having有什么不同?

    Where 总之 WHERE 关键字的特点是 直接用表的字段对数据集进行筛选 如果需要通过关联查询从其他的表获取需要的信息 那么执行的时候 也是先通过 WHERE 条件进行筛选 用筛选后的比较小的数据集进行连接 这样一来 连接过程中占用的资
  • iostat 命令

    NAME iostat Report Central Processing Unit CPU statistics and input output statistics for devices partitions and network
  • 计算机组成原理与系统结构期末复习题(2)

    计算机组成原理与系统结构 选择题 1 冯 诺依曼机工作的基本方式的特点是 B A 多指令流单数据流 B 按地址访问并顺序执行指令 C 堆栈操作 D 存贮器按内容选择地址 2 完整的计算机应包括 D A 运算器 存储器 控制器 B 外部设备和
  • VS环境下Qt工程.UI文件不生成头文件的问题

    在VS环境下创建的Qt工程会出现 UI文件不生成头文件的问题 可以通过右击 ui文件 点击编译生成头文件 但是 我创建的工程的 ui文件不能编译 右键编译选项是灰的 这种情况下 我想到的办法是 重新添加一个带UI文件的GUI类 与工程同名
  • openmvg2.0编译与使用

    目录 写在前面 获取代码 github 网盘 编译 使用 稠密重建 参考 完 写在前面 1 openmvg是一个用于实现structure from motion的开源库 实现了完整的sfm pipeline 并有说明文档 https op
  • css文本换行加省略号

    overflow hidden text overflow ellipsis white space nowrap 可以显示的行数 超出部分用 表示 webkit box orient vertical 控制显示行数 webkit line
  • 某企业每月给其A、B、C 和D 四个门店一共发送6 个集装箱的某种货物,如果各门店出售该种货物的利润(万元)如下表:

    某企业每月给其A B C 和D 四个门店一共发送6 个集装箱的某种货物 如果各门店出售该种货物的利润 万元 如下表 试求这6 箱货物如何分配给各门店 才能获得最大总利润 解题思路 将问题按卖场分为四个阶段 将A B C D四个卖场分别编号为
  • Angular学习---filter过滤器(管道pipe)

    angular核心概念 过滤器 Filter 应用 如当后台传入数据用1 2 代表性别 可以用过滤器进行更改 如上 练习 创建员工信息列表 中 的员工性别 过滤器在angular2以后改名为 管道 pipe 详见新建的sex pipe ts
  • 【H.264/AVC视频编解码技术详解】二十二、熵编码(7):语法元素的CABAC解析

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • 【Java基础】环境搭建+简介(一)

    JAVA语言背景介绍 Java 语言是美国Sun公司 Stanford University Network 在1995年推出的计算机语言 Java之父 詹姆斯高斯林 James Gosling Java语言的发展史 Sun公司于1995年
  • Qt信号和槽绑定实例,点击pushbutton按钮触发QLabel文本显示和关闭

    功能简介 点击qt界面中的open按钮在界面中显示文本 同时按钮变为close按钮 再点击close按钮可以关闭显示文本 同时按钮变为open按钮 继续点击open按钮 关键内容 关联按钮按事件和信号识别槽 connect this gt
  • 2.1.Perl运行方式

    Perl运行方式 B站视频教程 菜鸟学生信 课程参考书 小骆驼书 第六版 1 运行 Perl Perl 有不同的执行方式 1 1 交互式 perl e
  • 压测工具之Locust

    前言 说起压测 我就用过Jmeter 而且仅是简单使用 好用性能强大 最近接触了一个python提供的压测框架Locust 翻译为蝗虫 蝗虫过之 寸草不生 哈哈哈 我感觉很贴切 首先 我们分析一下市面上几种工具的特性 LoadRunner
  • 对FPKM/RPKM以及TPM的理解

    虽然一直在接触FPKM RPKM以及TPM 但是仅仅是知道它们是转录本定量的值 并未究其根本 最近看了几篇文献 对其深层次的含义有了进一步的理解 因而在这里记录下来 首先来看FPKM RPKM的起源 在RNA Seq中 最简单的定量基因表达
  • 现代后端开发者必备技能-2018版

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天的Web开发与几年前完全不同 有很多不同的东西可以很容易地阻止任何人进入Web开发 这是我们决定制作这些循序渐进的视觉指南的原因之一 这些指南展示了更大的图景 并让任何
  • 「万向区块链专家观点」深度解析“区块链+物联网”与新基建

    本文从属于万向区块链 融合创新 系列行业研究报告 作者为万向区块链首席经济学家邹传伟博士 2020年10月27日至28日 万向区块链实验室将主办主题为 融合创新 的第六届区块链全球峰会 近期 万向区块链蜂巢学院B站直播间也将特别推出 融合创
  • 带你读源码:四大视角多维走读区块链源码

    引子 区块链作为 新基建 的重要组成部分 越来越受技术爱好者关注 区块链极客信奉 code is law 相信通过代码可以构筑一个可信的世界 而作为一门综合学科技术 区块链建立在数学 密码学 计算机原理 分布式网络和博弈论等众多基础学科之上
  • scp命令下载整个目录

    linux文件夹下载 1 压缩文件夹 tar cvzf chinese tar gz usr share fonts chinese 2 下载 sz chinese tar gz 从Linux服务器下载文件夹到本地 1 使用scp命令 sc
  • Python实现快速傅里叶变换(FFT)

    相关文章 傅立叶级数展开初探 Python 这里做一下记录 关于FFT就不做介绍了 直接贴上代码 有详细注释的了 import numpy as np from scipy fftpack import fft ifft import ma