# 상관관계와 공분산

#### 서론 및 직관

여러 센서에서 측정한 데이터를 융합할 때, 각 센서가 제공하는 측정값들 사이의 통계적 관계를 이해하는 것은 매우 중요하다. 두 확률변수 사이의 선형적 상관관계 정도를 알기 위해서는 상관계수(correlation coefficient)를, 상호 변화량을 표현하기 위해서는 공분산(covariance)을 사용한다. 센서 퓨전 과정에서 공분산은 여러 변수(측정값)들을 묶어 공분산 행렬로 확장하여 표현할 수 있으며, 이는 필터링(예: 칼만 필터)이나 추정 과정에서 오차 전파를 정량화하는 데 필수적으로 활용된다. 여기서는 상관관계와 공분산을 정의하고, 그 이론적 배경과 발전된 형태를 살펴본다.

#### 확률변수와 평균

확률변수는 어떤 확률공간 $\mathbb{P}$ 위에서 정의된 실값함수로 간주할 수 있다. 예를 들어 센서에서 측정된 온도, 거리, 가속도 등은 확률변수로 표현할 수 있다. 확률변수 $X$의 기댓값(평균)은 확률분포상의 '중심값'에 해당한다.

인라인으로 표현하면, 어떤 확률변수 $X$의 기댓값은 $E\[X]$로 나타낼 수 있다. 이때 $X$가 이산형이면 $E\[X] = \sum\_x x \cdot p(x)$, 연속형이면 $E\[X] = \int\_{-\infty}^{\infty} x , f\_X(x), dx$ 와 같이 정의된다. 여기서 $p(x)$는 이산형 확률변수의 확률질량함수, $f\_X(x)$는 연속형 확률변수의 확률밀도함수다.

#### 분산과 공분산의 배경

분산은 단일 확률변수 $X$가 기댓값 주변에서 얼마나 퍼져 있는지를 나타내는 척도다. 분산은 $X$에서 평균 $\mu\_X = E\[X]$를 뺀 값, 즉 $(X-\mu\_X)$를 제곱하여 그 평균을 취한 값이다.

$$
\begin{align} \mathrm{Var}(X) &= E\big\[(X - \mu\_X)^2\big] \\
&= E\[X^2] - \mu\_X^2 \end{align}
$$

분산이 확률변수의 '분포적 폭'을 나타낸다면, 두 개 이상의 확률변수 사이의 상관된 변동을 표현하는 척도가 필요하다. 이를 확장한 개념이 바로 공분산이다.

#### 공분산의 정의

두 확률변수 $X, Y$가 있을 때, 공분산 $\mathrm{Cov}(X, Y)$은 $X$와 $Y$가 어떻게 함께 변하는가를 수치로 나타낸다. 정의는 다음과 같다.

$$
\begin{align} \mathrm{Cov}(X, Y) &= E\big\[(X - \mu\_X)(Y - \mu\_Y)\big] \\
&= E\[XY] - \mu\_X \mu\_Y \end{align}
$$

여기서 $\mu\_X = E\[X]$와 $\mu\_Y = E\[Y]$는 각각 $X$와 $Y$의 기댓값이다. 공분산이 양의 값을 가지면 두 확률변수가 동시에 같은 방향으로 변화하는 경향이 있다는 의미이며, 음의 값을 가지면 서로 반대 방향으로 변화하는 경향이 있음을 나타낸다. 값이 0에 근접한다면 선형적인 상관성은 없거나 매우 약하다고 해석할 수 있다.

센서가 제공하는 서로 다른 측정값(예: 센서 A의 온도측정, 센서 B의 압력측정)이 서로 강한 상관관계를 가진다면, 공분산이 크게 나타난다. 이는 센서 퓨전 알고리즘에서 두 측정값 사이의 의존성을 고려해야 함을 의미한다.

#### 상관계수

공분산은 두 확률변수 사이의 선형적 결합 정도를 나타내지만, 단위나 스케일에 따라 값의 크기가 달라진다. 예를 들어, 한 변수의 스케일을 달리 잡으면 공분산 값이 변화하여 직관적인 해석이 어려울 수 있다. 이러한 문제를 해결하기 위한 정규화(normalization)된 형태가 상관계수(correlation coefficient)다. $X$와 $Y$에 대한 피어슨 상관계수 $\rho\_{X,Y}$는 다음과 같다.

