포스트

(Radar) 14. 플롯과 클러터 모의 — 참값 궤적에 측정 잡음을 더하고 가짜 탐지를 뿌리기

추적 필터에 넣을 입력을 만드는 과정 — 드웰·히트·플롯이 무엇이고 실제 신호처리를 왜 건너뛸 수 있는지, 측정 표준편차가 분해능 나누기 √(2·SNR) 꼴로 나오는 이유, 균등난수 열두 개를 더해 정규난수를 만드는 생성기와 그것이 분포를 따르는지 확인하는 법, 참값을 안테나 기준 거리·방위각·고각으로 바꿔 성분마다 잡음을 더하는 순서, FOV 안에서 균등 난수로 클러터를 뽑는 법, 그리고 표적 다섯 개를 60 초 동안 재서 플롯 3 000 개와 클러터 3 000 개를 지도에 겹쳐 확인하기까지.

(Radar) 14. 플롯과 클러터 모의 — 참값 궤적에 측정 잡음을 더하고 가짜 탐지를 뿌리기

이번 장에서는 플롯과 클러터 모의를 다루겠다. 13장에서 만든 표적 궤적은 표적이 실제로 있던 자리, 곧 참값이었다. 이번에는 그 참값을 레이다가 잰 것 같은 측정값으로 바꾸고, 표적이 아닌 곳에서 생기는 가짜 탐지인 클러터도 함께 만든다. 둘을 합친 것이 추적 필터의 입력이 된다.

조건은 이렇다. 표적의 신호 대 잡음비 SNR 은 20 으로 고정한다. 레이다는 광속 299 792 458 m/s, 방위각 빔폭 5.14°, 고각 빔폭 5.31°, 대역폭 5 MHz, 모노펄스 기울기 상수 1.7 이다. 클러터는 한 스캔에 다섯 개를 거리 200 m ~ 15 000 m, 방위각 −60° ~ +60°, 고각 0° ~ 30° 안에서 균등 난수로 뽑는다. 시뮬레이션은 60 초, 한 스캔은 0.1 초이고, 참값과 플롯과 클러터를 서로 다른 색으로 위경도 위에 그린다. 난수는 과제에서 제공한 균등난수 UNIRAN 과 정규난수 GAUSS 를 쓰고, 그 둘이 분포를 따르는지도 먼저 확인한다.


1. 플롯은 어디서 나오는가

레이다가 빔을 한 방향에 머물게 하고 신호를 모으는 구간을 드웰(dwell)이라 한다. 드웰 동안 받은 신호를 처리하면 거리와 각도로 나눈 칸마다 신호 세기가 나오고, 문턱을 넘은 칸 하나를 히트(hit)라 한다. 표적 하나가 여러 칸에 걸쳐 잡히므로 붙어 있는 히트를 묶어 대표점 하나로 만드는데, 그것이 플롯(plot)이다. 플롯은 거리·방위각·고각과 잰 시각을 가진다. 빔이 탐색 영역 전체를 한 번 도는 주기가 스캔(scan)이고, 스캔마다 들어오는 플롯을 시간 순서로 이어 표적의 움직임을 추정한 것이 트랙(track)이다.

실제 레이다에서 플롯이 나오기까지는 단계가 길다. 표적에서 돌아온 신호와 수신기 잡음이 섞인 채 IQ 데이터로 들어오고, 펄스압축으로 긴 펄스를 좁게 모아 거리를 구분하고, 도플러 처리로 속도별로 나눠 움직이지 않는 클러터를 걸러 내고, CFAR 로 주변 잡음 크기에 맞춘 문턱을 정해 히트를 뽑고, 히트를 묶고, 모노펄스 처리로 빔폭보다 정밀한 각도를 얻는다.

이 모의는 그 가운데를 전부 건너뛴다. 참값에 잡음을 더해 바로 드웰 플롯을 만든다.

