제8장 이산 푸리에 변환
8.1 서론 (예) 어떤 사람의 음성이 어떤 주파수 분포를 갖는가 조사 푸리에 변환식 사용 (8.1) (예) 어떤 사람의 음성이 어떤 주파수 분포를 갖는가 조사 푸리에 변환식 사용 (8.1) : 그러나 위의 식으로는 주파수 분석을 통한 처리는 불가능하다. 우선 첫째로 가 식으로 나타나지 않는다. 음성신호를 깨끗한 식으로 나타낸다는 것은 불가능하기 때문이다. 가 식으로 표현이 가능한 경우에도 위의 적분을 쉽게 하거나 적분이 존재하는 경우는 드물다. 이산시간 푸리에 변환 (위의 신호를 샘플링) (8.2) : 위의 이산시간 푸리에 변환 역시 이 일반적으로 식으로 나타나지 않기 때문에 가 식으로 나오는 경우는 거의 없으며 어차피 컴퓨터를 통하여 계산을 하고 주파수를 적절한 간격으로 샘플링하여 플로팅 해보는 것이다. 컨벌루션 (8.3) : 일반적인 입력에 대하여 의 식을 얻는 것은 불가능하며 긴 시간동안 주파수 성분의 평균인 값은 별 의미가 없을 수도 있다. 만약 그 의미가 있는 경우에도 를 식으로 구할 수 없는 경우에는 이것과 를 곱하기 위해서는 각각을 일정 간격으로 샘플링하여 각 샘플을 서로를 곱한 다음에 이 결과로 를 추정하여 이의 역변환을 구하는 방법으로 출력을 구할 수도 있다. 연속시간 푸리에 변환, 이산시간 푸리에 변환만으로는 실제 응용 분야에 적용하기가 충분하지 않고 일정 간격으로 주파수 성분을 샘플링한 어떤 새로운 변환이 필요하다. 이산 푸리에 변환 (discrete Fourier Transform): 이산시간 푸리에 변환을 샘플링한 것, 컴퓨터를 이용하여 주파수 분석과 필터링을 하는데 사용 이산 푸리에 변환: 주기 이산신호의 푸리에 급수와 같다.
8.2 이산 푸리에 변환 신호 의 이산시간 푸리에 변환 는 전체의 주파수 스펙트럼을 나타낸다. 의 일부분의 스펙트럼 (8.4) 8.2 이산 푸리에 변환 신호 의 이산시간 푸리에 변환 는 전체의 주파수 스펙트럼을 나타낸다. 의 일부분의 스펙트럼 (8.4) 이산 푸리에 변환의 의미 i) 이산 시간 변환 를 샘플링 하여 주파수 영역에서 이산 함수가 되도록 한 것 ii) N 개의 데이터를 여러 주파수 성분을 갖는 기본 벡터에 내적 시켜 그 성분을 얻은 것 이산 푸리에 변환의 해석 : (N 개의 이산시간 신호를 벡터로 보고 이를 기본 단위벡터로 분해, 합성하는 방법) 벡터를 0부터 사이의 간격의 주파수 성분들로 분해하기 위한 단위 벡터를 라고 하면 이는 성분을 나타내며 이의 n 번째 원소의 값은 이 된다. 결국 주어진 시간 영역에서의 N개의 데이터를 벡터로 보았을 때 이는 다음과 같이 분해, 합성될 수 있다. (8.11) 여기서 로서 k번째 주파수 성분을 나타낸다. 길이 N의 데이터에 대한 이산 푸리에 변환과 그 역변환 (8.14) : 결국 이는 식 (2.66)에서 본 바와 같은 주기신호(주기 N)의 푸리에 급수와 같다.
8.3 이산 푸리에 변환의 해석 [이산 푸리에 변환과 이산시간 푸리에 변환, 그리고 푸리에 급수의 관계] 8.3 이산 푸리에 변환의 해석 [이산 푸리에 변환과 이산시간 푸리에 변환, 그리고 푸리에 급수의 관계] 그림 8.1과 같은 비주기 신호의 이산시간 푸리에 변환 (8.15) 위의 크기를 주파수에 따라 그린 것이 그림 8.2 그림 8.1 이산시간 신호(비주기 신호) 그림 8.2
[그림 8.2를 컴퓨터를 이용하여 자신이 직접 프로그램을 통하여 그리는 과정 ] 우선 식 (8.15)에서 를 적절한 간격으로 샘플링하면서 그 값을 계산할 것이고 를 축에, 이 값을 축에 플로팅 이와 같이 컴퓨터에서 푸리에 변환을 다루려면 항상 식 (8.15)와 같은 이산시간 푸리에 변환을 샘플링 하는 과정이 필요하다. 식 (8.15)와 같이 간단한 형태로 푸리에 변환식이 나타나지 않는 경우에는 이와 같은 과정이 더욱 필요하며 식 (8.3)과 같이 두 푸리에 변환 식을 곱할 때에도 어느 한 식이 일반적인 유리함수로 나타나지 않거나 컴퓨터를 이용하여 두 함수를 곱할 필요가 있으면 항상 어떤 간격으로 푸리에 변환을 샘플링 하여 결과의 샘플 값을 얻어야 한다. 즉, 컴퓨터나 디지털 회로를 이용한 디지털 신호처리에서는 주파수 영역에서의 연속함수인 나 를 주파수 영역에서 일정 간격으로 샘플링 할 필요가 있다. (예) 위의 식 (8.15)의 구간을 개의 구간으로 나눈다고 하면 번째 샘플 값은 다음과 같다. (8.16) 그림 8.1과 같이 신호의 길이가 개 이내로 유한한 경우 위 식은 결국 식 (8.12)과 똑같다. (예1) 그림 8.1의 비주기함수를 푸리에 변환한 그림 8.2의 를 구간에서 8개로 샘플링을 한다면 그 결과는 그림 8.3과 같고(크기는 1/8) 따라서 이는 그림 8.4와 같은 주기함수의 푸리에 급수와 똑같다. (예2) 그림 8.1의 비주기 신호의 푸리에 변환인 를 16개로 샘플링 한 결과는 그림 8.5와 같으며 이의 역변환은 그림 8.6과 같은 주기함수가 된다. 즉, 주파수 영역에서 샘플링을 하니 시간 영역에서 비주기 함수가 주기함수로 되는 것이다. (연속시간 신호를 샘플링하면 그 주파수 성분이 샘플링 주파수를 주기로 반복되는 주기함수가 되는 것과 같은 이치 )
그림 8.3 그림 8.2의 샘플링 그림 8.4 주기 8인 이산시간 신호 그림 8.5 를 16개로 샘플링한 결과 그림 8.6 그림 8.5와 같은 푸리에 계수를 갖는 신호
어떤 유한 길이의 신호 의 주파수 성분을 구하고자 한다면 식 (8. 2)를 통하여 를 구하는 것이 가장 합당하다 어떤 유한 길이의 신호 의 주파수 성분을 구하고자 한다면 식 (8.2)를 통하여 를 구하는 것이 가장 합당하다. 그러나 대부분의 응용에서 이를 구하는 것은 불가능하며 컴퓨터를 이용하여 어떤 처리를 하고자 한다면 어차피 이를 어떤 일정 간격으로 샘플링 해야 한다. 의 0부터 사이를 N 간격으로 샘플링 한 결과 = 을 N주기로 반복시킨 주기함수의 푸리에 급수 : 주파수 영역에서 샘플링을 더 잘게 한다면 이는 주파수의 더 자세한 변화를 보는 것이며 주파수 영역에서 해상도가 높아지는 것이다. 이에 대한 대가는 시간영역에서 변환해야할 신호의 길이가 늘어나는 것이다. 시간영역에서 계속되는 신호의 어떤 구간에서의 주파수 분포를 알고자 할 때 이 구간의 신호 N개를 떼어내어 이의 를 직접 구하지 않고 의 샘플링 값에 해당하는 값을 구할 수 있으므로 이를 이용하여 를 추정할 수 있다. 그림 8.7이 연속되어 들어오는 입력이라 하고 이의 점선 부분의 블록에 대한 주파수 성분을 알고자할 때 이 부분이 주기신호로 반복되는 그림 8.8과 같은 신호의 푸리에 급수를 구하는 것이다. 그 결과가 그림 8.9라 할 때 역시 점선 부분이 원하는 를 N 개로 샘플링 한 결과이다. 따라서 이산시간 신호에서 이산 푸리에 변환과 푸리에 급수의 차이는 없다고도 할 수 있다. 신호가 주어지면 관심 있는 N 개의 부분을 추출하여 식 (8.14)에 따라 변환한 결과가 이산 푸리에 변환이며 그 의미는 이산시간 푸리에 변환 를 N 개로 샘플링 한 결과이다. 그림 8.7 연속되어 입력되고 있는 신호. 블록 안의 신호의 주파수 분포를 알고자 한다. 그림 8.8 그림 8.7의 블록 안의 신호를 반복시킨 주기신호 그림 8.9 그림 8.8의 푸리에 급수. 점선 부분이 그림 8.7의 푸리에 변환 의 샘플링 결과이기도 하다.
8.4 푸리에 변환의 계산 이산 푸리에 변환과 이산 푸리에 역변환 (8.17) (8.18) 여기서 8.4 푸리에 변환의 계산 이산 푸리에 변환과 이산 푸리에 역변환 (8.17) (8.18) 여기서 FFT(Fast Fourier transform): 이산 푸리에 변환의 계산을 손으로 계산하는 경우는 없고 대부분의 경우 고속 알고리듬을 사용 (예) 입력이 네 개인 경우 푸리에 변환의 구체적인 예 : 입력이 네개인 경우 식 (8.17)에서 N이 4인 경우인데 이 식은 다음과 같은 행렬 연산 (8.19) 이므로 (8.20) 구체적인 예로 입력이 인 경우를 생각해 보자. 위 식에 입력으로 이 값을 대입하면 출력이 임을 확인할 수 있다. 즉, 가 0, , , 인 곳에서 주파수 성분이 각각 2, , 0, 라는 것이다. 물론 에서의 값은 다시 2이다. 이 샘플 외에서의 주파수 성분을 알기 위해서는 입력 샘플 수를 늘여야 한다.
(예) 입력이 8개인 8 포인트 이산 푸리에 변환의 식 (8.21) 여기서 계산량: 식 (8.17)과 (8.18)의 이산 푸리에 변환, 역변환을 계산한다면 행렬과 벡터의 곱을 계산하는 것이므로 계산량은 에 비례 FFT 알고리듬 : 디지털 신호처리 분야에서 이와 같은 이산 푸리에 변환의 실시간 구현을 위한 연구가 매우 중요하게 생각되었으며 이에 관한 여러 고속 계산 알고리듬 해석 방법으로는 위와 같은 행렬 계산에서 곱셈을 줄일 수 있는 알고리듬이라 생각할 수도 있고 또는 식 (8.17)을 조작하여 이를 여러 단계의 작은 알고리듬들로 나눈 것이라 생각할 수도 있다.
8.5 이산 푸리에 변환의 특성 및 응용 [주파수 분석 방법으로의 이산 푸리에 변환] 8.5 이산 푸리에 변환의 특성 및 응용 [주파수 분석 방법으로의 이산 푸리에 변환] 샘플링 과정에서 샘플링 주파수가 충분히 크지 않으면 우선 와 의 모양이 달라질 수 있다. 게다가 를 구하기 위해서는 연속되는 입력에서 일부분을 취하여 이산 푸리에 변환을 하는 것인데 이는 원래 신호에 어떤 길이 N의 윈도우를 씌워서 그 결과를 푸리에 변환하는 것과 같은 효과이다. 그림 8.10이 이 과정의 시간영역과 주파수 영역에서의 관계를 나타낸 것이다. 즉, 우리가 수행하고자 하는 이산 푸리에 변환은 그림 8.10(a)와 8.10(b) 신호의 곱인 8.10(c)의 신호를 푸리에 변환하는 것이므로 각 그림의 우측에 있는 바와 같이 그림 8.10(a)의 푸리에 변환과 8.10(b)의 푸리에 변환의 컨벌루션 결과가 그림 8.10(c) 신호의 푸리에 변환 결과이다. 따라서 당연히 블록 별로 나누기 전의 신호의 푸리에 변환과는 차이가 있다. 그림 8.10 이산 푸리에 변환의 해석 (a) 과 (b) 윈도우 함수와 이의 푸리에 변환 (c) 시간영역에서는 (a)와 (b)의 곱, 주파수 영역에서는 이들의 컨벌루션
[이산 푸리에 변환의 응용 분야: 고속 필터링] 현재 입력 과 시스템의 임펄스 응답 이 컨벌루션 (그림 8.11) 는 사실 을 푸리에 변환한 것이 아니라 이 을 주기로 반복되는 신호를 변환한 것이다. 따라서 의 역변환은 그림 8.11과 같은 일반적인 컨벌루션의 결과가 아니라 그림 8.12와 같이 각 신호가 을 주기로 반복되는 신호의 컨벌루션 결과가 된다. 그림 8.11 선형 컨벌루션 그림 8.12 순환 컨벌루션 입력이 앞으로 말려서 다시 시스템의 계수와 곱해지는 형태이므로 이를 보통 원형 컨벌루션이라 부르며 이에 대비하여 일반적인 컨벌루션을 선형 컨벌루션이라 부른다. 즉, 를 역변환 하여 그 결과를 이라 할 때 그 결과는 다음과 같다. (8.22)
위의 결과에서 보듯이 외에는 그림 8. 11의 선형 컨벌루션 결과와 일치하는 경우가 하나도 없다 위의 결과에서 보듯이 외에는 그림 8.11의 선형 컨벌루션 결과와 일치하는 경우가 하나도 없다. 또한 출력은 네 개만으로 국한되어 원래 선형 컨벌루션의 결과 7 개를 구할 수도 없다. 이산 푸리에 변환으로 선형 컨벌루션 결과를 얻을 수는 없을까? [답] (그림 8.12 참조) 각 신호의 뒤에 세 개 이상의 0을 채우면 이들의 원형 컨벌루션의 결과가 선형 컨벌루션의 결과와 같게 됨을 알 수 있다. 즉, 다음과 같은 순서로 진행한다. 1. 의 이산 푸리에 변환 를 구한다. 2. 의 이산 푸리에 변환 를 구한다. 3. 위 두 결과의 곱을 라 한다. 4. 의 이산 푸리에 역변환을 구한다. 그림 8.13 이산 푸리에 변환으로 선형 컨벌루션을 얻기 위한 방법