2019년 12월 21일 토요일

Signal Processing For Communications (2)

이전 글에서 continuous-time과 discrete-time 신호에 대해 짧게 논의했었습니다. 이 장에서는 차후 사용될 기본적인 도구들을 소개하고 discrete-time 신호에 대해 좀 더 자세하게 살펴보겠습니다.

기존의 많은 신호처리 교과서들이 그렇듯이 역사적인 흐름에 따라 소개를 하자면, 먼저 continuous-time 신호를 다루고 나서 discrete-time 신호 그리고 digital 신호를 다루는 것이 순서에 맞을 것입니다. 이에 맞추어 전통적인 관점에서는 discrete-time 신호를 continuous-time 신호의 discrete version으로 생각하기 때문에 sampling을 중요하게 다뤄왔죠.

하지만 요즘 같은 디저털 시대에는 점점 더 sampling보다는 discrete-time 신호를 synthesis하는 것에 더 초점을 맞추어 중요하게 다뤄야할 필요가 있습니다. 이런 관점에서 오히려 역사적 흐름과는 반대로 discrete-time 신호를 중심으로 이야기를 풀어갈 때 훨씬 이해가 쉽다는 것을 차차 느끼실 것이라 생각합니다.

Discrete-Time Signal



앞으로 우리가 다룰 discrete-time signal은 complex-valued sequence입니다. 이는 정수 값을 갖는 인덱스 n에 대한 complex-valued 함수로 표현할 수 있으며, 예를 들어 위 그림에 대한 analytical closed-form은 다음과 같습니다: $$x[n] =((n+5)~\text{mod}~11)-5$$ 이 때, n은 dimensionless time이고 그저 sequence에서의 시간적인 순서를 표현하는 값입니다.

이런 discrete-time signal은 우리 실생활과 매우 밀접하게 연계되어 있는 한편, 우리 인간이 가지고 있는 물리적인 한계를 잘 보여줍니다. 즉, 우리가 어떤 신호를 "보고" 그 값을 아무리 빠르게 "기록"한다고 할지라도 그 사이에는 항상 "받아 적는데 걸리는 시간"이 존재하겠죠.

이와 같이 "받아 적는다"라는 행위가 바로 "sampling" 이고, 이는 아날로그 신호에서 discrete-time 신호를 만들어내는 가장 필수적인 방법입니다.  그렇다면 위와 같은 물리적 한계를 생각할 때 sampling을 하는 과정에서 불가피하게 없어지는 정보들로 인해 우리가 무슨 짓을 해도 신호의 정보를 완벽하게 기록하는 것은 불가능하다는 결론에 이릅니다.

그러면 평소에 우리가 잘만 듣고 있는 라디오나 CD에 녹음된 노래들은 어떻게 이런 한계를 극복한 것일까요? 결론부터 말하자면,
Continuous-time과 discrete-time 세계 사이를 오갈 때 이 사이의 간극으로 인한 정보 손실이 전혀 없이 넘나드는 방법이 있습니다! 

어떤 면에서는 말이 안 되는 것 같은 이 결론이, 바로 우리가 앞으로 신호 처리를 공부할 때 배우게 될 주요 테마입니다. 지금은 전혀 말도 되지 않아보이지만 이에 대한 수학적 증명은 sampling tehorem을 공부할 때 알게 될 것입니다. 그 장에 이르기까지 좀 더 도구를 갖춰야 엄밀하게 이해할 수 있겠으나 저 같이 성질이 급한 분은 저번 글을 통해 조금이나마 그 과정을 엿볼 수 있었을 것이라 생각합니다.

어찌 되었건 이 사실을 받아들이고 넘어가면, discrete-time 신호가 갖는 강력한 장점 하나를 알 수 있습니다. 어떻게든 discrete-time 세계로 신호를 넘기고 나면, 이 후부터는 "측정 간의 시간"이라는 개념 자체가 사라진다는 점입니다. 즉, 우리가 가진 신호는 그저 값들이 나열된 순서가 있는 수열일 따름이고, 그렇기 때문에 신호를 어떻게 얻었는가와 전혀 상관이 없어진다는 것입니다. 이 부분이 바로 매번 시스템과 신호의 물리적인 성질을 고려해야 하는 아날로그 세계와는 크게 다른 discrete 세계의 장점이 되겠습니다. (같은 얘기에 대한 좀 더 자세한 예시는 이전 글을 참고해주세요.)

Elementary Operators


Sampling 된 신호를 가지고 여러가지 계산을 수행할 수 있을텐데, 여기서는 몇몇 기본적인 계산에 대해 소개하겠습니다. 매우 지루한 부분이지만 나중에 사용된 필터 부분의 기본적인 배경이 되기 때문에 꼭 알아야 할 중요한 개념이기도 합니다.

Shift. 


수열 $x[n]$를 정수 k만큼 shift하는 것은 간단히 $$y[n]=x[n-k]$$라고 표현할 수 있습니다. 여기서 k가 양수이면 오른쪽으로 음수이면 왼쪽으로 신호가 shift되는 것을 알 수 있고, 따라서 delay operator는 $$\cal{D}_k\{x[n]\}= x[n-k]$$라고 표현할 수 있습니다.

Scaling.


수열 $x[n]$를 factor $a\in\mathbb{C}$만큼 scaling하는 것은 $$y[n]=ax[n]$$이라 표현됩니다. 여기서 a가 실수이면 신호의 amplification($a>1$) 혹은 attenuation($a<1$)을 각각 표현할 수 있고 만약 a가 복소수이면 amplification과 attenuation에 더해 phase shift가 추가되었다는 것을 알면 되겠습니다. 


Sum. & Product.


수열 $x[n]$와 수열 $w[n]$을 더하거나 곱하는 것은 elementwise로 수행합니다: $$y[n]=x[n]+w[n], \quad y[n]=x[n]w[n]$$

Integration.


Discrete-time에서의 integration은 다음과 같이 합으로 정의됩니다: $$y[n]=\sum_{k=-\infty}^{n}x[k]$$

Differentiation. 


Discrete-time 신호에 대한 미분은 어떻게 하면 될까요? 미분의 기초적인 정의를 생각해보면 차분의 비율이죠. 하지만 이미 sampling 간격이 정수로 정해져 있는 discrete-time signal에서 continuous-time의 differentiation을 적용하는 것은 맞지 않아보입니다. 따라서 discrete-time에서는 differentiation을 dfference로 근사하여 사용하는데 가장 간단한 *1st order approximation은 다음과 같이 나타낼 수 있습니다:  $$y[n]=x[n] - x[n-1]$$ 예를 들어 Unit step은 discrete-time impulse를 integration operator에 통과시키면 만들 수 있고 반대로 unit step을 differentiation operator에 통과시키면 impluse를 얻을 수 있겠습니다.
* 차후에 "정확한" 근사는 $H(e^{j\omega})=j\omega$라는 filter로 나타내진다는 사실을 배울 것입니다. 하지만 보통 1st order difference만으로도 적용하는 것에는 문제가 없습니다.

The Reproducing Formula


위와 같은 기본적인 operations들에 더하여 앞으로 자주 보게 될 수식을 하나 더 소개하겠습니다. $$x[n]=\sum_{k=-\infty}^\infty x[k]\delta[n-k]$$
즉, 임의의 discrete-time 신호는 shifted impulse들의 선형 결합으로 표현이 가능하다는 것. 이렇게 매우 자명한 식을 굳이 한 번 더 강조하는 까닭은 앞으로 나올 discrete-time signal의 특징들을 얘기할 때 거듭해서 이 식이 자주 보일 것이기 때문입니다. 

Energy and Power


Discrete-time signal의 energy는 다음과 같이 정의됩니다: $$E_x=||x||^2_2=\sum_{n=-\infty}^\infty \left|x[n]\right|^2$$ 이 식에서 바로 알 수 있듯이 에너지는 위 식의 sum이 수렴할 때만 finite하죠. 다른 말로 하자면 $x[n]$이 square-summable 해야지만 에너지가 유한합니다. 이런 성질을 갖는 신호를 finite energy signal이라고 하고 가장 간단한 예시로 주기 함수는 모든 값이 0이 아닌한 square summable하지 않습니다. 이렇듯 신호의 summability는 무한한 길이의 신호를 다룰 때 중요한 성질인데, 여기서 absolute summability는 좀 더 강한 조건이고,  square summability (finite energy)는 그에 비해 좀 더 약한 조건이라고 할 수 있습니다.

이제 energy가 정의되었으니 시간에 대한 energy의 비율로 power를 정의할 수 있습니다: $$P_x=\lim_{N\rightarrow \infty}\frac{1}{2N}\sum^{N-1}_{-N}\left|x[n]\right|^2$$ 유한한 energy를 갖는 신호는 total power가 0이라는 것을 알 수 있습니다. Decay하지 않는 exponential 수열들의 경우는 infinite power를 갖는 것을 알 수 있지만, 주의할 점은 infinite energy를 갖는 모든 신호들이 그러하진 않다는 점입니다. 예를 들어 사인파와 같은 주기 신호의 경우 finite power를 갖는데 이 경우 위 식에서 limit가 잘 정의되지 않으므로 주기가 있는 신호에서는 average energy over a period로 power를 나타냅니다: $$P_x=\frac{1}{N}\sum^{N-1}_{n=0}\left|s[n]\right|^2.$$

Discrete-time 신호의 종류 네 가지


Finite-length signals