실제 레이다의 플롯 추출과 모의의 차이 그림 1. 위가 실제 레이다, 아래가 이 모의다. 가운데 단계를 통째로 건너뛰고 참값에 잡음을 더한다.

건너뛰어도 되는 이유는 추적 필터가 받는 것이 플롯뿐이기 때문이다. 추적 필터는 IQ 데이터도 신호처리의 중간 결과도 보지 않는다. 신호처리를 거친 플롯은 참값에서 조금 벗어난 거리·방위각·고각이고, 그 벗어나는 크기만 맞춰 넣으면 추적 필터 입장에서는 같은 성질의 입력이다. 그 크기를 어떻게 정하는지가 다음 절이다.


2. 측정 오차의 크기

거리·방위각·고각의 오차 표준편차 $p$ 는 세 식으로 정한다.

\[p_{rng} = \frac{c}{2B\sqrt{2\,\mathrm{SNR}}}, \qquad p_{azi} = \frac{\theta_{az}}{K_M\sqrt{2\,\mathrm{SNR}}}, \qquad p_{ele} = \frac{\theta_{el}}{K_M\sqrt{2\,\mathrm{SNR}}}\]

$c$ 는 광속, $B$ 는 대역폭, $\theta$ 는 빔폭, $K_M$ 은 모노펄스 기울기 상수, SNR 은 선형값이다. 세 식 모두 분자가 분해능이고 분모에 $\sqrt{2\,\mathrm{SNR}}$ 이 있다.

분해능(resolution)은 가까이 있는 두 표적을 따로 구분할 수 있는 최소 간격이다. 거리 분해능은 압축된 펄스의 폭 $c/2B$ 이고, 전파가 표적까지 갔다 돌아오기 때문에 2 로 나눈다. 각도 분해능은 빔폭을 $K_M$ 으로 나눈 값이다. 모노펄스 레이다는 합 신호와 차 신호의 비로 빔 안에서 표적 각도를 다시 재는데, 그 비가 각도에 따라 변하는 기울기가 $K_M$ 이고 그 계산은 10장에 있다.

정확도(accuracy)는 다르다. 표적 하나를 여러 번 쟀을 때 측정값이 참값 둘레에서 흔들리는 크기다. 압축된 펄스의 봉우리는 폭이 30 m 가까이 되지만, 그 봉우리가 어디에 있는지는 훨씬 좁은 범위에서 흔들린다. 신호가 잡음보다 셀수록 봉우리 위치를 정확히 잡을 수 있어서 분모에 SNR 이 들어간다.

분해능과 정확도의 차이, 그리고 플롯이 흩어지는 모양 그림 2. 왼쪽은 압축된 펄스 하나의 폭(분해능)과 봉우리 위치의 흔들림(정확도)이다. 오른쪽은 실제로 만든 플롯 1 500 개를 거리 10 km 인 표적 둘레에 같은 축척으로 찍은 것이다. 거리 방향보다 옆으로 훨씬 넓게 퍼진다.

과제 값을 넣으면 아래와 같다. SNR 20 이면 $\sqrt{40} = 6.325$ 다.

성분분해능÷ √(2·SNR)표준편차 $p$
거리$c / 2B$ = 29.979 m6.3254.740 m
방위각$\theta_{az} / K_M$ = 3.024°6.3250.4781°
고각$\theta_{el} / K_M$ = 3.124°6.3250.4939°

각도 오차는 거리에 곱해져 위치 오차가 된다. 10 km 거리에서 방위각 표준편차 0.4781° 는 옆으로 83.4 m 다. 거리 표준편차 4.74 m 보다 17 배 크다. 그래서 플롯은 레이다에서 표적을 바라보는 방향으로는 좁게, 그에 수직인 방향으로는 넓게 퍼진다. 추적 필터가 거리와 각도를 다른 무게로 다루어야 하는 이유가 이것이다.

