【Matlab】快速傅里叶变换fft代码(单边谱)

avatar
作者
猴君
阅读量:0

单边谱,横纵坐标还原代码
参考链接

主代码

function main() clc clear close all %% %仿真时间 dt=0.01; t_end=10; time=dt:dt:t_end;%注意,length(time)会对fft结果的精度有影响 %对应振幅,频率:10、5、2Hz Z=20*sin(2*pi*20*time)+10*sin(2*pi*10*time)+5*sin(2*pi*5*time)+2*sin(2*pi*2*time); figure(1) plot(time,Z,'b-') xlabel('时间/s') ylabel('振幅') %% fft变换 %注意,length(time)会对fft结果的精度有影响 [f,Y_amp]=fastf(Z,dt); %fft结果 figure(101) plot(f,Y_amp) xlabel('频率/Hz') ylabel('振幅') %fft结果,双对数坐标 figure(102) loglog(f,Y_amp) xlabel('频率/Hz') ylabel('振幅') 

fastf.m
只和需要被fft的时间序列Z(编号乘以dt是对应的时间)与间隔时间dt有关

function [f,Y_amp]=fastf(Z,dt) %fft变换,单边谱,恢复频率轴和幅度 % https://blog.csdn.net/weixin_43215105/article/details/127932757?spm=1001.2014.3001.5506 %% fft fs=1/dt;%采样频率 f_fft=fft(Z);%fft变换,matlab直接fft变换的结果的横轴、纵轴均不正确,需要变换处理 %% 单边谱,恢复频率轴和幅度 N=length(f_fft);%fft之后的序列长度  if mod(N, 2) ~= 0     N=N-1;%如果向量长度为奇数去末尾数 end  Y=f_fft(1:N/2);%单边谱是双边谱的一般 Y=2*Y; Y_amp=abs(Y)/N;%恢复振幅  df=fs/N;%频率分辨率 f=(1:N/2)*df;  

时间序列Z如下图所示:
在这里插入图片描述Z(向量)内元素的编号乘以dt即该元素对应的时刻

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!