繁体   English   中英

在Python中从FFT或RFFT查找FFT系数

[英]Finding FFT coefficients from FFT or RFFT in Python

我想将前五个fft系数的总和用作分类器的功能(在Python语言中)。 我尝试了一些资源,但无法理解这个概念。 例如,我有10个元素的数组。

a = [ 1, 2, 3, 4, 1, 1, 1, 1, 1, 1] # Lets say, it represent discrete values of the x-axis of an accelerometer  

如果我将Python中的fft应用于此数组,则会得到以下输出:

array([ 16.00000000+0.j        ,   0.50000000-5.34306783j,
        -3.73606798-0.36327126j,   0.50000000+1.98786975j,
         0.73606798-1.53884177j,  -2.00000000+0.j        ,
         0.73606798+1.53884177j,   0.50000000-1.98786975j,
        -3.73606798+0.36327126j,   0.50000000+5.34306783j])

如果我将Python中的rfft(实际fft)应用于此数组,则会得到以下输出:

array([ 16.        ,   0.5       ,  -5.34306783,  -3.73606798,
        -0.36327126,   0.5       ,   1.98786975,   0.73606798,
        -1.53884177,  -2.        ])

如何从这两个输出计算前五个系数的总和?

如果是rfft:应该仅仅是前五个值的绝对值之和吗?

  1. 有人可以解释这两个输出之间的区别吗? rfftrfft只显示fft的真实部分吗?

rfft有效地计算实值输入序列的FFT,而fft计算可能的复数输入序列的FFT。 如果输入序列恰好是纯实数,则在某些数字精度和包装考虑的范围内, fft将返回等效输出。 更具体地说,对于包装, rfft避免返回频谱的上半部分,该频谱的上半部分在计算实值输入的FFT时恰好是对称的。 它还避免返回DC(0Hz)二进制数和Nyquist频率(一半采样率)二进制数的虚部,因为当处理实值输入时,它们始终为零。

因此,您示例的fft.fft的输出可以映射到fft.rfft的以下输出:

16.00000000+0.j         -> rfft[0]        
0.50000000-5.34306783j  -> rfft[1], rfft[2]
-3.73606798-0.36327126j -> rfft[3], rfft[4]
0.50000000+1.98786975j  -> rfft[5], rfft[6]
0.73606798-1.53884177j  -> rfft[7], rfft[8]
-2.00000000+0.j         -> rfft[9]
  1. 如何从这两个输出计算前五个系数的总和? rfft情况下:应该仅仅是前五个值的绝对值之和吗?

从输出的不同包装中可以看出, fft.fft的前5个复值系数对应于fft.rfft返回的前9个浮点值。 要计算总和,您将必须分别计算实部和虚部的和。 因此,对于前五个系数的总和,这将为您提供:

A = np.fft.rfft(a);
sum_re = A[0] + A[1] + A[3] + A[5] + A[7];
sum_im =        A[2] + A[4] + A[6] + A[8];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM