DFT(离散傅里叶变换)的通俗理解

news2024/11/27 18:29:13

本文包含了博主对离散傅里叶变换,负频率,实信号与复信号频谱的理解,如有不妥,欢迎各位批评指正与讨论。

文章目录

  • DFT的理解
  • 信号的频谱
    • 实信号的频谱
    • 复信号的频谱


DFT的理解

傅里叶变换是一种将信号从时域转换到频域的数学工具。它可以将一个号分解成不同频率的正弦和余弦波的叠加,从而更好地理解信号
的特性。

傅里叶变换公式:
在这里插入图片描述
DFT计算公式:
在这里插入图片描述
DFT的计算的理解:
离散傅里叶变换DFT的可视化讲解

DFT求出来的实部,虚部如何理解啦?

先说结论,实部代表cos序列的幅度,虚部代表sin序列的幅度。一个信号,按照傅里叶的说法,可以拆解成很多正弦波,或者说是由很多正弦波叠加到一起的。这些正弦波的幅度和频率之间的对应关系,就是信号的频域。

但是这里有个相位的问题,某个频率下有信号幅度,但是相位有可能是任意值,不同相位正弦波序列拼成的信号,完全不一样。

那样还需要一个相位和频率的关系图,不太好表示,如果这个频率没有信号,他的频率多少,没法弄。

后来想了个办法,我不去表示这个信号的相位了,我把这个信号在这个频率下的有相位的正弦信号拆解成两个正交的信号,不论信号是什么相位,都认为是一个零相位正弦信号和一个零相位余弦信号的叠加,我获得这个信号的正弦分量和余弦分量的幅度,就能反应这个信号。

这样就需要两个序列,一个正弦序列,一个余弦序列,他们两个正交,我们发现复数符合这个特点,正交,另外有那个宇宙最美公式欧拉公式加成,复数可以用指数表示,这个在数学上就变得很美很简单了,于是虚数就出现了,他表现的是信号的正弦分量。

参看:信号中的虚部的物理意义是什么?

可以理解为:傅里叶变换将信号在不同频率下进行cos和sin两个正交方向上的映射,得到两个分量,此两个分量的模构成了幅值,分量的角度构成了相位,由此包含了连续的不同频率成分下的幅值和相位信息,而DFT则是频率离散的看不同频率下的信息。得到的不同频率的实部虚部,可表示为信号是以该初始相位(以余弦为基准)开始的,该频率下以该幅值的圆进行旋转的信号的叠加。

信号的频谱

由傅里叶变换知道:实信号(实数信号,没有虚部)x(t)的傅里叶变换X(w)同时存在正负频率分量,且互为共轭;而复信号则只有单边频率分量。常用函数的傅里叶变换及其频谱。所以我们在MATLAB中使用fft函数进行傅里叶变换求得的频谱取模之后是具有对称性的。在进行fft求出的频谱后可以看的频谱从0-fs,可能会认为:根据Nyquist–Shannon(奈奎斯特-香农)采样定理,只能采集到fs/2的频率分量,所以高于fs/2的分量是没有意义的。实质上高于fs/2的频率分量是-fs/2到0的部分,这也是为什么我们一般会使用fftshift函数对求得的频谱做一个转换的原因MATLAB中fft与fftshift的区别。如前所述实信号的频率是共轭的,所以双边谱的幅值在非0处是单边谱的一半。这使得我们在查看信号的频谱时一般只关心正频率的部分,将双边谱的幅值大体乘2即转换为单边谱(注意我说的大体哦,做DFT的点数不同转换时有一点区别MATLAB中FFT频谱分析使用详解)。那是不是意味着频谱的负频率部分没有意义啦,又该如何理解负频率啦,接下来我们将在实信号和复信号的频谱小节中体现。

img

实信号的频谱

试想一下,信号的在圆上以相同的频率逆时针或顺时针旋转,得到的均为该频率分量的信号,在频谱上均需要表现出来。

逆时针旋转时:

在这里插入图片描述

顺时针旋转时:
在这里插入图片描述

比较逆时针和顺时针,可以看到对余弦函数形态没有影响,因为余弦负角度等于它自身,正弦波形反相。

此时便出现了正频率和负频率的思想:逆时针旋转为正,顺时针旋转为负。

我们用数学公式来理解频谱:
在这里插入图片描述

