首页 > 解决方案 > python中frq分析的新手,Scipy rfft

问题描述

我最近从 MATLAB 迁移到 python,因为 pyhton 更适合当前项目。由于我的论文是关于生物力学的,我发现自己处于深水中,因为我在 python 或这种类型的分析方面都没有经验。

我的功能如下所示:

def PolarFFT(data):                      
    L = len(data)
    R = np.zeros((data.shape))   
    R = sp.fftpack.rfft(data)     
    R = np.abs(R)
    R = R[1:-1]    
    n = R.size
    ts = 1/fs
    f = sp.fftpack.rfftfreq(L,ts)
    f = f[1:-1]

    outputfft = R
    outputfft[:,-1] = f

    return outputfft

accWindfrq = PolarFFT(accWind)

这是我迄今为止最好的镜头,但它没有按预期工作。它似乎只是以另一种比例输出原始数据。这个想法是有一个输出,它是一个 Lx4 矩阵,其中 col 1=x、2=y、3=z 和 4=频率箱。

有没有人可以帮我解决这个问题?或者指出我正确的方向?也许我上面所做的甚至是不可能的?非常感谢任何评论和帮助。

此致

标签: pythonpython-3.x

解决方案


我假设这accWind是一个 Lx3 数组。
R = np.zeros((data.shape))不做任何事情,因为它将被替换。下一行指向R新数据,而不是将其复制到R.
R = sp.fftpack.rfft(data)应该是R = sp.fftpack.rfft(data, axis=0)。默认情况下,它在最后一个轴上进行傅立叶变换。
outputfft[:,-1] = f不连接数组。它会覆盖最后一列。您可以使用以下之一:

outputfft = np.concatenate((R, f), axis=1)
# or
outputfft = np.hstack((R, f))
# or
outputfft = np.empty((f.size, 4), dtype='c')
outputfft[:, :-1] = R
outputfft[:, -1] = f

我只包括最后一个,因为我认为这就是你想要的。


推荐阅读