x轴在此傅立叶变换中真正代表什么以及如何进行变换?

时间:2018-10-10 16:29:11

标签: matlab

这是我上一门课程的问题,只想说明一下。

我想做的是对一个方波进行采样,进行傅立叶变换(fft)并绘制图形答案。这就是我实现这一目标的方式:

Fs = 100;
Ts = 1/Fs;
N = 8192;

Tmax = (N - 1)*Ts;
t = 0:Ts:Tmax;

x = square(t);
X = fft(x,N);

plot(t, abs(X))

返回的是一个看起来像这样的图

The graph

这看起来几乎是经过检查的,但是由于我不知道对方波会有什么期望,因此我也尝试使用$ \ sin(2 * t)$波来实现。如果对此进行傅立叶变换,则应该得到2个尖峰,每个尖峰分别为2和-2(右侧)。但是我得到的是这样的东西

Zoomed in on the interesting part

(注意!我已经放大了图表的左侧以显示尖峰不在2处)。您可以看到,尖峰不在应有的位置。然后我可以得出结论,大概是1图并不符合其应有的水平。

我的x轴表示形式有问题吗?如果是这样,如何将x轴转换为频率平面?

1 个答案:

答案 0 :(得分:1)

FFT产生的频率范围是从0到采样频率。具体来说,FFT的水平轴对应于频率0fs/N2*fs/N,...,(N-1)*fs/N,其中fs是采样频率, N是FFT大小。

因此,您应将绘图中的水平轴修改为以下内容,其中Nnumel(t),而fs的计算方式为1/(t(2)-t(1))

freq_axis = (0:numel(t)-1)/numel(t)/(t(2)-t(1));
plot(freq_axis, abs(X))

您可能还希望应用fftshift来观察从-fs/2fs/2的频率,而不是从0fs的频率。在这种情况下:

freq_axis = (-numel(t)/2:numel(t)/2-1)/numel(t)/(t(2)-t(1));
plot(freq_axis, fftshift(abs(X)))

作为检验,以您的示例x = sin(2*t)为例,第二个图给出:

enter image description here

将您的sin(2*t)与通用表达式sin(2*pi*f*t)进行比较,可以看到该正弦曲线的频率f1/pi = 0.3183,与数字一致。