傅里叶变换通俗理解,附python代码

news2025/1/13 15:54:23

傅里叶变换可以简单理解为用一系列三角函数去拟合一个目标函数。为什么可以用三角函数拟合?因为三角函数1, cos(x),sin(x),cos(2x),sin(2x),...,cos(nx),sin(nx),... 是一组正交基。

先来回顾一下正交的概念,在二维平面坐标系中,\vec{i}=(1,0)\vec{j}=(0,1)这两个单位向量,正交(内积为0,相互垂直),平面坐标系内任意一个向量,都可以用这两个单位向量来表示\vec{x}=a\vec{i}+b\vec{j}a,b就是\vec{x}在平面坐标系内的坐标。

在三维空间中,\vec{i}=(1,0,0),\vec{j}=(0,1,0),\vec{k}=(0,0,1)这三个向量两两相互正交(内积为0,相互垂直),同理,三维空间坐标系内任何一个向量都可以看作是这三个单位向量的线性组合。这三个向量就是三维空间坐标系内的正交基。

不仅向量可以作为正交基,函数同样可以作为正交基。若函数f,g在区间a,b上存在如下性质:

< f,g>=\int_{a}^{b}f(x)g(x)dx=0

则称函数f,g在区间a,b上正交。三角函数1, cos(x),sin(x),cos(2x),sin(2x),...,cos(nx),sin(nx),...中在-\pi ,\pi区间内,任意两个都正交,因此三角函数是一组正交基。待拟合目标函数就可以三角函数正交基的线性组合。

 a_{n}, b_{n}就是函数f(t)在三角函数正交基这个坐标系内的坐标。傅里叶变换就是求一个函数在三角函数正交基坐标系的坐标,也可以理解为用一系列三角函数去拟合这个函数,我们要求的就是拟合过程中的系数:

import numpy as np
from scipy.fftpack import fft
import matplotlib.pyplot as plt


def FFT(Fs, data):
    """
    对输入信号进行FFT
    :param Fs:  采样频率
    :param data:待FFT的序列
    :return:
    """
    L = len(data)  # 信号长度
    N = np.power(2, np.ceil(np.log2(L)))  # 下一个最近二次幂,也即N个点的FFT
    result = np.abs(fft(x=data, n=int(N))) / L * 2  # N点FFT
    axisFreq = np.arange(int(N / 2)) * Fs / N  # 频率坐标
    result = result[range(int(N / 2))]  # 因为图形对称,所以取一半
    return axisFreq, result


if __name__ == '__main__':
    Fs = 10000  # 采样频率
    f1 = 100  # 信号频率1
    f2 = 2000  # 信号频率2
    t = np.linspace(0, 1, Fs)  # 生成 1s 的时间序列
    # 给定信号
    y = 2 * np.sin(2 * np.pi * f1 * t) + 5 * np.sin(2 * np.pi * f2 * t)
    # 第一步,对没有添加噪声的信号进行FFT,验证分析是否正确
    x, result = FFT(Fs, y)

    # 绘图
    fig1 = plt.figure(figsize=(16, 9))
    plt.title('original data')
    plt.plot(t, y)
    plt.xlabel('time/s')
    plt.ylabel('Amplitude')
    plt.grid()

    fig2 = plt.figure(figsize=(16, 9))
    plt.title('FFT')
    plt.plot(x, result)
    plt.xlabel('Frequency/Hz')
    plt.ylabel('Amplitude')
    plt.grid()
    plt.show()

运行上述python代码,可以看到

 

频率为100和频率为2000对应的幅值约为2和5,即待拟合函数中,主要成分就是频率100和2000的基函数,这两个基函数系数分别为2和5。与我们待拟合函数y相一致。

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

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

相关文章

单机模型并行最佳实践

单机模型并行最佳实践 模型并行在分布式训练技术中被广泛使用。 先前的帖子已经解释了如何使用DataParallel在多个 GPU 上训练神经网络&#xff1b; 此功能将相同的模型复制到所有 GPU&#xff0c;其中每个 GPU 消耗输入数据的不同分区。 尽管它可以极大地加快训练过程&#x…

MySQL的基本操作及实用示例(面试真题老实用了)

一、MySQL基本操作 常用语句 MySQL是一个常用的关系型数据库管理系统&#xff0c;可以用于存储和管理数据。下面是MySQL的一些基本操作&#xff1a; 1. 连接到MySQL服务器&#xff1a; mysql -u username -p 其中&#xff0c;username是你的用户名&#xff0c;执行该命令后会…

【软件分析/静态分析】chapter5 课程07 过程间分析(Interprocedural Analysis)

&#x1f517; 课程链接&#xff1a;李樾老师和谭天老师的&#xff1a; 南京大学《软件分析》课程07&#xff08;Interprocedural Analysis&#xff09;_哔哩哔哩_bilibili 目录 第五章 过程间分析 5.1 为什么需要过程间分析 5.2 Call Graph 5.2.1 调用图的概念 5.2.2 调…

2023 年 GitHub 上最火的 Java 面试宝典正式上线

笔记特点&#xff1a;条理清晰&#xff0c;含图像化表示更加易懂。 内容概要&#xff1a;包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring 全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Ne…

Vue实现拖拽鼠标圈选、划区域、框选组件sgRectSelect:矩形区域选中checkbox,并回调相关选中、取消选中的操作

边框线虚线动画效果请参阅边框虚线滚动动画特效_虚线滚动效果_你挚爱的强哥的博客-CSDN博客【代码】边框虚线滚动动画特效。_虚线滚动效果https://blog.csdn.net/qq_37860634/article/details/130507289 碰撞检测原理请前往 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞…

