Healpy / Healpix:总像素与总球谐系数之间的关系是什么?

时间:2015-06-12 22:19:18

标签: python astronomy healpy

基于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()函数现在返回300个值,即300个球谐系数a_lm。

arr.shape

输出" (300,)"。

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

计算一个a_lm需要多少像素?任何帮助/解释都非常感谢!

编辑: 如下所述,像素总数为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.

2 个答案:

答案 0 :(得分:2)

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

你可以想象它是这样的:地图像素是数据和球形谐波函数你“适合”数据。球谐函数是一个无穷多(正交)函数的系统。

现在你没有“适应”数据(像素)的无限多个函数,有限制,你设置lmax或mmax或两者。 (球谐函数通常用两个数字l和m标记/标识)。

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

因此,例如,如果lmax为2且对m没有限制,则表示您正在处理1 + 3 + 5 = 9个函数。因此,你将有9个alm系数,(=“拟合”的结果),独立于地图的像素数。

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

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

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你得到300 for nside 8)

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

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

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

答案 1 :(得分:0)

因此,如上所述,参数l_max确定球谐系数的数量a_ {lm}。对于l参数,数量从a_0变为a_{lmax}m参数由l_{max}, l_{max}-1, l_{max}-2, ...., -l_{max}+2, -l_{max}+1, -l_{max}确定。

因此,每ml值的总数由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的总和。

正确?