SNR 은 식에 선형값으로 넣는다. 20 을 데시벨로 읽어 선형 100 을 넣으면 $\sqrt{200} = 14.14$ 로 나누게 되어 2.120 m, 0.2138°, 0.2209° 가 된다. 어느 쪽인지는 입력을 주는 쪽과 맞춰 두어야 한다. 이 글은 선형 20 이다.


3. 잡음을 만드는 난수

잡음은 제공받은 난수 함수 둘로 만든다. UNIRAN 은 0 과 1 사이의 균등난수를, GAUSS 는 평균과 표준편차를 받아 정규난수를 돌려준다.

UNIRAN 은 선형합동(linear congruential) 방식이다. 직전 값에 16807 을 곱해 $2^{31} - 1$ 로 나눈 나머지를 다음 값으로 삼고, 그것을 $2^{31} - 1$ 로 나눠 0 과 1 사이로 만든다. 곱하는 수와 나누는 수가 이 조합이면 같은 값이 다시 나올 때까지의 주기가 $2^{31} - 2$, 약 21 억이다. 나머지가 0 이 되는 일이 없어서 0 과 1 자체는 나오지 않는다. 처음 값인 시드(seed)가 같으면 뽑히는 순서가 늘 같다.

GAUSS 는 UNIRAN 을 열두 번 더한 뒤 6 을 뺀다. 균등난수 하나의 평균은 1/2, 분산은 1/12 이다. 열둘을 더하면 평균 6, 분산 $12 \times 1/12 = 1$ 이 되고, 6 을 빼면 평균 0, 표준편차 1 이다. 거기에 받은 표준편차를 곱하고 평균을 더해 돌려준다. 독립인 값을 많이 더할수록 합이 정규분포에 가까워진다는 중심극한정리를 그대로 쓴 것이다.

균등난수를 하나, 둘, 열둘 더했을 때의 분포 그림 3. 실제 UNIRAN 으로 10 000 개씩 뽑아 그렸다. 하나는 평평하고 둘을 더하면 삼각형이 되며, 열둘을 더하면 표준정규분포 곡선과 거의 겹친다.

이 방식의 한계도 알아 둔다. 열둘의 합에서 6 을 뺀 값은 $-6$ 과 $+6$ 사이를 벗어나지 못하고, 그 안에서도 꼬리가 진짜 정규분포보다 얇다. 표준정규분포에서 4 를 넘는 값이 나올 확률은 $6.3 \times 10^{-5}$ 라 10 000 개를 뽑으면 한 개 날까 말까이고, 4절의 확인에서도 그 밖으로 나간 값은 없었다. 플롯 잡음처럼 $\pm 3p$ 안이 거의 전부인 용도에는 충분하다.

시드가 정해져 있으면 결과를 다시 만들 수 있다. 측정 모의는 시작할 때마다 시드를 12345 로 되돌리므로 같은 시나리오를 몇 번 돌려도 같은 플롯이 나온다. 뒤에서 나오는 숫자가 전부 그대로 재현되는 것도 이 때문이다. 난수 확인 창은 반대로 시드를 되돌리지 않고 지난번에 멈춘 자리에서 이어 뽑아, 열 때마다 다른 10 000 개가 나오게 두었다.


4. 난수가 분포를 따르는지 확인

두 함수가 의도한 분포를 따르는지부터 확인했다. 10 000 개를 뽑아 칸마다 세고, 개수를 표본 수와 칸 폭의 곱으로 나눠 확률밀도로 바꾼다. 그러면 막대 넓이의 합이 1 이 되어 이론 확률밀도와 같은 눈금에서 비교할 수 있다. UNIRAN 은 0 에서 1 까지 10 칸이라 모든 칸이 1 근처여야 하고, GAUSS 는 $-4$ 에서 4 까지 32 칸이라 표준정규분포 곡선을 따라야 한다. 합과 제곱합도 같이 더해 평균과 표준편차를 구한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (nIndex = 0; nIndex < PCS_RAND_NUM; nIndex++)
{
	value	= (isGauss != 0) ? GAUSS(0.0, 1.0) : UNIRAN();
	sum		= sum + value;
	sumSq	= sumSq + (value * value);

	// 구간 밖 값은 세지 않음 (GAUSS 의 |x| > 4)
	nBinIndex = (INT32)floor((value - binMin) / st_Hist->binWidth);

	if ((nBinIndex >= 0) && (nBinIndex < nBin))
	{
		st_Hist->nCount[nBinIndex]++;
	}
}

