本文利用MATLAB编程实现FFT分析,代码可处理mat格式与csv格式文件数据。
处理mat格式
源代码
%{
利用MATLAB内置函数实现FFT分析功能,此段代码处理mat格式
author:PEZHANG
time:2021.12.5
%}
clear;clc;
%加载数据
load('HFSI.mat')
ia = data{3}.Values.data(40001:80000,1); % 截取数据段(4s-8s)进行分析
Fs=10000; %离散系统采样频率
Ts = 1/Fs;
L = size(ia,1); %数据的个数(长度),数据持续的时间除以采样频率
t = (0:L-1)*Ts; %生成离散时间序列,方便绘制时域波形
Y = fft(ia); %FFT分析,获得数据是复数,a+bi形式
P2 = abs(Y/L); %DFT计算出的幅值不是真实的幅值,需要进行幅值变换,基频除以L,非基频除以L/2
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1); %非基频的正序分量转化为正常幅值
f = Fs*(0:(L/2))/L;
%绘制时域波形图
figure
plot(t,ia)
%设置图片格式
xlabel('f (Hz)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
ylabel('Current (A)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
title('')
legend({'ia'},'FontSize',10.5,'TextColor','black','Location','best');
set(gcf,'unit','centimeters','position',[30 15 15 7]); %设置画布大小和位置
set(gca,'FontName','Times New Roman','FontSize',10.5,'FontWeight','normal'); %设置坐标轴数字大小
legend('boxoff') %删除图例的背景和轮廓
grid on
set(gca,'gridlinestyle',':','Gridalpha',1); %为了好看,将打开的网格导引线设置为虚线
%绘制频域图片
figure
plot(f,P1) %横轴为频率,纵轴为幅值
%设置图片格式
xlim([2350 2650])
ylim([0 0.05])
xlabel('f (Hz)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
ylabel('Current (A)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
title('')
legend({'ia'},'FontSize',10.5,'TextColor','black','Location','best');
set(gcf,'unit','centimeters','position',[30 15 15 7]); %设置画布大小和位置
set(gca,'FontName','Times New Roman','FontSize',10.5,'FontWeight','normal'); %设置坐标轴数字大小
legend('boxoff') %删除图例的背景和轮廓
grid on
set(gca,'gridlinestyle',':','Gridalpha',1); %为了好看,将打开的网格导引线设置为虚线
运行演示
处理csv格式
源代码
%{
利用MATLAB内置函数实现FFT分析功能,此段代码处理csv格式
author:PEZHANG
time:2021.12.5
%}
clear;clc
% 加载数据,设置数据属性(长度、采样频率等)
AAA = xlsread('tek0014_HFSI_no_load.csv');
ia = AAA(21:1000020,2);
Fs=1000000; %采样频率1MHz
Ts = 1/Fs;
L = size(ia,1); %数据长度
t = (0:L-1)*Ts;
Y = fft(ia); %FFT分析获得数据是复数,a+bi形式
P2 = abs(Y/L); %DFT计算出的幅值不是真实的幅值,需要进行幅值变换,基频除以L,非基频除以L/2
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1); %非基频的正序分量转化为正常幅值
f = Fs*(0:(L/2))/L;
% 绘制时域波形、设置图片格式
figure
plot(t,ia)
ylim([-1 1])
xlabel('f (Hz)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
ylabel('Current (A)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
title('')
lgd = legend({'ia'},'FontSize',10.5,'TextColor','black','Location','best');
% lgd.NumColumns = 1; %创建图例显示的位置,2--横排显示两个图例,1--竖排显示两个图例
% set(gca,'XTicklabel',{'0','0.1','0.2','0.3','0.4','0.5','0.6','0.7','0.8','0.9','1.0'}) %重设坐标刻度
set(gcf,'unit','centimeters','position',[30 15 15 7]); %设置画布大小和位置
set(gca,'FontName','Times New Roman','FontSize',10.5,'FontWeight','normal'); %设置坐标轴数字大小
legend('boxoff') %删除图例的背景和轮廓
grid on
set(gca,'gridlinestyle',':','Gridalpha',1); %为了好看,将打开的网格导引线设置为虚线
%绘制频域图片、设置图片格式
figure
plot(f,P1)
xlim([2350 2650])
xlabel('f (Hz)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
ylabel('Current (A)','FontName','Times New Roman','FontWeight','Bold','FontSize',10.5);
title('')
lgd = legend({'ia'},'FontSize',10.5,'TextColor','black','Location','best');
% lgd.NumColumns = 1; %创建图例显示的位置,2--横排显示两个图例,1--竖排显示两个图例
set(gcf,'unit','centimeters','position',[30 15 15 7]);%设置画布大小和位置
set(gca,'FontName','Times New Roman','FontSize',10.5,'FontWeight','normal'); %设置坐标轴数字大小
legend('boxoff') %删除图例的背景和轮廓
grid on
set(gca,'gridlinestyle',':','Gridalpha',1); %为了好看,将打开的网格导引线设置为虚线
运行演示
参考链接
https://www.mathworks.com/help/matlab/ref/fft.html
https://www.ilovematlab.cn/thread-300889-1-1.html