[Home] Measurement로 돌아가기
8장 데이터 수집 시스템(DAQ) 및 신호 처리
Data Acquisition System (DAQ) and Signal Processing
1. 개요
데이터 수집 시스템(DAQ, Data Acquisition System)은 센서에서 발생하는 아날로그 신호를 컴퓨터가 처리할 수 있는 디지털 데이터로 변환하고, 저장·전송·분석하는 전 과정을 담당하는 시스템이다.
DAQ 시스템의 기본 구성은 다음과 같다.
| 구성 요소 | 역할 |
| 센서 / 트랜스듀서 | 물리량 → 전기 신호 변환 |
| 신호 컨디셔닝 | 증폭, 필터링, 절연, 브리지 전원 공급 |
| A/D 변환기 (ADC) | 아날로그 → 디지털 신호 변환 |
| DAQ 보드 / 데이터 로거 | 다채널 신호 수집, 저장, 타임스탬프 |
| 컴퓨터 / 클라우드 | 데이터 저장, 분석, 시각화, 경보 |
2. A/D 변환 (Analog-to-Digital Conversion)
2.1 분해능 (Resolution)
ADC의 분해능은 비트(bit) 수로 표현되며, 표현 가능한 이산 레벨 수를 결정한다.
분해능과 최소 검출 전압:
\[ \text{레벨 수} = 2^N \]
\[ \Delta V = \frac{V_{FS}}{2^N} \]
여기서 \( N \): 비트 수, \( V_{FS} \): 전체 측정 범위(Full Scale Voltage)
예: 16-bit ADC, ±10V → \( \Delta V = \frac{20}{65536} \approx 0.305 \, \text{mV} \)
2.2 주요 오차 원인
- 양자화 오차 (Quantization Error): 이산화 과정에서 발생하는 필연적 오차, 최대 ±½ LSB
- 오프셋 오차 (Offset Error): 입력 0 V에서 출력이 0이 아닌 값을 보이는 오차
- 게인 오차 (Gain Error): 입출력 기울기가 이상값과 다른 오차
- 비선형성 (Non-linearity): 입출력 관계가 직선에서 벗어나는 정도
2.3 신호 컨디셔닝
센서 신호를 ADC 입력 범위에 맞게 조정하는 과정이다.
- 증폭 (Amplification): 미약한 센서 신호를 ADC 입력 범위로 증폭 (계측 앰프, INA)
- 절연 (Isolation): 고전압 환경에서 측정 회로 보호 (포토커플러, 변압기)
- 휘트스톤 브리지 (Wheatstone Bridge): 스트레인 게이지 저항 변화를 전압 신호로 변환
휘트스톤 브리지 출력 전압:
\[ V_{out} = V_{ex} \cdot \frac{\Delta R / R}{4} \quad \text{(1/4 브리지)} \]
\[ V_{out} = V_{ex} \cdot \frac{\Delta R / R}{2} \quad \text{(1/2 브리지)} \]
\[ V_{out} = V_{ex} \cdot \frac{\Delta R / R}{1} \quad \text{(전 브리지)} \]
3. 샘플링 이론 (Sampling Theory)
3.1 나이퀴스트-섀넌 샘플링 정리
아날로그 신호를 디지털로 정확히 복원하려면 신호의 최고 주파수의 최소 2배 이상의 속도로 샘플링해야 한다.
나이퀴스트 조건:
\[ f_s \geq 2 f_{max} \]
여기서 \( f_s \): 샘플링 주파수, \( f_{max} \): 신호 최고 주파수
\( f_{Nyquist} = f_s / 2 \): 나이퀴스트 주파수 (표현 가능한 최고 주파수)
3.2 앨리어싱 (Aliasing)
샘플링 주파수가 나이퀴스트 조건을 만족하지 못할 경우, 고주파 성분이 저주파 성분으로 잘못 표현되는 앨리어싱이 발생한다.
앨리어싱 주파수:
\[ f_{alias} = |f_{signal} - n \cdot f_s|, \quad n = 1, 2, 3, \ldots \]
앨리어싱 방지를 위해 ADC 이전에 안티-앨리어싱 필터(Anti-aliasing Filter)를 적용하여 나이퀴스트 주파수 이상의 성분을 제거한다.
3.3 실용적 샘플링 주파수 선정
| 측정 대상 | 주요 주파수 범위 | 권장 샘플링 주파수 |
| 교량 변위 (정적) | DC~1 Hz | 10~50 Hz |
| 교량 진동 (동적) | 0~50 Hz | 200~500 Hz |
| 지진 모니터링 | 0~100 Hz | 200~1000 Hz |
| AE (음향 방출) | 100~500 kHz | 1~2 MHz |
| 초음파 검사 | 1~25 MHz | 50~100 MHz |
4. 노이즈와 신호 처리
5. 디지털 필터링 (Digital Filtering)
5.1 필터 종류
| 필터 유형 | 통과 대역 | 적용 예시 |
| 저역 통과 (LPF) | 저주파 성분 통과, 고주파 차단 | 정적 변위, 온도, 환경 데이터 |
| 고역 통과 (HPF) | 고주파 성분 통과, 저주파(직류) 차단 | 가속도 계측 (중력 성분 제거) |
| 대역 통과 (BPF) | 특정 주파수 대역만 통과 | AE, 진동 모드 분리 |
| 노치 (Notch) | 특정 주파수만 차단 | 전력선 주파수(60 Hz) 제거 |
5.2 FIR vs IIR 필터
- FIR (Finite Impulse Response): 항상 안정적, 선형 위상, 계수 수가 많음. 실시간 처리에 적합
- IIR (Infinite Impulse Response): 계수 수가 적어 처리 속도 빠름, 비선형 위상, 불안정 가능성
5.3 Python을 이용한 필터 구현 예시
import numpy as np
from scipy import signal
# 4차 Butterworth 저역 통과 필터 (차단 주파수: 10 Hz, 샘플링: 1000 Hz)
fs = 1000 # 샘플링 주파수 [Hz]
fc = 10 # 차단 주파수 [Hz]
order = 4
sos = signal.butter(order, fc, btype='low', fs=fs, output='sos')
filtered = signal.sosfiltfilt(sos, raw_data) # 위상 왜곡 없는 양방향 필터링
6. 주파수 분석 - FFT
6.1 고속 푸리에 변환 (Fast Fourier Transform, FFT)
시간 영역(time domain) 신호를 주파수 영역(frequency domain)으로 변환하여 신호의 주파수 성분을 분석하는 핵심 알고리즘이다.
이산 푸리에 변환 (DFT):
\[ X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j2\pi kn/N}, \quad k = 0, 1, \ldots, N-1 \]
FFT는 DFT를 \( O(N^2) \rightarrow O(N \log N) \)으로 고속화한 알고리즘
6.2 주파수 분해능
\[ \Delta f = \frac{f_s}{N} \]
여기서 \( \Delta f \): 주파수 분해능 [Hz], \( f_s \): 샘플링 주파수, \( N \): FFT 점 수
6.3 윈도우 함수 (Window Function)
유한 길이의 데이터를 FFT 할 때 발생하는 스펙트럼 누설(spectral leakage)을 줄이기 위해 윈도우 함수를 적용한다.
| 윈도우 | 특징 | 적용 |
| Rectangular | 처리 없음, 누설 최대 | 과도 신호 |
| Hanning | 누설 적음, 주파수 분해능 중간 | 범용 진동 분석 |
| Hamming | 사이드로브 감쇠 우수 | 음성, 통신 신호 |
| Flattop | 진폭 정확도 최고 | 교정, 레벨 측정 |
6.4 파워 스펙트럼 밀도 (PSD)
파워 스펙트럼 밀도:
\[ S_{xx}(f) = \frac{|X(f)|^2}{T} \quad [\text{단위}^2 / \text{Hz}] \]
구조물 고유 진동수, 공진 주파수 파악에 활용
7. DAQ 소프트웨어 (LabVIEW / Python)
7.1 NI LabVIEW
그래픽 기반 프로그래밍 언어로, 실시간 데이터 수집·제어·분석에 최적화되어 있다. 주요 특징은 다음과 같다.
- 데이터 흐름(dataflow) 기반 병렬 처리
- NI DAQmx 드라이버와 직접 연동
- 실시간 파형 표시 및 알람 처리
- FPGA 기반 고속 제어 가능 (NI cRIO 플랫폼)
7.2 Python을 이용한 DAQ 처리
import nidaqmx
import numpy as np
# NI DAQmx Python API로 아날로그 입력 수집
with nidaqmx.Task() as task:
task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
task.timing.cfg_samp_clk_timing(
rate=1000, # 샘플링 주파수 1 kHz
sample_mode=nidaqmx.constants.AcquisitionType.FINITE,
samps_per_chan=5000 # 5초 분량
)
data = task.read(number_of_samples_per_channel=5000)
data_array = np.array(data)
print(f"평균값: {np.mean(data_array):.4f} V")
7.3 다채널 데이터 동기화
여러 센서를 동시에 수집할 때, 모든 채널은 동일한 클럭 소스와 트리거 신호를 사용하여 동기화(synchronization)해야 한다. 동기화 오차는 위상 계산과 크로스 스펙트럼 분석에 직접 영향을 미친다.
8. 정리
- DAQ 시스템은 센서, 신호 컨디셔닝, ADC, 데이터 로거, 소프트웨어로 구성된다.
- ADC 분해능(비트 수)과 나이퀴스트 샘플링 정리는 측정 정밀도와 주파수 응답의 핵심이다.
- 안티-앨리어싱 필터는 ADC 전단에 필수적으로 적용해야 한다.
- 디지털 필터(LPF, HPF, BPF)로 노이즈를 제거하고 관심 주파수 대역을 분리한다.
- FFT는 시간 영역 신호를 주파수 영역으로 변환하여 구조물 고유 진동수 분석에 활용된다.
- LabVIEW와 Python(nidaqmx, scipy)은 현장 DAQ 시스템의 주요 소프트웨어 플랫폼이다.