1센서 데이터의 이해
센서는 Physical AI의 입력을 제공합니다.
**센서 데이터의 특징** - 연속적 (Continuous): 온도, 압력 - 이산적 (Discrete): 스위치, 카운터 - 노이즈 포함: 측정 오차, 전기적 잡음 - 시간 의존적: 시계열 데이터
센서 데이터 유형
아날로그 데이터
- 연속적인 값 (예: 0-10V, 4-20mA)
- ADC (Analog-to-Digital Converter) 필요
- 해상도: 12bit (4096), 16bit (65536)
디지털 데이터
- 이산적인 값 (0/1, ON/OFF)
- 직접 읽기 가능
- 프로토콜: SPI, I2C, UART
이미지 데이터
- 픽셀 배열 (H×W×C)
- 크기: 640×480, 1920×1080
- 포맷: RGB, 그레이스케일, Bayer
2데이터 수집 (Data Acquisition)
실시간 데이터를 시스템으로 가져옵니다.
샘플링
샘플링 이론 (Nyquist-Shannon)
fs >= 2 × fmax
- fs: 샘플링 주파수
- fmax: 신호의 최대 주파수
**앨리어싱 (Aliasing)**: 샘플링 주파수가 낮으면 신호 왜곡 발생
예: 50Hz 진동을 10Hz로 샘플링하면 잘못된 5Hz 신호로 보임
샘플링 전략
주기적 샘플링 (Periodic Sampling)
# 주기적 샘플링 (수도코드)
샘플링_주파수 = 100 # Hz
샘플링_간격 = 1.0 / 샘플링_주파수
반복:
데이터 = 센서.읽기()
데이터_처리(데이터)
대기(샘플링_간격)
이벤트 기반 샘플링 (Event-driven)
- 임계값 초과 시
- 상태 변화 감지 시
- 외부 트리거 발생 시
적응형 샘플링 (Adaptive)
- 변화가 크면 빠르게
- 안정 상태면 느리게
- 데이터 전송량 최소화
3데이터 전처리
원시 센서 데이터를 AI 모델에 적합하게 변환합니다.
노이즈 제거
이동 평균 필터 (Moving Average)
# 이동 평균 필터 (수도코드)
함수 이동평균(데이터, 윈도우크기=5):
# 윈도우 크기만큼 평균 계산
결과 = 컨볼루션(데이터, 윈도우크기)
반환 결과
# 사용 예: 온도 데이터 필터링
온도 = [23.1, 23.5, 23.2, 25.8, 23.4, 23.6]
필터링결과 = 이동평균(온도, 윈도우크기=3)
칼만 필터 (Kalman Filter)
# 칼만 필터 (수도코드)
# 칼만 필터 초기화
필터 = 칼만필터_생성(상태차원=2, 측정차원=1)
필터.초기상태 = [0, 0]
필터.상태전이행렬 = 설정()
필터.측정노이즈 = 5
필터.프로세스노이즈 = 0.1
# 필터링 실행
필터.예측()
필터.업데이트(측정값)
중앙값 필터 (Median Filter)
- 급격한 스파이크 제거
- 엣지 보존
- 이미지 처리에 효과적
정규화 (Normalization)
Min-Max 정규화
# Min-Max 정규화 (수도코드)
함수 최소최대_정규화(데이터):
최솟값 = 데이터의_최솟값()
최댓값 = 데이터의_최댓값()
반환 (데이터 - 최솟값) / (최댓값 - 최솟값)
Z-Score 정규화
# Z-Score 정규화 (수도코드)
함수 Z점수_정규화(데이터):
평균 = 데이터의_평균()
표준편차 = 데이터의_표준편차()
반환 (데이터 - 평균) / 표준편차
특징 추출 (Feature Extraction)
통계적 특징
# 통계적 특징 추출 (수도코드)
함수 통계특징_추출(신호):
특징 = {
'평균': 신호의_평균(),
'표준편차': 신호의_표준편차(),
'최댓값': 신호의_최댓값(),
'최솟값': 신호의_최솟값(),
'RMS': 제곱근(신호제곱의_평균),
'피크간_거리': 최댓값 - 최솟값
}
반환 특징
주파수 도메인 특징
# 주파수 특징 추출 (수도코드)
함수 주파수특징_추출(신호, 샘플링주파수):
# FFT 변환 수행
FFT값 = 푸리에변환(신호)
주파수 = 주파수_계산(신호길이, 샘플링주파수)
# 주파수 대역별 파워 계산
특징 = {
'저주파_파워': 합계(10Hz 미만 대역),
'중주파_파워': 합계(10~100Hz 대역),
'고주파_파워': 합계(100Hz 이상 대역)
}
반환 특징
4센서 퓨전 (Sensor Fusion)
여러 센서 데이터를 결합하여 더 정확한 정보를 얻습니다.
퓨전 레벨
데이터 레벨 퓨전 (Data-level)
- 원시 센서 데이터 직접 결합
- 높은 대역폭 필요
- 가장 정확
특징 레벨 퓨전 (Feature-level)
- 추출된 특징 결합
- 중간 대역폭
- 일반적으로 사용
결정 레벨 퓨전 (Decision-level)
- 각 센서의 판단 결과 결합
- 낮은 대역폭
- 가장 단순
퓨전 알고리즘
가중 평균
# 가중 평균 퓨전 (수도코드)
함수 가중평균_퓨전(센서1, 센서2, 가중치1=0.7, 가중치2=0.3):
반환 가중치1 × 센서1 + 가중치2 × 센서2
베이지안 퓨전
# 베이지안 퓨전 (수도코드)
함수 베이지안_퓨전(사전확률, 우도, 증거):
사후확률 = (우도 × 사전확률) / 증거
반환 사후확률
**센서 퓨전의 장점** - 정확도 향상: 노이즈 감소 - 신뢰성 향상: 센서 고장 대응 - 완전성 향상: 더 많은 정보
5물리적 세계 모델링
Physical AI는 물리 법칙을 이해해야 합니다.
물리 모델
뉴턴 역학
F = ma
τ = Iα (토크 = 관성모멘트 × 각가속도)
열역학
Q = mcΔT (열량 = 질량 × 비열 × 온도변화)
dT/dt = -k(T - T_ambient) # 냉각
유체역학
Q = A × v # 유량 = 단면적 × 속도
P + ½ρv² + ρgh = const # 베르누이 방정식
시스템 모델링
1차 시스템
# 1차 시스템 (수도코드)
# 예: RC 회로, 온도 시스템
함수 일차시스템(상태, 시간, 시상수, 입력):
변화율 = (입력 - 상태) / 시상수
반환 변화율
2차 시스템
# 2차 시스템 (수도코드)
# 예: 스프링-질량-댐퍼 시스템
함수 이차시스템(상태, 시간, 고유주파수, 감쇠비, 입력):
위치, 속도 = 상태
위치변화율 = 속도
속도변화율 = 고유주파수² × (입력 - 위치) - 2×감쇠비×고유주파수×속도
반환 [위치변화율, 속도변화율]
6시계열 데이터 분석
시간에 따른 변화를 분석합니다.
추세 분석 (Trend Analysis)
# 추세 분석 (수도코드)
함수 추세_검출(데이터, 타임스탬프):
# 선형 회귀 분석
기울기, p값 = 선형회귀(타임스탬프, 데이터)
만약 p값 < 0.05: # 통계적으로 유의미
만약 기울기 > 0:
반환 "증가 추세"
아니면:
반환 "감소 추세"
반환 "안정"
이상 감지 (Anomaly Detection)
통계적 방법
# 3-sigma 이상 감지 (수도코드)
함수 통계적_이상감지(데이터, 임계값=3):
평균 = 데이터의_평균()
표준편차 = 데이터의_표준편차()
이상목록 = []
각 데이터포인트에 대해:
z점수 = |데이터값 - 평균| / 표준편차
만약 z점수 > 임계값:
이상목록에_추가(인덱스)
반환 이상목록
Moving Z-Score
# 이동 윈도우 이상 감지 (수도코드)
함수 이동Z점수_이상감지(데이터, 윈도우=50, 임계값=3):
이상목록 = []
인덱스 = 윈도우부터 데이터끝까지:
윈도우데이터 = 데이터[인덱스-윈도우:인덱스]
평균 = 윈도우데이터의_평균()
표준편차 = 윈도우데이터의_표준편차()
z점수 = |현재값 - 평균| / 표준편차
만약 z점수 > 임계값:
이상목록에_추가(인덱스)
반환 이상목록
7실시간 처리
지연 없이 데이터를 처리합니다.
스트리밍 처리
Sliding Window
# 슬라이딩 윈도우 (수도코드)
클래스 슬라이딩윈도우:
초기화(윈도우크기):
윈도우 = 고정크기_큐(최대크기=윈도우크기)
함수 추가(값):
윈도우에_값_추가(값)
함수 통계계산():
만약 윈도우가_비어있으면:
반환 없음
반환 {평균, 표준편차, 최댓값, 최솟값}
# 사용 예
윈도우 = 슬라이딩윈도우(크기=100)
반복:
데이터 = 센서.읽기()
윈도우.추가(데이터)
통계 = 윈도우.통계계산()
버퍼링 전략
Ring Buffer (순환 버퍼)
# 순환 버퍼 (수도코드)
클래스 순환버퍼:
초기화(크기):
버퍼크기 = 크기
버퍼 = 빈_배열(크기)
현재인덱스 = 0
개수 = 0
함수 추가(값):
버퍼[현재인덱스] = 값
현재인덱스 = (현재인덱스 + 1) % 버퍼크기
개수 = 최소(개수 + 1, 버퍼크기)
함수 전체가져오기():
만약 개수 < 버퍼크기:
반환 버퍼[0:개수]
반환 버퍼[현재인덱스:] + 버퍼[:현재인덱스]
8데이터 품질
고품질 데이터가 고품질 AI를 만듭니다.
데이터 품질 지표
완전성 (Completeness)
# 완전성 검사 (수도코드)
함수 완전성_검사(데이터):
전체개수 = 데이터_길이()
결측개수 = 결측값_개수()
완전성 = (전체개수 - 결측개수) / 전체개수 × 100
반환 완전성
정확성 (Accuracy)
- 센서 교정 (Calibration)
- 기준값과 비교
- 오차 범위 확인
일관성 (Consistency)
- 물리 법칙 위반 확인
- 범위 체크
- 상관관계 확인
결측치 처리
보간법 (Interpolation)
# 선형 보간 (수도코드)
함수 선형보간_결측치채우기(데이터, 타임스탬프):
유효마스크 = 결측값이_아닌_위치()
보간함수 = 선형보간_생성(유효_타임스탬프, 유효_데이터)
반환 보간함수(전체_타임스탬프)
9실전 예제
온도 센서 데이터 처리 전체 파이프라인입니다.
# 온도 센서 처리 파이프라인 (수도코드)
클래스 온도센서_프로세서:
초기화(윈도우크기=50):
윈도우 = 슬라이딩윈도우(윈도우크기)
칼만필터 = 칼만필터_초기화()
함수 칼만필터_초기화():
필터 = 칼만필터_생성()
필터.초기온도 = 25.0
필터.측정노이즈 = 0.5
필터.프로세스노이즈 = 0.1
반환 필터
함수 처리(원시온도):
# 1. 칼만 필터 적용
칼만필터.예측()
칼만필터.업데이트(원시온도)
필터링값 = 칼만필터.상태값
# 2. 슬라이딩 윈도우 추가
윈도우.추가(필터링값)
# 3. 통계 계산
통계 = 윈도우.통계계산()
# 4. 이상 감지 (3-sigma 규칙)
만약 통계가_있으면:
z점수 = |필터링값 - 평균| / 표준편차
이상여부 = z점수 > 3
아니면:
이상여부 = 거짓
반환 {원시값, 필터링값, 통계, 이상여부}
요약
센서 데이터 처리는 Physical AI의 기초입니다:
- ✅ 데이터 수집: 적절한 샘플링
- ✅ 전처리: 노이즈 제거, 정규화
- ✅ 특징 추출: 의미있는 정보 추출
- ✅ 센서 퓨전: 여러 센서 결합
- ✅ 물리 모델링: 물리 법칙 적용
- ✅ 실시간 처리: 지연 최소화
- ✅ 품질 관리: 고품질 데이터 확보
다음 레슨에서는 디지털 트윈 기초를 배웁니다.