27、matlab傅里叶变换:fft()函数

1、傅里叶变换简介

傅里叶变换是数学中一种非常重要的工具,用于将一个函数(通常是时域函数)分解成一组正弦和余弦函数的和。通过傅里叶变换,可以将一个信号从时域转换到频域,以便更好地理解信号的频率成分和频谱特征。

傅里叶变换的定义通常有两种形式:连续傅里叶变换(Continuous Fourier Transform)和离散傅里叶变换(Discrete Fourier Transform)。

连续傅里叶变换:连续傅里叶变换用于连续信号,将一个时域连续函数转换为一个频域连续函数。

数学上表示为:  F(\omega )=\int_{-\propto }^{\propto }f(t)e^{-j\omega t}dt

其中,f(t) 是时域函数,F(ω) 是频域函数,ω 是频率。

离散傅里叶变换:离散傅里叶变换用于离散信号,将一个时域离散序列转换为一个频域离散序列。数学上表示为: F(k)=\sum_{n=0}^{N-1}f(n)e^{-j\frac{2\pi }{N}kn}

其中,f(n) 是离散信号序列,F(k) 是频谱序列,N 是信号的长度,k 是频率系数。

傅里叶变换在信号处理、通信、图像处理、声音分析等领域广泛应用。它可以将信号从时域转换为频域,便于进行频率分析、滤波、压缩等操作。同时,逆傅里叶变换可以将频域信号重新转换为时域信号。傅里叶变换的理论基础非常深刻,应用也非常广泛,是现代信号处理和通信领域的基础工具之一。

2、fft  快速傅里叶变换

简介

快速傅里叶变换(Fast Fourier Transform,FFT)是一种快速计算傅里叶变换的算法,它可以在 O(NlogN) 的时间复杂度内计算出 N 个点的离散傅里叶变换。相比传统的直接计算傅里叶变换的方法,FFT具有更高的计算效率,特别适用于对大规模数据进行频域分析。

FFT算法的发展历史悠久,最著名的是Cooley-Tukey算法,它利用了傅里叶变换的对称性和周期性,将一个 N 点DFT(Discrete Fourier Transform)分解为两个 2N/2 点DFT。通过迭代的方式,可以将时间复杂度从O(N2) 降低到 O(NlogN)。

FFT算法在信号处理、图像处理、通信系统等领域得到了广泛的应用,例如在音频处理中进行频谱分析、滤波处理,在通信系统中进行信号调制解调、频谱估计等。由于FFT算法的高效性和稳定性,它在实际工程中经常被使用。

总的来说,快速傅里叶变换是一种高效的计算傅里叶变换的算法,能够快速准确地将信号从时域转换到频域,为信号处理和频谱分析提供了非常重要的工具。

语法

Y = fft(X) 使用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。
Y = fft(X,n) 返回 n 点 DFT。
Y = fft(X,n,dim) 返回沿维度 dim 的傅里叶变换。例如,如果 X 是矩阵,则 fft(X,n,2) 返回每行的 n 点傅里叶变换含噪信号

1)原始信号加噪声

代码

Fs = 1000;                          
T = 1/Fs;                   
L = 1500;             
t = (0:L-1)*T;  
%振幅为 0.8 的 DC 偏移量、振幅为 0.7 的 50 Hz 正弦量和振幅为 1 的 120 Hz 正弦量。
%w/2Pi=频率
S = 0.8 + 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%均值为零、方差为 4 的随机噪声扰乱该信号。
X = S + 2*randn(size(t));
plot(1000*t,X)
title("信号加噪声")
xlabel("毫秒")
ylabel("幅度")

视图效果

 2)傅里叶变换显示正频率部分

代码

Y = fft(X);%傅里叶变换
plot(Fs/L*(0:L-1),abs(Y))%复数求模
title("FFT正频率部分")
xlabel("Hz")
ylabel("|fft(X)|")

视图效果

3)傅里叶变换显示全频率部分 

代码

%该图显示五个频率峰值,包括 DC 偏移量在 0 Hz 处的峰值。
%在此示例中,信号预计在 0 Hz、50 Hz 和 120 Hz 处有三个
%频率峰值。此处,绘图的后半部分是前半部分的镜像,
plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))%fftshift 显示正负频率
title("FFT全频率部分")
xlabel("Hz")
ylabel("|fft(X)|")

