clear all; %清除所有变量
clc; %清命令窗口
close all;
fclk = 1e6;
[filename,filepath] = uigetfile('*.xlsx','请选择要打开的文件:','C:/……');
if isequal(filename,0)
errordlg('没有选中数据文件!')
return
end
file_data = xlsread([filepath,filename]);
data1 = file_data(1:100,2); %提取第2列1-100行数据,matlab从1开始的不是0
data2 = file_data(1:end,3); %提取第3列1-最后一行数据
x = file_data(:,1); %提取第1列整列数据
%%时域绘图
figure;
plot(x,data1,'b-o');
hold on;
plot(x,data2,'r-x')
%hold on;
axis([138500 138500+length(data1) 0 5000]); %前两个为x轴坐标范围,后面为y轴
title('信号波形图:','fontname','黑体','fontsize',18);
xlabel('Time(us)','fontsize',18);
ylabel('Voltage(mV)','fontsize',18);
grid on; %显示栅格
%%时域信号做傅里叶变换
ProcessData1 = data1-mean(data1);
numpt1 = length(ProcessData1);
Filterwindow1 = hanning(numpt1);
Doutw1 = ProcessData1.*Filterwindow1; %加汉宁窗可以抑制旁瓣,避免频谱泄露,但主瓣也会变宽
Dout1_spect = fft(Doutw1) %傅里叶变换
%转换为dB
Dout1_dB = 20*log10(abs(Dout1_spect));
%%FFT频谱图绘制
maxdB = max(Dout1_dB(1:numpt1));
figure:
plot(linspace(0,1,numpt1)*fclk, Dout1_dB(1:numpt1)-maxdB); %幅度归一化
axis([0e6 fclk -80 10]);
title('信号FFT频谱图:');
xlabel('Frequency(Hz)');
ylabel('Power(dB)');
grid on;
Matlab:excel数据信号时、频域波形绘制及FFT变换方法
于 2023-08-04 16:16:13 首次发布