对于余弦 c o s ( w t ) = 0.5 ∗ c o s ( w t ) + 0.5 ∗ c o s ( ( − w ) ∗ t ) cos(wt)=0.5*cos(wt)+0.5*cos((-w)*t) cos(wt)=0.5cos(wt)+0.5cos((w)t)

对于正弦 s i n ( w t ) = 0.5 ∗ c o s ( w t − π / 2 ) + 0.5 ∗ c o s ( ( − w ) ∗ t + π / 2 ) sin(wt)=0.5*cos(wt-\pi/2)+0.5*cos((-w)*t+\pi/2) sin(wt)=0.5cos(wtπ/2)+0.5cos((w)t+π/2)
华中科大数字信号处理课程


接下来对实信号频谱分析进行举例说明:

因为FFT/DFT是用余弦定义实部,正弦定义虚部。因此,FFT的0度,用作余弦波在正峰开始时的参考。

创建一个由频率为 15 Hz 和 40 Hz 的两个正弦波组成的信号。第一个波是相位为 −π/4 的正弦波,第二个波是相位为 π/2 的余弦波。以 100 Hz 的频率对信号进行 1 秒钟的采样。

标黄处说了,FFT/DFT以余弦为参考,则
s i n ( 2 ∗ π ∗ 15 ∗ t − π / 4 ) = s i n ( 2 ∗ π ∗ 15 ∗ t − π / 4 − π / 2 + π / 2 ) = c o s ( 2 ∗ π ∗ 15 ∗ t − π / 4 − π / 2 ) = c o s ( 2 ∗ π ∗ 15 ∗ t − 3 ∗ π / 4 ) sin(2*\pi*15*t-\pi/4)=sin(2*\pi*15*t-\pi/4-\pi/2+\pi/2)=cos(2*\pi*15*t-\pi/4-\pi/2)=cos(2*\pi*15*t-3*\pi/4) sin(2π15tπ/4)=sin(2π15tπ/4π/2+π/2)=cos(2π15tπ/4π/2)=cos(2π15t3π/4)
即第一个波是相位为 −3π/4 的余弦波,第二个波是相位为 π/2 的余弦波。

clear all;close all;clc; %清理工作区,关闭所有窗口,清空文本
Fs = 100;
t = 0:1/Fs:1-1/Fs;
x = sin(2*pi*15*t - pi/4) + cos(2*pi*40*t + pi/2);
N = 100;
%计算信号的傅里叶变换。将变换幅值绘制为频率函数。
y = fft(x,N);
z = fftshift(y)/N;
figure(1);
ly = length(y);
f = (-ly/2:ly/2-1)*Fs/ly;
stem(f,abs(z))
title("Double-Sided Amplitude Spectrum of x(t)")
xlabel("Frequency (Hz)")
ylabel("|y|")
grid
%计算变换的相位,删除小幅值变换值。将相位绘制为频率函数。
tol = 1e-6;
z(abs(z) < tol) = 0;%删除小幅值变换值
theta = angle(z);
figure(2);
stem(f,theta/pi)
title("Phase Spectrum of x(t)")
xlabel("Frequency (Hz)")
ylabel("Phase/\pi")
grid

得到幅频和相频:
在这里插入图片描述

我们在工作区中查看经过fftshift并删除了小幅值的z的值,可以看到11、36、66和91位中有值。对应的是信号频率为-40Hz、-15Hz、15Hz和40Hz处的复数值。
在这里插入图片描述
对应欧拉公式的几何意义:
在这里插入图片描述

即(-0.3536,0.3536)即表示幅值为0.5,相位为 −3π/4的信号,依次类推。

我们用幅值和相位合成对于频率的信号:
15Hz:
0.5 ∗ c o s ( 2 ∗ p i ∗ 15 ∗ t − 3 ∗ π / 4 ) + 0.5 c o s ∗ ( 2 ∗ π ∗ ( − 15 ) ∗ t + 3 ∗ π / 4 ) = c o s ( 2 ∗ π ∗ 15 ∗ t − 3 ∗ π / 4 ) 0.5*cos(2*pi*15*t-3*\pi/4)+0.5cos*(2*\pi*(-15)*t+3*\pi/4)=cos(2*\pi*15*t-3*\pi/4) 0.5cos(2pi15t3π/4)+0.5cos(2π(15)t+3π/4)=cos(2π15t3π/4)

