从多维FFT提取频率 [英] Extracting frequencies from multidimensional FFT

查看:139
本文介绍了从多维FFT提取频率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经编写了一个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提取频率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