FFT分析代码

本文利用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

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值