40Hz:
0.5 ∗ c o s ( 2 ∗ p i ∗ 40 ∗ t + π / 2 ) + 0.5 ∗ c o s ( 2 ∗ p i ∗ ( − 40 ) ∗ t − π / 2 ) = c o s ( 2 ∗ π ∗ 40 ∗ t + π / 2 ) 0.5*cos(2*pi*40*t+\pi/2)+0.5*cos(2*pi*(-40)*t-\pi/2)=cos(2*\pi*40*t + \pi/2) 0.5cos(2pi40t+π/2)+0.5cos(2pi(40)tπ/2)=cos(2π40t+π/2)

由此得到信号1是一个幅值为1,相位为 − 3 π / 4 -3\pi/4 3π/4的信号;信号2是一个幅值为1,相位为 π / 2 \pi/2 π/2的信号。


参考:

FFT分析的负频率是什么?

如何正确理解信号处理中的负频率

一文读懂“为什么FFT有负频率”

复信号的频谱

而复信号则只有单边频率分量。

举例:频率为128或-128,相位为 π / 4 \pi/4 π/4的复数信号频谱

clear all;close all;clc; %清理工作区,关闭所有窗口,清空文本
N=1024;
fs=1024;                    %采样间隔为1/1000
t=(0:1023)/fs;              %时间轴,注意要从0开始;若从1开始会以第一个点开始的位置计算,即pi/4+f0/fs*1*2pi=pi/2
f0=128;                     %复数频率
y=exp(i*(2*pi*f0*t+pi/4));   
f_shift = (-N/2:N/2-1)*fs/N;
fft_y=fft(y,N)/N;             %FFT
fft_shift = fftshift(fft_y);
plot(f_shift,abs(fft_shift));
title("复数信号频谱");
xlabel('f');
ylabel('y');
grid on;

频谱图:
在这里插入图片描述

将f改为-128时频谱:
在这里插入图片描述
可以看出,当频率为正时,得到的频谱出现在正频率处;当频率为负时,得到的频谱出现在负频率处,且幅值为原信号的幅值。

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

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

相关文章

使用消息队列遇到的问题—kafka

目录 1 分区2 消费者3 Kafka 如何保证消息的消费顺序&#xff1f;3.1 方案一3.2 方案二 在项目中使用kafka作为消息队列&#xff0c;核心工作是创建生产者—包装数据&#xff1b;创建消费者----包装数据。 欠缺一些思考&#xff0c;特此梳理项目中使用kafka遇到的一些问题和解决…

探索Selenium的规避检测策略

Selenium之规避检测 背景 ​ 目前很多大网站有对selenium采取了监测机制。在正常情况下我们用浏览器访问相关网站的window.navigator.webdriver的值为 undefined或者为false。而使用selenium访问则该值为true。我们如何伪装&#xff0c;防止被检测出来呢&#xff1f; ​ 这是…

【Maven】依赖管理

1. 依赖管理 1.1 依赖配置 依赖&#xff1a;指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。 依赖引入步骤&#xff1a;在pom.xml中编写标签&#xff0c;在标签中使用引入坐标&#xff0c;定义坐标的 groupId、artifactId、version&#xff0c;最后点击刷新&…

FluxMQ—2.0.8版本更新内容

FluxMQ—2.0.8版本更新内容 前言 FLuxMQ是一款基于java开发&#xff0c;支持无限设备连接的云原生分布式物联网接入平台。FluxMQ基于Netty开发&#xff0c;底层采用Reactor3反应堆模型&#xff0c;具备低延迟&#xff0c;高吞吐量&#xff0c;千万、亿级别设备连接&#xff1…

WIN10下解决HIVE 初始化MYSQL表报错:Unknown version specified for initialization

今天本地WINDOWS装HIVE&#xff0c;走到最后一步初始化数据库死活不通过&#xff1a; D:\hive\hive-rel-release-3.1.3\bin\ext>hive --service schematool -dbType mysql -initSchema --verbose SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bind…

基于JSDoc实现TypeScript类型安全的实践报告

在FEDay 2023中我讲了《从JS到TS无缝迁移的实践报告》【视频在这里在这里】&#xff0c;是将一个传统的JS项目&#xff08;mochajs/mocha&#xff09;迁移到TypeScript环境的全程。其中提到了一件事情&#xff0c;就是“可以通过JSDoc/TSDoc来生成.d.ts”&#xff0c;从而实现T…

【C语言:自定义类型(结构体、位段、共用体、枚举)】

文章目录 1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问 2.结构体对齐2.1如何对齐2.2为什么存在内存对齐&#xff1f; 3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项 4.联合体4…

全国规模最大!玻色量子加入算力并网行动!