for (nIndex = 0; nIndex < nBin; nIndex++)
{
	st_Hist->pdf[nIndex] = (FLOAT64)st_Hist->nCount[nIndex] / ((FLOAT64)PCS_RAND_NUM * st_Hist->binWidth);
}

st_Hist->mean	= sum / (FLOAT64)PCS_RAND_NUM;
st_Hist->std	= sqrt((sumSq / (FLOAT64)PCS_RAND_NUM) - (st_Hist->mean * st_Hist->mean));

UNIRAN 과 GAUSS 10 000 개의 확률밀도 그림 4. 막대가 코드로 센 확률밀도, 주황 선이 이론값이다. 진한 막대는 첫 번째 값이 들어간 칸이다.

시드 12345 에서 시작한 첫 확인의 값은 아래와 같다. 첫 번째 값을 따라가 보면 계산이 어떻게 이어지는지 보인다. UNIRAN 의 첫 값은 0.0966 이고 0.1 로 나눈 정수 부분이 0 이라 0 번 칸에 들어간다. 0 번 칸에는 10 000 개 가운데 999 개가 들어왔고, $999 / (10\,000 \times 0.1) = 0.999$ 가 그 칸의 확률밀도다. GAUSS 의 첫 값 0.5953 은 4 를 더해 0.25 로 나누면 18.38 이라 18 번 칸이다. 이 칸의 확률밀도는 0.3048 로 이론값 0.3282 보다 조금 낮지만, 옆의 17 번 칸은 0.3836 으로 이론값 0.3719 보다 높다. 칸 하나에 800 개 안팎이 들어가는 수준에서는 이 정도로 흔들린다.

 평균표준편차칸 밖으로 나간 값
UNIRAN 10 000 개0.5026 (이론 0.5)0.2892 (이론 1/√12 = 0.2887)0
GAUSS(0, 1) 10 000 개−0.0008 (이론 0)0.9955 (이론 1)0

다시 뽑으면 숫자는 조금씩 바뀌지만 매번 이론값 근처에 모인다. 두 함수를 그대로 써도 된다고 보고 넘어갔다.


5. 참값을 안테나 기준으로

잡음을 더하려면 참값이 레이다가 재는 형태여야 한다. 13장의 결과는 지구 중심 기준의 ECEF 위치이므로 레이다 안테나 기준의 거리·방위각·고각으로 바꾼다. 레이다는 플랫폼에 실려 있으니 그 스캔 시각의 플랫폼 위치와 자세를 레이다의 것으로 쓴다.

참값을 ECEF 에서 안테나 기준 구좌표로 바꾸는 순서 그림 5. 플랫폼 위치로 NED 로, 자세로 동체로, 축을 바꿔 안테나로 옮긴 뒤 거리와 두 각도로 바꾼다. 지도에 찍을 때는 거꾸로 밟는다.

변환 함수는 12장에서 쓴 제공 코드 그대로다. ECEF 에서 플랫폼 위치를 빼고 위경도로 돌리면 북·동·아래 성분이 되고, 플랫폼 자세로 돌리면 선수·우현·아래 성분이 되며, 축을 바꾸면 안테나의 왼쪽·위·조준축 성분이 된다. 마지막에 세 성분을 거리와 두 각도로 바꾼다. 방위각은 조준축에서 왼쪽이 +, 고각은 위가 + 인 제공 코드의 규약을 그대로 따랐다. 플랫폼 자세가 0 이라 이번 시나리오의 조준축은 늘 북쪽이고, 방위각 + 는 서쪽이다.

