首页 > 其他分享 >MATLAB快速傅里叶变换(fft)函数详解

MATLAB快速傅里叶变换(fft)函数详解

时间:2023-05-15 20:25:19浏览次数:31  
标签:fft xn 信号 NN FFT 详解 MATLAB 频率

MATLAB快速傅里叶变换(fft)函数详解

调用:

​​1. Y = fft(y);

  1. Y = fft(y,N);

式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。

说明:

函数fft返回值的数据结构具有对称性

根据采样定理,fft能分辨的最高频率为采样频率的一半(即Nyquist频率),函数fft返回值是以Nyqusit频率为轴对称的,Y的前一半与后一半是复数共轭关系。

幅值

作FFT分析时,幅值大小与输入点数有关,要得到真实的幅值大小,只要将变换后的结果乘以2除以N即可(但此时零频—直流分量—的幅值为实际值的2倍)。对此的解释是:Y除以N得到双边谱,再乘以2得到单边谱(零频在双边谱中本没有被一分为二,而转化为单边谱过程中所有幅值均乘以2,所以零频被放大了)。

基频

​若分析数据时长为T,则分析结果的基频就是f0=1/T,分析结果的频率序列为[0:N-1]*f0

执行N点FFT

在调用格式2中,函数执行N点FFT。若y为向量且长度小于N,则函数将y补零至长度N,若向量y的长度大于N,则函数截断y使之长度为N。

注意:

使用N点FFT时,若N大于向量y的长度,将给频谱分析结果带来变化,应该特别注意。

结论:

使用N点FFT时,不应使N大于y向量的长度,否则将导致频谱失真。

例子程序:​

clear all   %清除内存所有变量

close all    %关闭所有打开的图形窗口

%% 执行FFT点数与原信号长度相等(100点)

% 构建原信号

N=100;  % 信号长度(变量@@@@@@@)

Fs=1;  % 采样频率

dt=1/Fs;  % 采样间隔

t=[0:N-1]*dt;  % 时间序列

xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);  

xn=[xn,zeros(1,N-100)];  % 原始信号的值序列

subplot(3,2,1)  % 变量@@@@@@@

plot(t,xn)  % 绘出原始信号

xlabel('时间/s'),title('原始信号(向量长度为100)')  % 变量@@@@@@@

% FFT分析

NN=N;  % 执行100点FFT

XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性

f0=1/(dt*NN);  % 基频

f=[0:ceil((NN-1)/2)]*f0;  % 频率序列

A=abs(XN);  % 幅值序列

subplot(3,2,2),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)

axis([0 0.5 0 1.2])  % 调整坐标范围

title('执行点数等于信号长度(单边谱100执行点)');  % 变量@@@@@@@

%% 执行FFT点数大于原信号长度

% 构建原信号

N=100;  % 信号长度(变量@@@@@@@)

Fs=1;  % 采样频率

dt=1/Fs;  % 采样间隔

t=[0:N-1]*dt;  % 时间序列

xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);  

xn=[xn,zeros(1,N-100)];  % 原始信号的值序列

subplot(3,2,3)  % 变量@@@@@@@

plot(t,xn)  % 绘出原始信号

xlabel('时间/s'),title('原始信号(向量长度为100)')  % 变量@@@@@@@

% FFT分析

NN=120;  % 执行120点FFT(变量@@@@@@@)

XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性

f0=1/(dt*NN);  % 基频

f=[0:ceil((NN-1)/2)]*f0;  % 频率序列

A=abs(XN);  % 幅值序列

subplot(3,2,4),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)

axis([0 0.5 0 1.2])  % 调整坐标范围

title('执行点数大于信号长度(单边谱120执行点)');  % 变量@@@@@@@

%% 执行FFT点数与原信号长度相等(120点)

% 构建原信号

N=120;  % 信号长度(变量@@@@@@@)

Fs=1;  % 采样频率

dt=1/Fs;  % 采样间隔

t=[0:N-1]*dt;  % 时间序列

xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);  

xn=[xn,zeros(1,N-100)];  % 原始信号的值序列

subplot(3,2,5)  % 变量@@@@@@@

plot(t,xn)  % 绘出原始信号

xlabel('时间/s'),title('原始信号(向量长度为120)')  % 变量@@@@@@@

% FFT分析

NN=120;  % 执行120点FFT(变量@@@@@@@)

XN=fft(xn,NN)/NN;  % 共轭复数,具有对称性

f0=1/(dt*NN);  % 基频

f=[0:ceil((NN-1)/2)]*f0;  % 频率序列

A=abs(XN);  % 幅值序列

subplot(3,2,6),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz')  % 绘制频谱(变量@@@@@@@)

axis([0 0.5 0 1.2])  % 调整坐标范围

title('执行点数等于信号长度(单边谱120执行点)');  % 变量@@@@@@@

