离散傅里叶变换(DFT)和快速傅里叶变换(FFT)

news/2024/11/18 5:33:05/文章来源:https://www.cnblogs.com/mxh010211/p/18293116

离散傅里叶变换(DFT)和快速傅里叶变换(FFT)是信号处理和数字信号处理中的基本工具。它们用于将时间域的信号转换为频率域的表示,帮助分析信号的频谱成分。

1. 离散傅里叶变换(DFT)

1.1 DFT的基本概念
DFT是将离散时间信号转换为频域表示的工具。对于长度为 N 的离散信号 x[n],其DFT定义为:

其中:
X[k] 是频域信号的第
𝑘k 个频率分量
x[n] 是时间域信号的第
n 个样本
N 是信号的总样本数
j 是虚数单位
1.2 逆DFT(IDFT)
逆DFT用于将频域信号转换回时间域信号:

1.3 DFT的性质

2. 快速傅里叶变换(FFT)

2.1 FFT的基本概念

2.2 Cooley-Tukey算法

通过递归地应用这种分解,可以大幅减少计算量。
2.3 FFT的实现
以下是Python中使用NumPy库实现DFT和FFT的示例代码:

import numpy as np
import matplotlib.pyplot as plt# 生成一个示例信号
N = 1024
t = np.linspace(0, 1, N)
f1, f2 = 50, 120
x = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)# DFT的实现
def dft(x):N = len(x)X = np.zeros(N, dtype=complex)for k in range(N):for n in range(N):X[k] += x[n] * np.exp(-2j * np.pi * k * n / N)return X# 计算DFT
X_dft = dft(x)# 使用NumPy的FFT计算
X_fft = np.fft.fft(x)# 绘制结果
frequencies = np.fft.fftfreq(N)plt.figure(figsize=(12, 6))# DFT
plt.subplot(2, 1, 1)
plt.plot(frequencies[:N//2], np.abs(X_dft)[:N//2])
plt.title('DFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')# FFT
plt.subplot(2, 1, 2)
plt.plot(frequencies[:N//2], np.abs(X_fft)[:N//2])
plt.title('FFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')plt.tight_layout()
plt.show()

2.4 FFT的应用
频谱分析: 用于分析信号的频率成分。
滤波器设计: 快速设计和实现数字滤波器。
卷积计算: 利用FFT快速计算大规模卷积。
音频处理: 如音频压缩、增强和特效。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Simple WPF: WPF实现一个MINIO等S3兼容对象存储上传文件的小工具

之前在阿里云ECS 99元/年的活动实例上搭建了一个测试用的MINIO服务,以前都是直接当基础设施来使用的,这次准备自己学一下S3兼容API相关的对象存储开发,因此有了这个小工具。目前仅包含上传功能,后续计划开发一个类似图床的对象存储应用。最新内容优先发布于个人博客:小虎技…

前缀和简析

前缀和 前置知识:$\sum_{i = 1}^{r}{a_i} = a_l + a_{l + 1} + \dots + a_{r - 1} + a_r$ 考虑以下数组:$i$ $1$ $2$ $3$$a_I$ $3$ $5$ $7$如果我们要查询 $\sum_{i = 1}^{2}{a_i}$,很显然可以得到 $\sum_{i = 1}^{2}{a_i} = 3 + 5 = 8$。如果我们要查询 $\sum_{i = l}^{r}{…

推挽输出和开漏输出

一、推挽输出 1.1推挽输出的概念 推挽(push-pull)输出是由两个MOS或者三极管组成,两个管子始终保持一个导通,另一个截止的状态。当输入高电平时,叫做推;上管Q1导通,下管Q2关闭;电流走向VCC→Q1→Vout。当输入低电平时,叫做挽;上管Q1关闭,下管Q2导通;电流走向Vout→…

数据血缘系列(3)—— 数据血缘可视化之美

大家好,我是独孤风。在当今数据驱动的商业环境中,数据治理成为企业成功的关键因素之一,而数据血缘正是数据治理成功的一个关键。 本文我们详细探讨下数据血缘可视化是什么,该如何实现。并顺便对比一下Apache Atlas 、Datahub、Openmetadata、Marquez、SQLLineage、Amundsen…

进度报告3

(1)1.学习Scanner来用键盘输入数据并写出实例代码并运行成功2.分支与循环结构,与c语言差不多3.Random来生成随机数用Random的案例:猜数字游戏4.数组(2)继续往后学习

防火防盗防CDN流量盗刷

没想到自己的小破站也逃不掉被攻击的命,分分钟就给我刷欠费了。本来不想写这篇文章的,但看到好多大佬(小林coding、 JavaGuide)近期cdn都被盗刷了。 还是来提醒下大家,防火防盗防cdn流量盗刷 事故时间:2024年7月5日晚8点左右 事故现场:好不容易到了周五,想着第二天就周…

记内存条硬件损坏蓝屏的 dump 文件分析

本文记录我的电脑的内存条的硬件损坏了,导致用着用着就蓝屏,我通过启动和故障恢复配置自动蓝屏打 dump 的功能,在蓝屏时创建了 dump 文件。通过分析 dump 文件大概猜测是内存的问题以下是我用 windbg 分析的两次蓝屏 第一次是用着 VS 的过程蓝屏了,我发现好多次都是使用 VS…

.NET 9 预览版 5 发布

微软在6月发布了.NET 9预览版的第五个版本。这个新版本的框架预计将在今年晚些时候正式发布,它是一个标准支持(STS)版本,将在2024年11月12日至2026年5月12日期间在多个操作系统上获得18个月的支持。这个预览版带来了性能改进和一些新特性,例如增强的AI能力、优先级无界通道…

EasyExcel当导出的文件内容为空时,报错excel无法打开xxxx,因为文件格式或扩展名无效,请确定文件未损坏

问题 EasyExcel 导出打开提示"Excel 无法打开文件 xxxxx.xlsx ,因为文件格式或文件扩展名无效 请确定文件未损坏,并且文件扩展名与文件的格式匹 排查 发现是在mysql查询完要导出的数据后,判断查询内容是否有值,如果有的话才进行excelWriter.write(dataList, writeSheet)…

读人工智能全传08人工智能的今天

读人工智能全传08人工智能的今天1. 人工智能的今天 1.1. 未来,或许有些领域会有非常明显的人工智能痕迹,有些领域则不会 1.2. 2018年,来自计算机视觉处理器公司英伟达的研究人员证明了人工智能软件能够创造出虚假的人物照片,并且能够完全令人相信它是…

Java CompletableFuture因在上下文中使用共享变量,导致线程安全问题

背景 在使用CompletableFuture.supplyAsync()时,多个异步中,同时共用的一个查询对象参数,而且在这多个任务中间会穿插地对这个对象进行更改,出现的现象就是可能会导致最终get()结果不符合我们的预期。最终调整方案就是在每个任务supplyAsync()之前单独赋予一个新的final对象…

MySQL中修改一个数据库下包含有某个相同字段的所有表的字段长度

背景 由于业务场景导致某个字段如phone_name涉及到表比较多,目前很多表都有冗余这个字段,但是前期给的字段长度只有varchar(100),不满足目前的需要了,需要把所有的表的字段长度都增大到varchar(255),如果手动一个个修改的话,那么有几百张表,很花时间,所有想到如下办法,…