视图效果

4) 精确检索振幅

代码

%采用原始的、未破坏信号的傅里叶变换并检索精确振幅在 0.8、0.7 和 1.0 处。
f = Fs/L*(0:(L/2));
Y = fft(S);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

plot(f,P1) 
title("检索结果")
xlabel("Hz")
ylabel("|P1(f)|")

视图效果

3、 高斯脉冲

简介

高斯脉冲是一种具有特定频谱特性的信号,它在信号处理和通信工程中有着广泛的应用。高斯脉冲的时间域表达式为: 2g(t)=Ae−αt2 其中,A 是脉冲的幅度,α 是一个控制脉冲宽度的正数。

高斯脉冲的频谱特性主要体现在其傅里叶变换后的频谱形状。高斯脉冲的傅里叶变换可以通过傅里叶变换的性质和高斯函数的特性来求解。

其频谱可以表示为:\frac{A}{2\sqrt{\pi a}}=e^{-\frac{-(2\pi f )^{2})}{4a}}

具体而言,高斯脉冲的频谱是一个以零频率为中心的钟形曲线,频谱宽度受到参数 α 控制,脉冲在时域中越短,频谱中心频率越高,频谱越窄。

高斯脉冲的特性使得它在传输、通信系统中具有很好的性能。例如,在雷达系统中,高斯脉冲被用作雷达信号的发射脉冲,因为高斯脉冲具有较好的峰值信噪比和抗干扰性能。在通信系统中,高斯脉冲可以用于OFDM(正交频分复用)系统的时域信号设计,减小子载波间的相互干扰。

总的来说,高斯脉冲作为一种特定频谱特性的信号,在信号处理、通信系统等领域发挥着重要作用,具有很好的抗噪声、抗干扰性能,广泛应用于实际工程中。

1)时域脉冲信号

代码

%高斯脉冲
Fs = 44100;         
T = 1/Fs;           
t = -0.5:T:0.5;    
L = length(t);     
X = 1/(0.4*sqrt(2*pi))*(exp(-t.^2/(2*(0.1*1e-3)^2)));
plot(t,X)
title("时域脉冲信号")
xlabel("t")
ylabel("X(t)")
axis([-1e-3 1e-3 0 1.1])

视图效果

2)傅里叶变换

代码

n = 2^nextpow2(L);%2次幂输入长度
Y = fft(X,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/sqrt(n)).^2;
plot(f,P(1:n/2+1)) 
title("高斯脉冲")
xlabel("Hz")
ylabel("|P(f)|")

视图效果

 

 4、余弦波

1)时域效果

代码

%3余弦波
Fs = 1000;                    
T = 1/Fs;                  
L = 1000;                    
t = (0:L-1)*T;
x1 = cos(2*pi*50*t);          
x2 = cos(2*pi*150*t);        
x3 = cos(2*pi*300*t);         
X = [x1; x2; x3];
subplot(3,1,1)
plot(t(1:100),X(1,1:100))
title('50HZ时序')
subplot(3,1,2)
plot(t(1:100),X(2,1:100))
title('150HZ时序')
subplot(3,1,3)
plot(t(1:100),X(3,1:100))
title('300HZ时序')

视图效果

 2)傅里叶变换

代码

dim = 2;%行方向
Y = fft(X,L,dim);
P2 = abs(Y/L);
P1 = P2(:,1:L/2+1);
P1(:,2:end-1) = 2*P1(:,2:end-1);
subplot(3,1,1)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(1,1:L/2))
title('50HZ傅里叶变换')
subplot(3,1,2)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(2,1:L/2))
title('150HZ傅里叶变换')
subplot(3,1,3)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(3,1:L/2))
title('300HZ傅里叶变换')

视图效果 

 5、正弦波相位

1)正弦波傅里叶变换

代码

Fs = 100;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*15*t - pi/4) + cos(2*pi*40*t + pi/2);
y = fft(x);
z = fftshift(y);

ly = length(y);
f = (-ly/2:ly/2-1)/ly*Fs;
stem(f,abs(z))
title("傅里叶双边显示")
xlabel("Frequency (Hz)")
ylabel("|y|")

