15
5 이산 푸리에 변환 (C) 5.2 이산 푸리에 변환 이산 푸리에 급수는 이산시간 푸리에 변환을 수치적으로 계산하는 기법을 제공한다. 이 경우 시간 영역에서 잠재적인 문제인 에일리어싱에 대해 주의하여야 한다. 수학적 사실들로부터 이산시간 푸리에 변환의 샘플링은 주기적 신호 귀착됨을 알고 있다. 그러나 대부분의 실제 신호는 주기적이 아니며 이들은 유한 구간의 신호(유한 신호라 부름)일 가능성이 크다. 이러한 신호에 대해 어떻게 수치적으로 계산 가능한 푸리에 표현을 만들 수 있는가? 이론적으로, 기본 파형이 유한 신호의 파형을 가진 주기적 신호를 정의하고 이 주기적 신호에 대해 DFS를 사용함으로써 이 문제를 다룰 수 있다. 실제는 이산 푸리에 변환(DFT)이라고 불리는 새로운 변환을 정의한다. 이 DFT는 임의의 유한 신호에 대해 수치적으로 계산가능한 푸리에 변환이다. 주로 이 변환을 사용할 것이다. 먼저 0 =n=N- 1 구간에서 N 개의 샘플을 가진 유한 신호 x(n)을 N- 점 신호로 정의한다. N- 점 x(n)신호 을 이용하여 만들어진 주기 N 의 주기적 신호라 하자. 즉 (5.30)로부터, 이것은 약간 어색한 표현이다. 독립변수에 modulo- N 연산을 이용하여 이를 다음과 같이 간략화할 수 있다. 이 연산을 해석하는 간단한 방법은 다음과 같다. 만약 독립변수 n이 0와 - 1사이에 있으면 이를 그대로 두고, 그렇지 않으면 결과가 0와 N- 1사이에 있을 때까지 n으 로부터 N의 배수를 더하거나 뺀다. 식 (5.32) 을 보는 하나의 비공식적이고 유용한 길은 신호길이와 같은 둘레를 가진 원통의 주위를 유한신호 x(n)으로 둘러싼 것으로 생각하는 것이다. 그런 다음, 원통의 주위를 반복해서 지나가면 유한신호가 주기적 으로 보이게 되는 것이다. 이런 해석법에 따르면, 주기신호에 의해 유한신호를 나타 내는 것은 원통의 둘레를 주기신호로 둘러싼 것과 같다. (5.32)이 x(n)의 길이가 N 또는 이보다 작을 때만 유효함에 주목할 수 있다. 게다가, module- N 연산을 표시하기 위해 다음의 편리한 표시 방법을 사용한다. 그러면 x(n)와 사이의 간단한 관계는 다음과 같다.

