抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

最近计算宇宙学的21cm 强度映射3D功率谱,我主要计算的多级功率谱。我使用numpy.fft计算,其中对于个数为偶数的数组tb,假设tb.shape=(Nx,Ny,Nz),numpy.fft返回的数组tb_fft对应情况(以第一维度举例):

  • tb_fft[0]:0频率,表示输入信号的平均值,一般直接扔掉

  • tb_fft[1:Nx//2]:正频率

  • tb_fft[Nx//2]:正负奈奎斯特频率

  • tb_fft[Nx//2+1:]:负频率

下面是检验三维数组是否满足对称性(注意,此数组仅适用于实数,没考虑复数):

1
2
3
4
5
6
7
8
9
10
11
def check_symmetry(power_spectrum,shape):
# 计算正负频率的对称性
for i in range(1,shape[0]//2 + 1): # 从1到n//2
for j in range(1,shape[1]//2 + 1): # 从1到n//2
for k in range(1,shape[2]//2 + 1): # 从1到n//2
# 对称性应满足:power_spectrum[i, j, k] == power_spectrum[-(i+1), -(j+1), -(k+1)] # 因为这里检验的是实数
# 对于负频率部分,应该与正频率部分的复共轭对称
if not np.allclose(power_spectrum[i, j, k], power_spectrum[-i, -j, -k]):
print(f"Frequency symmetry check failed at ({i}, {j}, {k})")
return False
return True

至于其他包含奇数的情况,以后用到在更新

参考

评论



Powered by Hexo | Theme keep Volantis

本站总访问量 总访客数 🌎