
모터 진동 데이터에 큰 피크가 하나 찍혔다고 해보자. 시간 파형만 보면 그 피크가 충격인지, 두 개 이상의 주기 성분이 겹친 결과인지 바로 구분하기 어렵다. 반대로 FFT 스펙트럼만 보면 어느 주파수가 강한지는 보이지만, 그 성분이 측정 중 언제 나타났는지는 잃는다.
시간영역과 주파수영역은 서로 다른 데이터가 아니다. 같은 기록에서 서로 다른 질문에 답하는 두 표현이다.
| 확인하려는 질문 | 먼저 볼 표현 |
|---|---|
| 충격이 언제 발생했는가 | 시간 파형 |
| 파형이 포화되거나 잘렸는가 | 시간 파형 |
| 반복 성분의 주파수는 얼마인가 | FFT 스펙트럼 |
| 가까운 두 주파수를 구분할 수 있는가 | FFT 스펙트럼과 기록 길이 |
| 성분이 시간에 따라 변하는가 | 여러 구간의 FFT 또는 시간-주파수 분석 |
시간 파형에는 순서와 위상이 남는다
연속 신호를 두 성분의 합으로 두자.
첫 번째 성분은 진폭 1인 50 Hz 사인파이고, 두 번째 성분은 진폭 0.5인 120 Hz 코사인파다. 시간 파형에서는 두 성분이 순간마다 더해지므로 한눈에 분리되지 않는다. 대신 최대값, 충격 시점, 파형의 비대칭, 클리핑처럼 시간 순서가 필요한 정보가 그대로 남는다.
주파수와 주기의 관계는 다음과 같다.
50 Hz의 주기는 20 ms이고 120 Hz의 주기는 약 8.33 ms다. 화면에 10 ms만 표시하면 50 Hz는 반 주기밖에 보이지 않는다. 주기성 여부를 판단하려면 관심 있는 가장 낮은 주파수의 여러 주기를 포함하도록 기록 시간을 잡아야 한다.
DFT는 유한한 기록을 주파수별 복소 계수로 바꾼다
샘플링한 데이터가 N개라면 이산 푸리에 변환은 다음과 같이 쓸 수 있다.
각 X[k]는 k번째 주파수 칸의 크기와 위상을 담은 복소수다. FFT는 별도의 변환이 아니라 DFT를 빠르게 계산하는 알고리즘 계열이다.
샘플링 주파수를 f_s, 샘플 수를 N, 기록 시간을 T_{rec}=N/f_s라고 하면 주파수 칸 간격은 다음과 같다.
예를 들어 f_s=1000 Hz, N=1000이면 기록 시간은 1 s이고 주파수 간격은 1 Hz다. 앞의 신호는 50 Hz와 120 Hz가 정확히 주파수 칸에 놓이므로, 적절히 정규화한 단측 스펙트럼에서 진폭 1과 0.5에 해당하는 두 봉우리가 나타난다.
여기서 중요한 것은 샘플링 주파수보다 기록 시간이 주파수 간격을 결정한다는 점이다. 같은 f_s=1000 Hz에서 0.1 s만 기록하면 \Delta f=10 Hz다. 50 Hz와 54 Hz를 분리하고 싶다면 이 기록은 너무 짧다.
실수 신호의 스펙트럼은 양수와 음수 주파수에 대칭이다
실수값 시간 신호의 DFT는 양수와 음수 주파수에 켤레대칭으로 나타난다. 화면에서 흔히 보는 단측 스펙트럼은 음수 주파수 쪽 에너지를 양수 쪽에 합쳐 표시한 것이다.
따라서 FFT 원시값에 단순히 2/N을 곱하면 끝난다고 외우면 위험하다. DC 성분과 나이키스트 성분은 두 배로 만들지 않으며, 창 함수와 RMS/peak 표시 방식에 따라 보정 계수도 달라진다. 장비 화면의 단위가 peak, RMS, power, PSD 중 무엇인지 먼저 확인해야 한다.
나이키스트 조건은 시작점이고 anti-alias filter가 실제 경계다
샘플링 주파수가 f_s이면 나이키스트 주파수는 다음과 같다.
입력에 나이키스트 주파수보다 높은 성분이 남아 있으면 더 낮은 주파수로 접혀 들어온다. 이를 aliasing이라고 한다. 800 Hz 사인파를 1000 sample/s로 샘플링하면 관측되는 주파수는 다음처럼 200 Hz가 될 수 있다.
이미 샘플링된 뒤에는 200 Hz가 실제 성분인지 800 Hz가 접힌 결과인지 데이터만으로 판별할 수 없다. 그래서 ADC 앞의 아날로그 anti-alias low-pass filter가 필요하다.
현실의 필터에는 통과대역과 저지대역 사이의 전이대역이 있다. 관심 대역이 5 kHz라고 해서 샘플링 주파수를 정확히 10 kS/s로 잡으면 필터가 감쇠할 공간이 없다. 필요한 샘플링 주파수는 관심 대역, 필터 차수, 허용 alias 오차와 장비의 내장 필터 특성을 함께 보고 정한다.
정수 주기를 기록하지 않으면 spectral leakage가 생긴다
DFT는 잘라낸 데이터 한 구간이 반복된다고 가정한다. 구간의 시작값과 끝값이 이어지지 않으면 경계에 인공적인 불연속이 생기고, 한 주파수의 에너지가 주변 주파수 칸으로 퍼진다. 이것이 spectral leakage다.
창 함수는 구간 양끝을 완만하게 줄여 이 불연속을 낮춘다. 대신 모든 창은 주엽 폭, 부엽 크기, 진폭 정확도 사이에서 서로 다른 절충을 한다.
| 상황 | 우선 검토할 선택 |
|---|---|
| 기록 안에 정수 주기가 정확히 들어옴 | rectangular 또는 창 없음 |
| 일반적인 정상 신호의 주파수 탐색 | Hann |
| 고립된 단일 톤의 진폭 정확도가 중요함 | flat-top |
| 큰 톤 옆의 작은 톤을 찾음 | 낮은 부엽 특성의 창 |
| 짧은 과도현상이 구간 안에 완전히 포함됨 | rectangular을 포함해 신호 길이에 맞춰 검토 |
창을 적용하면 진폭과 잡음대역폭이 바뀌므로, 소프트웨어가 coherent gain과 equivalent noise bandwidth를 어떻게 보정하는지 확인해야 한다.
zero padding은 그래프를 촘촘하게 하지만 정보를 늘리지는 않는다
N개 뒤에 0을 붙여 더 긴 FFT를 계산하면 주파수 축의 표시점이 촘촘해진다. 봉우리 위치를 읽거나 그래프를 보간하는 데는 유용하다. 그러나 원래 기록 시간이 늘어난 것은 아니므로 가까운 두 성분을 실제로 분리하는 능력은 좋아지지 않는다.
진짜 주파수 해상도를 높이려면 더 오래 기록해야 한다. 단, 신호가 그 시간 동안 정상상태라는 전제가 필요하다. 회전수가 계속 변하는 기계를 무작정 오래 기록하면 한 성분이 넓게 번져 보일 수 있다. 그런 경우에는 짧은 구간을 이동하며 FFT를 계산하거나 회전수 기준의 order tracking을 검토한다.
측정 전에 정할 값은 네 가지다
- 관심 대역: 보고 싶은 최저·최고 주파수와 그 밖의 강한 방해 성분을 적는다.
- 샘플링과 필터: 관심 최고 주파수만이 아니라 anti-alias filter 전이대역까지 확보한다.
- 기록 시간: 필요한
\Delta f=1/T_{rec}와 가장 낮은 성분의 반복 횟수를 기준으로 정한다. - 창과 표시 단위: 누설, 진폭 정확도, RMS/peak/PSD 중 측정 목적에 맞게 선택한다.
시간 파형에서 먼저 포화와 과도현상을 확인하고, 그다음 FFT에서 반복 성분을 읽는 순서가 안전하다. FFT는 원인을 자동으로 판정하는 기능이 아니라, 유한한 시간 기록을 주파수별 계수로 다시 정리하는 계산이다.