为什么我通过R中的FFT从简单的sin函数中获得两个频率尖峰?

Pet*_*ler 7 signal-processing r fft

我在数学课上学到了傅里叶变换,并认为我理解了它们.现在,我正在尝试使用R(统计语言)并在实践中解释离散FFT的结果.这就是我所做的:

x = seq(0,1,by=0.1)
y = sin(2*pi*(x))

calcenergy <- function(x) Im(x) * Im(x) + Re(x) * Re(x)

fy <- fft(y)
plot(x, calcenergy(fy))
Run Code Online (Sandbox Code Playgroud)

得到这个情节:

sin的能量密度谱(2*pi*(x))从0到1,步长为0.1

如果我理解这一点,那就代表了能量密度谱的"一半".由于变换是对称的,我可以将所有值镜像到x的负值以获得全谱.

但是,我不明白的是,为什么我会得到两个尖峰?这里只有一个窦性频率.这是一种混叠效应吗?

另外,我不知道如何从这个情节中获取频率.让我们假设窦功能的单位是秒,是1Hz的密度谱中1.0的峰值那么?

再说一遍:我理解FFT背后的理论; 实际应用是问题:).

谢谢你的帮助!

Pau*_*l R 11

对于N个点的纯实数输入信号,您将得到N个点的复数输出,其具有关于N/2的复共轭对称性.您可以忽略N/2以上的输出点,因为它们没有为实际输入信号提供有用的附加信息,但如果您绘制它们,您将看到前面提到的对称性,对于单个正弦波,您将在箱nN - n.(注意:您可以将上N/2个区间视为负频率.)总之,对于N个点的实际输入信号,您可以从FFT获得N/2个有用的复数输出区间,它代表来自DC的频率( 0 Hz)到奈奎斯特(Fs/2).