대공 표적의 첫 위치로 확인해 보면 이렇다. 표적은 레이다 정북 13.3 km, 고도 300 m 에 있고, 바꾸면 거리 13 310.2 m, 방위각 0°, 고각 1.2315° 다. 300 을 13 307 로 나눠 각을 구하면 1.29° 인데 그보다 작다. 지구가 둥글어서 13.3 km 앞의 지면이 레이다의 수평면보다 13.9 m 아래로 휘어 있고, 레이다가 보기에 표적은 수평면 위 286.1 m 에 있기 때문이다. ECEF 에서 계산하니 이 효과가 따로 손대지 않아도 들어갔다.


6. 플롯 만들기

플롯 $z$ 는 참값 $x$ 에 잡음 $v$ 를 더한 것이다. 성분마다 평균 0, 표준편차 $p$ 인 GAUSS 를 따로 부른다.

\[z_{rng} = x_{rng} + v_{rng}, \qquad z_{azi} = x_{azi} + v_{azi}, \qquad z_{ele} = x_{ele} + v_{ele}, \qquad v \sim N(0,\ p^2)\]

13장의 결과가 이미 ECEF 위치인데 거기에 바로 잡음을 더하지 않고 굳이 바꾼 다음 더하는 데는 이유가 있다. 모의의 목표는 실제 레이다가 잴 때 생기는 오차를 그대로 흉내 내는 것이다. 레이다는 표적의 x·y·z 좌표를 재지 않는다. 전파가 돌아올 때까지 걸린 시간으로 거리를 재고, 돌아온 방향으로 각도를 잰다. 오차도 그 자리에서 생긴다. 13.3 km 앞 표적이면 전파는 88.8 μs 뒤에 돌아오고, 잡음이 섞인 신호에서 그 시각과 방향을 매번 조금씩 틀리게 잡는 것이 오차다. 위치는 그 값으로 나중에 계산한 것일 뿐이다. 그래서 모의도 실제 레이다에서 오차가 생기는 바로 그 자리, 거리·방위각·고각에 잡음을 넣고 그다음에 위치로 바꾼다. ECEF 에 잡음을 더하면 오차가 모든 방향으로 같은 크기로 퍼져서 2절의 모양이 나오지 않는다.

표준편차는 SNR 이 고정이라 측정을 시작할 때 한 번만 계산한다. 빔폭은 도 단위 상수인데 참값 각도가 라디안이라 라디안으로 바꿔 계산한다.

1
2
3
4
5
6
7
8
9
10
11
12
// 측정 표준편차 p. snr 은 선형값.
STRUCT_Coord_Sph f_Pcs_CalcSigma(FLOAT64 snr)
{
	const FLOAT64		root = sqrt(2.0 * snr);
	STRUCT_Coord_Sph	st_Sigma;

	st_Sigma.r	= LIGHT_SPEED / (2.0 * PCS_BANDWIDTH * root);
	st_Sigma.az	= f_Deg_To_Rad(PCS_BEAM_AZI) / (PCS_KM * root);
	st_Sigma.el	= f_Deg_To_Rad(PCS_BEAM_ELE) / (PCS_KM * root);

	return st_Sigma;
}

측정 함수는 13장이 0.1 초마다 남긴 기록을 시각 순서로 하나씩 꺼내 한 번 잰 것으로 본다. 기록은 0 초부터 60 초까지 601 칸이지만 마지막 칸은 재지 않아 스캔은 600 번이다. 스캔마다 표적 수만큼 참값을 구하고 잡음을 더하고, 지도에 찍을 위경도도 함께 구해 둔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
changeSEED(PCS_SEED);

