이 글에서는 DFT leakage와 이런 현상을 보완하는 방법에 대해서 정리해보았다.
시뮬레이션 A
FFT 계산 주파수 분해능이 1Hz인 경우
다음과 같이 1초에 1번의 주기가 있는 1Hz cosine 신호가 있다. 이 신호의 스펙트럼은 cosine신호가 +1Hz와 -1Hz를 가진 복소수 신호로 구성되어 있음을 fft example3에서 확인하였다.
FFT에 입력되는 신호의 위상 시작점에 따라 아래 그림2, 그림3과 같이 스펙트럼의 결과가 다르지만, 하지만 2개의 주파수(+1Hz, -1Hz)를 제외한 나머지 주파수를 가진 복소신호의 크기는 0이다.
신호의 주파수를 1.5Hz로 변경하자. 이 신호는 1초에 1.5 주기를 가진 신호이다.
이 신호를 FFT에 넣어보면 다음과 같다. 1Hz 신호의 FFT 결과는 +1,-1Hz의 복소신호만 있었지만 1.5Hz 신호의 FFT 결과는 아래 그림과 같이 +1,-1Hz 이외의 주파수에도 복소신호들이 존재한다.
이런 현상을 DFT leakage라고 하며, FFT 분해능이 부족하기 때문에 생기는 현상이다.
이 시뮬레이션에서는 100Hz의 샘플링으로 신호를 생성하였고, 수집한 데이터의 개수는 100개, 즉 FFT에 입력한 데이터 개수는 100개이다.
FFT의 분해능은 100Hz/100개 = 1Hz이다. 이 시뮬레이션에서 FFT는 1Hz 단위까지의 신호만 판별할 수 있는 것이다.
스펙트럼 애널라이저에서 RF 신호를 보여줄 때 FFT 계산 결과를 위와 같이 그대로 보여주는 것이 아니라 크기로 변환하여 보여준다.
그림 A-0 시뮬레이션에서 3번 블록의 결과가 FFT 계산결과를 크기로 변환하여 보여준 것이다.
데이터 수집 개수는 128개, 즉 FFT 개수 128개 ( FFT 개수를 100개 설정이 안되어서 가장 비슷한 숫자로 설정하였음.) 크기 표현시 사용한 filter는 rectangular이다. 다음 FFT 크기 결과에서 크기가 가장 큰 곳이 +1.5Hz, -1.5Hz 부근인 것을 확인할 수 있다. 그림 A-5의 FFT 결과로는 신호의 주파수 1.5Hz를 판별하지 못하였지만 그림 A-7에서는 확인할 수 있다.
그림 A-8은 filter를 blackman harris filter로 설정하고 FFT결과를 크기로 표시한 것이다. +1.5Hz, -1.5Hz의 최고 값이 그림 A-7보다 작지만, 여전히 신호의 주파수 성분을 판별 가능하다.
FFT 결과를 어떻게 표시하는가에 따라 DFT leakage현상을 상쇄할 수 있다.
위와 같이 FFT 결과를 크기단위로 표시하고, 이때 어떤 filter를 사용하는가에 따라서 FFT 분해능이 부족한 상황을 보완 할 수 있다. FFT 계산 분해능이 1Hz였지만 그보다 작은 분해능으로 신호가 어떤 주파수를 가지고 있는지 확인 할 수 있다.
그렇다면
FFT 계산분해능을 0.1Hz까지 작게하려면 어떻게 해야할까? 수집 데이터 개수를 늘리면 된다. 즉 FFT에 입력되는 데이터 개수를 늘리는 것이다.
시뮬레이션 B
FFT 계산 주파수 분해능이 0.1Hz인 경우
이 시뮬레이션에서는 100Hz의 샘플링으로 신호를 생성하였고, 수집한 데이터의 개수는 1000개, 즉 FFT에 입력한 데이터 개수는 1000개이다.
FFT의 분해능은 100Hz/1000개 = 0.1Hz이다. 이 시뮬레이션에서 FFT는 0.1Hz 단위까지의 신호만 판별할 수 있는 것이다.
수집데이터 개수를 10배 했기 때문에 다음과 같이 10초동안 1Hz 신호를 수집되었다.
1Hz 신호의 FFT 결과는 다음과 같다. 그림 A-2와 차이점은 +1Hz와 -1Hz 사이의 point 개수가 늘어났다는 점이다. A-2에서 +1Hz와 0Hz 사이엔 point개수가 1개이지만 B-2에서는 +1Hz와 0Hz사이의 point 개수가 10개이다. 즉 FFT계산 결과의 분해능이 0.1Hz라는 점이다.
1.5Hz 신호의 FFT 결과는 다음과 같다. A-5와 다르게 DFT leakage가 없다. FFT 계산결과의 분해능이 0.1Hz이므로 +1.5Hz와 0Hz사이의 point 개수가 15개이다.
시뮬레이션 A와 마찬가지로 FFT 계산 결과를 크기로 표현해보았다.
데이터 수집 개수는 1024개, 즉 FFT 개수 1024개 ( FFT 개수를 1000개 설정이 안되어서 가장 비슷한 숫자로 설정하였음.) 크기 표현시 사용한 filter는 rectangular이다. 다음 FFT 크기 결과에서 크기가 가장 큰 곳이 +1.5Hz, -1.5Hz 부근인 것을 확인할 수 있다.
※ 샘플링 rate가 높다고 해서 주파수 분해능이 높은 것이 아니다. 데이터 수집 시간이 길어야 (FFT에 입력되는 데이터 개수가 커야한다) 주파수 분해능을 높일 수 있다.
1Hz 신호를 생성할 때 sampling rate가 10Hz인 경우 A와 100Hz인 경우 B가 있다.
FFT 주파수 분해능 0.1Hz를 맞추기 위해서는 데이터 몇개를 수집해야 할까?
두 경우 모두 10초를 수집해야 한다.
A인 경우 1초에 10개 데이터가 생성된다. 100개(10초)를 수집해야한다.
B인 경우 1초에 100개 데이터가 생성된다. 1000개(10초)를 수집해야 한다.
'Gnuradio' 카테고리의 다른 글
gnuradio - time shift effect (0) | 2023.03.07 |
---|---|
gnuradio - sampling and aliasing (0) | 2023.03.05 |
gnuradio 시뮬레이션 - fft example 3 (신호의 시작 위상이 다르면 DFT 결과는?) (0) | 2023.03.01 |
gnuradio 시뮬레이션 - fft example 2 (0) | 2023.02.26 |
gnuradio 시뮬레이션 - fft example 1 (0) | 2023.02.23 |