繁体   English   中英

numpy.fftn中哪些高频项?

[英]which are the high frequency terms in numpy.fftn?

我正在numpy中使用fftn来生成20单元1D阵列和20x20x20 3D阵列的离散FT,并希望抑制高频项,从最高频率开始,向较低频率延伸。 我对连续FT更加熟悉,并且难以确定DFT中的高频术语。 我应该在哪里看fftn生成的数组? (我计划在反向转换之前将这些值设置为零。)

根据numpy.fft.fftn文档中的注释

fft类似,输出包含所有轴低阶角中的零频率项,所有轴前半部中的正频率项,所有轴中部的奈奎斯特频率项和负值。频率项在所有轴的后半部分中按负频率递减的顺序排列。

但是请注意,对于奇数大小的阵列,不显示奈奎斯特频率。 同样,假设您正在处理实值信号,则离散傅立叶变换将具有厄米对称性。 每当您在频域中处理这些信号时,如果您希望信号在逆变换后保持实值,则保持对称性就很重要。 在将频率分量归零时,这意味着您还应该在相应的负频率处将频率分量归零。

这对您的20单元1D数组(例如数组x )特别意味着什么,因此L最高频率点(包括L/2正频率和L/2负频率)是

lower = (len(x)-L)/2+1
upper = (len(x)+L)/2+1
x[lower:upper]

同样,对于您的20x20x20 3D阵列(例如阵列y ),沿每个轴的L最高频率点是:

lower = [(d-L)/2+1 for d in y.shape]
upper = [(d+L)/2+1 for d in y.shape]
y[lower[0]:upper[0],:,:] # middle of axis 0
y[:,lower[1]:upper[1],:] # middle of axis 1
y[:,:,lower[2]:upper[2]] # middle of axis 2

现在假设hotpaw2这篇文章中描述的振铃效果对您的应用程序来说不是问题,那么您可以使用以下方法将这些垃圾桶归零:

import numpy as np;
L     = 3 # number of bins to zero out along each axis (change this to fit your needs)
          # should be odd for even length array, and even for odd length array

# Following assumes x is the 1D array
lower = (len(x)-L)/2+1
upper = (len(x)+L)/2+1
x[lower:upper] = 0 # zero-out in the middle

# Following assume y is the 3D array
lower = [(d-L)/2+1 for d in y.shape]
upper = [(d+L)/2+1 for d in y.shape]
y[lower[0]:upper[0],:,:] = 0 # zero-out in the middle of axis 0
y[:,lower[1]:upper[1],:] = 0 # zero-out in the middle of axis 1
y[:,:,lower[2]:upper[2]] = 0 # zero-out in the middle of axis 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM