본문 바로가기
Audio Processing

신호처리를 위한 평균

by gigasound 2021. 9. 28.


신호 처리와 평균

신호 처리과정에서 평균(mean, average)은 매우 유용하게 사용됩니다. 특히 향후에 다른 글에서 다루게 될 다이내믹 프로세서에서 핵심 내용으로 자리합니다. 그리고 신호를 계측하고 평가하는 과정에서도 사용되며, 적응 필터와 같은 신호 처리 필터의 기반이 됩니다. 

이글에서는 신호처리에 사용되는 평균과 이를 응용한 다른 평균에 대해서 알아보겠습니다. 


산술 평균과 이동 평균

산술 평균

n개의 {${x_i}$}에 대해 산술 평균 $\bar{X}$로 정의합니다. 일반적으로 산술 평균을 평균(average)으로 부릅니다.

$$\bar{X}=\frac{x_0+\cdots +x_{n-1}}{n}$$

이동 평균

만약 시간에 따라 계속 변화하는 신호에서 N개를 추출해서 평균을 구한다면 다음과 같이 표시됩니다. 즉 현재 n 번째 샘플 신호 이전에 수신된 N개의 샘플 신호에 대한 평균을 구해서 현재 샘플에서의 평균 신호 M으로 표시합니다. 

$$M_{N}[n]=\frac{\sum_{k=n-(N-1)}^{k=n}x[k]}{N}$$

이를 이동 평균(moving average)라고 합니다. 이동 평균은 계속 변화하는 신호 사이의 일부 구간의 평균을 구간의 대푯값으로 정의하는 방법입니다. 이를 신호처리에서는 이동 평균기라고 부르니다. 

이동 평균과 신호 변화 추이

이동 평균은 마치 저역 통과 필터처럼 작동합니다. 시간에 따라 지속적으로 이동 평균을 계산하면 아래 그림과 같이 세세한 신호의 변화 정보를 전반적인 변화 추이를 보여 줍니다. 이때 N의 크기에 따라 변화 추이를 보여주는 정보 상태는 달라집니다. 이동 평균도 단점이 있습니다. 신호가 지속적으로 증가 또는 감소를 하는 신호에 대해서는 이동 평균이 그 값을 잘 따라서 변하지 못합니다. 또 빠르게 변화하는 신호에 대해 큰 N을 사용하면 변화의 추이를 잘 찾지 못하기도 합니다. 그러므로 분석하고자 하는 신호의 내용에 따라 적절한 N을 설정해야 합니다.

이런 단점을 해결하기 위해 하나의 신호에 대해 작은 N과 큰 N에 대한 이동 평균을 동시에 구해서 이를 관찰하는 방법도 있습니다. 

 

좀 더 정밀한 신호 추이, 특히 잡음 영향을 배제하고 싶을 때는 이동 평균 개념이 확장된 칼만 필터 (Kalman filter)를 사용해야 합니다.

블록 평균

이동 평균에서 n=0,1,2,3으로 계속 변화를 관찰할 수도 있으나, 이는 연산량이 증가하게 됩니다. 신호처리에서는 연산량을 고려해야 하기 때문이죠. 그래서 n에 따라 지속적으로 이동 평균을 구하는 것이 아니고 특정 구간만큼 듬성듬성 구하는 방법을 사용하기도 합니다. 이를 특별히 블록 평균이라고 합니다.

일반적으로 N개 단위로 즉 n=0, n=N, n=2N에서 이동 평균을 구하는 방법을 사용합니다. 그러면 신호 처리의 연산량은 줄지만 정보를 얻는 구간이 듬성듬성 구해지겠죠.


근삿값으로 이동 평균 구하기

재귀형 이동 평균

이동 평균을 계산할 때 연산 방법을 조금 변경하면 재귀형 이동 평균식을 정의할 수 있습니다. 이는 이동 평균값에 최근 입력되는 신호를 반영하는 방법입니다. 

$$\bar{y}[n]=\bar{y}[n-1]+\frac{x[n-(N-1)]+x[n]}{N}$$

이를 일반화여 가충치 조건으로 표시해보겠습니다. 여기서 $\alpha =1$, $\beta =1/2$이면 위의 식과 같게 됩니다. 

$$\bar{y}[n]=\alpha \bar{y}[n-1]+\beta (x[n-1]+x[n])$$

이 식을 활용하면 효과적인 이동 평균기를 만들 수 있습니다. 이에 대한 내용은 아래를 보시면 됩니다. 

차분 방정식을 이용한 평균기

사실 이동 평균기 또한 많은 연산이 필요하기 때문에 좀 더 간단한 방법으로 위의 재위형 이동 평균을 사용하는 차분 방정식 형태의 평균기를 사용합니다.

다음은 두 개의 입력 신호에 대한 평균을 구하는 방법입니다. 두 개의 샘플이기 때문에 신호에 가 충치 1/2를 해서 더하면 됩니다. 

$$\bar{y}[n]=\frac{1}{2}x[n-1]+\frac{1}{2}x[n]$$

이를 좀 더 일반화하기 위해 시간 지연기를 이용하고 가충치를 -a, b로 변경해서 표시해 보겠습니다. 매우 간단하게 현의 입력 신호와 과거의 출력 신호를 이용해서 이동 평균을 구할 수 있습니다.

여기서 a, b는 임으로 정할 수 있습니다. 이는 현재와 과거 값을 평균에 얼마나 반영할 것인지 결정할 수 있다는 의미로 변화의 추이를 설정할 수 있게 해 줍니다.   

$$y[n]=b\cdot x[n]-a\cdot y[n-1]$$

이 평균기는 정밀하지는 않습니다. 그래서 위의 이동 평균기와 다른 값을 보여줍니다. 그래도 우리가 원하는 신호처리용으로 활용하기에는 적합합니다. 어차피 평균이란 게 대충 대표하는 값을 구하는 방법이니까요. 

이글에서 평균기를 설명한 이유는 사실 다이내믹 프로세서에서 활용하기 위해서입니다. 특히 포락선을 구할 때 사용됩니다. 이에 대한 내용은 다른 글에서 다룹니다. 


광고좀 꾹 눌러주시면 고맙겠습니다. 


위의 내용을 참조용으로만 사용해주세요. 무단 도용이나 무단 복제는 불허합니다.

기타 문의 사항은 gigasound@naver.com에 남겨 주시면 고맙겠습니다.