快速傅里叶变换——FFT

这篇具有很好参考价值的文章主要介绍了快速傅里叶变换——FFT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1·为什么要进行傅里叶变换

傅里叶变换——进行信号的分解过程

时域信号——分解成一系列频率下的正弦//余弦信号(两者在相位上有所不同),一般情况下可以统称为正弦信号。

fft快速傅里叶变换,FFT,java,开发语言

 上图表示了傅里叶的变化过程。对于时域的信号,可以将其分解成一系列频域下的正弦信号,每个正弦信号都有各自的幅值和相位。以这些正弦信号的频率为横坐标,各个正弦信号的幅值为纵坐标。可以绘制出频率幅值图。同样的,以这些正弦信号的幅值为横坐标,相位值为纵坐标,可以绘制出频率相位图,频率幅值图和频率相位图统称为频谱图。

2.傅里叶变换的好处——正弦信号的特点

通过傅里叶变换我们将时域里 的原信号分解成了一系列频域下的正弦信号。

(1)正弦信号比原信号更加的简单。(2)对于线性系统来说,正弦信号的频率保持性。当线性系统的输入为正弦信号时,输出仍是同频率的正弦信号。输出的正弦信号的幅值和相位可能发生变化,但是频率与输入正弦信号保持一致性。频率保持性具有很高的工程使用价值。

3.傅里叶变换的离散型和周期性

针对不同的时域信号有着不同的类型的傅里叶变换与之相对应,具体来说有以下四种情况:

fft快速傅里叶变换,FFT,java,开发语言

 fft快速傅里叶变换,FFT,java,开发语言

 FFT的应用

主要用在信号分析方面,分析音频的信号,假设现在有个失真的音频信号,发现他的总斜坡失真比较高,我们此时想知道是什么原因造成这种失真的情况,通过FFT 的频谱就可以帮助我们找到失真信号。FFT还可以用于除错微调,优化。

FFT运行的基本原理或者过程,怎么把时域信号转换成频域信号的?

FFT计算的是周期时域信号的频谱。

fft快速傅里叶变换,FFT,java,开发语言

上图就是一个时域信号,我们要把它分解成一个个周期性的正弦信号,每个正弦信号都有特定的幅值和频率。FFT显示的是这些频率和幅值,这样我们就把时域的信号转换成频域的信号。

fft快速傅里叶变换,FFT,java,开发语言

 上述这个过程是怎么样进行的?

 过程:1,选取时域信号当中的某一段,采样过程。这个地方就涉及到了FFT 的第一个参数块长度(表示一个采样里采了多少个样本,块长度一般是取2的整数幂)

fft快速傅里叶变换,FFT,java,开发语言

2,用一个公式来表示一下,这个公式的意义就是用来分解信号的,因为之前说FFT使用一个个正弦波来表示时域信号的,所以我们要确定正弦信号和时域信号的相关性,并且这个正弦波也要匹配块长度。所以通过这个公式来计算出正弦波和时域信号的相关性。

fft快速傅里叶变换,FFT,java,开发语言

对应的结果放在频谱中,频谱的幅值体现的是相关性的大小。

fft快速傅里叶变换,FFT,java,开发语言

然后我们把频率翻倍在给出一个正弦波。重复这样的过程。

fft快速傅里叶变换,FFT,java,开发语言

 我们可以看下面这个图当中,这个正弦波与原始信号的相关性非常高,所以在右侧的图谱中它的值非常的大。

fft快速傅里叶变换,FFT,java,开发语言

 这样一个个频率重复就可以得到需要频段的频谱。

 fft快速傅里叶变换,FFT,java,开发语言

 这样就成功的分解了原始信号。

fft快速傅里叶变换,FFT,java,开发语言

上述变换就是FFT 变换的核心过程。需要注意的是图谱的幅值单位不是变频,而被称为Bin。(这个Bin代表了相关性的大小),两个Bin之间的距离为f,这个是固定的,表示的是FFT频谱的频率分辨率。

fft快速傅里叶变换,FFT,java,开发语言

 是不变的,除非改变FFT 的块长度。否则,频率分辨率是不变的。

采样率和块长度都是非常重要的。其中,块长度也就是样本的数量跟FFT采集的周期有直接的关系,块长度对频率分辨率有直接的影响,假设采样的频率是48kHZ,块长度是512。计算非常的简单。

fft快速傅里叶变换,FFT,java,开发语言

 512/48000得到每一个块的周期,而频率分辨率就是周期的倒数。很明显,块长度增加了,周期也会增大,分辨率就会变小。

另一个比较复杂的概念——弥散/泄露的含义

主要是因为周期变化的时域信号或者分量并没有完美的匹配FFT 的块

 fft快速傅里叶变换,FFT,java,开发语言

上图是一个完美的正弦波信号,右图是他的FFT频谱图。但是在显示当中,正弦波并不总是这样的完美,理想状况下,采样的窗口可以完美的覆盖一个正弦波信号,并且可以完美的过度下去。如下图所示:

fft快速傅里叶变换,FFT,java,开发语言

但是,实际上,时域信号并不会完美的采样到一个正弦信号,就是采样的起点和终点并不在一个幅值上,如下图:

fft快速傅里叶变换,FFT,java,开发语言

这样的情况会导致每个块之间会发生跳变,这样的跳变会导致连续性被打破。就形成了弥散。FFT的峰值频率和激波是相同的。此时就不是一个单独的Bin,他的左右两侧还有很多的Bin 靠在一起。这样的情况并不是我们想要的。

