Python 从多维FFT中提取频率

Python 从多维FFT中提取频率,python,scipy,fft,Python,Scipy,Fft,我已经编写了一个python代码来获取2D信号并对其进行FFT,现在我想提取与FFT相关的频率。np.fft.fftfreq失败,给出了错误信息 File "/usr/lib64/python2.7/site-packages/numpy/fft/helper.py", line 153, in fftfreq assert isinstance(n,types.IntType) or isinstance(n, integer) AssertionError 我的代码是: impor

我已经编写了一个python代码来获取2D信号并对其进行FFT,现在我想提取与FFT相关的频率。
np.fft.fftfreq
失败,给出了错误信息

File "/usr/lib64/python2.7/site-packages/numpy/fft/helper.py", line 153, in fftfreq
    assert isinstance(n,types.IntType) or isinstance(n, integer)
AssertionError
我的代码是:

import numpy as np
import scipy as sp
import pylab
import sys
import math

filename = sys.argv[1]  # Get name of file to open 

ifp = open(filename, "r")
ifp.seek(0)

nrows = 0
ncols = 0

nrows = sum(1 for line in ifp) # Sum over all the lines in the file ptr

ifp.seek(0) # Set the fptr back to beginning of file
for line in ifp:
   ncols = len(line.split()) #Split and count number of words in a line
   if ncols > 0:
      break

OrigData = np.zeros([nrows, ncols], dtype=np.float32) #Allocate numpy array
FFTData = np.zeros([nrows, ncols], dtype=complex)
IFFTData = np.zeros([nrows, ncols], dtype=complex)
FreqComp = np.zeros([nrows, ncols], dtype=np.float32)

ii = 0
jj = 0
ifp.seek(0)
for line in ifp:
   linedata = line.split()
   jj = 0
   for el in linedata:
      OrigData[ii,jj] = float(el)
      jj+=1
   ii+=1
ifp.close()

FFTData = np.fft.fft2(OrigData)
FreqComp = np.fft.fftfreq(FFTData, d=2)

#--- Continue with more code ---#

我知道除了
np.fft.fftfreq
行之外,其他所有东西都可以工作,因为我在上一篇文章中添加了这一行。如何提取二维频率分量?

您正在传递一个无效参数:
np.fft.fftfreq
将信号数据的大小作为第一个参数(整数),将时间步长作为第二个参数。您正在传入一个数组作为第一个参数

您需要首先对信号执行
np.fft.fft

我不想指出显而易见的事情,但请阅读。。。示例代码非常清晰


执行2D FFT后,您可以获得每个维度的采样频率,如下所示:

FreqCompRows = np.fft.fftfreq(FFTData.shape[0],d=2)
FreqCompCols = np.fft.fftfreq(FFTData.shape[1],d=2)

对不起,我忘了将行粘贴到进行FFT的位置P但是对于2d的情况,这将如何工作呢?它将返回一个1d频率分量数组,我不知道如何解释它。您使用的是fft还是fft2?啊,对不起,没有注意到您的更新。
fft2
,它们都是我定义的2D数组。谢谢!但现在我不知道该怎么解释。。。如果我必须计算二维阵列上某个点的频率,这个方法会给我两个不同的频率,一个用于行,一个用于列。这是
sin
波的
x
y
分量的频率吗?你似乎和我一样,在观察2D信号及其相应的2D频率分布时遇到了同样的问题。目前我能想到的最好的方法是将它看作两个正交波(像电磁场),因此2D FFT将是每个波的频率距离…参见