python实现一维傅里叶变换——冈萨雷斯数字图像处理

news2025/1/19 11:34:08

原理

傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。最初傅立叶分析是作为热过程的解析分析的工具被提出的。

定义:给定一个函数 f(t),傅立叶变换将这个函数从时域(时间域)转换到频域(频率域)上的函数 。傅立叶变换的数学表示如下:
在这里插入图片描述

在这个表示中,F(ω) 表示频域上的复数函数,f(t) 表示时域上的函数,ω 表示频率,j 表示虚数单位。这个公式描述了将时域信号 f(t) 转换为频域信号 F(ω) 的过程。

原理:
复指数函数:傅立叶变换的核心是复指数函数ω,它表示在不同频率上的正弦和余弦振荡。傅立叶变换实际上是将信号分解为不同频率的复振幅和相位。

积分:傅立叶变换中的积分操作将时域函数给定范围内的所有时间点考虑在内,以获得频率域上的表示。这表示我们考虑了信号的所有时间信息以获取频率信息。

频谱:F(ω)表示了信号在频率ω处的振幅和相位信息。频谱显示了信号中各个频率分量的重要性。

逆变换:傅立叶变换不仅可以将信号从时域转换到频域,还可以进行逆变换,将信号从频域还原回时域,这允许我们在频域上对信号进行操作后再转换回时域。

输出如下图所示的结果:

生成包含1个、5个和10个正弦波信号的时域图和它们的FFT(傅立叶变换)的频域图,将它们放置在3x2的子图布局中。比较不同数量的正弦波信号在时域和频域上的表示。

在这里插入图片描述

代码展示

import numpy as np
from matplotlib import pyplot as plt

# 时间长度为1,采样间隔为0.005
x = np.arange(0, 1, 0.005)
# 采样点数
n = len(x)
# 由于对称性,只取单边频谱,又由于我们事先知道实验中信号的频率小于20,所以只取前20个
freq = np.arange(20)

y = []
F = []
# 分别取1,5,10个正弦波叠加
for num in [1, 5, 10]:
    y_signal = 0
    for i in range(num):
        # 正弦波的频率为1,3,5,7...
        y_signal += np.sin(2*np.pi*(2*i+1)*x)/(2*i+1)
    y.append(y_signal)
    F_signal = np.fft.fft(y_signal)
    # 取abs是为了计算复数的幅度谱,/n是为了归一化
    F.append(np.abs(F_signal[range(20)])/n)

_, axs = plt.subplots(3, 2)

for i in range(3):
    axs[i, 0].plot(x, y[i])
    axs[i, 0].set_xlabel('time')
    axs[i, 0].set_ylabel('amplitude')
    axs[i, 1].stem(freq, F[i])
    axs[i, 1].set_xlabel('frequency')
    axs[i, 1].set_ylabel('FFT')

plt.savefig('1D_FFT.jpg')
plt.show()

结果展示

在这里插入图片描述

主要代码解释

创建时间向量 x:
x = np.arange(0, 1, 0.005):创建一个从0到1的时间向量 x,采样间隔为0.005秒,用于表示信号的时间范围。
获取采样点数 n:
n = len(x):计算时间向量 x 中的采样点数,以便在后续的FFT归一化中使用。
创建频率向量 freq
freq = np.arange(20):创建一个频率向量 freq,包含从0到19的整数值,表示将计算的频率范围。
创建信号和频域数据:
使用for循环分别取1、5和10个正弦波信号,并在每个循环中生成信号,并计算其FFT。
y_signal = 0:初始化一个信号变量y_signal,用于存储叠加的正弦波信号。
在内部的for循环中,叠加不同频率的正弦波信号到y_signal。
F_signal = np.fft.fft(y_signal):计算y_signal的傅立叶变换,结果存储在F_signal中。
F.append(np.abs(F_signal[range(20)])/n):将计算的FFT结果归一化并存储在列表F中,仅保留前20个频率成分。

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

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

相关文章

Python初学者必须吃透的69个内置函数!

所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常精巧且强大的&…

docker学习(二十一、network使用示例container、自定义)

文章目录 一、container应用示例1.需要共用同一个端口的服务,不适用container方式2.可用示例3.停掉共享源的容器,其他容器只有本地回环lo地址 总结 二、自定义网络应用示例默认bridge,容器间ip通信默认bridge,容器间服务名不通 自…

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、设计思路和框架设计框图GV8601A均衡EQGTX 时钟要求GTX 调用与控制SMPTE SD/HD/3G-SDISMPTE SD/HD/3G-SDI 接收SMPTE SD/HD/3G-SDI 发送 SDI 视频接收数据处理SDI 音频接收-…

