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()