for (nScan = 0; nScan < nScanNum; nScan++)
{
	st_In		= &st_Sample[nScan];
	st_Radar	= &st_In->st_Platform;
	st_Out		= &st_Scan[nScan];

	for (nTarget = 0; nTarget < st_In->nTargetNum; nTarget++)
	{
		// 참값 x
		st_Out->st_True[nTarget] = f_Pcs_EcefToSph(&st_In->st_Target[nTarget].st_PosEcef, st_Radar);

		// 플롯 z = x + v, v ~ N(0, p^2)
		st_Out->st_Plot[nTarget].r	= st_Out->st_True[nTarget].r + GAUSS(0.0, st_Sigma.r);
		st_Out->st_Plot[nTarget].az	= st_Out->st_True[nTarget].az + GAUSS(0.0, st_Sigma.az);
		st_Out->st_Plot[nTarget].el	= st_Out->st_True[nTarget].el + GAUSS(0.0, st_Sigma.el);
		st_Out->st_PlotLla[nTarget]	= f_Pcs_SphToLla(&st_Out->st_Plot[nTarget], st_Radar);
	}
	...
}

첫 스캔의 대공 표적에 실제로 들어간 값은 아래와 같다.

성분참값 $x$잡음 $v$플롯 $z$
거리13 310.2362 m+2.4453 m13 312.6815 m
방위각0.0000°−0.3574°−0.3574°
고각1.2315°−0.8396°0.3919°

고각이 0.84° 작게 나온 이 플롯을 위도·경도·고도로 바꾸면 고도가 300 m 가 아니라 105.0 m 에 찍힌다. 다음 스캔에서는 거리 13 290.2 m 인 참값이 13 286.7 m, −0.4007°, 0.8776° 인 플롯이 되고 고도는 217.4 m 다. 이런 오차가 스캔마다 새로 생긴다.

플롯 3 000 개의 오차 $z - x$ 를 모아 표준편차를 다시 구하면 넣은 값이 그대로 나와야 한다.

플롯 3 000 개의 성분별 오차 분포 그림 6. 세 성분의 오차 히스토그램이다. 주황 곡선은 표준편차 p 인 정규분포다.

성분넣은 표준편차 $p$플롯 3 000 개의 오차 표준편차
거리4.740 m4.800 m
방위각0.4781°0.4760°
고각0.4939°0.4928°

거리가 1.3 % 크게 나왔는데, 정규분포 표본 $N$ 개로 구한 표준편차 자체가 $1/\sqrt{2N}$, 곧 3 000 개면 1.3 % 만큼 흔들린다. 이 차이는 그 안이다.


7. 클러터 만들기

레이다 전파는 표적에서만 돌아오지 않는다. 파도, 지면, 비구름, 새 떼에서도 돌아오고, 이렇게 표적이 아닌 것에서 생긴 탐지를 클러터(clutter)라 한다. 신호처리가 대부분을 걸러 내지만 다 걸러지지는 않아서 남은 것은 표적 플롯과 같은 형식으로 추적 필터에 들어온다. 플롯만 봐서는 어느 것이 표적인지 알 수 없다.

실제 클러터를 그대로 만드는 것은 바다 상태, 지형, 날씨까지 넣어야 하는 별도의 연구 분야다. 데이터 처리를 검증하는 모의에서는 그렇게까지 하지 않고, 해상처럼 전 영역에서 무작위로 생기는 클러터를 단순하게 만든다. 클러터 속에서 표적을 놓치지 않는 추적 기법을 시험하기에는 이것으로 충분하다.

방법은 세 단계다. 한 스캔에 만들 클러터 수를 정하고, 클러터가 생길 수 있는 거리·방위각·고각의 범위(FOV)를 정하고, 그 범위 안에서 성분마다 균등 난수로 값을 뽑는다. 0 과 1 사이의 균등난수 $u$ 를 범위에 맞게 늘리면 된다.