自振频率的测量采用自相关的方法:

y1=fft(c,N1); %对自相关进行傅里叶变换
yy1=abs(y1); %求得傅里叶变换后的振幅
yy1=yy1*2/N1; %幅值处理
f=n*fs/N1; %频率序列
figure(2)
subplot(2,2,1),plot(f(1:N1/2),yy1(1:N1/2));grid on;
xlabel('频率/HZ');ylabel('振幅');title('截取平稳运行段的自相关傅里叶变换');
y2=fft(M,N1); %对加噪信号进行傅里叶变换
yy2=abs(y2); %求得傅里叶变换后的振幅
yy2=yy2*2/N1; %幅值处理
f=n*fs/N1; %频率序列
subplot(2,2,2),plot(f(1:N1/2),yy2(1:N1/2))
xlabel('频率/HZ');ylabel('振幅');title('截取信号的傅里叶变换');grid on

由此可知:在取样点数为900时的自振频率为16.67HZ

由上图可知:
在取样点数为1080时的自振频率为16.65HZ
因此可以得到结论:四辊轧机的自珍频率基本在16.65HZ附近

标签:fft,xn,信号,NN,FFT,详解,MATLAB,频率
From: https://www.cnblogs.com/bujidao1128/p/17400620.html

相关文章

  • Docker详解
    什么是docker?Docker是一个应用打包、分发、部署的工具你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。打包:就是把你软件运行所需的依赖,第三方库,软件打包打包在一起......
  • Matlab中编程细节
    W频率轴的设置频率轴的设置的参考链接:fftshift详解-CSDN1.3.DFT的特性-CSDNfftshift讲解-信号处理小王子的文章-知乎VMatlab的fft函数掌握Matlab中IFFT/FFT注意事项及在OFDM仿真中的应用问题-CSDN数字信号处理1:完全掌握Matlab中的FFT-hal3515的文章-知乎......
  • Explain执行计划key_len详解
    我们在使用Explain查看SQL执行计划时,其中有一列为key_kenEXPLAINselect*FROMuserWHEREid=1;key_len表示使用的索引长度,key_len可以衡量索引的好坏,key_len越小索引效果越好,那么key_len的长度是如何计算的?常见的列类型长度计算:CREATETABLE`user`(`id`bigint......
  • 基于DBN的二分类和多分类的分类预测模型。 程序语言为matlab。
    基于DBN的二分类和多分类的分类预测模型。程序语言为matlab。直接替换excel数据就可以使用。。ID:8735682410333583......
  • MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究
    MATLAB代码:基于主从博弈理论的共享储能与综合能源微网优化运行研究关键词:主从博弈共享储能综合能源微网优化调度参考文档:《基于主从博弈理论的共享储能与综合能源微网优化运行研究》完全复现仿真平台:MATLAByalmip+cplex主要内容:代码主要做的是基于主从博弈理论的共享储能与综......
  • MATLAB代码:基于遗传算法的电动汽车有序充放电优化 关键词:遗传
    MATLAB代码:基于遗传算法的电动汽车有序充放电优化关键词:遗传算法电动汽车有序充电优化调度参考文档:《精英自适应混合遗传算法及其实现_江建》算法部分;电动汽车建模部分相关文档太多,自行搜索参考即可;仿真平台:MATLAB主要内容:代码主要做的是利用遗传算法对电动汽车有序充电进行......
  • MATLAB代码 考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化
    MATLAB代码考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化关键词:碳交易电制氢阶梯式碳交易综合能源系统热电优化参考文档:《考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化》基本复现仿真平台:MATLAB+CPLEX主要内容:代码主要做的是一个考虑阶梯式碳交易机制的电热......
  • 在IEEE-14总线系统中执行连续功率流 测试环境:MATLAB 读
    在IEEE-14总线系统中执行连续功率流测试环境:MATLAB读取IEEE14和IEEE30系统数据。连续潮流又称为延拓潮流,是电力系统电压稳定性分析的有力工具。PV曲线由于反映了系统随着负荷的变化而引起的节点电压的变化状况,因此,已经被广泛地用来确定系统运行点至电压崩溃点的距离,或确定电压崩......
  • MATLAB代码 风光场景生成 场景削减 概率距离削减法 蒙特卡洛法 M
    MATLAB代码风光场景生成场景削减概率距离削减法蒙特卡洛法MATLAB:基于概率距离快速削减法的风光场景生成与削减方法参考文档:《含风光水的虚拟电厂与配电公司协调调度模型》完全复现场景削减部分仿真平台:MATLAB平台代码具有一定的深度和创新性,注释清晰主要内容:风电、光伏以及......
  • MYSQL数据库之事务隔离级别详解
    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流!前言从今天开始本系列内容就带各位小伙伴学习......