【数学】什么是傅里叶级数与傅里叶变换?

傅里叶级数与傅里叶变换

背景

傅里叶级数和傅里叶变换是数学和工程领域中的重要工具,特别是在信号处理、图像处理和物理学中。傅里叶级数用于将周期函数表示为正弦和余弦函数的和,而傅里叶变换用于将任意函数表示为频率的函数。

公式

  • 傅里叶级数:给定周期函数 f ( t ) f(t) f(t),其傅里叶级数表示为:
    f ( t ) = a 0 + ∑ n = 1 ∞ ( a n cos ⁡ ( 2 π n t T ) + b n sin ⁡ ( 2 π n t T ) ) f(t) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos \left( \frac{2\pi n t}{T} \right) + b_n \sin \left( \frac{2\pi n t}{T} \right) \right) f(t)=a0+n=1(ancos(T2πnt)+bnsin(T2πnt))
    其中:
    a 0 = 1 T ∫ 0 T f ( t )   d t a_0 = \frac{1}{T} \int_{0}^{T} f(t) \, dt a0=T10Tf(t)dt
    a n = 2 T ∫ 0 T f ( t ) cos ⁡ ( 2 π n t T )   d t a_n = \frac{2}{T} \int_{0}^{T} f(t) \cos \left( \frac{2\pi n t}{T} \right) \, dt an=T20Tf(t)cos(T2πnt)dt
    b n = 2 T ∫ 0 T f ( t ) sin ⁡ ( 2 π n t T )   d t b_n = \frac{2}{T} \int_{0}^{T} f(t) \sin \left( \frac{2\pi n t}{T} \right) \, dt bn=T20Tf(t)sin(T2πnt)dt

  • 傅里叶变换:给定函数 f ( t ) f(t) f(t),其傅里叶变换表示为:
    F ( f ) ( ω ) = F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω t   d t \mathcal{F}(f)(\omega) = F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i\omega t} \, dt F(f)(ω)=F(ω)=f(t)etdt
    其逆变换为:
    f ( t ) = 1 2 π ∫ − ∞ ∞ F ( ω ) e i ω t   d ω f(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{i\omega t} \, d\omega f(t)=2π1F(ω)etdω

示例题目

题目:求周期函数 f ( t ) = t f(t) = t f(t)=t 在区间 [ − π , π ] [-\pi, \pi] [π,π] 上的傅里叶级数表示。

详细讲解

  1. 计算 a 0 a_0 a0
    a 0 = 1 2 π ∫ − π π t   d t = 0 a_0 = \frac{1}{2\pi} \int_{-\pi}^{\pi} t \, dt = 0 a0=2π1ππtdt=0
  2. 计算 a n a_n an
    a n = 1 π ∫ − π π t cos ⁡ ( n t )   d t = 0 a_n = \frac{1}{\pi} \int_{-{\pi}}^{\pi} t \cos(nt) \, dt = 0 an=π1ππtcos(nt)dt=0
  3. 计算 b n b_n bn
    b n = 1 π ∫ − π π t sin ⁡ ( n t )   d t = 2 ( − 1 ) n + 1 n b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} t \sin(nt) \, dt = \frac{2(-1)^{n+1}}{n} bn=π1ππtsin(nt)dt=n2(1)n+1

因此,傅里叶级数为:
f ( t ) = ∑ n = 1 ∞ 2 ( − 1 ) n + 1 n sin ⁡ ( n t ) f(t) = \sum_{n=1}^{\infty} \frac{2(-1)^{n+1}}{n} \sin(nt) f(t)=n=1n2(1)n+1sin(nt)

Python代码求解

import numpy as np
import matplotlib.pyplot as plt

# 定义周期函数
def f(t):
    return t

# 定义傅里叶级数展开的项数
N = 10

# 定义傅里叶级数
def fourier_series(t, N):
    result = np.zeros_like(t)
    for n in range(1, N + 1):
        result += (2 * (-1)**(n + 1) / n) * np.sin(n * t)
    return result

# 生成时间点
t = np.linspace(-np.pi, np.pi, 1000)

# 计算傅里叶级数近似
f_approx = fourier_series(t, N)