\[r = r_{min} + (r_{max} - r_{min})\,u, \qquad az = az_{min} + (az_{max} - az_{min})\,u, \qquad el = el_{min} + (el_{max} - el_{min})\,u\]
1
2
3
4
5
6
7
8
9
// 클러터: FOV 안 균등분포, 매 스캔 새로 뽑음
for (nClutter = 0; nClutter < nClutterNum; nClutter++)
{
	st_Clutter		= &st_Out->st_Clutter[nClutter];
	st_Clutter->r	= PCS_CLT_RNG_MIN + ((PCS_CLT_RNG_MAX - PCS_CLT_RNG_MIN) * UNIRAN());
	st_Clutter->az	= f_Deg_To_Rad(PCS_CLT_AZI_MIN + ((PCS_CLT_AZI_MAX - PCS_CLT_AZI_MIN) * UNIRAN()));
	st_Clutter->el	= f_Deg_To_Rad(PCS_CLT_ELE_MIN + ((PCS_CLT_ELE_MAX - PCS_CLT_ELE_MIN) * UNIRAN()));
	st_Out->st_ClutterLla[nClutter] = f_Pcs_SphToLla(st_Clutter, st_Radar);
}

균등난수 0.37 이 나왔다면 거리는 $200 + 14\,800 \times 0.37 = 5\,676$ m 다. 방위각과 고각도 같은 식으로 따로 뽑고 스캔마다 새로 뽑는다. 위경도로 바꾸는 함수는 플롯과 같다.

클러터가 생기는 범위와 실제로 뽑힌 클러터 3 000 개 그림 7. 왼쪽은 위에서 본 부채꼴, 오른쪽은 옆에서 본 쐐기다. 거리를 고르게 뽑았는데 지도에서는 레이다 가까이가 촘촘하다.

가까운 쪽이 촘촘한 것은 거리와 각도를 고르게 뽑았기 때문이다. 거리 $r$ 에서 폭 $dr$ 인 띠의 넓이는 $r$ 에 비례하는데 그 띠에 들어가는 개수는 같으니, 넓이당 밀도는 $1/r$ 로 줄어든다. 넓이당 밀도를 고르게 하려면 거리 대신 거리의 제곱을 고르게 뽑아야 하지만, 이 모의는 과제가 정한 대로 성분을 고르게 뽑았다.


8. 표적 다섯 개의 결과

과제가 요구한 전시는 표적 다섯 개다. 13장의 두 표적에 셋을 더했다. 모두 레이다 북쪽의 FOV 안에서 움직이게 두었다.

표적위도 [°]경도 [°]고도 [m]속력 [m/s]yaw [°]기동
1 대함32.125126.03030270없음
2 대공32.12126.0300200180없음
3 대공32.05126.081 5001500yaw −1.5 G, 10 ~ 40 s
4 대공32.10125.932 000180110없음
5 대함32.04125.9602045없음

표적 3 은 북쪽으로 가다가 1.5 G 로 30 초 동안 왼쪽으로 돈다. 150 m/s 에서 1.5 G 는 초당 5.62° 라 168.6° 를 돌고, 선회 반경은 1 530 m 다. 표적 4 는 레이다 정면을 동남동으로 가로지르고, 표적 5 는 북동쪽으로 천천히 간다. 60 초 동안 다섯 표적의 방위각은 −54° 에서 +40° 사이에 있어 전부 FOV 안이다.

표적 다섯 개의 참값 궤적, 플롯, 클러터 그림 8. 선이 참값 궤적, 검은 점이 플롯, 회색 점이 클러터다. 600 스캔을 모두 겹쳐 그렸고 점선 부채꼴이 클러터 범위다.

플롯은 600 스캔에 표적 다섯이라 3 000 개, 클러터는 스캔당 다섯이라 3 000 개다. 플롯은 궤적 선을 따라 옆으로 흩어져 찍히고, 클러터는 부채꼴 안에 고루 뿌려지되 레이다 가까이가 촘촘하다. 참값 궤적 표시를 끄면 선은 사라지고 점만 남는데, 그것이 추적 필터가 받는 입력이다.

