问题描述
我已经编写了一个Python代码来获取2D信号并对其进行FFT,现在我想提取与FFT相关的频率. np.fft.fftfreq
失败,给我错误
I've written a python code to take a 2D signal and FFT it, and now I want to extract the frequencies associated with the FFT. The np.fft.fftfreq
fails, giving me the error
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
行以外的所有其他功能都可以,因为我在最后添加了该行.一个如何提取二维频率分量?
I know that everything else works except the np.fft.fftfreq
line, because I added that in last. How does one extract 2 dimensional frequency components?
推荐答案
您传入的参数无效:np.fft.fftfreq
将信号数据的大小作为第一个参数(整数),并将时间步长作为第二个参数.您将传入数组作为第一个参数.
You are passing in an invalid parameter: np.fft.fftfreq
takes the size of the signal data as first parameter (an integer) and the timestep as the second parameter. You are passing in an array as the first parameter.
但是您需要先在信号上执行np.fft.fft
.
You need to perform an np.fft.fft
on the signal first though.
讨厌指出显而易见的内容,但请阅读 np.fft.fftfreq
...示例代码非常清晰.
Hate to point out the obvious, but read np.fft.fftfreq
... the example code is very pretty clear.
执行2D FFT后,您可以按以下方式获得沿每个维度的采样频率:
Having performed a 2D FFT, you can obtain the sample frequencies along each dimension as follows:
FreqCompRows = np.fft.fftfreq(FFTData.shape[0],d=2)
FreqCompCols = np.fft.fftfreq(FFTData.shape[1],d=2)
这篇关于从多维FFT提取频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!