快速傅里叶变换python_FFT快速傅里叶变换的python实现过程解析

FFT是DFT的高效算法,能够将时域信号转化到频域上,下面记录下一段用python实现的FFT代码。

# encoding=utf-8

import numpy as np

import pylab as pl # 导入和matplotlib同时安装的作图库pylab

sampling_rate = 8000 # 采样频率8000Hz

fft_size = 512 # 采样点512,就是说以8000Hz的速度采512个点,我们获得的数据只有这512个点的对应时刻和此时的信号值。

t = np.linspace(0, 1, sampling_rate) # 截取一段时间,截取是任意的,这里取了0~1秒的一段时间。

x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t) # 输入信号序列,人工生成了一段信号序列,范围在0~1秒

xs = x[:fft_size] # 由上所述,我们只采样了512个点,所以我们只获得了前512个点的数据

xf = np.fft.rfft(xs)/fft_size # 调用np.fft的函数rfft(用于实值信号fft),产生长度为fft_size/2+1的一个复数向量,分别表示从0Hz~4000Hz的部分,这里之所以是4000Hz是因为Nyquist定理,采样频率8000Hz,则能恢复带宽为4000Hz的信号。最后/fft_size是为了正确显示波形能量

freqs = np.linspace(0, sampling_rate//2, fft_size//2 + 1) # 由上可知,我们得到了数据,现在产生0~4000Hz的频率向量,方便作图

xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e1000)) # 防止幅值为0,先利用clip剪裁幅度,再化成分贝

pl.figure(figsize=(8, 4)) # 生成画布

pl.subplot(211) # 生成子图,211的意思是将画布分成两行一列,自己居上面。

pl.plot(t[:fft_size], xs) # 对真实波形绘图

pl.xlabel(u"time(s)")

pl.title(u"The Wave and Spectrum of 156.25Hz and 234.375Hz")

pl.subplot(212) # 同理

pl.plot(freqs, xfp) # 对频率和幅值作图,xlabel是频率Hz,ylabel是dB

pl.xlabel(u"Hz")

pl.subplots_adjust(hspace=0.4) # 调节绘图参数

pl.show()

代码进行了详细标注。有一个小细节是FFT对于取样时间有要求。N点FFT进行精确频谱分析的要求是N个取样点包含整数个取样对象的波形。因此N点FFT能够完美计算频谱,对取样对象的要求是n*Fs/N(n*采样频率/FFT长度)在本例中Fs = 8000Hz,N=512 base_freq=15.625Hz 所以本例中给出了频率为156.25Hz(n=10)和234.375Hz(n=15)做例子。

效果如下:

20191021162649119.jpg?2019921162713

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq的安装全过程

2019独角兽企业重金招聘Python工程师标准>>> 1 首先下载安装依赖elang 添加yum支持 cd /usr/local/src/ mkdir rabbitmq cd rabbitmq wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm rp…

【框架学习分享】HttpRunner

今天文章分为两部分 :) PART1 HttpRunner内容分享/ PART2 关于后厂村儿 10 Minutes HttpRunner: PART 1 首先感谢作者开源👍 因为最近工作需要用到HttpRunner, 于是便趁着周末学了下这个测试框架,感觉还可以~ 所以分享一下今天的学习记…

python报名_2019年少儿Python创意编程比赛报名时间

2019年Python创意编程比赛时间及相关规定:参赛对象 Python创意编程比赛设初中组和高中组。 全国各地初中、高中(含中等职业学校)在校学生均以个人名义报名参加。 参赛步骤 Python创意编程比赛分初评、复评和终评三个阶段,初评和复评以线上形式开展&#…

【分享】后厂村鲜为人知的另一面

好!回归学长每周的杂谈分享! 有人说“后厂村”像一座孤岛, 这里远离喧嚣,没有生活气息。 而刚刚到厂的学长, 却想和你分享他鲜为人知的另一面。 内容整理源于网络看客原创侵删 说起后厂村,也许是老北京人…

windows 下安装rabbitmq

2019独角兽企业重金招聘Python工程师标准>>> 1、下载 下载地址:http://www.rabbitmq.com/download.html 2、Windows上安装 2.1 安装安装Erlang 下载erlang:http://www.erlang.org/download/otp_win64_17.3.exe 安装: erlang安装完…

【Kubernetes】k8s 的基本使用指令