# 绘图
plt.plot(t, f(t), label='Original function')
plt.plot(t, f_approx, label='Fourier series approximation')
plt.legend()
plt.xlabel('t')
plt.ylabel('f(t)')
plt.title('Fourier Series Approximation')
plt.grid(True)
plt.show()

实际生活中的例子

在实际生活中,傅里叶变换用于信号处理,例如将音频信号转换为频谱,以分析不同频率的声音成分。傅里叶级数则在分析周期信号(如振动和电波)时非常有用。通过将复杂的周期信号分解为简单的正弦和余弦分量,可以更容易地理解和处理这些信号。

一个python例子

import numpy as np
import matplotlib.pyplot as plt

# 定义周期函数的频率和系数
T = 2 * np.pi  # 周期
N = 5  # 傅里叶级数的项数

# 定义时间范围
t = np.linspace(-np.pi, np.pi, 1000)

# 定义傅里叶级数的各项
def fourier_series_terms(t, N):
    terms = []
    for n in range(1, N + 1):
        term = (2 * (-1)**(n + 1) / n) * np.sin(n * t)
        terms.append(term)
    return terms

# 计算傅里叶级数的各项
terms = fourier_series_terms(t, N)

# 绘图
plt.figure(figsize=(12, 8))

# 原始函数
plt.subplot(2, 1, 1)
plt.plot(t, t, label='Original function')
plt.title('Original Function')
plt.xlabel('t')
plt.ylabel('f(t)')
plt.legend()
plt.grid(True)

# 各项的和
plt.subplot(2, 1, 2)
sum_terms = np.zeros_like(t)
for i, term in enumerate(terms):
    sum_terms += term
    plt.plot(t, sum_terms, label=f'Term {i+1}')
plt.title('Sum of Fourier Series Terms')
plt.xlabel('t')
plt.ylabel('Sum of terms')
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java程序什么时候需要在运行的时候动态修改字节码对象

一、java程序什么时候需要在运行的时候动态修改字节码对象 我认为有两种场景,一种是无法修改源代码的时候;另外一种是功能增强的时候。 1、无法修改源代码 举个例子,java程序依赖的第三方的jar包中发现了bug,但是官方还没有修复…

0-1 构建用户画像数仓

目录 前言 一、用户画像概述 1.1 用户画像 1.2 用户标签 1.3 用户群组 二、建设标签和标签体系 2.1 标签体系 2.1.1 统计类标签 2.1.2 规则类标签 2.1.3 机器学习挖掘类标签 2.2 标签建设流程 2.2.1 需求收集与分析 2.2.2 产出标签需求文档 2.2.3 标签的开发 H…

【Java】已解决:Java.lang.OutOfMemoryError: GC overhead limit exceeded

文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 问题背景 java.lang.OutOfMemoryError: GC overhead limit exceeded 是Java虚拟机(JVM)在运行时遇到的一种内存溢出错误。这种错误通常发生在应用程序的堆内存(Heap Memor…

JavaFX 图像视图

JavaFX ImageView 控件可以在 JavaFX GUI 中显示图像。ImageView 控件必须添加到场景图中才能可见。JavaFX ImageView 控件由类表示 javafx.scene.image.ImageView。 创建一个 ImageView 通过创建类的实例来创建 ImageView 控件实例ImageView。类的构造函数ImageView需要一个…

数据结构错题答案汇总

王道学习 第一章 绪论 1.1 3.A 数据的逻辑结构是从面向实际问题的角度出发的,只采用抽象表达方式,独立于存储结构,数据的存储方式有多种不同的选择;而数据的存储结构是逻辑结构在计算机上的映射,它不能独立于逻辑结构而存在。数…

「51媒体」媒体邀约如何高效沟通?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业在做活动会议时,往往希望对活动信息或者公司品牌进行一个报道和曝光,那么如何有效且高效的完成与媒体的沟通呢?今天胡老师就来分享下这方面的一些…

五、在Qt下加载QVTKWidget控件,生成Visual Studio项目,显示点云(C++)

前言:因为项目需要通过Qt进行显示点云,参考了很多博文,但是并没有全部正确的,东拼西凑算是实现了,花费了两天时间,时间有点久,能力还有有待提升~~ 为此写篇博文记录一下。感谢各位大佬&#xff…

QT基础 - 常用按钮控件和快捷键

目录 一. QtCreator常用快捷键 二. QWidget 三. QPushButton 四. QRadioButton 五. QCheckBox 六. QToolButton 七. 总结 一. QtCreator常用快捷键 说明快捷键运行ctrl R编译ctrl B帮助文档F1 ,点击F1两次跳到帮助界面跳到符号定义F2 或者ctrl 鼠标点击注释…

youlai-boot项目的学习—本地数据库安装与配置

数据库脚本 在项目代码的路径下,有两个版本的mysql数据库脚本,使用对应的脚本就安装对应的数据库版本,本文件选择了5 数据库安装 这里在iterm2下使用homebrew安装mysql5 brew install mysql5.7注:记得配置端终下的科学上网&a…

Mysql学习笔记-进阶篇

一、存储引擎 1、MYSQL体系结构 连接层、服务层、引擎层、存储层; 2、存储引擎简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是库的,所以存储引擎也可被称为表类型。 1)在创…