天文观测与计算机技术:共舞在星辰大海

天文观测与计算机技术:共舞在星辰大海 在人类探索宇宙的历程中,天文观测和计算机技术如同一对并肩作战的勇士,共同书写着人类对宇宙的认知。本篇博客将深入探讨这两者如何交织在一起,为人类打开一扇又一扇探索宇宙的窗户。 一、…

羊大师教你如何选择适合孩子的羊奶,孩子成长的关键!

当谈到孩子的健康与成长时,正确的饮食是至关重要的。而在众多的饮品中,羊奶因其独特的营养价值备受家长们的青睐。那么,如何为孩子挑选适合的羊奶成为了一个重要的选择。下面,小编羊大师将为大家介绍如何选择适合孩子的羊奶。 我…

Flask 账号管理列表

Flask 账号管理列表 web/controllers/account/Account.py /index route_account Blueprint( account_page,__name__ )route_account.route( "/index" ) def index():resp_data {}req request.valuespage int( req[p] ) if ( p in req and req[p] ) else 1qu…

【Simulink系列】——用扫地机器人实例快速引入

目录 一、Simulink基本认知 1、模块图建模 2、仿真基本流程 3、调试技巧 二、基于模型的simulink设计实例(两轮扫地机器人) 1、系统定义与布局 确定建模目的 确定系统组件和接口 确定系统布局 2、建模并验证系统 对组件建模 ①物理组件建模 …

深度学习基础知识神经网络

神经网络 1. 感知机 感知机(Perceptron)是 Frank Rosenblatt 在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络&#xff0c…

如何使用甘特图进行项目管理?

或许你在工作中或项目启动会议上听说过“甘特图”一词,但对此了解不多。虽然这些图表可能变得相当复杂,但基础知识并不难掌握。通过本文,你将清楚地了解什么是甘特图、何时使用甘特图、创建甘特图的技巧等等。 什么是甘特图? 甘特…

【多线程】常见问题简单总结

目录 1. 竞态条件(Race Condition) 场景: 解决方法: 2. 死锁(Deadlock) 场景: 解决方法: 3. 线程饥饿(Thread Starvation) 场景: 解决方法: 4. 活锁(Livelock) 场景: 解…

03.MySQL的体系架构

MySQL的体系架构 一、MySQL简介二、MySQL的体系架构三、MySQL的内存结构四、MySQL的文件结构 一、MySQL简介 MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,后被Sun公司收购,Sun公司被Oracle…

WEB渗透—PHP反序列化(九)

Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩…

《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

1. 简介 俗话说:磨刀不误砍柴工,因此在我们要开始写自动化脚本之前,我们先来学习和了解几个基本概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本。 元素,在这个…

35KV配电室六氟化硫SF6设备泄漏监测方法

一、六氟化硫是什么? 六氟化硫又称为SF6,这种气体在常温常压下为无色无臭无毒的气体。不燃烧。对热稳定,没有腐蚀性,可以作为通用材料。电绝缘性能和消弧性能好,绝缘性能为空气的2~3倍,而且气体…

STM32CubeMX使用——Error: Flash Download failed - “Cortex-M7“

使用STM32CubeMX创建工程以后,工程正常编译,JTAG下载时会提示Error: Flash Download failed - “Cortex-M7” 但点击“确定”以后再次下载又不报错,此时进入debug模式,程序会直接停在while(1) 起初以为是STM32CubeMX没有配置好&…

mapboxgl 中给地图添加遮罩蒙版,并不遮罩其中一块区域

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章主要是给一整块地图添加遮罩层蒙版,但是不遮罩其中一个区域,以反向高亮地区内容。 效果预览 技术思路 这里要实现某个区域反显高亮,需要这个区域的边界json文件,与ech…

Kubernetes 学习总结(42)—— Kubernetes 之 pod 健康检查详解

Kubernetes 入门 回想 2017 年刚开始接触 Kubernetes 时,碰到 Pod一直起不来的情况,就开始抓瞎。后来渐渐地掌握了一些排查方法之后,这种情况才得以缓解。随着时间推移,又碰到了问题。有一天在部署某个 springboot 微服务时&…

C++初阶(十七)模板进阶

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、非类型模板参数二、模板的特化1、概念2、函数模板特化3、类模板特化1、全特化2、偏特化 三…

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果

最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411