视图效果

2)相位获取

代码

1tol = 1e-6;
z(abs(z) < tol) = 0;
theta = angle(z);

stem(f,theta/pi)
title("相位频率图")
xlabel("Hz)")
ylabel("频率")

视图效果

 

6、总结 

傅里叶变换是一种将信号从时域转换到频域的重要工具,它在信号处理、图像处理、通信系统等领域有着广泛的应用。以下是傅里叶变换的一些总结性内容:

  1. 时域和频域:在信号处理中,时域是指信号随时间变化的情况,频域是指信号的频率成分。傅里叶变换能够将信号在时域和频域之间进行转换,从而揭示信号的频率分量和振幅。

  2. 离散傅里叶变换(DFT):用于将离散信号转换到频域。DFT能够将一段离散信号表示为一系列复数,分别表示不同频率和振幅的成分。

  3. 傅里叶级数:描述周期信号的频域表示,将周期信号分解为多个不同频率的正弦和余弦波形式。

  4. 傅里叶变换的性质:包括线性性质、频率平移、频率调制、卷积性质等,这些性质在信号处理中有着重要的作用。

  5. 逆变换:傅里叶变换的逆变换能够将频域信号转换回时域信号,恢复原始信号的形式。

  6. 快速傅里叶变换(FFT):FFT是一种计算傅里叶变换的高效算法,能够在 �(�log⁡�)O(NlogN) 的时间复杂度内计算出 �N 个数据点的傅里叶变换,被广泛应用于实际工程中。

  7. 应用领域:傅里叶变换在信号处理、通信系统、图像处理等领域有着广泛的应用,例如数字滤波、频谱分析、信号调制解调等。

总的来说,傅里叶变换是一种非常重要的信号处理工具,通过时域和频域之间的转换,能够揭示信号的频率特性,方便信号处理和分析。在实际应用中,合理使用傅里叶变换可以帮助工程师更好地理解和处理信号。

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

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

相关文章

MySQL 的故事:一场 SQL 语句的戏剧演绎

本文由 ChatMoney团队出品 第一幕&#xff1a;解析与优化 - “翻译官与谋士” SQL 解析器是第一个上场的角色&#xff0c;任务就是把 SQL 请求翻译成 MySQL 能听懂的语言。就像你点餐时&#xff0c;服务员得听懂你到底要什么菜。不然你说“我要一盘炒青菜”&#xff0c;结果服…

可解释机器学习之SHAP方法

以Breast cancer wisconsin (diagnostic) dataset数据集为例。 # Built-in libraries import math import numpy as np import pandas as pd# Visualization libraries import matplotlib.pyplot as plt import seaborn as sns# Sklearn libraries # from skle…

经典游戏案例:unity官方推荐3d跑酷

学习目标&#xff1a;实现跑酷核心算法 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 游戏管理器是一个状态机&#xff0c;根据当前的游戏状态&#xff0c;它…

旅游管理平台系统

摘要 如今许多地区的风景已经随着网络技术的不断发展和进步而映入人们的眼帘&#xff0c;旅游已经成为一种大众化的休闲方式。而青海海西州风光旖旎&#xff0c;民族文化独特&#xff0c;更是吸引了众多游客纷至沓来。海西州地域广阔、人烟稀少、是一个经济发展缓慢的地方&…

uni微信小程序使用lottie

在uni插件市场找到 lottie-uni https://ext.dcloud.net.cn/plugin?id1044按照文档要求安装 HBuilderX 引入 下载或导入示例获取插件 import lottie from /common/lottie-miniprogram.jsindex.vue <template><uni-popupref"popup"type"center"ba…

汽车IVI中控开发入门及进阶(二十九):i.MX6

前言: i.MX 6双/6Quad处理器集成多媒体应用处理器,是不断增长的多媒体产品系列的一部分,提供高性能处理,并针对最低功耗进行了优化。 i.MX 6Dual/6Quad处理器采用先进的quad-ArmCortex-A9内核,运行速度高达800 MHz,包括2D和3D图形处理器、1080p视频处理和集成电源管理。…

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台 请访问原文链接&#xff1a;https://sysin.org/blog/opnsense/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 关于 OPNsense OPNsense 是一个开源、易于使用且易于构建…

