5

2D 信号を取得して FFT する Python コードを作成しましたが、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最後にそれを追加したので、行を除いて他のすべてが機能することを私は知っています。2 次元の周波数成分を抽出するにはどうすればよいですか?

4

1 に答える 1

11

無効なパラメーターを渡しています。np.fft.fftfreq信号データのサイズを最初のパラメーター (整数) として受け取り、時間ステップを 2 番目のパラメーターとして受け取ります。最初のパラメーターとして配列を渡しています。

np.fft.fftただし、最初に信号に対して実行する必要があります。

明白なことを指摘するのは嫌いですが、読んでくださいnp.fft.fftfreq...サンプルコードは非常に明確です。


2D FFT を実行すると、次のように各次元に沿ってサンプル周波数を取得できます。

FreqCompRows = np.fft.fftfreq(FFTData.shape[0],d=2)
FreqCompCols = np.fft.fftfreq(FFTData.shape[1],d=2)
于 2013-01-29T12:52:50.700 に答える