今天分享如题: Kubernetes 最近更新缓慢由于工作太忙惹,忙里偷闲整理愿能与君共勉💪 K8S对我来说是个新的技术栈,程序员就是需要一直充电🔋 加油,一起进步💪 结构模型 k8s 是经典的一对多模…

c语言 malloc_C语言快速入门——动态内存分配

在前面一系列的字符串操作中,我们都是先定义一个固定大小的字符数组,然后根据所需,或拷贝、或连接、或格式化来为这个数组提供内容。固定大小的数组意味着在程序运行期间,数组所占用的内存是确定的(即划分了固定数量的内存)&#…

【经验分享】工程开发与Coding规范

今天分享分为两部分 :) PART01 工程开发代码规范分享/ PART02 关于某易云自动签到听歌分享- 5Mins DevCoding Rule: PART 1 了解真实工程开发🏗..... 本篇内容分享的宗旨: 学长工作经验之谈仅作分享🏷 Ready,Go 代码管理——工具篇 •工程上首先需要…

过滤器与拦截器区别

过滤器与拦截器区别 参考:http://www.cnblogs.com/dreamroute/p/4198087.html?utm_sourcetuicool 过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的,只初始化一次,以后就…

二进制-高效位运算

数独 数独是介绍位运算的好例子,运用位运算和不运用效率差别还是挺大的。我们先看数独需求: 1、当前数字所在行数字均含1-9,不重复 2、当前数字所在列数字均含1-9,不重复 3、当前数字所在宫(即3x3的大格)数字均含1-9&a…

pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...

晓查 发自 凹非寺量子位 报道 | 公众号 QbitAIFacebook在PyTorch开发者大会上正式推出了PyTorch 1.3,并宣布了对谷歌云TPU的全面支持,而且还可以在Colab中调用云TPU。之前机器学习开发者虽然也能在Colab中使用PyTorch,但是支持云TPU还是第一次…

Android Studio主题设置、颜色背景配置

2019独角兽企业重金招聘Python工程师标准>>> color-themes 效果展示 打开http://color-themes.com/有很多样式可供选择 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 导入方式 下载主…

Java多线程实现异步调用

在Java平台,实现异步调用的角色有如下三个角色:调用者、 提货单 、真实数据,一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单 .然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长…

sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...

为大家整理了常用的Windows操作系统和安装软件,基本上都是经过我们项目测试OK的版本,以后项目调试就齐全了,不用再“东奔西走”,“小鹿乱撞”了。整理不易,若对您有帮助请关注并转发,以便帮助到更多的人。I…

Android ToolBar 使用完全解析

ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar,由于其高度的可定制性、灵活性、具有Material Design风格等优点,越来越多的应用也用上了ToolBar,比如常用的知乎软件其顶部导航栏正是使用ToolBar。官方考虑…

【零散积累】传输文件(sz/rz/scp命令)

来自wiki迁移页面路径:刘旺的主页 / 个人零散积累 / 01> 传输文件(sz/rz/scp命令) 工作中的传输文件会出现在linux之间,或者linux与windows之间。 一、怎么实现linux与windows之间的文件传输? 1.sz和rz是什么 s…

x264_macroblock_cache_load()

功能:完成将已编码数据参数和待编码数据装入到h->mb.cache中,下图是BUF中存储的数据在以MB为单位的时候的存储顺序 x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把当前宏块的up宏块和left宏块的intra4x4_pred_mode,non_zero_count加载进来&#xff0c…

生活中常见物联网实例_物联网网关常见问题解答(一)

1.为什么物联网解决方案需要网关?物联网网关弥合了设备,传感器,设备,系统和云之间的通信鸿沟。通过系统地连接云,物联网网关提供了本地处理和存储,并具有基于传感器输入的数据自主控制现场设备的功能。物联…

【零散积累】shell脚本学习

来自wiki迁移页面路径:刘旺的主页 / 个人零散积累 / 03> shell脚本学习 case Shell case语句(多分支条件判断) $( ) Linux—shell中$(( ))、$( )、与${ }的区别 - chengd - 博客园 在bash中,$( )与 (反引号&…

alsa 测试 linux_Electron 构建步骤 (Linux)

遵循下面的引导,在 Linux 上构建 Electron .PrerequisitesPython 2.7.x. 一些发行版如 CentOS 仍然使用 Python 2.6.x ,所以或许需要 check 你的 Python 版本,使用 python -V.Node.js v0.12.x. 有很多方法来安装 Node. 可以从 Node.js下载原文…