$$
\begin{align} \rho\_{X,Y} &= \frac{\mathrm{Cov}(X, Y)}{\sqrt{\mathrm{Var}(X),\mathrm{Var}(Y)}} \\
&= \frac{E\[XY] - \mu\_X \mu\_Y}{\sqrt{E\[X^2] - \mu\_X^2},\sqrt{E\[Y^2] - \mu\_Y^2}} \end{align}
$$

상관계수의 값은 -1부터 1 사이에 존재한다. 1은 완벽한 양의 선형 상관관계를, -1은 완벽한 음의 선형 상관관계를, 0은 선형적 상관관계가 전혀 없음을 의미한다. 센서 데이터를 분석할 때 이 값이 중요한 이유는, 서로 다른 측정값들 간에 얼마나 강하게 연관되어 있는지를 알 수 있기 때문이다.

#### 공분산 행렬

단일 변수 혹은 두 변수 사이의 공분산만으로는 고차원 센서 데이터의 복잡한 상관관계를 모두 담기 어렵다. 여러 확률변수로 구성된 벡터 $\mathbf{x} = \bigl(X\_1, X\_2, \dots, X\_n\bigr)$에 대해, 모든 쌍의 공분산을 모아서 행렬 형태로 나타내면 공분산 행렬 $\mathbf{\Sigma}$를 얻을 수 있다.

$$
\begin{align} \mathbf{\Sigma} &=  \begin{pmatrix} \mathrm{Cov}(X\_1, X\_1) & \mathrm{Cov}(X\_1, X\_2) & \cdots & \mathrm{Cov}(X\_1, X\_n)   \\
\mathrm{Cov}(X\_2, X\_1) & \mathrm{Cov}(X\_2, X\_2) & \cdots & \mathrm{Cov}(X\_2, X\_n)  \\
\vdots & \vdots & \ddots & \vdots \\
\mathrm{Cov}(X\_n, X\_1) & \mathrm{Cov}(X\_n, X\_2) & \cdots & \mathrm{Cov}(X\_n, X\_n) \end{pmatrix} \end{align}
$$

대각원소 $\mathrm{Cov}(X\_i, X\_i)$는 곧 $\mathrm{Var}(X\_i)$가 되고, 비대각 원소 $\mathrm{Cov}(X\_i, X\_j)$는 $X\_i$와 $X\_j$의 공분산을 나타낸다. 센서 퓨전 알고리즘에서 오차나 노이즈가 포함된 여러 센서 데이터를 융합할 때, 이 공분산 행렬은 불확실성(uncertainty)을 표현하는 핵심적인 수단으로 사용된다.

#### 센서 퓨전에서의 활용 예시

mermaid로 간단한 흐름을 나타내면 다음과 같이 표현할 수 있다

