我只是在学习Matlab和快速傅立叶变换算法。
作为第一步,我尝试复制此示例:https://en.wikipedia.org/wiki/Fourier_transform#Example
我使用以下代码:
t = -6:0.01:6;
s = cos(2 * pi * 3 * t) .* exp(-pi * t.^2);
figure(1);
plot(t, s);
xlim([-2 2]);
r = fft(s);
figure(2);
plot(t, abs(r));
我得到了以下图片:
图2:
图1没问题,但图2没有。我看到问题之一是在图2中我应该绘制矢量r 对抗频率,而不是时间。图2中的另一个问题是Y轴上的刻度。
因此,我有两个问题要复制这个例子:
答案 0 :(得分:0)
我第一次记得有一次我想在我使用这个webpage的一个研究项目中使用DFT和FFT,它详细解释了如何这样做的例子。我建议你仔细阅读并尝试复制你的情况,这样做可以让你深入了解并更好地理解你可以使用FFt的方式,因为你说你是Matlab的新手。如果您需要更详细的帮助,请不要犹豫再次询问。
并且还要记住,对于FFT,最好使用2的幂信号长度,这样你就可以获得最精确的结果,如果你无法控制信号长度,你可以获得2的最大功率。接近这个长度,就像每个人一样。
答案 1 :(得分:0)
您的问题是,您实际上并未创建频率向量来绘制fft
。 fft对时间绘制的原因是因为这是您在绘图命令中指定的。
这是一个有效的fft大纲:
N=length(t);
index=0:N-1;
FrequencyResolution=SamplingRate/N;
Frequency=index.*FrequencyResolution;
data_fft=fft(detrend(data));
%the detrend isn't necessary but it does look nicer because it focuses the plot on changes around the mean of the data
data_FFTmagnitude=abs(data_fft);
plot(Frequency, data_FFTmagnitude)