这是一个数学问题,但它与numpy实现有关,所以我决定这样问它。也许我是大错特错了,但如果是这样的话,我希望被纠正。
numpy.ftt.ftt根据方程计算密度泛函:

numpy.ftt.fftfreq应该返回计算密度泛函的频率。
假设我们有:
x = [0, 0, 1, 0, 0]
X = np.fft.fft(x)
freq = np.fft.fftfreq(5)然后,对于信号x,它的密度泛函变换为X,计算X的频率由freq给出。例如,X[0]在频率freq[0]处是x的DFT,在频率freq[1]上是x的DFT,等等。
但是,当我用上述公式计算一个简单信号的密度DFT时,我的结果表明,X[1]是x在频率1上的密度DFT,而不是在freq[1]上,X[2]是x在频率2等处的DFT,而不是freq[2]等等。
例如:
In [32]: x
Out[32]: [0, 0, 1, 0, 0]
In [33]: X
Out[33]:
array([
1.00000000+0.j,
-0.80901699-0.58778525j,
0.30901699+0.95105652j, 0.30901699-0.95105652j,
-0.80901699+0.58778525j])
In [34]: freq
Out[34]: array([ 0. , 0.2, 0.4, -0.4, -0.2])如果我为k = 0.2 (或freq[1])计算上述信号的密度at,就会得到X在freq = 0.2: 0.876 - 0.482j,而不是X[1]。
但是,如果我为k = 1计算,则得到的结果与X[1]或-0.809 - 0.588j中的结果相同。
那我有什么误会?如果numpy.fft.fft(x)[n]是频率n的DFT,而不是n的numpy.fft.fttfreq(len(x))[n],那么numpy.fft.fttfreq的目的是什么?
发布于 2015-04-22 09:50:42
k = 0.2计算上述信号的密度DFT。我回答“你不应该”..。只有对k的整数值才能有意义地计算DFT。
k和频率之间的关系是由f_k = k Δf给出的,如果你更喜欢圆形频率,则是ω_k = k Δω,其中Δf = 1/T和Δω = 2πΔf,T是信号的周期。fftfreq的论点有点误导..。所需的一个是样本数n,可选参数是抽样间隔,默认情况下是d=1.0,但无论如何T=n*d和Δf = 1/(n*d)。(5)# d=1数组( 0。,0.2,0.4,-0.4,-0.2) >>> fftfreq(5,2)数组( 0.,0.1,0.2,-0.2,-0.1) >>> fftfreq(5,10)数组( 0.,0.02,0.04,-0.04,-0.02)
不同的T为5,10,50,相应的df为-.2,0.1,0.02 (I)。fftfreq不简单地要求信号的周期?因为它主要是用来帮助尼奎斯特频率问题的。
众所周知,DFT是周期的,对于长度为x的信号N,DFT(x,k)等于DFT(x,k+mN),其中m是整数。
这意味着只有N/2阳性和N/2阴性的不同频率,当N/2<k<N时,必须以最有意义的方式与k相关联的频率不是k df,而是(k-N) df。
为此,fftfreq需要更多的信息,即周期T,因此需要从抽样间隔的假设中选择n和计算df。发布于 2015-04-22 07:03:21
我认为,因为numpy.fft.fttfreq返回的数组中的值等于(k/n)*sampling frequency。
dft结果的频率等于k/n除以时间间隔,因为周期函数的周期振幅将成为fft后原始值的反比。可以认为数字信号函数是一个周期采样函数,由模拟信号函数卷积而成。时域卷积是频域上的乘法,因此输入数据的时间间隔将影响dft结果的频率间隔,频率间隔的值将变为原间隔除以时间间隔。当时间间隔为1时,dft结果的频率间隔等于1/n。因此,在dft之后,频率间隔将变成1/n除以时间间隔,时间间隔除以采样频率乘以1/n。
为了计算这一点,numpy.fft.fttfreq有两个参数,输入的长度和时间间隔,这意味着采样率的反比。输入的长度等于n,时间间隔等于结果k/n除以的值(默认为1)。
我尝试让k = 2,结果等于在您的例子中的X[2]。在这种情况下,k/n*1等于freq[2]。
发布于 2015-04-22 12:08:09
DFT是一种无量纲基变换或矩阵乘法。DFT的输出或结果与频率无关,除非您知道输入向量(每秒、每米、每弧度等)所表示的采样率。
可以用k=0.2计算相同长度N的Goertzel滤波器,但这个结果不包含在长度N的DFT或FFT结果中。DFT只包含整数k值的复Goertzel滤波结果。要从k到用Xk表示的频率,你需要知道采样率。
https://stackoverflow.com/questions/29789219
复制相似问题