8月19日&#xff0c;在2023中国算力大会主论坛上&#xff0c;中国移动携手多个超算中心、智算中心&#xff0c;以及云服务商&#xff0c;共同发起全国规模最大的“百川”算力并网行动&#xff0c;打造算力类型最全、规模最大、覆盖最广的“百川”算力并网平台&#xff0c;加快推…

提高Idea编码速度和插件自用推荐

非常推荐 Easy Javadoc 一款注释生成器&#xff0c;很好使~免费&#xff0c;配合使用腾讯、百度之类的翻译免费额度完全够用了&#xff0c;印象中是50万字符每月。下图是使用快捷键生成的注释&#xff08;我采用鼠标侧面按键&#xff0c;随手一按很方便&#xff09; Chinese …

HTTP会话技术---Cookie、Session和Token介绍及它们在JavaWeb中的使用

当涉及到Web应用程序的身份验证和状态管理时&#xff0c;我们通常会使用到Cookie、Session和Token这些会话技术。下面是对它们的介绍&#xff0c;并在JavaWeb中的示例 Cookie&#xff08;HTTP Cookie&#xff09; Cookie是一种存储在用户浏览器中的小型文本文件&#xff0c;由…

360公司-2019校招笔试-Windows开发工程师客观题合集解析

360公司-2019校招笔试-Windows开发工程师客观题合集 API无法实现进程间数据的相互传递是PostMessage2.以下代码执行后,it的数据为(异常) std::list<int> temp; std::list<int>::iterator it = temp.begin(); it = --it; 3.API在失败时的返回值跟其他不一样是 …

OSPF浅析

一、预习&#xff1a; 1、优点&#xff1a; 是一种典型的链路状态路由协议&#xff0c;协议号89&#xff0c;把大型网络分隔为多个较小、可管理的单元&#xff1a;Area a.减少LSA泛洪范围&#xff0c;有效地把拓朴变化 控制在区域内&#xff0c;达到网络优化的目的…

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音&#xff0c;和其他 Studio One 中新的去实体插件一样高效且直观易用&#xff0c;使用“收听”按钮查找有问题的频率&#xff0c;然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…

消费数据可视化大屏,助力金融机构智慧运维

在今天的数字化时代&#xff0c;消费数据的可视化已经成为了一种重要的趋势。通过将消费数据以图表、图像等形式展现出来&#xff0c;可以帮助我们更直观地了解消费者的行为和趋势。同时&#xff0c;这也为企业提供了更多的分析和决策依据。无论是针对市场营销策略的制定&#…

如何搭建eureka-server

在Spring Cloud项目的pom文件中添加eureka-server的starter依赖坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义

一、背景 学控制、数学、自动化专业的学生在阅读论文时&#xff0c;经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词&#xff0c;对于初学者可能不太清楚他们之间的区别&#xff0c;因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…

Footprint Analytics x Future3 万字研报:AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(上)

GPT的横空出世将全球的目光吸引至大语言模型&#xff0c;各行各业都尝试着利用这个“黑科技”提高工作效率&#xff0c;加速行业发展。Future3 Campus携手Footprint Analytics共同深入研究AI与Web3结合的无限可能&#xff0c;联合发布了《AI与Web3数据行业融合现状、竞争格局与…

数电笔记之寄存器

数电 1 数字电路基础 1.2 二进制数据表达 1.2.1 二进制简介 1.2.2 用二进制表达文字 常用的中文字符集&#xff1a;GBK&#xff0c;UTF8 1.2.3 用二进制表达图片 图片像素化&#xff0c;像素数字化 1.2.4 用二进制表达声音 1.2.5 用二进制表达视频 1.3 数字电路 1.3…

tmux简单使用

它允许你在一个终端窗口中创建多个终端会话&#xff0c;并在它们之间进行切换。以下是tmux的一些主要用途和功能&#xff1a; 多窗口&#xff1a; Tmux允许你在一个终端中创建多个窗口。每个窗口可以包含一个或多个终端会话&#xff0c;你可以轻松地在这些窗口之间切换。面板分…

1-4节电池升降压充电IC解决方案

描述 MP2760是一款集成窄电压DC&#xff08;NVDC&#xff09;电源路径管理功能和USB On-the-Go(OTG)功能的升降压充电IC&#xff0c;兼容USB PD&#xff0c;适用于单节至4节串联的电池包应用。该芯片的充电输入电压范围广&#xff0c;可支持最高22V。 当启用电池放电模式&…