【傅里叶变换】DFT详细分析与Python实现
目录
一. 思考几个问题
二. 狄拉克函数和sinc函数
三. DFT的计算公式
四. 频谱幅值和时域信号幅值的关系
五. 频谱的中心对称性
六. 取样和频率间隔间的关系
七. Python实现一维FFT
八. 对图像进行FFT
一. 思考几个问题
我们知道无论是Matlab还是Python实现FFT都是十分容易的,但是需要思考几个问题:
- 狄拉克函数?sinc函数?
- DFT的计算公式是什么?DFT后长度不变?
- 频谱的横坐标有何物理意义?横轴范围是多少?分辨率又是多少?
- 采样点数、采样频率、采样持续时间是否理解?更改采样点数或采样频率,对频谱有何影响?
- 频率谱幅值和时域信号幅值的关系?
- 频谱中F[0]的物理意义是什么?
- 为什么得到的频谱(除去第一个点)是中心对称的?
- 对图像进行FFT,频谱原点在哪里?如何进行中心化?
- 对图像进行FFT,得到的图像物理意义是什么?
二. 狄拉克函数和sinc函数
三. DFT的计算公式
四. 频谱幅值和时域信号幅值的关系
注意:这里所说的频谱,指的是FFT后取模得到的曲线。
五. 频谱的中心对称性
六. 取样和频率间隔间的关系
七. Python实现一维FFT
''' Author: Jiuwu Hao '''
import numpy as np
from scipy.fftpack import fft,fft2,fftshift
from math import pi
import matplotlib.pyplot as pltdef hjw_dft(fs,signal):# 信号持续时间T,即样本点数*采样间隔T = len(signal)*(1/fs)# x轴整体范围时采样持续时间,分辨率是采样间隔x = np.arange(0,T,1/fs)plt.plot(x,signal)plt.title('Original')plt.show()# dft后,长度不变,是复数表示,想要频谱图需要取模dft = fft(signal)dft = np.abs(dft)/(len(dft)/2)dft[0] /= 2# 归一化# dft = (dft-np.min(dft))/(np.max(dft)-np.min(dft))# 在频率域中,横轴范围为采样频率,分辨率是1/T,即持续时间的倒数dft_x = np.arange(0,fs,1/T)plt.plot(dft_x,dft)plt.title('DFT')plt.show()# 由于Nyquist采样定律和信号的对称性都可以证明,只要取一半的频率区间即可dft_half = dft[0:int(len(dft)/2)]dft_x_half = dft_x[0:int(len(dft)/2)]plt.plot(dft_x_half,dft_half)plt.title('DFT_Half')plt.show()fs = 2000 # 采样率为2000Hz
n = 10000 # 采样点数为10000
T = n*(1/fs) # 采样持续时间
# 注意:在构造测试函数时,不能x = np.arange(n),要符合实际物理意义的采样频率
x = np.arange(0,T,1/fs)
# 信号频率为100,200Hz,直流分量为4
y = 3*np.sin(2*pi*100*x) + 5*np.cos(2*pi*200*x) +4 if __name__ == '__main__':hjw_dft(fs,y)
代码效果:
八. 对图像进行FFT
空间域和频率域的原点都在左上角。同样,|F[0,0]|/MN代表了图像灰度的平均值。典型地,由于比例常数MN通常很大,因此|F[0,0]|是谱的最大分量,可能比其他项大几个数量级。因此如果没有进行中心化,那么最亮的点位于原点。
为中心化该谱,我们用(-1)的x+y次幂去乘以原始图像,再进行FFT,可得到中心化频谱。由于直流分量支配着谱的值,因此其他灰度的动态范围被压缩了,为给出那些细节,可采用对数变换(1+log|F[u,v]|)。
图像FFT实例与代码:
链接:https://pan.baidu.com/s/1sIsmhnOTlOMVePeyWehQgw
提取码:tr06
【傅里叶变换】DFT详细分析与Python实现相关推荐
- 【数字信号处理】序列傅里叶变换 ( 序列傅里叶变换定义详细分析 | 证明单位复指数序列正交完备性 | 序列存在傅里叶变换的性质 | 序列绝对可和 → 序列傅里叶变换一定存在 )
文章目录 一.序列傅里叶变换定义详细分析 二.证明单位复指数序列正交完备性 三.序列存在傅里叶变换的性质 一.序列傅里叶变换定义详细分析 序列傅里叶变换 SFT , 英文全称 " Seque ...
- 区块链实现代码详细分析(Python)
代码 import hashlib import json import requests from textwrap import dedent from time import time from ...
- LeetCode#546. 移除盒子 (Python解法+详细分析)
问题描述: 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色. 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k &g ...
- 傅里叶级数FS,连续时间傅里叶变换CTFT,离散时间傅里叶变换DTFT,离散傅里叶变换DFT,推导与联系(一)
本文主要从傅里叶级数 FS,连续时间傅里叶变换 CTFT,离散时间傅里叶变换 DTFT,以及离散傅里叶变换 DFT 之间的区别与联系进行了比较详细的讨论,主要注重于公式形式上的推导,略去了相关的图像示 ...
- 傅里叶变换、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)详解
前置知识 以下内容参考<复变函数与积分变换>,如果对积分变换有所了解,完全可以跳过忽略 复数的三角表达式如下 Z=r(cosθ+isinθ)Z=r(cos\theta+isin\theta ...
- HashMap 源码详细分析(JDK1.8)
1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值 ...
- opencv学 之图像傅里叶变换dft
一.前言 接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得 二.关键函数解析 2.1copyMakeBorder() 扩展图片尺寸 ...
- python程序分析,用Python编写分析Python程序性能的工具的教程
用Python编写分析Python程序性能的工具的教程 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 用Python编写分析Python程序性能的工具的教程.tx ...
- android ListView 九大重要属性详细分析
2019独角兽企业重金招聘Python工程师标准>>> android ListView 九大重要属性详细分析 1.android ListView 一些重要属性详解,兄弟朋友可以参 ...
最新文章
- javascript编写_用JavaScript深入探讨:为什么对编写好的代码至关重要。
- 【Storm篇】--Storm基础概念
- 图解Oracle用户管理
- java垃圾回收算法超详细全解
- 使用apache的HttpClient进行http通讯,隐藏的HTTP请求头部字段是如何自动被添加的
- 1,2,2,3,3,4,4,4,......
- Python 字符串与二进制串的相互转换
- java 下载文件的文件名乱码_java下载文件名乱码解决方法介绍
- Adobe LiveCycle Designer 报表设计器
- 华三交换机ping大包命令_华三(H3C)交换机命令大全
- php简易微博系统,基于html、css、PHP开发一个简单的微型博客系统(微博)
- CSS3 Shape详解
- 发生内部错误。请与 microsoft 支持部门联系。_设计变更、工程签证、确认单、工程洽商、联系单、会签的是干啥的?有啥区别?...
- 怎么恢复格式化的sd卡呢?
- Python3.8场景式编程学习与训练- 第1章 入门基础 Python学习方法论与学习资源
- Apache Zeppelin安装和启动
- 识别孩子潜能的6大细节
- 随机变量与随机过程详解
- autodesk(欧特克)CAD发展简史
- 神策数据携手老虎证券,用科技赋能美港股券商打造极致体验
热门文章
- 学习笔记四.基于HAL库的stm32f103硬件读写EEPROM(CUBEMX)
- sublime text 替代_Lime :号称 Sublime Text 编辑器的开源替代品
- 汽车一键启动开关发动机启动按钮点火开关图解
- 腾讯域名防封 微信/QQ域名检测,域名防封的原理
- 微信小程序文章界面简单布局
- Python实现天气查询源码_复制可执行,可用
- MapReduce作业Uber模式
- cpu风扇转速调节怎么调?怎么查看CPU风扇的转速?所有的CPU风扇都可以调节风扇转速吗,怎么控制?...
- 难受啊,139天备战字节跳动,一个疏忽让我前功尽弃...
- JS逆向-常见反调试之“无限Debugger”,怎么解决?