fft快速傅里叶变换,FFT,java,开发语言

 fft快速傅里叶变换,FFT,java,开发语言

为避免出现这样的情况,就出现了窗函数,他的作用就是尽量的让每一个块过度的很平滑。从而减少弥散。

fft快速傅里叶变换,FFT,java,开发语言

 上图是一个典型的窗函数,会随着时间的增大而缩小,对原始信号施加窗函数之后就会变成下图的形式。加上窗函数之后再首位连接时会变得比较平滑。

fft快速傅里叶变换,FFT,java,开发语言

fft快速傅里叶变换,FFT,java,开发语言

在使用了FFT时间窗的图谱和未使用的图谱相对比。明显的可以看到一个激波和后面失真(噪声)的一些情况在。

fft快速傅里叶变换,FFT,java,开发语言

上面的这个图就是加上传函数之后出现的FFT频谱图,但是可以看到激波的Bin比较宽,出现这个线性的原因是因为和快长度有关,如果提高块长度,那么分辨率就会变高,那么就会出现一个比较窄的Bin。

fft快速傅里叶变换,FFT,java,开发语言

 FFT分析脉冲信号

在时域里面,脉冲信号是由不同频率的正弦波组成的,在FFT里面有不同成分的斜坡叠加起来。

 fft快速傅里叶变换,FFT,java,开发语言

 FFT分析方波

在是与里面是由正弦波的信号来表示的。当叠加一些成分进去的时候,正弦波信号会发生变化。

 fft快速傅里叶变换,FFT,java,开发语言

 方波是由激波信号(500HZ),三次谐波(1500HZ,幅值是激波的三分之一),五次谐波(是激波的五分之一),,,,增加的奇次谐波越多,就越接近于方波。

FFT分析分噪声,不是稳定信号,在测试的时候会有一些突变,此时们就需要一个平均的模式,点完平均模式之后这个噪声就会平稳许多。文章来源地址https://www.toymoban.com/news/detail-682789.html

到了这里,关于快速傅里叶变换——FFT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA:实现快速傅里叶变换(FFT)算法

    第一次使用FPGA实现一个算法,搓手手,于是我拿出一股势在必得的心情打开了FFT的视频教程,看了好几个视频和好些篇博客,于是我迷失在数学公式推导中,在一位前辈的建议下,我开始转换我的思维, 从科研心态转变为先用起来 ,于是我关掉我的推导笔记,找了一篇叫我

    2024年02月03日
    浏览(39)
  • 快速傅里叶变换(FFT)的频谱分辨率

    快速傅里叶变换Fast Fourier Transform (FFT)是快速计算离散傅里叶变换的一种算法,是我们在编程时进行傅里叶变换的主要方法。 FFT的输入与输出的个数一致,比如对于长度为1024的一维向量,其输出也为长度为1024的一维向量。而根据Nyquist-Shannon 采样定律,当采样率 为1Mhz(每秒

    2024年02月13日
    浏览(39)
  • Python中利用FFT(快速傅里叶变换)进行频谱分析

    本文将从实例的角度出发讲解fft函数的基本使用,不包含复杂的理论推导。 要对一个信号进行频谱分析,首先需要知道几个基本条件。 采样频率fs 信号长度N(信号的点数) 采样频率fs: 根据采样定理可知,采样频率应当大于等于被测信号里最高频率的2倍,才能保证不失真

    2024年01月17日
    浏览(40)
  • Matlab信号处理3:fft(快速傅里叶变换)标准使用方式

    运行效果:

    2024年02月09日
    浏览(36)
  • 基于STM32&FFT(快速傅里叶变换)音频频谱显示功能实现

    + v hezkz17进数字音频系统研究开发交流答疑 一实验效果   二 设计过程 要用C语言实现STM32频谱显示功能,可以按照以下步骤进行操作: 1 确保已经安装好了适当的开发环境和工具链,例如Keil MDK或者GCC工具链。 2 创建一个新的STM32项目,并选择适合的MCU型号。 3 配置GPIO引脚用

    2024年02月12日
    浏览(31)
  • 【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文的

    2024年02月10日
    浏览(36)
  • 适用于单片机的FFT快速傅里叶变换算法,51单片机都能用

    普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 算法来自FFT算法的使用说明与C语言版实现源码 —— 原作者:吉帅虎 速度更快的版本见C语言实现的FFT与IFFT源代码,不依赖特定平台 移植十分简单,不依赖其他库,可自定义点数 在FFT.h中修改 FFT_N 16,定义

    2024年02月11日
    浏览(34)
  • 傅里叶变换(FFT)笔记存档

    参考博客:https://www.luogu.com.cn/blog/command-block/fft-xue-xi-bi-ji 目录: FFT引入 复数相关知识 单位根及其相关性质 DFT过程(难点) DFT结论(重要) IDFT结论(重要) IDFT结论证明(难点)

    2024年02月10日
    浏览(40)
  • FFT64点傅里叶变换verilog蝶形运算,代码和视频

    名称:FFT64点verilog傅里叶变换 软件:Quartus 语言:Verilog 代码功能:     使用verilog代码实现64点FFT变换,使用蝶形运算实现傅里叶变换 演示视频:http://www.hdlcode.com/index.php?m=homec=Viewa=indexaid=208 FPGA代码资源下载网:hdlcode.com 代码下载: 软件:Quartus 语言:Verilog 代码功能:

    2024年02月08日
    浏览(31)
  • 【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

    有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解+FFT傅里叶频谱变换联合算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码(见每一算法介绍后文)~ EMD 是

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包