Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在R中通过FFT从简单的正弦函数中得到两个频率尖峰?_R_Signal Processing_Fft - Fatal编程技术网

为什么在R中通过FFT从简单的正弦函数中得到两个频率尖峰?

为什么在R中通过FFT从简单的正弦函数中得到两个频率尖峰?,r,signal-processing,fft,R,Signal Processing,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)) x=seq(0,1,by=0.1) y=sin(2*pi*(x)) calcene

我在数学课上学习了傅里叶变换,并认为我已经理解了它们。现在,我正在尝试使用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))
x=seq(0,1,by=0.1)
y=sin(2*pi*(x))

calcenergy对于N个点的纯实输入信号,可以得到N个点的复输出,其复共轭对称性约为N/2。您可以忽略N/2以上的输出点,因为它们没有为实际输入信号提供任何有用的附加信息,但如果绘制它们,您将看到上述对称性,对于单个正弦波,您将在bins
N
N-N
处看到峰值。(注意:您可以将上面的N/2个单元视为表示负频率。)总之,对于N个点的实际输入信号,您可以从FFT获得N/2个有用的复数输出单元,它们表示从DC(0 Hz)到Nyquist(Fs/2)的频率.

要从FFT结果中获取频率,您需要知道输入到FFT的数据的采样率和FFT的长度。每个单元的中心频率是单元索引乘以采样率除以FFT的长度。因此,您将在中间仓获得从DC(0 Hz)到Fs/2的频率


FFT结果的后半部分只是实际数据输入前半部分的复共轭。原因是复共轭的虚部会取消,这是表示虚部内容为零的求和结果所必需的,例如严格实数。

谢谢您的回答。我只是试着用奇数个值来表示
seq(0,1.1,by=0.1)
,事实上,正如你所说,对称性正好在第六个桶的周围。这已经回答了我的第一个问题。第二个呢,我如何推断这些垃圾箱的频率?如果可以的话,我会投票(需要15个代表):/哦,刚才看到你已经回答了:)谢谢!我投了更高的票,赞成你的问题,让你更有代表性切向而言,
calcenergy
可以写成
函数(x)abs(x)^2
。(这会更有效率)。@dbaupp哦,谢谢。我知道有一些内在的方法可以做到这一点,但我懒得去寻找:)