앞서도 보았지만 길이 N의 신호를 나타낼 때, 이를 벡터 형태로 표현할 수도 있고: $$x=[x_0, x_1, \cdots, x_{N-1}]^T$$ 다음과 같이 수열로 표현할 수도 있겠습니다: $$x[n], \quad n=0,\cdots,N-1$$ * 벡터로 표현하는 법은 몇몇 신호처리 operation들의 기하적인 성질을 이해할 때 유용할 수 있고, 수열로 표현하는 방법은 대수적인 성질을 표현할 때 유용하게 사용되므로 앞으로도 이 둘을 왔다갔다 하면서 사용하겠습니다. 신호를 벡터로 다루면서 얻을 수 있는 기하학적인 직관은 때로는 훨씬 간단하면서도 쉽게 신호 처리를 배울 수 있도록 도와주기 때문에, 이에 관한 기초적인 도구들은 다음 장에서 더 자세히 다룰 것이고 뒷 장에서도 계속 이 도구들을 이용할 것입니다.

여기서 한 가지 finite-length signal을 다룰 때 염두에 둘 점이 있습니다. $x[n]$이라는 신호가 support 바깥($n<0$ or $n>N-1$)에서는 정의되지 않는다는 것. 이런 경우 "앞서 배웠던 shift 같은 것을 finite length signal에서는 어떻게 정의해야할 것인가?"와 같은 문제가 생깁니다. 따라서 보통은 이런 "border effects"와 같은 문제를 없애기 위해 우리가 얻은 유한한 신호를 적절한 수열에 embedding하여 사용하게 됩니다.

* 대표적으로는 circular shift를 사용하여 finite-length signal을 N-periodic signal로 바꾼다거나 이 대신 support 바깥에 zero padding을 하여 finite-support signal로 바꾸는 방법 등이 있겠습니다. 각각의 방법은 특징이 있는데 그로 인해 생기는 현상도 서로 다릅니다. 예를 들어 circular shift를 사용하는 경우는 shifted sequence와 original signal 간의 equivalence가 존재하지만 zero padding의 경우는 그렇지 않죠. 특히 circular shift의 경우 discrete-time signal의 frequency domain 표현에 대해 배울 때 자연스럽게 등장할 것입니다.

Infinite-length signals: Aperiodic

대부분의 일반적인 discrete-time 신호는 finite할 수밖에 없기 때문에 무한정 긴 심지어 주기가 없는 이런 형태의 신호가 어떤 의미가 있는가 싶을 수 있죠. 하지만 가장 일반화된 형태인만큼 이론적으로 분석하기에는 매우 기본적인 바탕이 됩니다. 

Infinite-length signals: Periodic

주기 N을 갖는 주기 수열은 다음과 같이 표현될 수 있습니다. 
$$\tilde{x}[n] = \tilde{x}[n+kN], \quad k\in \mathbb{Z}.$$
앞으로 주기 수열을 표현할 때는 항상 물결 표시를 쓰도록 하겠습니다. Periodic 수열은 길이는 무한하지만 정보가 유한한 수의 샘플들 안에 모두 포함되어 있다는 점에서 유한 길이의 신호와 무한 길이의 신호 간의 가장 기본적인 다리 역할을 한다고 생각할 수 있습니다. 

그저 길이만 무한한 신호(aperiodic)는 함수와 같이 표현이 가능하므로 수학적인 일반화 혹은 추상화에 도움이 될 수는 있겠지만, 이를 처음부터 다루는 것은 실질적이지도 않고 우리가 저장하거나 다루기가 어렵기 때문에 일반적인 교과 과정에서 주기 함수를 중요하게 다루고 먼저 배우는 것이라고도 생각됩니다.

* Periodic extensions:  주기 수열은 무한한 길이를 갖지만 정보량 자체는 유한하죠. 이런 점을 이용하여 finite-length 신호 $x[n]$을 periodic sequence로 embedding하여 표현할 수 있습니다: 
$$\tilde{x}[n] = x[n~mod~N], \quad n\in \mathbb{Z}.$$
이를 finite-length 신호의 "periodic extension"이라고 부르는데, 주기적인 성질 덕분에 아래 수식에서 볼 수 있듯이 shifted sequence와 original signal 간의 equivalence가 존재합니다. 이를 circular shift라고 합니다. 

Infinite-length signals: Finite-support

무한한 길이를 갖는 또 다른 형태의 신호로는 일정 범위 안에서만 값을 갖고 (finite-support ) 그 밖에서는 모두 값이 0인 신호가 있겠습니다.
$$\exists N,M\in \mathbb{Z},\quad \bar{x}[n] = 0 \quad \text{for } n<M~\text{and } N>M+N-1.$$
쉽게 눈치챌 수 있지만, 이 역시도 finite-length 신호를 무한한 길이를 갖는 신호로 embedding을 할 수 있는 또다른 방법으로써, 앞서와 다른 점은 더이상 shift된 신호가 본 신호와의 equivalence가 없다는 점입니다. 

지금까지 간단하게 우리가 다룰 신호들의 종류와 성질 그리고 각 종류별 신호들 간의 관계들에 대해 알아보았습니다. 이렇게 각각의 신호를 다루는 방식에 대한 자세한 내용은 앞으로 차차 다루게 될 것이므로 여기서는 이런 것들이 있다고만 언급하고 넘어가겠습니다.

그럼 다음 글에서 뵙죠.

To be continued ... (planned)