有时候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);

在这里插入图片描述

挺有意思,屁用没有。

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/120247174