Matlab:excel数据信号时、频域波形绘制及FFT变换方法

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('信号波形图:');
xlabel('Time(us)');
ylabel('Voltage(mV)');
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;

猜你喜欢

转载自blog.csdn.net/chn_zx/article/details/132106904