经典游戏案例:飞机大战

学习目标&#xff1a;实现飞机射击核心功能 游戏画面 项目结构目录 部分核心代码 using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class playermoveA :MonoBehaviour,IPointerUpHandler,IPointerDownHandler,IDragHandler{ //public …

org.eclipse.milo opcua 库查看记录

1 Reference连接 在OPC UA Server中&#xff0c;所有Node之间都是使用Reference进行连接的。 读取时指定HierarchicalReferences就可以读取HierarchicalReferences及以下所有类型的节点。 2 nodeId读取 browse 默认读取了Method、Object、Variable类型节点&#xff0c;Refer…

Python爬虫实战案例之——MySql数据入库

Hello大家好&#xff0c;我是你们的南枫学长&#xff0c;咱们今天来学——爬虫之MySql数据入库。 话不多说&#xff0c;导入咱们的老朋友&#xff1a; Pymysql就是我们Python里面的mysql库&#xff0c;主要功能就是用来连接MySql数据库&#xff0c;那么下载还是一样的操作去进…

ClickHouse安装与下载22.3.2.2

ClickHouse安装与下载 目录 1. ClickHouse简介 1.1 ClickHouse优点&#xff1a; 1.2 ClickHouse缺点&#xff1a; 1.3 ClickHouse引擎&#xff1a; 1.3.1 数据库引擎 1.3.2 表引擎 2. ClickHouse下载安装 2.1 ClickHouse下载安装 2.2 ClickHouse使用 1. ClickHouse简…

从ITIL,CMMI到DevOps的实践与思考

点击进入IT管理资料库 在信息技术迅猛发展的今天&#xff0c;企业对IT运维和管理的要求越来越高。从最早的ITIL&#xff0c;到后来的CMMI&#xff0c;再到现在风靡全球的DevOps&#xff0c;每一个管理框架的出现都代表着一种新的思维和实践模式。ITIL帮助企业建立起系统的IT服…

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lastStoneWeightII(int[] stones) {if(stones.length 0){return 0;}if(stones.length 1){return stones[0];}int sum 0;for(int i0;i<stones.length;i){sum stones[i];…

leetcode118 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] public List…

【Ubuntu】--- 创建用户 删除用户 及其他用户操作大全 持续更新中

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ubuntu】--- 创建用户 删除用户 及其他…

【C++】#20,#21

#20类和对象 #include <iostream>using namespace std;class Box{public: //公有 double length; //ctrle复制本行 double width;double height;void getVolume(){ //方法带&#xff08;&#xff09; cout<<"盒子体积为&#xff1a;"<<le…

threejs教程:绘制3D地图(广东省区划图)

一、效果展示&#xff1a; 二、开发准备 Three.js中文文档&#xff1a;Three.js中文网 Three.js文本渲染插件&#xff1a;Troika 3D Text - Troika JS 行政区划边界数据查询&#xff08;阿里云数据可视化平台&#xff09;&#xff1a;DataV.GeoAtlas地理小工具系列 1. 在项目…

STM32学习 时钟树

在单片机中&#xff0c;时钟的概念非常重要&#xff0c;这次记录一下时钟树相关的知识。 STM32的时钟树是由多个时钟源和时钟分频组成的&#xff0c;为STM32芯片提供各种时钟信号。也就是说&#xff0c;在使用STM32的时候&#xff0c;所有的频率和时钟都是通过时钟树产生的。 …

Maven添加reactor依赖失败

目录 情况说明 解决过程 情况说明 起初是自己在学spring boot3&#xff0c;结果到了reactor这一部分的时候&#xff0c;在项目的pom.xml文件中添加下列依赖报错&#xff1a; <dependencyManagement><dependencies><dependency><groupId>io.projectr…

github配置可拉取项目到本地

首先配置用户名和邮箱&#xff1a; git config --global user.name 自己的名字git config --global user.email 自己的邮箱配置完之后检查一下&#xff1a; git config --global user.namegit config --global user.email如果提示的是自己配置好的名字和邮箱就Ok 然后拉取githu…