在 scilab 中无法获得正确的光谱

信息处理 matlab 离散信号
2022-02-10 07:00:28

我正在尝试编写一个简单的脚本,该脚本应该在 scilab 中绘制频谱,为了测试它,我使用了 440hz 的正弦函数,以便我的狄拉克处于这个位置,我的问题是它不起作用而且我没有不明白为什么?这是代码:

Fs = 8000;
f = 440;
t= 0:1/Fs:1;
y = sin(2*%pi*f*t);

nf = 1024; // number of point in the DFT
Y = fft(y)
f = Fs/2  * linspace(0,1,nf/2+1);
clf();
plot(f,abs(Y(1:nf/2+1))); 

这就是我得到的: 图片

知道为什么我会得到这个吗?

1个回答

您的 fft 向量 Y 与您的输入信号 y 具有相同的长度,因为您只是指定了 nf 而没有让 fft() 知道您想要的 FFT 长度是多少。这就是为什么您的峰值不会出现在 440 Hz 的原因。您的向量 Y 与 f 中的频率不对应。这只是正确缩放 x 轴的问题。

编辑:我不知道 scilab,所以我不知道如何将所需的 FFT 长度传递给 fft()。如果你不能这样做,你只需要让你的时域信号具有所需的 FFT 长度。