智能网络组网天联是什么?

智能网络组网是指利用智能技术实现网络设备之间的连接和数据交流。随着科技的不断发展,智能网络组网在现代社会中发挥着越来越重要的作用。其中,天联是一种智能网络组网技术,具有许多优势。 天联组网的优势 天联组网技术拥有以下优势&#…

2024数据库期末综合解析(部分题)

目录 第4关:数据记录修改 任务描述 补充 答案: 第6关:数据查询二 任务描述 补充 答案: 第4关:数据记录修改 任务描述 湖南人口hnpeople数据表如下所示 各字段含义如下 cs(城市)、qx(区县)、rk(人口)、man(男…

2024 年最新 windows 操作系统部署安装 redis 数据库详细教程(更新中)

Redis 数据库概述 Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中介。Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基…

JS 实现Date日期格式的本地化

为了更好的更新多语言日期的显示,所以希望实现日期的本地化格式显示要求,常规的特殊字符型格式化无法满足显示要求,这里整理了几种我思考实现的本地化实现功能。 通过多方查找,总结了实现的思路主要有如下三个方向: 官…

基于Django + Web + MySQL的智慧校园系统

基于Django Web MySQL的智慧校园系统 由于时间紧迫,好多功能没实现,只是个半吊子的后台管理系统,亮点是项目安全性还算完整,权限保护加密功能检索功能有实现,可参考修改 功能如下(服务为超链接&#xff0…

SSM整合使用

文章目录 1. 项目创建2. spring(1) 导包(2) 配置类 3. mybatis(1) maven导包(2) mybatis配置文件(3) 连接配置文件(4) mapper映射文件(5) 在spring配置类中注册sqlsession的bean springMVC(1) maven导包(2) springMVC配置类(3) 初始化类 5. 测试(1) 创建3层架构(2) 编写Control…

C语言标准库

目录 引言 一、C标准库概述 常用标准库函数 字符串处理 数学运算 动态内存分配 标准库的扩展与限制 扩展功能 使用限制 使用自定义库与第三方库 创建自定义库 使用第三方库 表格总结 标准库头文件及功能 常用标准库函数 总结 引言 C标准库是C编程语言的重要组成…

dp练习题

先来一个简单dp练习 class Solution { public:int rob(vector<int>& nums) {int n nums.size();vector<int> a(n 1);int ans nums[0]; a[0] nums[0];if (n 1) return ans;a[1] max(nums[0], nums[1]);ans max(ans, a[1]);if (n 2) return ans;for (i…

机器学习中的监督学习介绍

In this post well go into the concept of supervised learning, the requirements for machines to learn, and the process of learning and enhancing prediction accuracy. 在这篇文章中&#xff0c;我们将深入探讨监督学习的概念、机器学习的要求以及学习和提高预测准确…

汽车数据应用构想(四)

车只要在路上跑&#xff0c;就可以感知到道路上的各种情况对于车辆的影响。这些数据都具有一定的特征&#xff0c;通过对数据特征的分析&#xff0c;并结合位置信息&#xff0c;即可得到有价值的POI信源。 近几年的新车&#xff0c;基本上都有智能网联功能&#xff0c;也就是说…