基于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**2
。 map2alm
使用默认的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.
答案 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}
确定。
因此,每m
个l
值的总数由2l+1
给出,例如l=0
提供1 m
,l=1
提供3 m
,l=2
提供5 m
等等。
Healpix / Healpy使用的map2alm
函数接受输入参数nside
,然后默认使用3*nside-1
计算球谐函数。
但是,nside
也会确定每张地图的总像素数。像素总数npix
由npix = 12*nside**2
给出。
要审核:
npix = 12 * nside ** 2
l_max = 3 * nside - 1
因此,球谐系数的总数是i=0
到i= 2 * lmax + 1
的和系列。使用map2alm
的默认参数,这为我们提供了从i=0
到i = 6 * nside - 1
的总和(即2(3*nside-1) + 1
)
对于给定地图,总像素数为12 * nside ** 2
,球面调和系数总数a_lm
为i=0 to i= 6*nside-1
的总和。
正确?