fft的输出为何不是一条线?
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/18 19:40:29
fft的输出为何不是一条线?
本来,fft是对信号进行傅立叶变换,可以得到原有信号的频率成分的.可是在用matlab实行fft的时候,(估计其它语言也一样)即使对一个单纯的正弦波,它的输出也并非是只在一个频率上.而是在主频的旁边也有输出.比如说,
t=0:.001:3;
u=sin(2*pi*t);
a=fft(u);
stem(abs(a))
理论上,输出的应当是一条谱线,但实际上,把x轴放大一些,
你就会看到,频率成分并不单一.
请哪位高手能对此加以说明,最好能指出如何可以克服.
本来,fft是对信号进行傅立叶变换,可以得到原有信号的频率成分的.可是在用matlab实行fft的时候,(估计其它语言也一样)即使对一个单纯的正弦波,它的输出也并非是只在一个频率上.而是在主频的旁边也有输出.比如说,
t=0:.001:3;
u=sin(2*pi*t);
a=fft(u);
stem(abs(a))
理论上,输出的应当是一条谱线,但实际上,把x轴放大一些,
你就会看到,频率成分并不单一.
请哪位高手能对此加以说明,最好能指出如何可以克服.
![fft的输出为何不是一条线?](/uploads/image/z/19093152-48-2.jpg?t=fft%E7%9A%84%E8%BE%93%E5%87%BA%E4%B8%BA%E4%BD%95%E4%B8%8D%E6%98%AF%E4%B8%80%E6%9D%A1%E7%BA%BF%3F)
时域离散,频域必然连续,反之,频率连续,时域必然离散.
fft是快速离散傅里叶变换,时域是离散时间信号,频域一定是连续信号,这是不可避免的.
再问: 现在的正弦波是时域连续的,得到的频域自然是离散的了。然而,为什么在离散的同时,在正真的频率旁边还有其它的输出呢?
再答: 你说的正弦波,时域是离散的,实际上,你分析的是0~3S内的3000个离散样本。 频域是连续的,matlab中对连续的频域进行离散化处理。 你说的这种问题,称为频谱泄漏。 这个还是可以避免的。 你将采样频率改为信号频率的2的N次幂倍,比如说,1024倍,然后,分析1024个点或2048个点,就不会有这个问题了。在你的程序中,分析点数是3001点。 可以将第一句改为:t=0:1/1024:1-1/1024 这样,fft分析的点数是1024点,并且时间是1S,正好是一个信号周期。 你说的问题就不会有了!
fft是快速离散傅里叶变换,时域是离散时间信号,频域一定是连续信号,这是不可避免的.
再问: 现在的正弦波是时域连续的,得到的频域自然是离散的了。然而,为什么在离散的同时,在正真的频率旁边还有其它的输出呢?
再答: 你说的正弦波,时域是离散的,实际上,你分析的是0~3S内的3000个离散样本。 频域是连续的,matlab中对连续的频域进行离散化处理。 你说的这种问题,称为频谱泄漏。 这个还是可以避免的。 你将采样频率改为信号频率的2的N次幂倍,比如说,1024倍,然后,分析1024个点或2048个点,就不会有这个问题了。在你的程序中,分析点数是3001点。 可以将第一句改为:t=0:1/1024:1-1/1024 这样,fft分析的点数是1024点,并且时间是1S,正好是一个信号周期。 你说的问题就不会有了!