{% @mermaid/diagram content="flowchart LR
A((센서1 측정)) --> B{측정치 벡터}
C((센서2 측정)) --> B
B --> D((공분산 행렬 계산))
D --> E(오차 추정 및 필터링)" %}

센서1과 센서2가 측정한 데이터를 모아서 하나의 측정치 벡터 $\mathbf{x}$를 구성하고, 이로부터 공분산 행렬을 계산하여 필터(예: 확장 칼만 필터, 무향 칼만 필터 등)에 제공한다. 공분산 행렬을 바탕으로 오차 추정 및 최적화 과정을 수행함으로써 센서 퓨전을 안정적으로 진행할 수 있다.

#### 공분산 행렬의 성질과 고유분해

센서 퓨전에서 공분산 행렬은 여러 확률변수들의 상호 오차 구조를 집약적으로 나타내는 핵심 도구다. 공분산 행렬은 항상 \*\*대칭(symmetric)\*\*이며, 모든 벡터에 대해 음이 아닌 이차형식을 가지므로 **양의 준정부호(positive semi-definite)** 행렬이다. (필요 조건에 따라 양의 정부호(positive definite)가 될 수도 있다.) 이는 공분산 행렬의 유용성을 보장해주는 중요한 성질이다.

이러한 대칭 양의 준정부호 행렬은 선형대수학적으로 \*\*고유분해(eigendecomposition)\*\*나 \*\*특잇값분해(SVD)\*\*를 통해 분석할 수 있다. 대표적으로 공분산 행렬 $\mathbf{\Sigma}$를 고유벡터와 고유값을 통해 대각화(diagonalization)하면, 공분산 행렬이 나타내는 변동성을 가장 큰 축부터 작은 축까지 분해하여 해석할 수 있다.

예를 들어 고유분해를 수행하면,

$$
\begin{align} \mathbf{\Sigma} &= \mathbf{Q},\mathbf{\Lambda},\mathbf{Q}^\top  \end{align}
$$

의 형태로 나타낼 수 있다. 여기서 $\mathbf{Q}$는 직교행렬(orthonormal matrix)이자 공분산 행렬의 고유벡터들로 구성된 행렬이고, $\mathbf{\Lambda}$는 고유값(diagonal element)들이 대각 원소로 배치된 대각행렬이다. 고유값들이 클수록 해당 방향으로 변동성이 크다고 해석할 수 있다. 센서 측정치들 간에 상관된 잡음이 존재한다면, 그 잡음이 가장 크게 분산하는 방향으로부터 정보를 해석하는 것이 필터 설계나 데이터 분석에 유용하다.

#### 역공분산 행렬(정보 행렬)

공분산 행렬이 양의 정부호라면(즉 모든 고유값이 양수라면), 역행렬 $\mathbf{\Sigma}^{-1}$이 존재한다. 이를 \*\*정보 행렬(information matrix)\*\*이라 부르기도 한다. 센서 퓨전 시, 확률분포를 최대우도추정(MLE)이나 사후확률 추정(MAP) 관점에서 해석할 때, 정보 행렬은 오차나 노이즈의 \*\*정밀도(precision)\*\*를 나타내는 중요한 지표가 된다.

예를 들어 선형 가우시안 모델에서 오차항이 $\mathbf{x} \sim \mathcal{N}(\mathbf{0}, \mathbf{\Sigma})$로 분포한다고 하면, 오차항에 대한 로그우도(log-likelihood)는 다음과 같은 꼴을 가진다.

$$
\begin{align} -\frac{1}{2} \bigl(\mathbf{x}^\top \mathbf{\Sigma}^{-1} \mathbf{x}\bigr) +\text{상수항}  \end{align}
$$

이때 $\mathbf{\Sigma}^{-1}$이 클수록(정보 행렬의 원소가 클수록) 해당 방향으로의 변동이 작다는 의미이므로, 관측 혹은 추정치가 그 방향으로부터 크게 벗어나는 것을 강하게 억제하게 된다. 센서 퓨전 알고리즘(예: 그래프 기반 SLAM, Kalman 필터 계열)에서 정보 행렬을 이용하여 측정값 간의 상관구조를 효율적으로 표현하기도 한다.

#### 공분산 행렬의 부분 구조와 부분 상관관계

여러 센서가 여러 종류의 물리량을 측정할 때, 전부를 하나의 공분산 행렬로 묶는 경우가 흔하다. 그러나 때로는 전체 차원을 모두 고려하는 것보다 특정 부분집합에 초점을 맞추어 부분적인 오차 전파나 상관관계를 분석해야 할 때가 있다. 이때 **부분 공분산 행렬(block covariance matrix)** 혹은 **부분 상관관계(partial correlation)** 개념이 유용하다.

특정 변수들을 마진(marginalization)하거나, 조건부(conditioning)하는 연산을 수행하면 고차원 분포에서 일부 변수에 대해 축소된 분포를 얻는다. 이 과정에서 공분산 행렬을 블록 형태로 분할해 다음과 같이 표현할 수 있다.

$$
\begin{align} \mathbf{\Sigma} = \begin{pmatrix} \mathbf{\Sigma}*{AA} & \mathbf{\Sigma}*{AB}  \\
\mathbf{\Sigma}*{BA} & \mathbf{\Sigma}*{BB} \end{pmatrix} \end{align}
$$

블록 $\mathbf{\Sigma}*{AA}$와 $\mathbf{\Sigma}*{BB}$는 각각 변수 집합 $A$, $B$에 대한 자기 공분산(sub-covariance)을, $\mathbf{\Sigma}\_{AB}$는 $A$와 $B$ 사이의 상호 공분산을 나타낸다. 이러한 블록 구조를 이용하여, 칼만 필터 등의 재귀적 추정에서 일부 변수를 제거(marginalize)하거나 추가(condition)할 때, 블록 연산을 수행하여 축소된 공분산 행렬을 구한다.

또한 부분 상관관계는 두 변수를 나머지 변수를 고정(조건부)한 상태에서의 상관관계를 측정한다. 센서 간 잡음이 직접적 영향을 주고받는지, 아니면 다른 변수(예: 환경 변인이나 시간적 요인)를 거쳐서 간접적으로만 연관되는지를 구별할 수 있다. 이는 센서 데이터의 인과관계나 직접적인 피드백 구조를 파악하는 데 도움이 된다.

#### 센서퓨전에서의 확장적 활용

다수의 센서를 통한 측정값을 융합할 때, 다음과 같은 맥락에서 공분산과 상관관계를 적극적으로 활용한다. 센서별로 특성이 다르고, 측정 잡음의 형태나 크기가 상이하며, 특정 센서 조합은 다른 센서 조합에 비해 더 강한 상관성을 나타낼 수 있다. 이를 고려하여 필터의 갱신 과정에서 가중치를 합리적으로 부여하거나, 시스템 상태 변수의 분산 및 공분산을 추정하여 전체 오차 분포를 관리한다.

직관적으로, 서로 상관도가 높은 측정값들을 단순 합산하면 중복 정보로 인해 추정이 과도하게 치우칠 수 있다. 반면 상관관계를 전혀 고려하지 않으면, 일부 센서가 부정확한 정보를 제공함에도 그 오차가 과소평가될 위험이 있다. 공분산 행렬을 올바르게 추정하고, 이를 필터나 최적화 과정에 정확히 반영함으로써, 센서들의 데이터를 적절히 통합할 수 있다.

#### 공분산의 추정과 샘플 공분산 행렬

센서 퓨전 과정에서는 실제 측정된 데이터(샘플)로부터 공분산을 추정해야 한다. 확률변수 $X, Y$의 진정한 공분산 $\mathrm{Cov}(X, Y)$를 알고 있으면 좋겠지만, 센서 시스템에서는 한정된 샘플을 통해서만 추정이 가능하다. 일반적으로 사용하는 샘플 공분산(또는 표본 공분산) 추정식은 다음과 같다.

측정값 쌍 $\bigl{ \bigl(x\_i, y\_i \bigr) \bigr}*{i=1}^N$이 있을 때, $X, Y$의 표본평균을 $\bar{x} = \frac{1}{N}\sum*{i=1}^N x\_i$, $\bar{y} = \frac{1}{N}\sum\_{i=1}^N y\_i$ 라 하면, 다음과 같이 정의한다.

$$
\begin{align} \hat{\mathrm{Cov}}(X, Y) = \frac{1}{N-1} \sum\_{i=1}^N \bigl(x\_i - \bar{x}\bigr),\bigl(y\_i - \bar{y}\bigr) \end{align}
$$

여기서 분모가 $(N-1)$인 이유는 샘플에 대한 불편추정(unbiased estimation)을 확보하기 위함이다. (통계학적 엄밀성 때문에 $N$이 아니라 $(N-1)$을 사용한다.) 센서가 여러 차원(예: $d$차원)에서 데이터를 제공한다면, 이를 각 차원끼리 짝지어 위 공식대로 계산하여 $d\times d$ 표본 공분산 행렬을 얻을 수 있다.

#### 샘플 공분산 행렬의 계산 예시(Python)

아래는 Python 코드 예시다. 가상의 2차원 센서 측정 데이터(예: 위치 측정치의 x좌표와 y좌표)를 생성한 뒤, 표본 공분산 행렬을 직접 계산하거나 라이브러리를 통해 구하는 방법을 보여준다.

```python
import numpy as np

# 랜덤 시드 고정
np.random.seed(42)

# 2차원 가우시안 분포에서 무작위 샘플 생성
# 실제 공분산 행렬이 [[1.0, 0.8], [0.8, 1.5]] 정도라고 가정
mean = [0, 0]
true_cov = [[1.0, 0.8],
            [0.8, 1.5]]
N = 500

# multivariate normal 분포에서 샘플 생성
samples = np.random.multivariate_normal(mean, true_cov, size=N)

# N x 2 형태의 데이터에서 x, y 분리
x = samples[:, 0]
y = samples[:, 1]

# (1) 직접 공분산 계산
x_mean = np.mean(x)
y_mean = np.mean(y)
cov_xy_manual = np.sum((x - x_mean)*(y - y_mean)) / (N - 1)
print("직접 계산한 공분산(표본):", cov_xy_manual)

# (2) numpy.cov 사용
cov_matrix = np.cov(x, y, ddof=1)  # ddof=1 -> 분모 (N-1)
print("numpy를 이용한 공분산 행렬:\n", cov_matrix)

# (3) 샘플 상관계수 계산
corr_xy_manual = cov_xy_manual / (np.std(x, ddof=1)*np.std(y, ddof=1))
print("직접 계산한 상관계수(표본):", corr_xy_manual)

# (4) numpy.corrcoef 사용
corr_matrix = np.corrcoef(x, y)
print("numpy를 이용한 상관계수 행렬:\n", corr_matrix)
```

위 코드에서 `numpy.cov(x, y, ddof=1)`는 $2\times2$ 공분산 행렬을 반환하며, `numpy.corrcoef(x, y)`는 상관계수 행렬을 반환한다. 실제로 생성한 데이터의 분포에 따라 추정된 값이 달라지지만, 충분히 많은 샘플을 사용하면 진짜 공분산이나 상관계수에 근접하게 추정할 수 있다.

#### 공분산 추정 시 주의점

표본 공분산 행렬을 추정할 때에는 다음과 같은 통계적, 수치적 이슈가 자주 등장한다.

* **샘플 개수(N)의 제한**: 센서 측정 데이터가 충분히 많지 않으면, 추정된 공분산의 정확도가 떨어질 수 있다.
* **고차원 문제**: 차원이 매우 높은 경우(예: 이미지 특징 벡터), 샘플 공분산 행렬을 직접 추정하면 과적합(overfitting) 문제나 수치적 불안정 문제가 생길 수 있다. 필요에 따라 차원 축소(PCA, KPCA 등), 정규화(regularization) 기법, 또는 스파스(sparse) 추정 기법 등을 도입한다.
* **데이터 이상점(Outlier)**: 일부 이상치가 있다면 표본 공분산 계산에 큰 영향을 주어 왜곡이 생길 수 있으므로, 로버스트(robust) 통계 방법을 사용하기도 한다.

센서 퓨전 맥락에서 이러한 주의사항을 감안하여 공분산을 추정하고, 이를 필터나 추정 알고리즘에 적용함으로써 데이터 융합의 정확도를 높일 수 있다.

#### 다변량 정규분포와 공분산의 기하학적 해석

센서 퓨전에서 가장 많이 가정되는 확률 모델은 다변량 정규분포(multivariate normal distribution)다. 예를 들어 상태 추정 문제에서 잡음이 가우시안이라고 가정할 때, 상태벡터가 $\mathbf{x}\in \mathbb{R}^n$라고 하면 다음과 같은 형태를 많이 사용한다.

$$
\begin{align} \mathbf{x} \sim \mathcal{N}(\boldsymbol{\mu}, \mathbf{\Sigma}) \end{align}
$$

여기서 $\boldsymbol{\mu} \in \mathbb{R}^n$는 평균벡터, $\mathbf{\Sigma}\in \mathbb{R}^{n\times n}$는 공분산 행렬이다. 이 분포의 확률밀도함수(pdf)는

$$
\begin{align} p(\mathbf{x}) = \frac{1}{\sqrt{(2\pi)^n,|\mathbf{\Sigma}|}} \exp \Bigl( -\tfrac12 (\mathbf{x}-\boldsymbol{\mu})^\top,\mathbf{\Sigma}^{-1},(\mathbf{x}-\boldsymbol{\mu}) \Bigr), \end{align}
$$

의 형태를 가진다. 여기서 $|\mathbf{\Sigma}|$는 공분산 행렬의 행렬식(determinant)이다.

이때 $(\mathbf{x}-\boldsymbol{\mu})^\top,\mathbf{\Sigma}^{-1},(\mathbf{x}-\boldsymbol{\mu})$는 \*\*마할라노비스 거리(Mahalanobis distance)\*\*로 알려져 있으며, 공분산 구조를 반영한 '축적 절대값'처럼 해석된다. 직관적으로 공분산 행렬이 고유벡터로 대각화되는 축 방향으로 그 분포가 '늘어지고 찌그러지는' 정도가 달라진다.

2차원 정규분포의 경우, 등고선(contour)은 타원(ellipse) 형태로 나타난다. 타원의 주축 방향과 길이는 공분산 행렬의 고유벡터와 고유값으로 결정된다. 이러한 기하학적 해석은 센서 데이터가 (가우시안 근사 하에) 분포될 때, 측정치가 얼마나 '평균으로부터 떨어져 있는가'를 판단하거나, 다차원 잡음에 대한 '엘립스 범위'를 시각화할 때 유용하다.

#### 시계열 상관관계와 자기상관

센서 퓨전은 종종 동적 시스템에서 발생하는 시간적 데이터(time series)를 다룬다. 즉, 센서가 연속적으로 관측 값을 제공할 때, 시간축을 따라 같은 센서의 연속 측정값에 대한 상관도(자기상관, autocorrelation)나 다른 센서 측정값과의 시차를 고려한 상관도(교차상관, cross-correlation)를 분석해야 할 수 있다.

* **자기상관(Autocorrelation)**: 같은 확률변수 $X\_t$가 시간 지연(lag) $\tau$만큼 떨어져 있는 두 시점 $t$와 $t+\tau$ 사이에서 어느 정도의 상관관계가 존재하는지 나타낸다. 예를 들어 센서가 주기적으로 잡음을 포함한 측정을 한다면, 일정 시간 간격으로 노이즈 패턴이 유사하게 반복되는 현상이 있을 수 있다.

  자주 사용하는 척도는 $R\_X(\tau) = E\[X\_t,X\_{t+\tau}]$ 같은 자기상관함수다. 분산이나 상관계수 개념을 시간축 방향으로 확장한 것으로 볼 수 있다. 센서 퓨전에서 시계열 모델(예: Kalman 필터, 베이즈 필터 등)을 설계할 때, 노이즈가 백색(white noise)인지, 아니면 시간적 상관이 있는지에 따라 필터 구조를 달리 해야 한다.
* **교차상관(Cross-correlation)**: 서로 다른 센서 $X\_t$와 $Y\_t$가 있을 때, 시간 지연 $\tau$를 포함하여 얼마나 동조(共調)하는지를 본다. 만약 한 센서가 물리량 $A$를 측정하고, 다른 센서가 물리량 $B$를 측정하는데, $B$가 $A$의 변화 뒤 $\tau$만큼 지연되어 반응한다면, 교차상관 함수를 통해 이를 정량적으로 파악할 수 있다.

이러한 시계열 상관관계 분석은 센서 퓨전 단계에서 측정 업데이트 간격, 필터의 상태천이(state transition) 가정, 잡음 모델 등을 설정할 때 중요하다.

#### 비선형 상관관계와 상호 정보량

공분산과 상관계수는 어디까지나 **선형적** 관계 정도를 평가하는 지표다. 센서 측정값 사이에 복잡한 비선형적 관계가 존재한다면, 공분산만으로는 그 관계를 충분히 설명하기 어렵다. 예를 들어 삼각함수적인 관계(사인파 형태)를 갖는 측정값이 있을 때, 비선형성으로 인해 단순 공분산값은 0에 근접할 수 있으나 실제로는 높은 의존성이 존재할 수 있다.

이러한 비선형 의존도를 측정하기 위해 통계적 정보이론에 기반한 \*\*상호 정보량(mutual information)\*\*을 사용하는 경우도 있다. 상호 정보량 $I(X;Y)$는 두 확률변수 $X, Y$가 서로 공유하는 정보의 양을 측정하는 지표이며, 0이 되면 완전히 독립함을 의미한다. 이는 선형, 비선형 등 모든 형태의 의존성을 포괄한다.

센서 퓨전에서 데이터의 상관성을 더욱 일반적으로 파악하고 싶다면, 상호 정보량 기반의 의존성 분석, 혹은 커널 기법(kernel methods) 등을 사용할 수 있다. 하지만 다변량 케이스에서 상호 정보량을 직접 추정하는 것은 계산량이 크므로, 보통 가우시안 근사 하에서 공분산을 우선 사용하고, 필요 시 추가적으로 비선형 기법을 적용한다.

#### 센서퓨전을 위한 공분산 업데이트 (칼만 필터 예시)

대표적인 센서 퓨전 알고리즘인 칼만 필터(Kalman Filter)에서, 상태벡터 $\mathbf{x}$의 추정값과 그 오차 공분산 행렬 $\mathbf{P}$가 시간에 따라 반복적으로 예측(prediction)과 업데이트(update)를 거치며 갱신된다. 예를 들어 확장 칼만 필터(EKF)의 업데이트 과정은 다음과 같은 형태를 가진다.

* 예측 단계

$$
\begin{align} \hat{\mathbf{x}}*{k|k-1} &= f(\hat{\mathbf{x}}*{k-1|k-1}),  \\
\mathbf{P}*{k|k-1} &= \mathbf{F}*{k-1},\mathbf{P}*{k-1|k-1},\mathbf{F}*{k-1}^\top + \mathbf{Q}\_{k-1}, \end{align}
$$

여기서 $f(\cdot)$는 상태 전이 함수, $\mathbf{F}*{k-1}$은 그에 대한 선형화 혹은 야코비(Jacobian) 행렬, $\mathbf{Q}*{k-1}$는 시스템 노이즈 공분산 행렬이다.

* 업데이트 단계

$$
\begin{align} \mathbf{K}*k &= \mathbf{P}*{k|k-1},\mathbf{H}*{k}^\top  \Bigl(\mathbf{H}*{k},\mathbf{P}*{k|k-1},\mathbf{H}*{k}^\top + \mathbf{R}*k\Bigr)^{-1}, \\
\hat{\mathbf{x}}*{k|k} &= \hat{\mathbf{x}}*{k|k-1} + \mathbf{K}*k \bigl(\mathbf{z}*k - h(\hat{\mathbf{x}}*{k|k-1})\bigr), \\
\mathbf{P}*{k|k} &= \bigl(\mathbf{I} - \mathbf{K}*k \mathbf{H}*{k}\bigr),\mathbf{P}*{k|k-1}. \end{align}
$$

여기서 $\mathbf{z}\_k$는 실제 센서 측정값, $h(\cdot)$는 센서 측정 모델, $\mathbf{H}\_k$는 그에 대한 선형화 혹은 야코비 행렬, $\mathbf{R}\_k$는 센서 잡음 공분산 행렬이다. 필터는 추정값의 불확실성을 공분산 행렬 형태로 유지하며, 예측 단계와 업데이트 단계를 거치면서 측정값과 모델 정보를 결합한다.

센서 퓨전 상황에서는 여러 센서로부터 들어오는 측정값이 하나의 총합된 측정 벡터 $\mathbf{z}\_k$가 되거나, 혹은 순차적으로 필터에 통합될 수도 있다. 이때 각 센서 잡음의 공분산 $\mathbf{R}\_k$ 안에 센서 간 상관성이 존재한다면, 측정잡음 공분산 행렬을 적절히 구성해야 한다. 다만 실제로 센서 간 상관 잡음을 추정하기가 어려워서, 많은 시스템에서는 센서 노이즈가 상호 독립이라고 가정(즉 잡음 공분산 행렬을 대각행렬 형태)하는 경우도 있다. 그러나 이 가정이 맞지 않으면 추정 성능에 오차가 누적될 수 있으므로, 가능한 한 정확한 공분산 구조를 반영해주는 것이 바람직하다.

***

이상으로 상관관계와 공분산, 그리고 센서 퓨전 알고리즘에서 이들을 어떻게 활용하는지에 대해 살펴보았다. 앞서 언급한 모든 내용은 센서 융합 분야에서 불확실성 표현을 정교화하고, 다양한 센서로부터 들어오는 정보를 모순 없이 통합하는 핵심 이론적 기반을 제공한다.
