Python 从多维FFT中提取频率
我已经编写了一个python代码来获取2D信号并对其进行FFT,现在我想提取与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
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将是每个波的频率距离…参见