快速傅里叶变换(FFT)

一、FFT出现的原因

对x(n)进行N点DFT计算,一共有N2 次乘法,N2次加法
如果N=1024,则有2*1048576次计算,计算量过于庞大。
FFT的思想就是:不断把长序列的DFT分解成几个短序列的DFT,并利用WNkn的周期性和对称性来减少DFT的运算次数。

二、DIT-FFT

(1)8点DFT一次时域抽取分解运算


经过一次分解后,计算1个N点DFT共需要计算两个N/2点DFT和N/2个蝶形运算。而计算一个N/2点DFT需要(N/2)2次复数乘法和N/2(N/2-1)次复数加法。仅仅经过一次分解,就使运算量减少近一半。

(2)8点DFT二次时域抽取分解运算


经过第二次分解,又将N/2点DFT分解为2个N/4点DFT和N/4个蝶形运算,而1点DFT就是时域序列本身。

(3)DIT-FFT与DFT运算量的比较

设N=2M ,有M级蝶形。每一级都由N/2个蝶形运算构成。每一级运算都需要N/2次复数乘和N次复数加

下图显示了DIT-FFT与DFT运算量的比较,可以直观看出FFT算法的优越性。N越大时,优越性就越明显。

三、用Python实现FFT算法

import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
mpl.rcParams['axes.unicode_minus'] = False  # 显示负号# 采样点选择1400个
x = np.linspace(0, 1, 1400)# 设置需要采样的信号,频率分量有200,400和600
y = 7 * np.sin(2 * np.pi * 200 * x) + 5 * np.sin(2 * np.pi * 400 * x) + 3 * np.sin(2 * np.pi * 600 * x)fft_y = fft(y)  # 快速傅里叶变换N = 1400
x = np.arange(N)  # 频率个数
half_x = x[range(int(N / 2))]  # 取一半区间abs_y = np.abs(fft_y)  # 取复数的绝对值,即复数的模(双边频谱)
angle_y = np.angle(fft_y)  # 取复数的角度
normalization_y = abs_y / N  # 归一化处理(双边频谱)
normalization_half_y = normalization_y[range(int(N / 2))]  # 由于对称性,只取一半区间(单边频谱)plt.subplot(411)
plt.plot(x[0:50],y[0:50])
plt.title('原始波形')plt.subplot(412)
plt.plot(x, angle_y, 'violet')
plt.title('双边相位谱', fontsize=9, color='violet')plt.subplot(413)
plt.plot(x, normalization_y, 'g')
plt.title('双边振幅谱', fontsize=9, color='green')plt.subplot(414)
plt.plot(half_x, normalization_half_y, 'blue')
plt.title('单边振幅谱', fontsize=9, color='blue')plt.show()

数字信号处理学习笔记(二)|快速傅里叶变换相关推荐

  1. [MATLAB学习笔记]采用快速傅里叶变换求时间序列的周期项

    [MATLAB学习笔记]采用快速傅里叶变换求时间序列的周期项 1. 背景 现有长度为11年的5个时间序列,为某拟研究对象的5个参数.现计划先通过快速傅里叶变换求每个系数序列的显著周期项,再分别按照傅里 ...

  2. 【数字信号处理 | 学习笔记】二、离散傅里叶变换及其快速算法

    目录 1 离散傅里叶级数 1.1 离散傅里叶级数(DFS) 1.2 离散傅里叶级数的性质 2 离散傅里叶变换 2.1 离散傅里叶变换(DFT) 2.2 离散傅里叶变换的性质 2.3 频域采样定理 2. ...

  3. 数字信号处理学习笔记(一)|离散傅里叶变换

    离散傅里叶变换(DFT) 离散傅里叶变换(Discrete Fourier Transform)的实质是有限长序列傅里叶变换的有限点离散采样,实现了频域离散化,使数字信号处理可以在频域采用数值运算的方 ...

  4. 【DSP数字信号处理学习笔记】—— 详细推导DFT的快速实现算法:FFT 基于库利-图基算法的实现

    引言:尽管离散傅里叶变换(DFT)让频谱分析技术在计算机上的实现成为可能,但是受限于DFT算法庞大的计算量 O(N2)O(N^2)O(N2),使得DFT在一开始并没有被广泛使用,直到快速傅里叶变换算法 ...

  5. 【算法竞赛学习笔记】快速傅里叶变换FFT-数学提高计划

    tilte : 快速傅里叶变换FFT学习笔记 tags : ACM,数论 date : 2021-7-18 简介 FFT(Fast Fourier Transformation),中文名快速傅里叶变换 ...

  6. 数字信号处理学习(二):振动与信号

    (以下内容纯粹抄书.书名:<数字信号处理的Matlab实现>) 通过读书,以早日学会随机场的生成! ---------------------- S 2.1 振动概述 对于简谐无阻尼振动, ...

  7. 数字信号处理学习笔记[0] 连续信号的频谱和傅氏变换

    文章目录 绪论 1 连续信号的频谱和傅氏变换 1.1 有限区间上连续信号的傅氏级数和离散频谱 1.2 傅氏变换,连续信号与频谱 1.2.3 频谱的基本性质 实际应用举例 习题 绪论 Q: 举例说明&q ...

  8. 数字信号处理学习笔记

    文章目录 信号处理 离散时间信号与系统 为什么要处理信号 信号是如何处理的 信号处理的目的 数字信号的表示 信号的分类 DSP 和 ASP 数字信号处理的特点 数字信号处理的应用 两类DSP 数字信号 ...

  9. 数字信号处理学习笔记(三)|时域离散系统的网络结构

    时域离散系统的网络结构 一.何为网络结构 网络结构如同差分方程.单位脉冲响应以及系统函数一样,描述了一个系统实现方法的表达形式. 例如给定一个差分方程:y(n)=0.8y(n-1)-0.15y(n-2 ...

最新文章

  1. arcgis api for flex 开发入门(九)webservices 的使用
  2. 小腹下面是什么部位_为什么肚子上的肉最难减?说好的马甲线呢?
  3. Cpp 对象模型探索 / 对象访问成员变量的原理
  4. ambari集成mysql_Ambari 安装配置 MySql
  5. ABP .Net Core Entity Framework迁移使用MySql数据库
  6. windows系统停止8080端口
  7. python-图书管理系统3-[代码部分]-需要完善
  8. 机器学习 --- 2. 从最大似然再看线性回归(转)
  9. python调用QQ音乐API
  10. 从条件概率到贝叶斯公式
  11. 一系列自动化测试的开源项目介绍
  12. 异速联大于400并发分散型项目应用介绍
  13. 用python做乘法口诀表_如何用python编写乘法口诀表
  14. [React 基础系列] 受控表单 vs 不受控表单
  15. 户外运动耳机如何选择、最优秀的五款户外运动耳机推荐
  16. 微信小程序应该这样开发
  17. word转换成字符串
  18. 《棒球殿堂》:棒球联盟LEAGUE·埼玉西武狮
  19. (一)(1)OpenGL入门---Open GL 在 Mac 上的配置
  20. TCP/IP协议之ICMP协议

热门文章

  1. locate 和 find
  2. 2018/3/18 noip模拟赛 20分
  3. Struts2与Spring整合
  4. HDU5593 ZYB's Tree 树形DP +分治
  5. Acdream1157---Segments (CDQ分治)
  6. General texture mapping resources
  7. 工作中收集JSCRIPT代码之(下拉框篇)
  8. Android拼图游戏
  9. BZOJ 2326: [HNOI2011]数学作业( 矩阵快速幂 )
  10. httpclient爬取性感美图