AI/머신러닝

센서 데이터와 이상 탐지 (주파수, FFT)

edcrfv458 2025. 3. 20. 14:59

주파수

  • 주파수란 1초 동안 반복되는 신호(파동)의 횟수
  • 단위는 헤르츠(Hz)
  • 즉, 1초 동안 신호가 몇 번 반복되는지 나타내는 값

 

주파수의 개념 (시간 vs 주파수)

  • 시간 도메인 신호
    • 시계열 데이터는 시간에 따라 변화하는 신호
    • 진동 센서 데이터, 마이크 소리 데이터, 전기 신호 등
  • 주파수 도메인 신호
    • 하지만 신호는 여러 개의 주파수 성분으로 구성
      • 가속도 센서(진동 데이터)라고 가정
      • 기계는 보통 여러 개의 부품으로 구성되어 있음
      • 모터, 팬 회전, 진동 발생, 외부 환경 영향(진동으로 인한 바닥 진동)
    • 우리가 보는 복잡한 신호도 사실 여러 개의 단순한 주파수(정현파)들이 합쳐진 것
    • FFT(푸리에 변환)을 사용하면 어떤 주파수 성분이 포함되어 있는지 분석할 수 있음

 

주파수 단위와 의미

주파수 (Hz) 의미
1 Hz 1초에 1번 반복되는 신호
10 Hz 1초에 10번 반복되는 신호
1000 Hz (1 kHz) 1초에 1000번 반복되는 신호
  • 저주파 (낮은 주파수): 천천히 변하는 신호
  • 고주파 (높은 주파수): 빠르게 변하는 신호

 

주파수 변환이 필요한 이유

  • 숨겨진 신호 패턴 분석
    • 시계열 데이터만 보면 신호가 어떻게 구성되어 있는지 알기 어려움
    • FFT 이용하면 신호가 어떤 주파수 성분을 포함하는지 분석 가능
  • 특정 이상 신호 감지
    • 정상적인 기계는 특정 주파수에서만 진동
    • 베이렁이 마모되거나 모터가 고장나면 새로운 주파수 성분이 나타남
    • FFT를 이용해 비정상적인 주파수 변화를 감지 가능
  • 노이즈 제거
    • 원치 않는 주파수(ex. 50 Hz 전원 노이즈)를 제거해 데이터의 품질 향상
    • 필터를 적용하면 특정 주파수 대역만 남길 수도 있음

 

어떤 시계열 데이터를 주파수로 변환할 수 있을까? 제한이 있을까?

  • 결론: 모든 시계열 데이터를 주파수 도메인으로 변환할 수는 있지만, 주파수 변환이 의미 있는 데이터와 그렇지 않은 데이터가 존재
  • 즉, 주기적인 패턴(반복적인 신호)을 가진 데이터는 주파수 변환이 유용하지만, 그렇지 않은 데이터는 FFT가 별 의미를 가지지 못할 수 있음

 

주파수 변환(FFT)이 의미 있는 시계열 데이터

유형 예시 FFT 적용 가능 여부 이유
음성 데이터 사람 목소리, 기계 소음 o 주기적 성분 존재
진동 데이터 모터, 베어링, 기계 회전 신호 o 일정한 회전 속도에서 특정 주파수 발생
의료 신호 심전도(ECG), 뇌파(EEG) o 심장 박동, 뇌파 등 반복 패턴 존재
전력 신호 전류, 전압 파형 o 50 Hz, 60 Hz 전력 신호와 고조파 분석 가능
레이더 신호 물체 탐지 신호 o 일정한 주파수를 반사해 물체 분석
날씨 데이터(일 단위) 기온, 강수량 변화 부분적으로 가능 계절성은 있지만 FFT로 분석하기엔 적절하지 않음
주식 데이터 환율, 주가 변화 x 랜덤 워크 성격, 명확한 주파수 없음

 

주파수 변환(FFT)이 의미 없는 데이터

  • 비주기적인 데이터(랜덤, 트렌드 기반)
    • 랜덤 노이즈 (White Noise): 주기성이 없음
    • 주가 데이터: 금융 시작은 예측 불가능한 랜덤 워크 형태
    • 일기예보 데이터: 하루하루 기온이 변하지만 특정한 반복 주기가 명확하지 않음
    • 비정상적인 이벤트 발생 데이터: 사고 발생 횟수 같은 데이터는 특정한 패턴이 없기 때문에 분석 불가능

FFT

  • 제조업에서는 기계의 소리 및 진동을 분석해 이상 감지 및 품질 관리 수행이 중요
  • FFT, MFCC, MelSpectrogram과 같은 신호 처리 기법을 활용해 기계의 정상 작동 상태와 이상 상태를 효과적으로 비교
  • 시간 영역에서 주파수 영역으로 변환하는 알고리즘

 

사용 이유

  • 기계의 진동 분석: 정상적인 기계와 이상이 발생한 기계의 주파수 스펙트럼을 비교하면 특정 고장 상태에서 발생하는 주파수 성분을 식별 가능
  • 베어링 상태 진단: 특정 주파수 대역에서 이상 신호가 검출되면 베어링의 마모 또는 파손 가능성을 예측 가능
  • 모터 엔진 소리 분석: 모터의 고유 진동수를 기준으로 고장을 감지 가능
  • 전류 신호 분석(전동기, 변압기)
    • 정상 상태에서는 전력 주파수 성분 일정
    • 고장이 발생하면 특정 주파수에서 비정상적인 신호가 검출

 

FFT 활용한 제조업 품질 이상 탐지 방법

  • 정상 제품과 불량 제품의 주파수 패턴 비교
    • 정상 제품은 일정한 주파수 성분을 가지지만, 불량 제품은 새로운 주파수 성분이 추가되거나 기존 주파수 성분의 진폭이 변화
  • 자동화된 품질 검사 시스템 구축 가능
    • FFT 분석을 통해 특정 주파수에서 비정상적인 신호 변화가 나타나는지 확인하여, 자동 품질 검사 시스템을 구현

푸리에 변환 식

import numpy as np
import matplotlib.pyplot as plt

# 샘플링 주파수 및 시간 설정
fs = 1000  # 1초에 1000번 샘플링
t = np.linspace(0, 1, fs, endpoint=False)  # 1초 동안의 신호
#[0.    0.001  0.002  0.003  0.004  0.005  0.006  0.007  0.008  0.009]
#위처럼 1초동안 1000개의 시간값

# 30Hz 주파수를 포함한 신호 생성 (예: 정상 기계 소리)
freq = 30  # Hz
signal = np.sin(2 * np.pi * freq * t)

# FFT 수행
fft_result = np.fft.fft(signal)  # 푸리에 변환
freqs = np.fft.fftfreq(len(signal), 1/fs)  # 주파수 축
#np.fft.fftfreq(N, d)
#N → FFT를 수행한 신호의 길이 (데이터 개수)
#d → 샘플링 간격 (1/fs, 즉 한 샘플 간의 시간)
#결과 → 각 FFT 결과가 어떤 주파수(Hz)에 해당하는지 반환
# FFT 결과 시각화
plt.figure(figsize=(10, 4))
plt.plot(freqs[:fs//2], np.abs(fft_result[:fs//2]))  # 대칭이므로 절반만 표시
plt.title("FFT 결과 (30Hz 성분)")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude")
plt.grid()
plt.show()