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('信号波形图:','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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值