|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
请问大家,FFT变换后,想求得信号频率,但是结果峰值并不明显,第一个峰值是直流量,是数据的问题还是我写的代码有问题?数据第一、二列是时间,第三列是气压值
clear;
fid=fopen('2016-05-30-10-24-08.txt');
c=textscan(fid,'%s%s%f');
%链接两个字符串
d=strcat(c{1,1},'/',(c{1,2}));
%将时间字符串转为数字
ymd=datenum(d);
%验证转化的时间是否正确
r=datestr(ymd,'dd-mmm-yyyy HH:MM:SS')
subplot(2,2,1)
plot(ymd,c{1,3});
datetick('x','mm-dd/HH');
xlabel('time');
ylabel('f(t)');
%傅里叶变换
fs=1;
L=length(ymd);
N=length(c{1,3});
n=0:L-1;
t=ymd;
dat=c{1,3}-mean(c{1,3});
tp=[ymd dat];
save tp.mat;
Y=fft(dat,N);
mag=abs(Y);%求幅值
%相位
P=angle(Y);
%频率
f=(0:N-1)*fs/N;
%求峰值,得到幅度最大值及下标
[C,Q]=max(mag(1:N/2)*2/N);
fm=f(Q);
subplot(2,2,2);
plot(f(1:N/2),mag(1:N/2)*2/N);
set(gca, 'Xlim',[0 0.001]);
xlabel('frequence/Hz');
ylabel('amplitude');
%title('f=(0:N-1)*fs/L fs=1Hz 2016-05-25');
title('fs=1Hz 2016-05-25');
subplot(2,2,3)
plot(f(1:N/2),P(1:N/2));
xlabel('frequence/Hz');
ylabel('phase');
%set(gca, 'XTick',[-3.14,0,3.14] ); |
|