관측데이터의 상관처리에서 살펴본 상관기의 출력은 아직 우리가 보는 "사진"이 아니라, 각 망원경 쌍(기선)·시간·주파수별로 얻은 밝기와 위상 정보인 가시성 데이터(visibility data)입니다. 상관처리가 "신호를 맞추어 합치는" 과정이라면, 이 가시성 데이터를 실제로 눈에 보이는 영상으로 바꾸는 것은 완전히 다른 별도의 계산 과정이며, 이 페이지에서 그 방법을 살펴봅니다. 자료는 이 과정에서 상관기가 만든 FITS-IDI → 보정을 마친 UVFITS → 완성된 FITS 영상으로 모습을 바꿉니다. 먼저 이 자료들을 담는 FITS 파일의 구조를 보고, 처리 단계와 영상이 만들어지는 원리(역푸리에 변환과 CLEAN), 화면에 표시하는 방법, 파이썬 분석과 연구자의 고민까지 차례로 따라가 봅니다.
FITS는 1979년에 천문대끼리 자료를 주고받기 위해 만든 형식으로, 지금은 전파·광학·X선 등 거의 모든 천문 자료가 이 형식을 씁니다. 구조는 단순합니다. 파일은 2,880바이트 블록을 이어 붙인 것이고, 그 안에 헤더(설명서)와 데이터(숫자 배열)가 한 쌍을 이룬 HDU(Header-Data Unit)가 하나 이상 들어 있습니다. 헤더는 사람이 그대로 읽을 수 있는 80글자짜리 줄(카드)들이고, 데이터는 컴퓨터가 읽는 이진 숫자입니다.
전파 영상 FITS에서 특히 중요한 헤더 키워드는 다음과 같습니다. 헤더만 읽어도 "어디를, 무엇으로, 어떤 크기로 찍었는지" 알 수 있습니다.
| 키워드 | 예 | 뜻 |
|---|---|---|
| SIMPLE · BITPIX | T · −32 | 표준 FITS임 · 픽셀 하나의 형식(−32 = 4바이트 실수, 16 = 2바이트 정수) |
| NAXIS · NAXISn | 4 · 256, 256, 1, 1 | 축의 개수와 각 축의 길이. 전파 영상은 보통 4축(가로·세로·주파수·편파) |
| BSCALE · BZERO | 1.0 · 0.0 | 저장된 숫자를 실제 값으로 바꾸는 식: 실제 값 = BZERO + BSCALE × 저장 값 |
| BUNIT | 'JY/BEAM' | 픽셀 값의 단위. 빔 하나 넓이에 들어오는 세기(잰스키) |
| CTYPEn · CRPIXn · CRVALn · CDELTn | 'RA---SIN' · 129 · 187.278° · −2.78e−8° | 좌표(WCS): 기준 픽셀 CRPIX가 하늘 좌표 CRVAL에 해당하고, 한 칸마다 CDELT도씩 바뀜(−2.78×10−8° = −0.1밀리각초) |
| BMAJ · BMIN · BPA | 2 mas · 1 mas · −10° | 복원 빔(CLEAN 빔) 타원의 긴지름·짧은지름(도 단위로 저장)·기울기. 영상의 '해상도' |
| CRVAL3 · CTYPE4 | 4.3e10 Hz · 'STOKES' | 관측 주파수(43 GHz) · 편파 성분(1 = 전체 세기 I) |
| OBJECT · TELESCOP · DATE-OBS | '3C273' · 'KVN' · '2026-03-01' | 천체 이름 · 망원경 · 관측 날짜 |
| HISTORY | HISTORY CLEAN … | 어떤 처리를 거쳤는지 적은 기록. 다른 사람이 처리 과정을 되짚을 수 있음 |
같은 FITS라도 처리 단계마다 담긴 내용이 다릅니다. 앞의 두 가지는 아직 '그림'이 아니라 측정값의 표이고, 마지막 하나가 우리가 보는 영상입니다.
| 형식 | 만드는 곳 | 담긴 내용 | 크기 (대략) |
|---|---|---|---|
| FITS-IDI | 상관기 (상관처리) | 여러 개의 표(이진 테이블): 기선·시각·주파수 채널별 복소수 가시성(UV_DATA), 안테나 위치(ARRAY_GEOMETRY, ANTENNA), 주파수 설정(FREQUENCY), 천체 목록(SOURCE), 시스템 온도·이득 같은 보정용 정보 | 관측 하나에 수 GB ~ 수백 GB |
| UVFITS | AIPS·CASA에서 보정 후 천체별로 잘라 냄 | 보정된 가시성: 각 측정마다 u, v, w 좌표, 기선 번호, 시각과 (실수, 허수, 가중치) 묶음 | 천체 하나에 수 MB ~ 수 GB |
| FITS 영상 | Difmap·CASA·AIPS의 영상화 | 픽셀 배열(Jy/beam)과 좌표·빔·주파수 정보. DS9 같은 보기 프로그램으로 바로 열림 | 영상 하나에 수백 KB ~ 수 MB |
FITS-IDI는 내용이 빈 첫 HDU 뒤에 이진 테이블 HDU가 여러 개 이어진 파일입니다. 엑셀의 시트 여러 장과 비슷하게, 시트마다 이름(EXTNAME)이 붙어 있습니다.
| HDU 이름 (EXTNAME) | 담긴 내용 |
|---|---|
| PRIMARY | 데이터 없이 헤더만 있는 첫 HDU (관측 이름, 만든 프로그램 등) |
| ARRAY_GEOMETRY | 망원경들의 지구 중심 좌표(X, Y, Z), 관측 기준 날짜 |
| ANTENNA | 안테나 번호와 이름, 편파 종류, 편파 누설 값 |
| FREQUENCY | 주파수 대역(IF)별 시작 주파수, 채널 폭, 채널 수, 측파대 |
| SOURCE | 관측한 천체 이름과 좌표(적경·적위), 고유 운동 등 |
| INTERFEROMETER_MODEL | 상관기가 사용한 지연·위상 예측 모형(다시 보정할 때 필요) |
| SYSTEM_TEMPERATURE · GAIN_CURVE | 시간별 시스템 온도, 고도에 따른 안테나 이득 → 진폭 보정 재료 |
| FLAG | 관측소가 미리 알려 준 '쓰면 안 되는 시간' 목록 |
| UV_DATA | 가시성 자료 본체. 한 줄 = 기선 하나 × 적분 시간 하나 |
| UV_DATA의 열 | 뜻 |
|---|---|
| UU---SIN · VV---SIN · WW---SIN | 그 순간 기선의 u, v, w 좌표(초 단위: 빛이 기선을 지나는 시간). 관측 주파수를 곱하면 파장 단위가 됨 |
| DATE · TIME | 관측 날짜(율리우스일)와 그날 안의 시각 |
| BASELINE | 기선 번호 = 256 × 안테나1 + 안테나2 (예: 1번·3번 안테나 → 259) |
| SOURCE · FREQID · INTTIM | 천체 번호, 주파수 설정 번호, 적분 시간(초) |
| FLUX | 복소수 가시성 배열: 대역(IF) × 채널 × 편파 조합 × (실수, 허수) — 파일 크기의 대부분 |
UVFITS는 오래된 '랜덤 그룹' 구조를 씁니다. 측정 하나가 그룹 하나이고, 그룹마다 앞에 매개변수(UU, VV, WW, BASELINE, DATE 등)가 붙고 뒤에 (실수, 허수, 가중치) 묶음이 편파·채널·대역별로 이어집니다. 헤더의 PTYPEn이 매개변수 이름을, CTYPEn이 COMPLEX·STOKES·FREQ·IF·RA·DEC 축 이름을 알려 줍니다. 안테나 목록과 주파수 정보는 'AIPS AN', 'AIPS FQ' 같은 이름의 테이블 HDU로 뒤에 붙습니다.
상관기 출력을 영상으로 만드는 일은 크게 보정 → 역푸리에 변환 → CLEAN입니다. 주로 미국 국립전파천문대(NRAO)가 만든 AIPS와 최신 표준 소프트웨어 CASA, VLBI 영상화에 특화된 Difmap을 쓰며, KVN·EAVN 자료도 이런 프로그램으로 처리합니다. 실제 작업 단위로 나누면 다음과 같고, 이름은 달라도 하는 일은 같습니다.
| # | 단계 | 하는 일 | AIPS 작업 예 | CASA 작업 예 |
|---|---|---|---|---|
| 1 | 불러오기 | FITS-IDI 파일의 표들을 읽어 처리용 데이터로 만듦 | FITLD | importfitsidi |
| 2 | 살펴보고 걸러 내기 | 망원경이 천체를 놓친 시간, 전파 간섭이 섞인 채널 같은 나쁜 자료를 표시해 빼냄(플래깅) | UVFLG, SPFLG | flagdata, plotms |
| 3 | 진폭 보정 | 시스템 온도와 안테나 이득으로 '얼마나 밝은지'를 잰스키 단위로 맞춤 | ACCOR, APCAL | gencal, applycal |
| 4 | 프린지 맞추기 | 망원경별로 남은 시간 지연·위상 변화율을 찾아 위상을 바로잡음 | FRING | fringefit |
| 5 | 대역 통과 보정 | 주파수 채널마다 다른 장비 응답을 평평하게 맞춤 | BPASS | bandpass |
| 6 | 보정 적용 · 천체별 분리 | 구한 보정값을 적용하고, 원하는 천체만 골라 채널을 평균해 UVFITS로 저장 | CLCAL, SPLIT, FITTP | applycal, split, exportuvfits |
| 7 | 영상화 · CLEAN · 자기보정 | 격자에 올려 역푸리에 변환(보정 전 영상) → CLEAN → 모형으로 위상·진폭을 다시 보정하는 일을 되풀이 | IMAGR, CALIB | tclean, gaincal |
| 8 | FITS 영상으로 저장 | CLEAN 성분을 복원 빔으로 다시 그리고 남은 잡음(잔차)을 더해 최종 영상을 FITS로 저장 | FITTP | exportfits |
가시성 데이터는 하늘의 밝기 분포를 푸리에 변환한 값(공간주파수)을 u-v 평면의 여러 점에서 잰 것입니다. 기선 하나는 한 순간에 u-v 평면의 점 하나(와 그 맞은편 점)를 재고, 지구가 자전하면 기선의 길이와 방향이 바뀌어 점들이 타원 모양의 궤적을 그립니다(간섭계 원리). 이 점들을 격자에 올려 역푸리에 변환하면 영상이 되지만, 망원경 수가 유한해 u-v 평면에 빈칸이 많으므로 진짜 천체에 가짜 무늬(사이드로브)가 겹친 보정 전 영상(dirty image)이 나옵니다. 점 하나를 관측했을 때 생기는 이 무늬를 보정 전 빔(dirty beam)이라고 합니다.
CLEAN은 이 무늬를 걷어 내는 대표적인 디컨볼루션 방법입니다. ① 영상에서 가장 밝은 곳을 찾아 ② 그 밝기의 일부(보통 10 %)만큼 보정 전 빔 무늬를 빼고 ③ 그 위치와 세기를 'CLEAN 성분'으로 기록하는 일을 수백 ~ 수천 번 되풀이합니다. 마지막으로 기록한 성분들을 사이드로브가 없는 깨끗한 타원(복원 빔, FITS 헤더의 BMAJ·BMIN·BPA)으로 다시 그리고, 빼고 남은 잔차를 더하면 최종 영상이 됩니다. 이것이 FITS 영상으로 저장됩니다.
👉 망원경 구성과 관측 시간을 바꿔 u-v 채움과 보정 전 빔이 어떻게 달라지는지 보고, CLEAN 버튼으로 가짜 무늬를 걷어 내 보세요!
| u-v 측정점 | 복원 빔 (BMAJ × BMIN, BPA) | CLEAN 반복 | CLEAN 성분 세기 합 / 실제 세기 합 | 남은 잔차 최대 / 처음 최대 |
|---|---|---|---|---|
망원경 위치는 실제 관측소의 위도·경도로 계산했고, 하늘에는 고른 천체 방향에 점 모양의 핵과 제트 성분 다섯 개를 두었습니다(모의 천체, ④의 초록 + 표시가 실제 위치). ③의 잔차는 처음 보정 전 영상과 같은 눈금으로 그려, CLEAN이 진행될수록 옅어집니다. 보정 전 빔과 영상은 측정한 u-v 점으로 직접 역푸리에 변환해 구하고, CLEAN은 회그봄 방식(한 번에 10 %씩)으로 실제로 계산합니다. 잡음과 보정 오차는 넣지 않았습니다. 색은 양(+)의 값을 붉은색, 음(−)의 값을 푸른색으로 칠했습니다.
KVN 4대로 적도 근처의 3C 273을 보면 u-v 궤적이 거의 가로줄이 되어, 보정 전 빔에 진짜 봉우리만큼 높은 가짜 봉우리가 위아래로 되풀이됩니다. 이럴 때는 CLEAN도 성분을 엉뚱한 곳에 놓기 쉽습니다(④의 초록 + 표시와 비교해 보세요). 적위가 높은 3C 84를 고르면 궤적이 타원을 그리며 u-v 평면을 더 고르게 채워 무늬가 줄어듭니다. 관측 시간을 늘려도 궤적이 길어져 무늬가 줄어듭니다. 일본 VERA를 더하면 기선이 길어져 빔(해상도)이 작아지고 u-v 채움도 촘촘해집니다. 이것이 한국·일본·중국 망원경을 묶는 동아시아 VLBI 관측망(EAVN)의 장점입니다. 처음 몇 번의 CLEAN에서 영상이 크게 바뀌고, 뒤로 갈수록 바뀌는 양이 줄어드는 것도 확인해 보세요. 밝은 성분부터 차례로 빠지기 때문입니다.
VLBI 영상화에는 Difmap을 많이 씁니다. 6단계에서 만든 UVFITS로 영상을 만드는 짧은 예는 다음과 같습니다(값은 43 GHz 관측을 가정한 예시이며, 실제로는 자료를 보며 조정합니다).
! Difmap 예시 — UVFITS → FITS 영상
observe 3C273_Q.uvf ! 보정된 가시성 불러오기
select i ! 전체 세기(Stokes I)만
mapsize 256, 0.1 ! 256 × 256 픽셀, 한 칸 0.1 mas
uvweight 2, -1 ! 가중치 방식(자연·균일 사이)
clean 200, 0.05 ! CLEAN 200번, 한 번에 5 %씩
selfcal ! 모형으로 위상 자기보정
clean 500, 0.05
selfcal true, true ! 진폭까지 자기보정
restore ! 복원 빔으로 다시 그리기
wmap 3C273_Q.fits ! FITS 영상으로 저장
# CASA 예시 (파이썬) — 보정된 자료 → FITS 영상
tclean(vis='kv26a_3c273.ms',
imagename='3c273_q',
imsize=256,
cell='0.1mas', # 한 칸 크기
weighting='briggs', robust=0,
niter=2000, # CLEAN 최대 반복
threshold='3mJy') # 이 세기까지 CLEAN
exportfits(imagename='3c273_q.image',
fitsimage='3c273_q.fits')
🧮 실제 값으로 계산해 보기 — 픽셀 크기는 어떻게 정할까?
FITS 영상 파일에는 '색'이 없습니다. 들어 있는 것은 픽셀마다의 세기(Jy/beam) 숫자뿐이고, 이것을 사람이 볼 수 있는 그림으로 바꾸는 것은 보는 프로그램의 몫입니다. 같은 FITS라도 표시 방법에 따라 전혀 다른 느낌의 그림이 됩니다.
| # | 단계 | 하는 일 |
|---|---|---|
| 1 | 헤더 읽기 | 80글자 카드를 차례로 읽어 END가 나올 때까지 키워드를 모음 → 픽셀 형식(BITPIX), 크기(NAXISn), 좌표(WCS), 빔, 단위를 알아냄 |
| 2 | 숫자 읽기 | 헤더 블록 다음부터 픽셀 수 × 4바이트를 빅엔디언 실수로 읽고, BSCALE·BZERO로 실제 값(Jy/beam)으로 바꿈. 값이 없는 픽셀은 NaN |
| 3 | 위아래 맞추기 | FITS는 맨 아랫줄부터 저장하고 화면은 맨 윗줄부터 그리므로 뒤집어 그림. 동쪽이 왼쪽이 되도록 CDELT1은 음수 |
| 4 | 세기 범위 고르기(스트레치) | 어디부터 어디까지를 검정~흰색에 대응시킬지와, 선형·제곱근·로그 중 어떤 눈금을 쓸지 정함. 밝은 핵과 희미한 제트를 함께 보려면 로그가 유리 |
| 5 | 색 지도 입히기 | 0~1로 바꾼 세기에 회색조·열지도 같은 색 목록을 대응시킴. 색은 실제 색이 아니라 세기를 알아보기 쉽게 칠한 것 |
| 6 | 등고선 · 빔 · 좌표 눈금 | VLBI 논문에서는 잡음(rms)의 3배부터 2배씩 커지는 등고선을 그리고, 왼쪽 아래에 빔 타원을, 가장자리에 기준점에서 떨어진 각도(mas) 눈금을 표시 |
이렇게 표시한 실제 KVN·KaVA 영상에서 축·빔·등고선·색·크기 막대를 찾아 읽어 보는 연습은 관측영상 편에서 이어집니다.
🧮 실제 값으로 계산해 보기 — FITS 숫자에서 과학 값 꺼내기
👉 모의 FITS 파일의 헤더와 바이트를 살펴보고, 스트레치·색 지도·등고선을 바꿔 그림이 어떻게 달라지는지 보세요. 내 FITS 파일을 열어 볼 수도 있습니다!
영상 위에 마우스를 올리면 그 픽셀의 좌표와 세기가 나옵니다.
헤더 카드 (80글자씩, 사람이 읽을 수 있는 글자)
데이터 시작 부분 (이진 숫자 → 실수)
모의 영상은 3C 273의 위치에 둔 가상의 핵-제트 구조(43 GHz, 빔 2 × 1 mas, 잡음 1 mJy/beam)를 FITS 규격대로 만든 것으로, 실제 관측 결과가 아닙니다. 내려받은 파일은 SAOImage DS9 같은 FITS 보기 프로그램에서 열 수 있습니다. 내 파일을 열면 첫 번째 HDU의 첫 영상 면만 보여 주며, 파일은 이 화면 안에서만 읽고 어디로도 보내지 않습니다.
영상을 만든 뒤의 분석(세기 재기, 그림 그리기, 여러 관측 비교)은 대부분 파이썬으로 합니다. 천문학 공동체가 함께 만드는 Astropy가 FITS 읽기·쓰기와 하늘 좌표 계산의 표준이고, CASA도 파이썬 모듈로 불러 쓸 수 있습니다.
| 라이브러리 | 쓰임 |
|---|---|
| astropy.io.fits | FITS의 HDU·헤더·데이터를 읽고 쓰기(영상, 이진 테이블, 랜덤 그룹 모두) |
| astropy.wcs | 헤더의 WCS 키워드로 픽셀 ↔ 하늘 좌표 변환 |
| astropy.visualization | 선형·로그 등 스트레치와 표시 범위 정하기, 좌표 눈금이 있는 그림(WCSAxes) |
| numpy · matplotlib | 픽셀 배열 계산(잡음, 합, 최댓값)과 그림·등고선 그리기 |
| radio-beam · reproject | 빔 정보 다루기와 다른 빔으로 다시 흐리게 하기 · 서로 다른 격자의 영상을 같은 격자로 옮기기(다주파수 비교) |
| casatasks · casatools | CASA의 보정·영상화 작업을 파이썬 스크립트에서 그대로 실행 |
| eht-imaging (ehtim) | EHT가 쓴 VLBI 영상화 도구. CLEAN과 다른 방식(정규화 최대우도)으로 가시성에서 바로 영상을 만듦 |
예제 1 — FITS 영상 읽고 좌표·등고선·빔이 있는 그림 그리기
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from astropy.io import fits
from astropy.wcs import WCS
from astropy.visualization import simple_norm
with fits.open('3C273_Q.fits') as hdul:
hdul.info() # HDU 목록 보기
hdr = hdul[0].header
img = hdul[0].data.squeeze() # (1, 1, 256, 256) → (256, 256): 주파수·편파 축 제거
print(hdr['OBJECT'], hdr['BUNIT'], hdr['CRVAL3'] / 1e9, 'GHz')
pix_mas = abs(hdr['CDELT1']) * 3.6e6 # 도 → 밀리각초
bmaj, bmin = hdr['BMAJ'] * 3.6e6, hdr['BMIN'] * 3.6e6
rms = np.nanstd(img[:60, :60]) # 천체가 없는 구석으로 잡음 추정
peak = np.nanmax(img)
levels = 3 * rms * 2.0 ** np.arange(12) # 3σ부터 2배씩 커지는 등고선
levels = levels[levels < peak]
wcs = WCS(hdr).celestial # 하늘 좌표 두 축만 사용
ax = plt.subplot(projection=wcs)
ax.imshow(img, origin='lower', cmap='inferno', # FITS는 아랫줄부터 → origin='lower'
norm=simple_norm(img, 'log', vmin=rms, vmax=peak)) # astropy 6.1 이상
ax.contour(img, levels=levels, colors='white', linewidths=0.6)
ax.add_patch(Ellipse((20, 20), bmin / pix_mas, bmaj / pix_mas, angle=hdr['BPA'],
facecolor='none', edgecolor='cyan')) # 왼쪽 아래 빔 타원
ax.set_xlabel('적경'); ax.set_ylabel('적위')
plt.savefig('3C273_Q.png', dpi=200)
예제 2 — 과학 값 계산하기 (잡음, 다이내믹 레인지, 전체 세기)
beam_pix = np.pi * hdr['BMAJ'] * hdr['BMIN'] / (4 * np.log(2)) / (abs(hdr['CDELT1']) * abs(hdr['CDELT2']))
mask = img > 3 * rms # 3σ보다 밝은 곳만 천체로 봄
total_jy = img[mask].sum() / beam_pix # Jy/beam의 합 ÷ 빔 넓이(픽셀) = Jy
print(f'잡음 {rms*1e3:.2f} mJy/beam, 최대 {peak:.3f} Jy/beam, '
f'다이내믹 레인지 {peak/rms:.0f}, 전체 세기 {total_jy:.3f} Jy')
y, x = np.unravel_index(np.nanargmax(img), img.shape)
sky = wcs.pixel_to_world(x, y) # 가장 밝은 픽셀의 하늘 좌표
print(sky.to_string('hmsdms'))
예제 3 — 영상 전 단계의 자료 열어 보기 (UVFITS, FITS-IDI)
with fits.open('3C273_Q.uvf') as uvf: # UVFITS: 랜덤 그룹
g = uvf[0].data
print(g.parnames) # ['UU', 'VV', 'WW', 'BASELINE', 'DATE', ...] (프로그램마다 이름이 조금 다름)
freq = uvf[0].header['CRVAL4'] # 기준 주파수(Hz) — 어느 축인지는 CTYPEn으로 확인
u_lambda = g.par(0) * freq # 초 × Hz = 파장 단위의 u
vis = g.data # (측정 수, …, 편파, 3) 마지막 축 = 실수·허수·가중치
with fits.open('kv26a.idifits') as idi: # FITS-IDI: 이진 테이블 여러 개
idi.info() # ARRAY_GEOMETRY, ANTENNA, FREQUENCY, SOURCE, UV_DATA …
uv = idi['UV_DATA'].data
a1, a2 = divmod(uv['BASELINE'], 256) # 기선 번호 → 안테나 두 개
print(idi['ANTENNA'].data['ANNAME']) # 안테나 이름
파일 이름은 예시입니다. 실제 키워드와 축 순서는 만든 프로그램마다 조금씩 다르므로, 먼저 hdul.info()와 헤더를 출력해 확인하는 습관이 중요합니다.
버튼 몇 번으로 영상이 나오는 것처럼 보이지만, 같은 자료로도 처리 선택에 따라 다른 영상이 나옵니다. 연구자는 단계마다 다음과 같은 질문을 붙들고 씨름하며, "이 구조가 정말 천체에 있는가, 처리 과정이 만든 것인가"를 끝까지 확인합니다.
| 단계 | 고민하는 것 | 흔히 쓰는 대처 |
|---|---|---|
| 자료 거르기 | 어디까지를 나쁜 자료로 볼까? 너무 많이 버리면 감도와 u-v 채움이 줄고, 남기면 전파 간섭·낮은 고도의 오차가 영상에 섞입니다. | 시간·채널별 그림으로 하나하나 살펴보고, 거른 기준을 기록 |
| 진폭 눈금 | 세기의 절댓값을 얼마나 믿을 수 있을까? 시스템 온도·이득 곡선·대기 흡수의 오차로 보통 5 ~ 10 %의 불확실성이 남습니다. | 밝기를 잘 아는 천체로 확인, 다른 망원경·다른 시기와 비교할 때 오차 막대 표시 |
| 가중치 | 해상도를 높일까(균일 가중), 감도를 높일까(자연 가중)? 같은 자료로도 영상이 달라집니다. | 목적에 맞게 고르고 중간값(Briggs robust)도 비교, 쓴 설정을 논문에 명시 |
| CLEAN 범위 | 어디까지를 진짜 구조로 보고 CLEAN할까? 너무 깊게 하면 잡음을 천체로 착각하고, 얕게 하면 희미한 제트를 놓칩니다. | CLEAN 상자(창)를 신중히 지정, 잔차 영상이 고른 잡음처럼 보일 때 멈춤 |
| 자기보정 | 모형을 믿고 보정하다 보면, 모형에 있던 가짜 구조가 오히려 강화되지 않을까? 또 위상 자기보정은 천체의 절대 위치 정보를 잃게 합니다. | 위상부터 조금씩, 진폭 보정은 마지막에 긴 시간 간격으로. 위치가 중요하면 가까운 기준 천체를 번갈아 보는 위상 기준 관측 |
| 영상 대 모형 | 그림만 볼까, 숫자로 잴까? 제트 성분이 1년에 몇 mas 움직였는지 재려면 위치·크기·세기를 수치로 뽑아야 합니다. | 가시성에 가우스 성분을 직접 맞추는 모형 맞추기(Difmap modelfit 등), 성분별 오차 추정 |
| 다주파수 비교 | 22·43·86 GHz 영상은 빔 크기가 다르고, 주파수마다 '핵'의 위치가 조금씩 달라(core shift) 그냥 겹치면 틀린 결론이 나옵니다. | 같은 빔으로 흐리게 맞추고(radio-beam), 같은 격자로 옮긴 뒤(reproject) 광학적으로 얇은 제트 성분으로 위치 정렬 → 스펙트럼 지수 지도 |
| 불확실성 | u-v 평면의 빈칸 때문에 같은 자료에 맞는 영상이 여러 개입니다. 내가 만든 영상이 유일한 답일까? | 다른 방법(CLEAN, 정규화 최대우도)과 다른 사람이 독립적으로 영상화해 비교(EHT 방식), 모의 자료로 방법 검증 |
| 재현성 | 몇 년 뒤 나나 다른 연구자가 같은 결과를 다시 만들 수 있을까? | 처리 스크립트·소프트웨어 버전 보관, FITS HISTORY 기록, 원자료와 결과를 공개 저장소에 보관 |
| 자료 크기·시간 | 수백 GB의 FITS-IDI를 몇 번이고 다시 처리해야 하는데, 저장 공간과 계산 시간은 충분할까? | 채널·시간 평균으로 줄인 사본 만들기, 계산 서버와 고속 저장소 사용(관측데이터 저장, 대용량 데이터 전송) |
✅ 영상을 발표하기 전 연구자의 점검 목록
🧑🏫 선생님·학부모님을 위한 설명 도움말
원리 자세히 보기
전파 영상 처리의 발전사
| 시기 | 사건 | 의미 |
|---|---|---|
| 1946년 | 첫 전파 간섭계 관측 | 호주의 페인-스콧·포시, 영국의 라일·본버그가 여러 안테나의 신호를 합쳐 천체를 관측했습니다. |
| 1958년 | 제니슨의 닫힘 위상 | 망원경 셋의 위상을 더하면 오차가 지워진다는 아이디어가 나왔고, 훗날 VLBI 보정의 바탕이 되었습니다. |
| 1960년대 | 지구 자전 개구 합성과 FFT | 영국 케임브리지의 라일 연구진이 지구 자전을 이용해 큰 망원경 효과를 내는 개구 합성 영상을 만들었습니다. 1965년 발표된 고속 푸리에 변환(FFT) 계산법이 컴퓨터 영상화를 크게 앞당겼습니다. |
| 1974년 | 회그봄의 CLEAN, 라일·휴이시의 노벨상 | 스웨덴의 얀 회그봄이 CLEAN 알고리즘을 발표했습니다. 같은 해 라일과 휴이시가 개구 합성과 펄서 발견 등의 공로로 천문학 분야 최초의 노벨 물리학상을 받았습니다. |
| 1979 ~ 1982년 | FITS 형식 탄생 | 미국 국립전파천문대·키트피크 천문대 연구자들(웰스·그라이젠 등)이 천문대끼리 자료를 주고받기 위한 FITS를 만들어 1981년 발표했고, 1982년 국제천문연맹(IAU)이 표준으로 인정했습니다. |
| 1978년 | AIPS 개발 시작 | 미국 국립전파천문대(NRAO)가 전파 간섭계 자료 처리 프로그램 AIPS를 만들기 시작했고, 지금도 VLBI 자료 처리에 쓰입니다. |
| 1970년대 말~1980년대 | 자기보정 기법의 정착 | 대기와 장비 오차를 영상과 함께 풀어내는 방법이 자리 잡으며 VLBI 영상의 질이 크게 좋아졌습니다. |
| 1990년대 말 ~ 2002년 | FITS-IDI와 WCS 표준 | 상관기 출력용 FITS-IDI 형식이 AIPS 메모로 정의되었고, 2002년 하늘 좌표를 헤더에 적는 WCS 규칙이 논문으로 정리되어 모든 프로그램이 같은 방식으로 좌표를 읽게 되었습니다. |
| 2013년 ~ | Astropy와 파이썬 분석 | 천문학 공동체가 함께 만드는 파이썬 패키지 Astropy가 발표되어, FITS 읽기와 좌표 계산의 표준 도구가 되었습니다. 2016년에는 FITS 표준 4.0이 승인되었습니다. |
| 2019년 | EHT 블랙홀 그림자 영상 | 여러 영상화 방법을 독립적으로 비교해 M87 블랙홀 그림자를 발표했습니다. KVN도 같은 천체의 제트를 관측하며 이 연구를 보완하고 있습니다(KVN). |
비유로 설명하기
자주 하는 오해
함께 해 볼 질문·활동
📚 참고 자료 및 출처
본 교육자료는 Anthropic(Claude) 및 OpenAI(ChatGPT)를 활용하여 제작하였으며, 제작자가 내용을 검토·편집하였습니다. 주요 참고자료와 출처는 각 페이지의 「참고 자료 및 출처」에 명시하였습니다. 출처가 별도로 표기되지 않은 페이지와 참고자료에 포함되지 않은 내용은 제작자가 직접 작성하거나 정리한 것입니다. 내용에 오류가 있거나 수정이 필요한 사항을 발견하시면 kvnsite@kasi.re.kr로 알려 주시기 바랍니다.