5 이산 푸리에 변환 (C) - ICDEVICE · 크기 샘플이 0일 때 이에 해당하는 각도는 0이 아님을 주목하라. 일반적으로 이 각 ... 예제 5.7 dtft 의 다른

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 제 5 장 이산 푸리에 변환 (C)

    5.2 이산 푸리에 변환 이산 푸리에 급수는 이산시간 푸리에 변환을 수치적으로 계산하는 기법을 제공한다. 이 경우 시간 영역에서 잠재적인 문제인 에일리어싱에 대해 주의하여야 한다.

    수학적 사실들로부터 이산시간 푸리에 변환의 샘플링은 주기적 신호 로 귀착됨을 알고 있다. 그러나 대부분의 실제 신호는 주기적이 아니며 이들은 유한 구간의 신호(유한 신호라 부름)일 가능성이 크다. 이러한 신호에 대해 어떻게 수치적으로 계산 가능한 푸리에 표현을 만들 수 있는가? 이론적으로, 기본 파형이 유한 신호의 파형을 가진 주기적 신호를 정의하고 이 주기적 신호에 대해 DFS 를 사용함으로써 이 문제를 다룰 수 있다. 실제는 이산 푸리에 변환(DFT)이라고 불리는 새로운 변환을 정의한다. 이 DFT 는 임의의 유한 신호에 대해 수치적으로 계산가능한 푸리에 변환이다. 주로 이 변환을 사용할 것이다. 먼저 0=n=N-

    1 구간에서 N 개의 샘플을 가진 유한 신호 x(n)을 N-점 신호로 정의한다. 가 N-점 x(n)신호 을 이용하여 만들어진 주기 N 의 주기적 신호라 하자. 즉 (5.30)로부터,

    이것은 약간 어색한 표현이다. 독립변수에 modulo -N 연산을 이용하여 이를 다음과 같이 간략화할 수 있다.

    이 연산을 해석하는 간단한 방법은 다음과 같다. 만약 독립변수 n이 0와 -1사이에 있으면 이를 그대로 두고, 그렇지 않으면 결과가 0와 N-1사이에 있을 때까지 n으로부터 N의 배수를 더하거나 뺀다. 식 (5.32)을 보는 하나의 비공식적이고 유용한 길은 신호길이와 같은 둘레를 가진 원통의 주위를 유한신호 x(n)으로 둘러싼 것으로 생각하는 것이다. 그런 다음, 원통의 주위를 반복해서 지나가면 유한신호가 주기적으로 보이게 되는 것이다. 이런 해석법에 따르면, 주기신호에 의해 유한신호를 나타내는 것은 원통의 둘레를 주기신호로 둘러싼 것과 같다. (5.32)이 x(n)의 길이가 N 또는 이보다 작을 때만 유효함에 주목할 수 있다. 게다가, module-N 연산을 표시하기 위해 다음의 편리한 표시 방법을 사용한다.

    그러면 x(n)와 사이의 간단한 관계는 다음과 같다.

  • 주파수 샘플링 정리로부터 N-점 신호의 이산시간 푸리에 변환 의 N개의

    등간격 샘플로부터 유일하게 을 복원할 수 있다고 결론을 내렸다. 단위원

    위의 이 N 개의 샘플은 이산 푸리에 변환 계수라고 불린다. 을 가정하자. 이 신호는 주기적(따라서 무한의) 신호이다. 그러면 이의 기본 간격이 이산 푸리에 변환이며 이 변환은 유한구간에 해당된다. 이 표시들은 다음의 정의에서 명확해진다. N-점 신호의 이산 푸리에 변환은 다음과 같이 주어진다.

    또는

    DFT X(k) 역시 N-점 신호임을 주목하라. 즉 이는 의 외부에서는 정의되지 않는다.

    (5.34)으로부터 이다. 즉 0=k=N-1의 외부에서 오직 DFS 만

    이 정의되는데, 이 역시 X(k)의 주기적 전개이다. 마지막으로

    은 DFT X(k)가 의 기본 간격임을 의미한다. N-점 DFT X(k) 의 역 이산 푸리에 변환은 다음과 같이 주어진다.

    또는

    다시 한 번 x(n)은 0=n=N-1의 외부에서 정의되지 않는다는 점을 강조한다. 이 범

    위 외부에서 x(n)의 전개는 이다. 이 절의 처음에서 말했듯이 명확히 DFS는 0=n=N-1일 때 실제 DFT와 등가이다. 그러므로 DFT의 구현은 비슷한 방법으로 할 수 있다. 만약 x(n)와 X(k)가 각각 열 벡터 x와 X로 배열되면, (5.35)와 (5.36)로부터 다음을 얻는다.

  • 여기서 은 (5.9)에서 정의된 행렬이고 이제 DFT 행렬이라 불릴 것이다. ? 예제 5.6 이 다음의 4-점 신호라 하자. 다음은 CEMTool 로 계산된 결과입니다. 예제5.6절의 해답 CEMTool>> x = [1,1,1,1]; N = 4; CEMTool>> X = dft(x,N); CEMTool>> phaX = angle(X)*180/pi; magX = abs(X) magX = 4.0000 0.0000 0.0000 0.0000 결과 그림은 그림 5.4, 5.5에 보여진다.

  • 다음은 MAtLab 으로 계산된 결과입니다.

    예제 5.6 절의 해답

    >> x = [1,1,1,1]; N = 4; >> X = dft(x,N); >> magX = abs(X), phaX = angle(X)*180/pi magX = 4.0000 0.0000 0.0000 0.0000 phaX = 0 -134.9810 -90.0000 44.9979

    그림 예제 5.6 의 DTFT 그림

  • 그림 예제 5.6의 DFT 그림

    a. 이산시간 푸리에 변환 을 계산하고 이의 크기와 위상을 그려라. b. 의 4-점 DFT을 계산하라. a. 이산시간 푸리에 변환은 다음과 같이 주어진다.

    따라서

    그리고

  • 그림은 그림 5.4에 보여진다.

    b. 4-점 DFT를 로 표시하자. 그러면

    이 계산은 예제 5.1과 비슷하다. 해는 다음과 같다.

    크기 샘플이 0일 때 이에 해당하는 각도는 0이 아님을 주목하라. 일반적으로 이 각

    도는 무시되어야 한다. DFT 값의 그림은 그림 5.5에 보여진다. 의 그림 역

    시 비교를 위해 점선으로 보이고 있다. 그림 5.5로부터 X₄가 올바르게 의 4개 샘플을 주고 있음을 관찰할 수 있다. 그러나 이는 0이 아닌 샘플을 하나만 갖고 있다. 이것이 새로운 사실인가? 모두 1을 가진 4-점 신호 x(n)을 보면 이의 주기적 전개가 다음과 같다고 결론을 내릴 것에 틀림없다.

    이는 상수(또는 DC) 신호이다. 이는 k=0(또는 ? =0)에서 0이 아닌 샘플을 갖고 다

    른 주파수에서는 0을 갖는 DFT 에 의해 예견된 것이다. ¦ ? 예제 5.7 DTFT 의 다른 샘플을 어떻게 구할 수 있는가?

    다음은 CEMTool 로 계산된 결과입니다. 예제5.7절의 해답 CEMTool>> x = [1,1,1,1, zeros(1,4)]; N = 8;

  • CEMTool>> X = dft(x,N); CEMTool>> magX = abs(X); phaX = angle(X)*180/pi magX = 4.0000 2.6131 0.0000 1.0824 0.0000 1.0824 0.0000 2.6131 phaX = 0 -67.5000 -134.9810 -22.5000 -90.0000 22.5000 -44.9979 67.5000 결과 그림은 그림 5.6, 5.7에 보여진다. 촘촘한 (또는 더 미세한) 주파수에서 샘플링해야 하는 것은 명확하다. 즉 을 증가시켜야 한다. 4대신 8로 점의 개수를 두배로 하자. 이는 을 4개의 0을 더한 8-점 신호로 취급함으로써 할 수 있다.

    이는 0 덧붙이기(zero -padding) 연산이라 불리는 매우 중요한 연산이다. 이 연산은 실제 앞으로 보게 될 것처럼 신호의 밀집한(dense) 스펙트럼을 구하는데 필요하다.

    가 8-점 DFT라 하자. 그러면

    이 경우 주파수 분해능은 이다. 해는 다음과 같다.

    이는 그림 5.6에 보여진다. 더 계속하여 만약 x(n)을 12개의 0을 메워서 다음과 같은 16-점 신호로 취급하면,

    주파수 분해능은 이고 이다. 그러므로 만큼

    떨어진 스펙트럼 샘플을 가진 더 밀한 스펙트럼을 얻는다. 의 그림은 그림 5.7에 도시되었다. ¦

  • 다음은 MatLab 으로 계산된 결과입니다.

    예제 5.7 절의 해답

    >> x = [1,1,1,1, zeros(1,4)]; N = 8; >> X = dft(x,N); magX = 4.0000 2.6131 0.0000 1.0824 0.0000 1.0824 0.0000 2.6131 phaX = 0 -67.5000 -134.9810 -22.5000 -90.0000 22.5000 -44.9979 67.5000

    그림: 예제 5.7의 DFT 그림: N=8

  • 그림 예제 5.7 의 DFT 그림: N=16

    주해: 마지막 두 예제에 기초하여 여러 가지 해설을 할 수 있다. 1. 0 덧붙이기는 원래의 신호에 더 많은 0이 첨가되는 연산이다. 결과로 나온 더 긴 DFT는 원래 신호의 이산시간 푸리에 변환의 밀접한 간격을 갖는 샘플을 제공한다.

    2. 예제 5.6에서 정확히 x(n)의 이산시간 푸리에 변환 을 그리기 위해 필요

    한 모든 것은 , 4-점 DFT였다. 이는 x(n)이 단지 네 개의 0이 아닌 샘플을

    갖기 때문이고, 따라서 을 구하기 위해 에 보간 공식(5.30)을 이용할

    수도 있었다. 그러나 실제로 보간 공식을 이용하는 것보다 와 , 등등

    을 구해서 의 값을 구해 나가는 것이 더 쉽다. 이 접근방식은 DFT를 계산하는 고속 푸리에 변환 알고리즘을 이용하여 훨씬 더 효율적으로 될 수 있다. 3. 0 덧붙이기는 고밀도 스펙트럼을 주고 보다 잘 표시된 그림을 제공한다. 그러나 새로운 정보가 신호에 더해지는 것이 없으므로 이는 높은 분해능을 가진 스펙트럼을 제공하지는 않는다. 단지 추가로 0이 자료에 더해지기만 하였다. 4. 고분해능(high-resolution) 스펙트럼을 얻기 위해 실험이나 관찰로부터 더 많은 자료를 구해야 한다.(아래의 예제 5.8을 보라) 또한 첨가된 주변(side) 정보나 비선형 기법을 사용하는 다른 진보된 방법이 있다. ? 예제 5.8 고밀도 스펙트럼과 고분해능 스펙트럼의 차이를 보이기 위해 다음 신호를 생각한다.

  • 유한 개의 샘플에 기초한 이의 스펙트럼을 구하려고 한다.

    a. 의 이산시간 푸리에 변환을 구하고 그려라. b. 의 이산시간 푸리에 변환을 구하고 그려라. 다음은 CEMTool 로 계산된 결과입니다. 예제5.8절의 해답 a. 먼저 이산시간 푸리에 변환의 근사값을 구하기 위해 x(n)의 10-점 DFT를 구할 수 있다. CEMTool>> n=[0:99:1]; x = cos(0.48*pi*n)+cos(0.52*pi*n); CEMTool>> n1=[0:9:1]; y1=x( 1:10:1); CEMTool>> subplot(2,1,1); plot(n1,y1);title("signal x(n), 0

  • 매끄러운 스펙트럼의 변형을 제공하였다. b. 더 나은 스펙트럼 정보를 얻기 위해, 의 처음 100개 샘플을 취하고 이의 이산시간 푸리에 변환을 구한다. 이제 그림 5.10의 이산시간 푸리에 변환 그림은 명확히 서로 매우 가까운 두 개의 주파수를 보이고 있다. 이는 의 고분해능 스펙트럼이다. 100-점 신호에 더 많은 영을 메우는 것은 그림 5.10의 스펙트럼의 더 매끄러운 표현을 가져올 것이지만 어떤 새 정보도 보여주지 못할 것임을 주목하라. 여기서는 학생들에게 이를 확인해 보기를 권장한다. ¦

  • 다음은 MatLab 으로 계산된 결과입니다.

    예제 5.8 절의 해답

    a. 먼저 이산시간 푸리에 변환의 어림치를 구하기 위해 x(n)의 10-point DFT 를 구할 수 있다. >> n = [0:1:99]; x = cos(0.48*pi*n)+cos(0.52*pi*n); >> n1=[0:1:9]; y1=x(1:1:10); >> subplot(2,1,1); stem(n1,y1); title('signal x(n), 0

  • b. 더 나은 스펙트럼 정보를 얻기 위해, x(n)의 처음 100 개 샘플을 취하고 이의 이산시간 푸리에 변환을 구할 것이다. subplot(2,1,1); stem(n,x); title('signal x(n), 0

  • 그림 예제 5.8a 의 신호 및 이의 스펙트럼: N=100

    그림 예제 5.8b 의 신호 및 이의 스펙트럼: N=100