车载以太网 - SomeIP - 协议用例 - RPC

目录 RPC Protocol specification 1、Cleint和Server端应该为一个服务实例的所有的Methodsevents使用一个TCP连接

AtCoder Regular Contest 163 C. Harmonic Mean(构造 补写法)

题目 t(t<500)组case&#xff0c; 给定一个数n(n<500)&#xff0c;构造一个长为n的数组 思路来源 官方题解 题解 注意到 ... 右边累加&#xff0c;等于1-最后一项&#xff0c;可以把最后一项挪到左边 所以&#xff0c; 1. 当n没有在前面的序列里出现过时&#xf…

centos7.6安装mysql

卸载mariadb 解决安装mysql与mariadb冲突问题&#xff08;卸载干净mariadb&#xff09;_何妨徐行的博客-CSDN博客 安装rpm包前可能需要的命令&#xff1a; yum install openssl-devel用于管理rpm包的工具 yum install lrzsz -y 文件传输缺乏rz 下载安装包 去mysql官网 把…

<Linux开发>驱动开发 -之- Linux I2C 驱动

&#xff1c;Linux开发&#xff1e;驱动开发 -之- Linux I2C 驱动 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详细…

[MMDetection]VOC数据格式转为COCO数据格式

以下脚本可以根据创建VOC格式数据集转换为COCO数据集 其中文件组织格式如下 VOC2007 ------Annotations ------***********.xml ------***********.xml -------ImageSets ------train.txt ------test.txt -------JPEGImages ------***********.jpg ------***********.jpg CO…

【Spring】SpringBoot参数验证10个技巧

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 1.使用验证注解 2 使用自定义验证注解 3 在服务器端验证 4 提供有意义的错误信息 5 将 i18n 用于错误消息 6 使用分组验证 7 对复杂逻辑使用跨域验证 8 对验证错误使…

通过smtp发送邮件及执行异常解决

在日常中遇到了需要实现一个发送邮件的需求&#xff0c;完成之后记录下实现方法及自己遇到的一些问题及解决办法。 常用SMTP服务相关地址及端口 一、通过javax.mail实现发送邮件 1.引入相关坐标 <!-- 发送邮件--><dependency><groupId>org.projec…

矩阵系统源码智能回复私信场景开发

抖音矩阵系统源码智能回复私信场景开发 一、要想开发私信功能开发者需要准备的工作 开发者需要先对接官方api接口以及去申请api提交审核&#xff0c;目前需要了解官方对开发者对该能力开发权限的功能符合开发需求&#xff0c;其次需要了解官方私信触达的规则 1.申请流程&…

基于GPT构建单细胞多组学基础模型

生成式预训练模型在自然语言处理和计算机视觉等各个领域取得了显著的成功。特别是将大规模多样化的数据集与预训练的Transformer相结合&#xff0c;已经成为开发基础模型的一种有前途的方法。文本由单词组成&#xff0c;细胞可以通过基因进行表征。这种类比启发作者探索细胞和基…

Lingo优化软件初步

一、Lingo软件介绍 1、lingo软件的简单介绍 美国芝加哥大学的Linus Schrage教授于1980年左右开发的专门用于求解最优化问题的软件包&#xff0c;后经多年完善与扩充&#xff0c;并成立了LINDO系统公司进行商业运作取得巨大成功。根据 LINDO公司主页&#xff08;http://www.li…

分布式监控系统之zabbix6.0二

分布式监控系统之zabbix6.0二 一、部署 zabbix 代理服务器二、部署 Zabbix 高可用集群三、Zabbix 监控 Windows 系统四、Zabbix 监控 java 应用五、Zabbix 监控 SNMP 一、部署 zabbix 代理服务器 分布式监控的作用&#xff1a; 分担 server 的集中式压力解决多机房之间的网络…

暑假第4天打卡

Java: &#xff08;1&#xff09;标识符命名规范&#xff1a; > 包名&#xff1a;多单词组成时所有字母都小写&#xff1a;xxxyyyzzz。 例如&#xff1a;java.lang、com.atguigu.bean > 类名、接口名&#xff1a;多单词组成时&#xff0c;所有单词的首字母大写&#xf…

【一步到位】Jenkins的安装、部署、启动(完整教程)

一、测试环境 Linux系统 Centos 7 二、安装步骤&#xff1a; 1、安装jdk 我安装的是jdk8&#xff0c;此处就不多说了&#xff0c;自己百度哈&#xff0c;很简单 2、安装jenkins 首先依次执行如下三个命令&#xff1a; 2.1、导入镜像&#xff1a; [rootcentos7 ~]# sudo …

阿里P6跟P7有什么区别?

在互联网领域&#xff0c;阿里的职级和腾讯的职级体系相当于行业标准了&#xff0c;所以技术人还是需要学习一下/对标一下&#xff0c;从而知道自己目前在哪里&#xff0c;努力的方向是哪里&#xff1f;那么&#xff0c;阿里 P7 级别到底需要哪些能力呢&#xff1f;如下图思维导…

指针和数组笔试题解析

目录 数组笔试题 一维数组 字符数组 题 一 题 二 题 三 题 四 题 五 题 六 二维数组 指针笔试题 笔试题一 笔试题二 笔试题三 笔试题四 笔试题五 笔试题六 笔试题七 本篇博文&#xff0c;将从指针和数组来为大家分析一些笔试题&#xff0c;设计内…