极简Matlab快速傅里叶变换FFT

简介

在试验数据处理中, 得到了一串数据, 经常需要提取频谱, 这里就需要运用快速傅里叶变换(FFT).

Matlab中可以方便地调用FFT, 但是FFT的结果是复数的对称谱, 为了绘制通常意义上的振幅频谱还需要做许多后处理.

本文给出了一个极简的代码, 以供大家参考和使用

代码

参考自https://www.mathworks.com/help/matlab/ref/fft.html#d126e476108

matlab 复制代码
% 已知参数
Fs = 1000;           % 采样率   
L = 1500;             %  数据向量长度

% 假定的原数据 ,当然也可以从文件中读取
T = 1/Fs;       
t = (0:L-1)*T;
S = 0.8 + 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
           
% 快速傅里叶变换
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,"LineWidth",3) 
title("Single-Sided Amplitude Spectrum of S(t)")
xlabel("f (Hz)")
ylabel("|P1(f)|")

结果如下图所示, 可以清晰地看出0Hz, 50Hz, 120Hz的频率处的振幅分别是0.8, 0.7和1.0 . 与假定的原始数据完全一致.

相关推荐
一条咸鱼_SaltyFish42 分钟前
远程鉴权中心设计:HTTP 与 gRPC 的技术决策与实践
开发语言·网络·网络协议·程序人生·http·开源软件·个人开发
我即将远走丶或许也能高飞1 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
沐知全栈开发1 小时前
SQL LEN() 函数详解
开发语言
钟离墨笺1 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
小郭团队2 小时前
1_6_五段式SVPWM (传统算法反正切+DPWM2)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·matlab·dsp开发
小郭团队2 小时前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发
C+-C资深大佬2 小时前
C++风格的命名转换
开发语言·c++
No0d1es2 小时前
2025年粤港澳青少年信息学创新大赛 C++小学组复赛真题
开发语言·c++
点云SLAM2 小时前
C++内存泄漏检测之手动记录法(Manual Memory Tracking)
开发语言·c++·策略模式·内存泄漏检测·c++实战·new / delete
码上成长2 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript