数字信号处理学习笔记(二)|快速傅里叶变换
快速傅里叶变换(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()
数字信号处理学习笔记(二)|快速傅里叶变换相关推荐
- [MATLAB学习笔记]采用快速傅里叶变换求时间序列的周期项
[MATLAB学习笔记]采用快速傅里叶变换求时间序列的周期项 1. 背景 现有长度为11年的5个时间序列,为某拟研究对象的5个参数.现计划先通过快速傅里叶变换求每个系数序列的显著周期项,再分别按照傅里 ...
- 【数字信号处理 | 学习笔记】二、离散傅里叶变换及其快速算法
目录 1 离散傅里叶级数 1.1 离散傅里叶级数(DFS) 1.2 离散傅里叶级数的性质 2 离散傅里叶变换 2.1 离散傅里叶变换(DFT) 2.2 离散傅里叶变换的性质 2.3 频域采样定理 2. ...
- 数字信号处理学习笔记(一)|离散傅里叶变换
离散傅里叶变换(DFT) 离散傅里叶变换(Discrete Fourier Transform)的实质是有限长序列傅里叶变换的有限点离散采样,实现了频域离散化,使数字信号处理可以在频域采用数值运算的方 ...
- 【DSP数字信号处理学习笔记】—— 详细推导DFT的快速实现算法:FFT 基于库利-图基算法的实现
引言:尽管离散傅里叶变换(DFT)让频谱分析技术在计算机上的实现成为可能,但是受限于DFT算法庞大的计算量 O(N2)O(N^2)O(N2),使得DFT在一开始并没有被广泛使用,直到快速傅里叶变换算法 ...
- 【算法竞赛学习笔记】快速傅里叶变换FFT-数学提高计划
tilte : 快速傅里叶变换FFT学习笔记 tags : ACM,数论 date : 2021-7-18 简介 FFT(Fast Fourier Transformation),中文名快速傅里叶变换 ...
- 数字信号处理学习(二):振动与信号
(以下内容纯粹抄书.书名:<数字信号处理的Matlab实现>) 通过读书,以早日学会随机场的生成! ---------------------- S 2.1 振动概述 对于简谐无阻尼振动, ...
- 数字信号处理学习笔记[0] 连续信号的频谱和傅氏变换
文章目录 绪论 1 连续信号的频谱和傅氏变换 1.1 有限区间上连续信号的傅氏级数和离散频谱 1.2 傅氏变换,连续信号与频谱 1.2.3 频谱的基本性质 实际应用举例 习题 绪论 Q: 举例说明&q ...
- 数字信号处理学习笔记
文章目录 信号处理 离散时间信号与系统 为什么要处理信号 信号是如何处理的 信号处理的目的 数字信号的表示 信号的分类 DSP 和 ASP 数字信号处理的特点 数字信号处理的应用 两类DSP 数字信号 ...
- 数字信号处理学习笔记(三)|时域离散系统的网络结构
时域离散系统的网络结构 一.何为网络结构 网络结构如同差分方程.单位脉冲响应以及系统函数一样,描述了一个系统实现方法的表达形式. 例如给定一个差分方程:y(n)=0.8y(n-1)-0.15y(n-2 ...
最新文章
- arcgis api for flex 开发入门(九)webservices 的使用
- 小腹下面是什么部位_为什么肚子上的肉最难减?说好的马甲线呢?
- Cpp 对象模型探索 / 对象访问成员变量的原理
- ambari集成mysql_Ambari 安装配置 MySql
- ABP .Net Core Entity Framework迁移使用MySql数据库
- windows系统停止8080端口
- python-图书管理系统3-[代码部分]-需要完善
- 机器学习 --- 2. 从最大似然再看线性回归(转)
- python调用QQ音乐API
- 从条件概率到贝叶斯公式
- 一系列自动化测试的开源项目介绍
- 异速联大于400并发分散型项目应用介绍
- 用python做乘法口诀表_如何用python编写乘法口诀表
- [React 基础系列] 受控表单 vs 不受控表单
- 户外运动耳机如何选择、最优秀的五款户外运动耳机推荐
- 微信小程序应该这样开发
- word转换成字符串
- 《棒球殿堂》:棒球联盟LEAGUE·埼玉西武狮
- (一)(1)OpenGL入门---Open GL 在 Mac 上的配置
- TCP/IP协议之ICMP协议