Healpy/Healpix:总像素数和总球谐系数有什么关系?

Healpy/Healpix: What is the relationship between the total pixels and total spherical harmonic coefficients?

根据 Healpy/Healpix 文档,我无法理解天空图中的一个像素(这是一些测量值)与 Healpy 的 healpy.sphtfunc.map2alm 函数产生的球谐系数之间的关系,它计算给定地图的 a_lm 系数数组。 (这个问题也适用于anafast。)

我的理解是给定的像素应该对应一个球谐系数。然而,事实并非如此。完全没有。

nside = 8拍一张地图。本程序使用Healpy读取一张FITS格式的CMB地图,手动设置nside值,读入地图,显示,然后计算球谐系数。

import math
import matplotlib.pyplot as plt 
import numpy as np
import healpy as hp
import pyfits as pf

filename = "cmb_map.fits"    # the name of the full-sky map 

readmap = hp.read_map(filename)   # readmap i.e. input map
nside = 8    # manually input the side value

''' 
Here outputs: 
NSIDE = 8
ORDERING = RING in fits file
'''

view = hp.mollview(readmap)  # view the map, i.e. display it
'''
Shows sky map of the CMB
'''

totalnumberpixels = hp.nside2npix(nside)
print totalnumberpixels      # For nside = 8, this should be 12*nside**2 = 768

arr = hp.map2alm(readmap)    # This is an array of a_lm values

到目前为止一切顺利。 hp.map2alm() 函数现在 returns 300 个值,即 300 个球谐系数 a_lm。

arr.shape

输出“(300,)”。

为什么 768 个像素会计算出 300 个 a_lm 值? nside和球谐系数总数之间是否存在数学关系?每个 nside 是否给出不同数量的 a_lm 系数?

计算一个a_lm需要多少像素?非常感谢任何 help/explanation!


编辑: 如下所述,像素总数为npix = 12*nside**2map2alm 使用默认值 lmax = 3*nside-1。所以,球谐系数的总数应该是奇数之和,最多为3*nside-1=23。球谐系数的总数应该是(2*lmax+1)**2 = (6*nside-1)**2。 (2*lmax+1)^2=(2*23+1)^2 = (47)^2 = 2209 那么,这个数字300是从哪里来的呢? map2alm 到底在做什么?这怎么可能只是一个近似值?

我预计 2209 a_lm。我算了300。

像素和球谐系数之间没有直接关系。

您可以这样想象:地图像素是数据和您 "fit" 对数据的球谐函数。球谐函数是无限多(正交)函数的系统。

现在你对数据(像素)没有"fit"无限多的功能,有限制,你设置lmax或mmax或两者。 (球谐函数通常是 labelled/identified 乘以两个数字 l 和 m)。

l 和 m 是整数,l 从 0 到无穷大,对于每个 l,m 从 -m 到 m。

因此,例如,如果 lmax 为 2 并且对 m 没有限制,那么您正在处理 1+3+5=9 个函数。因此,您将有 9 个 alm 系数,(="fit" 的结果),独立于地图有多少像素。

好的,到目前为止一切顺利。 现在,球谐函数是复函数,系数也是。但地图是纯粹真实的。 因此,当阅读球谐函数时(维基百科已经足够好了),人们会发现如何定义球谐函数的实基,基本上使用 属性 即 Y_l,m=(-1)^m Y *_l,-m ,其中星号表示复数 conj。

现在如果你用复数作为这个基础函数的参数,你需要多少个?对于给定的 l,您将需要 l+1 个复数(记住我们从 l=0 开始计算)。如果你对给定的 l 求和,你会得到:

l=0 --> 1
l=1 --> 1+2=3
l=2 --> 1+2+3=6
l=3 --> 1+2+3+4=10
etc.

(请注意,如果将其加起来为 3*nside-1,则 nside 8 会得到 300)

同样重要的是要注意,对于这些复系数中的恰好 l+1 个,它们的虚部将为零! (对应 Y_l0 的那些)。现在,如果您计算独立参数的数量,例如 l=3:

l=3 --> 1+2+3+4=10

所以 10 个复数 = 20 个独立参数。但是其中4个只有实部20-4=16。正是人们所期望的,因为完整的虚部 Y_lm 有 32 个独立参数,所以实部将有一半。

所以,如上所述,参数l_max决定了球谐系数a_{lm}的个数。对于 l 参数,a 的数量从 a_0a_{lmax}m参数由l_{max}, l_{max}-1, l_{max}-2, ...., -l_{max}+2, -l_{max}+1, -l_{max}决定。

因此,每个 lm 个值的总数由 2l+1 给出,例如l=0 给出 1 个 ml=1 给出 3 个 ml=2 给出 5 个 m,等等

Healpix/Healpy使用的map2alm函数接受输入参数nside,然后默认使用3*nside-1计算球谐函数。

但是,nside 还决定了每张地图的像素总数。总像素数 npixnpix = 12*nside**2 给出。

评论:

npix = 12 * nside ** 2

l_max = 3 * nside - 1

因此,球谐系数的总数是i=0i= 2 * lmax + 1的和级数。使用 map2alm 的默认参数,这给了我们从 i=0i = 6 * nside - 1 的总和(即 2(3*nside-1) + 1

对于给定的地图,像素总数为12 * nside ** 2,球谐系数总数a_lmi=0 to i= 6*nside-1.

的总和

对吗?