고도도 같은 식으로 흩어진다. 고각 오차는 표준편차가 0.4939° 로 일정하지만 고도 오차는 거리가 곱해지므로 거리에 따라 달라진다.

대공 표적 플롯의 고도가 시간에 따라 흩어지는 모양 그림 9. 표적 2 의 플롯 600 개를 위경도로 바꿔 얻은 고도다. 점선은 참값 고도에 거리 × 고각 표준편차를 더하고 뺀 띠다.

표적 2 는 13.3 km 에서 1.3 km 까지 다가온다. 고도 오차의 표준편차는 처음 114.7 m 에서 끝에 11.7 m 로 줄고, 실제 플롯 고도는 67 m 에서 640 m 사이에 찍혔다. 참값은 내내 300 m 다. 추적 필터가 같은 플롯이라도 먼 것은 덜 믿고 가까운 것은 더 믿어야 하는 이유가 이 그림에 있다.

프로그램은 13장의 것에 측정 모의를 얹었다. 화면에서 SNR 과 스캔당 클러터 수를 바꾸면 궤적은 그대로 두고 측정만 다시 하고, 참값 궤적·플롯·클러터 표시를 따로 켜고 끌 수 있다. 난수 확인 창은 4절의 두 히스토그램과 함께 뽑은 값 앞 열 개가 어느 칸에 들어갔는지, 칸마다 개수와 확률밀도가 얼마인지, 평균과 표준편차가 어떤 식으로 나왔는지를 실제 값으로 보여 준다. 위의 숫자는 모두 그 프로그램의 계산부를 그대로 돌려 얻은 것이다.


9. 정리

플롯은 참값에 성분별 잡음을 더해 만든다. 잡음의 표준편차는 분해능을 $\sqrt{2\,\mathrm{SNR}}$ 로 나눈 값이고, SNR 20 에서 거리 4.740 m, 방위각 0.4781°, 고각 0.4939° 다. 각도 오차는 거리에 곱해져 위치 오차가 되므로 플롯은 거리 방향보다 옆으로 훨씬 넓게 퍼지고, 고도 오차도 먼 표적일수록 크다.

정규난수는 균등난수 열둘을 더해 만들었고, 10 000 개를 뽑아 평균·표준편차·확률밀도가 이론과 맞는 것을 확인한 뒤 썼다. 잡음은 ECEF 위치가 아니라 레이다가 실제로 재는 안테나 기준 거리·방위각·고각에 더한다. 그래야 실제 레이다에서 오차가 생기는 자리에 오차가 들어간다.

클러터는 정한 개수만큼 FOV 안에서 거리·방위각·고각을 균등 난수로 뽑는다. 표적 다섯 개를 60 초 동안 600 번 재서 플롯 3 000 개와 클러터 3 000 개를 만들었고, 플롯 오차의 표준편차는 넣은 값과 1.3 % 안에서 같았다. 이 점들이 추적 필터의 입력이다.


참고 자료

  • D. K. Barton, Radar System Analysis and Modeling, Artech House — 거리·각도 측정 오차의 표준편차를 분해능과 $\sqrt{2\,\mathrm{SNR}}$ 로 적는 식, 분해능과 정확도의 구분
  • Y. Bar-Shalom, X. R. Li, T. Kirubarajan, Estimation with Applications to Tracking and Navigation, Wiley — 측정 모델 $z = x + v$, 감시 영역 안에 균등하게 분포하는 클러터(오경보) 모델
  • S. K. Park, K. W. Miller, “Random number generators: good ones are hard to find,” Communications of the ACM, vol. 31, no. 10, 1988 — 곱수 16807, 법 $2^{31}-1$ 인 선형합동 난수의 성질과 주기
  • D. E. Knuth, The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, Addison-Wesley — 균등난수 열두 개의 합으로 정규난수를 근사하는 방법과 그 한계
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.