有时候matlab得到的cos(sin) 的fft的为什么不是纯实(虚)的

Posted 者乎之类的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有时候matlab得到的cos(sin) 的fft的为什么不是纯实(虚)的相关的知识,希望对你有一定的参考价值。

前两天忘记是哪个点有个什么契机画了个cos的频谱图,从原理上我们知道cos的频谱是纯实的,但是

clear all
fs=200;
% N=2000;
t=0:1/fs:10;
f=50;
x=cos(2*pi*f*t);
yr=real(fft(x));
yi=imag(fft(x));
subplot(2,1,1);
plot(yr);
subplot(2,1,2)
plot(yi);


虚部竟然不是纯0,而且数值还不小。

今天有时间又想了想这个问题。

原来之前看到的一个结论可以解决这个问题

没错就是频谱泄露问题
matlab中fft是对有限长度序列做fft。这个操作等价于把有限长度周期延拓后做离散傅里叶级数。所以就要求你这个有限序列刚好是理想时域图形的一个整数倍。所以就对采样频率与采样点数是有一个要求的。
上面代码中,把采样点数改为单个余弦波点数的整数倍就好了,就没有频谱泄露了。

clear all
fs=200;
N=2000;
t=0:1/fs:(N/fs-1/fs);
f=50;
x=cos(2*pi*f*t);

yr=real(fft(x));
yi=imag(fft(x));
subplot(2,1,1);
plot(yr);
subplot(2,1,2)
plot(yi);

挺有意思,屁用没有。

以上是关于有时候matlab得到的cos(sin) 的fft的为什么不是纯实(虚)的的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB /simulink中, sin导数后为啥cos(0)不等于1? 结果如图所示:

如何用matlab实现fft

matlab高手请进

用matlab实现的遗传算法

matlab练习程序(常微分方程向量场)

对AM信号FFT的matlab仿真