极简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 . 与假定的原始数据完全一致.

相关推荐
presenttttt21 分钟前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
每日出拳老爷子27 分钟前
[C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
开发语言·c#
半桔31 分钟前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
nightunderblackcat39 分钟前
新手向:实现ATM模拟系统
java·开发语言·spring boot·spring cloud·tomcat·maven·intellij-idea
开开心心就好42 分钟前
电脑息屏工具,一键黑屏超方便
开发语言·javascript·电脑·scala·erlang·perl
笑衬人心。1 小时前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
ruan1145143 小时前
MySQL4种隔离级别
java·开发语言·mysql
quant_19864 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
百锦再8 小时前
详细解析 .NET 依赖注入的三种生命周期模式
java·开发语言·.net·di·注入·模式·依赖