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

相关推荐
cici1587415 分钟前
MATLAB/Simulink单相光伏并网逆变器仿真
开发语言·matlab
Dev7z16 分钟前
基于MATLAB小波分析的图像增强算法及其仿真实现
开发语言·matlab
机器学习之心17 分钟前
MATLAB基于极差法和灰色关联分析的40Cr零件内孔珩磨参数优化
matlab·灰色关联分析
代码游侠20 分钟前
学习笔记——栈
开发语言·数据结构·笔记·学习·算法
编程修仙25 分钟前
第七篇 java的注解以及使用反射实现自定义注解功能
xml·java·开发语言·spring
GesLuck38 分钟前
Beaglebone BB Black C版 AM3358(一)
c语言·开发语言·物联网·硬件架构
lusasky40 分钟前
Java内存堆栈AI分析工具全览
java·开发语言
CoderYanger41 分钟前
C.滑动窗口-越长越合法/求最短/最小——2904. 最短且字典序最小的美丽子字符串
java·开发语言·数据结构·算法·leetcode·1024程序员节
QQ_4376643141 小时前
常见题目及答案
android·java·开发语言
hefaxiang1 小时前
C语言数据类型和变量(上)
c语言·开发语言