FITS简介


本文删节翻译自:A Primer on the FITS Data Format

FITS (Flexible Image Transport System, 普适图像传输系统)1 是天文学上使用的一种用于存储、传输、分析的数据格式,它主要设计用来存储多维数组和表格数据。比如天文望远镜观测的数据,一般是以图像格式存储,图像就是一类多维数组。表格数据则是存储星表类数据。

FITS 文件组成

FITS文件由一个或者多个被称为HDU(Header/Data Units, 头、数据单元)的单元组成,其中第一个被称作Primary HDU(主HDU),主HDU可以包含1-999维的一个数组,数组数据的类型由头信息进行定义。典型的数据包括:2-D图像、1-D的光谱以及3-D的数据立方体。

主HDU之后还可以包含多个扩展HDU(FITS extensions),典型的扩展类型有:

  • 图像扩展,可以存储0-999维的像元数据,定义与主HDU类似,它的头定义是 XTENSION = 'IMAGE'
  • ASCII 表格扩展,主要用来存储2维的表格数据,存储的格式是以ASCII的文本格式存储。它的头定义是 XTENSION = 'TABLE'
  • 二进制表格扩展,与ASCII表格扩展类似,主要用来存储2维表格数据,但是其存储格式是二进制。它的头定义是 XTENSION = 'BINTABLE'

除了上述类型外,还有一种HDU被称作Random Groups,它主要用作射电干涉数据领域。

每个HDU都由Header UnitData Unit组成,不管是头单元还是数据单元都是由2880的整数倍个字节组成,如果不足的话,一般会以ASCII空白或者NULL进行填充。

头单元 Header Unit

每个头单元由一系列80个字符字节固定宽度的记录组成,2880个字节恰好可以包含36条记录。每个记录的格式如下:

KEYNAME = value / comment string

KEYNAME关键字最长为8个字符,合法字符是大写的A-Z0-9-_。关键字后面一般会跟着一个等号=(在第9列或者第10列),再之后就是关键字的值信息,值类型有:

  • 数值型:整数、浮点数、复数(一对数字);
  • 字符串:单引号包含;
  • 布尔值:T或者F

有时候一条记录仅是注释(COMMENT)或者历史(HISTORY)类型信息,则不需要使用等号。

值后面一般有注释信息,注释信息以/开始,最多到第80个字符字节处。

FITS标准里定义了53个常用的关键字,详细信息可以参见2

每个头单元的最后一个记录的关键字都是END,它无值和注释字段。

特别注意,在头单元里,合法的只有从0x20-0x7E之间的字符,非打印字符,比如TAB和换行符等是不允许在头单元里出现的。

数据单元 Data Unit

紧跟这头信息的最后一个2880数据块之后的就是数据单元,数据单元并不是必须的,很多情况下,一个HDU只包含头单元,而不包含数据单元。

图像数据

一般图像像元(pixel)的数据格式有:

  • 8-bit (无符号)整数(1字节长);
  • 16-bit (有符号)整数(2字节长);
  • 32-bit (有符号)整数(4字节长);
  • 32-bit 单精度浮点数(4字节长);
  • 64-bit 双精度浮点数(8字节)。

表格数据

表格数据一般在头信息里定义字段的值类型,可以参见FITS 星表的数据类型。ASCII 表格的一个字段只允许包含一个标量值。而对于 BINTABLE则是可以包含复杂的值,甚至可以定义固定长度和变长,以及显示的格式等。