(高分求助)用Matlab,怎么用FFT变换(傅立叶变换)将一时域数据变换到频域?

2024-11-27 12:48:33
推荐回答(3个)
回答(1):

s=importdata('s.txt');
y=fft(s,1024); %引入1024,是因为2的整数次幂点的FFT更好做一点,调用这个函数相当于将长度为1000的s补零至1024个点,做1024点FFT,效果等效于频域增加采样点
pyy=y.*conj(y); %不相当于ppy=abs(y),相当于ppy=abs(y).^2
f=10000*(0:512)/1024; %设定横坐标尺度,提醒一下楼主,10E-7对应的1E-6,你的意思应该是1E-7吧.因为横坐标以1kHz为单位,采用频率应该是10000kHz,所以10000代表的是这个意思,FFT最中间的点(以0开头的512点或者以1开头的513点)代表了一半采样频率的频率分量.
plot(f,pyy(1:513),'.-'); %绘制命令,如果要达到左图的频率范围,建议采用plot(f(1:25),pyy(1:25),'.-'),但是可以看到绘制的点数太少.

因此个人建议采用如下的语句
s=importdata('s.txt');
y=fft(s,10000);
pyy=y.*conj(y);
f=10000*(0:250)/10000;
plot(f(1:251),pyy(1:251),'.-');

因为没有s的原始数据,没法给你画图,猜测是加了哈宁窗的正弦信号.

回答(2):

我觉得你给的图上的频谱有问题  

因为时域有限对应频率的无限,时域无限对应频率有限

那个频谱图明显是有限,肯定对应一个无限的时域信号

而那个时域图是有限的,肯定对应无限的频域图。 

利用的数据就是你说昨天的那个数据 文库里面下载的

回答(3):

y=fft(s,N); %N应该是采样数据的点数,不能照搬书上的
N1=length(y);
f=n*fs/N1; %n=(0:N1/2-1),fs是采样频率