나뭇잎 교과서

센서와 컴퓨터 측정

초음파 거리 센서는 1초에 수십 번 거리를 재서 컴퓨터로 보냅니다. 그런데 너무 드문드문 재면 실제와 전혀 다른 운동이 그래프에 그려질 수 있습니다. 컴퓨터 측정을 믿으려면 얼마나 자주, 얼마나 잘게 재야 할까요?

본문

센서와 컴퓨터 측정

본문

용수철에 매단 추 아래에 초음파 거리 센서를 두고, 데이터 기록기를 1초에 2번 재도록 맞췄다. 추는 눈으로 보아도 1초에 두 번 넘게 오르내리는데, 화면의 그래프는 2초에 한 번씩 느릿하게 오르내린다. 센서가 고장 난 것일까? 컴퓨터로 잰 값을 믿으려면 얼마나 자주, 그리고 얼마나 잘게 재야 할까?

그림 1. 주기 2 s로 흔들리는 진자(회색)를 일정한 간격으로 잰 점과 그 점을 이은 선(주황). 너무 드물게 재면 점들이 전혀 다른 느린 진동을 그린다.
먼저 알아야 할 것아날로그 신호와 디지털 신호, 용수철 진자의 주기, 2진수, 진동수와 주기(오실로스코프와 함수 발생기).

1.4.1띄엄띄엄 재는 측정

센서는 위치나 온도 같은 양을 전압으로 바꾸고, 데이터 기록기는 그 전압을 일정한 시간 간격마다 읽어 숫자로 바꾼다. 연속으로 변하는 양을 띄엄띄엄 읽는 이 과정을 표본화라 하고, 1초에 읽는 횟수를 표본화 진동수라 한다. 컴퓨터가 그리는 그래프는 그 점들을 이은 선일 뿐이므로, 점과 점 사이에서 일어난 일은 알 수 없다. 따라서 측정 간격이 운동의 변화보다 충분히 짧아야 점들이 실제 운동을 따라간다.

정리 1.4.1 표본화 정리와 앨리어싱

진동수 \(f\)인 진동을 표본화 진동수 \(f_s\)로 잴 때, \(f_s > 2f\)이어야 진동수를 바르게 기록한다. \(f_s\)가 그보다 작으면 점들은 진동수 \[f_a = |f - n f_s| \quad (n\text{은 } f_a \text{를 가장 작게 하는 정수})\]인 가짜 진동을 그린다. 이것을 앨리어싱이라 한다.

그림 1에서 측정 횟수를 바꾸어 보자. 1초에 0.5번 재면 매번 진자가 같은 자리에 있을 때만 재게 되어, 진자가 멈춘 것처럼 기록된다. 그런데 0.6번 재면 매번 조금씩 늦게 재게 되어, 주기 10 s의 느린 진동이 그려진다. 1초에 1번보다 많이 재야 비로소 주기 2 s가 드러나고, 물결의 모양까지 매끄럽게 보려면 주기마다 10번 이상, 곧 1초에 5번 넘게 재야 한다. 또 점이 적으면 봉우리를 건너뛰어 진폭도 작게 기록된다.1

왜 하필 2배일까? 진동 한 번은 올라가는 반과 내려오는 반으로 이루어져 있다. 한 주기에 점이 두 개보다 많으면 올라가는 쪽과 내려오는 쪽에 적어도 한 점씩 떨어져서, 점들이 오르내림을 빠짐없이 기록한다. 반대로 한 주기에 점이 두 개도 안 되면 어떤 오르내림은 점 사이로 통째로 빠져나가고, 남은 점들은 실제보다 느린 진동을 그리게 된다. 그래서 2배는 진동수를 읽기 위한 최소한일 뿐이고, 모양까지 보려면 앞에서처럼 훨씬 자주 재야 한다.

1.4.2얼마나 잘게 재는가

측정 간격과 함께, 한 번 잴 때 값을 얼마나 잘게 나누는지도 중요하다. 데이터 기록기 안의 변환기는 전압을 정해진 개수의 단계로 나누어 2진수로 적는다. 10비트 변환기는 \(2^{10} = 1024\)단계로 나누므로, 0~5 V를 재는 변환기의 한 단계는 \(5/1024 \approx 4.9\) mV이다. 예를 들어 거리 센서가 0~2 m를 0~5 V로 바꾼다면 한 단계는 약 2 mm이고, 이보다 작은 움직임은 기록되지 않는다. 그래서 12비트로 늘리면 4096단계가 되어 한 단계가 0.5 mm로 준다. 이 단계의 크기가 디지털 측정의 분해능이다.

설정정하는 것진자(주기 0.4 s)에서 1초에 2번시간 간격가짜 주기 2 s 1초에 25번시간 간격주기마다 10점 10비트값의 단계2 m 범위에서 약 2 mm
그림 2. 측정 간격은 운동의 빠르기를, 비트 수는 움직임의 작은 차이를 기록할 수 있는지를 정한다.

1.4.3예제 풀이

예제 1.4.2

처음 질문의 추는 주기 0.4 s로 진동한다. 1초에 2번 재면 그래프에 나타나는 진동의 주기는 얼마인가? 진동을 바르게 기록하려면 1초에 몇 번보다 많이 재야 하고, 주기마다 10점을 얻으려면 몇 번 재야 하는가?

추의 진동수는 \(f = 1/0.4 = 2.5\) Hz이고 표본화 진동수는 \(f_s = 2\) Hz이다. \(n = 1\)일 때 \(f_a = |2.5 - 2| = 0.5\) Hz로 가장 작으므로, 그래프에는 주기 \(1/0.5 = 2\) s인 가짜 진동이 그려진다. 센서는 고장 나지 않았고, 0.5초마다 잴 때마다 추가 한 주기와 4분의 1을 더 움직여 있어서 점들이 천천히 한 바퀴를 도는 것이다.

바르게 기록하려면 \(f_s > 2 \times 2.5 = 5\) Hz, 곧 1초에 5번보다 많이 재야 한다. 하지만 5번을 겨우 넘기면 주기마다 두 점 남짓이라 진폭과 모양은 알 수 없다. 주기마다 10점을 얻으려면 \(f_s = 10 \times 2.5 = 25\) Hz로 재야 한다. 즉 측정 간격은 기록할 운동에서 가장 빠른 변화의 진동수를 먼저 어림하고, 그 10배쯤으로 정한다. 반면 측정이 너무 잦으면 자료가 쌓이기만 하므로, 측정 시간과 저장할 수 있는 양도 함께 따진다.

아래 탐구 카드에서 데이터 기록기의 측정 간격을 바꾸어 가며 진자의 운동을 기록하고, 앨리어싱이 생기는 조건을 찾아보자.

  1. 영화에서 달리는 마차의 바퀴가 거꾸로 도는 것처럼 보이는 것도 앨리어싱이다. 영화는 1초에 24장을 찍으므로, 바큇살이 한 장면 사이에 한 칸보다 조금 덜 돌면 살이 뒤로 물러나는 것처럼 보인다.
마무리

컴퓨터 측정은 연속으로 변하는 양을 일정한 간격으로 읽어 단계로 나눈 숫자로 적는다. 진동수 \(f\)인 운동을 \(2f\)보다 드물게 재면 \(|f - nf_s|\)의 가짜 진동이 기록되고, 모양까지 보려면 주기마다 10점쯤 재야 하며, 비트 수는 기록할 수 있는 가장 작은 차이를 정한다. 처음 질문의 그래프는 2.5 Hz의 진자를 2 Hz로 재어 생긴 0.5 Hz의 앨리어싱이고, 1초에 25번쯤 재면 바른 운동이 기록된다.

탐구 1

소리는 어떻게 숫자가 될까?

아날로그–디지털 변환 · 표본화 · 양자화
높이 층 수
—
담을 수 있는 최고음
—
1초 데이터 (모노)
—
들리는 소리
—
  1. 질문마이크가 만든 전압은 매끄럽게 오르내리는 곡선이다. 곡선 위의 점은 무한히 많은데, 어떻게 유한한 숫자 몇 개로 저장할까?
  2. 복원n비트로는 2n가지 수를 나타낼 수 있다. 3비트면 000부터 111까지 8가지, 16비트면 65,536가지이다.
  3. 설명그래서 곡선을 두 번 자른다. 먼저 시간을 일정한 간격으로 잘라 그 순간의 값만 뽑고(표본화), 그다음 뽑은 값을 정해진 층 가운데 가장 가까운 층으로 반올림한다(양자화). 그러면 소리는 ‘몇 번째 층’이라는 정수의 목록이 된다.
  4. 연결1초에 fs번 뽑으면 진동수가 fs / 2보다 낮은 소리만 제대로 담을 수 있다(표본화 정리). 사람은 약 20 kHz까지 들으므로 CD는 그 두 배가 넘는 44.1 kHz로 뽑는다. 또 비트 수를 1 늘리면 층이 2배로 촘촘해져 반올림 오차가 절반이 된다.
  5. 적용‘거친 설정’을 누르고 비트 수를 1씩 올려 보면, 계단이 원래 곡선에 빠르게 가까워진다. 반면 ‘너무 드문 표본화’에서는 뽑은 점들이 실제와 전혀 다른, 훨씬 낮은 소리(점선)를 그린다. 이 현상을 에일리어싱이라고 한다.
  6. 판단디지털이 아날로그보다 늘 ‘더 정확한’ 것은 아니다. 변환할 때 이미 정보를 버리기 때문이다. 대신 한번 숫자가 되면 복사하고 전송해도 더 나빠지지 않는다. 다만 촘촘하게 뽑을수록 데이터가 커지므로, 무엇을 담아야 하는지에 맞춰 설정을 고른다.

확인조건이 달라지면

박쥐는 약 50 kHz의 초음파를 낸다. 이 소리를 녹음해 분석하려면 표본화 주파수는 적어도 얼마여야 할까?

탐구 2

온도계는 정말 온도를 잴까?

센서 · 서미스터 · 전압 나눔 · ADC
서미스터 저항
—
전압
—
ADC 숫자
—
숫자 한 칸 =
—

부품값은 흔히 쓰는 대표값으로, 25 °C에서 10 kΩ, B = 3950 K인 NTC 서미스터와 10 kΩ 고정 저항, 5 V 전원이다.

  1. 질문디지털 온도계의 화면에는 ‘25.0 °C’가 뜬다. 그런데 전자 회로는 전압과 전류만 다룬다. 온도계 속 부품은 무엇을 재는 걸까?
  2. 복원물질의 성질 가운데는 온도에 따라 달라지는 것이 많다. 수은은 부피가 늘고, 금속은 저항이 커진다. 그래서 이 변화를 재면 온도를 거꾸로 알아낼 수 있다.
  3. 설명서미스터는 온도가 오르면 저항이 크게 줄어드는 반도체 부품이다. 고정 저항과 이어 전압을 걸면, 저항 비율에 따라 가운데 지점의 전압이 바뀐다. 그리고 이 전압을 아날로그-디지털 변환기(ADC)가 0~1023 같은 정수로 바꾼다.
  4. 연결즉 온도가 저항으로, 저항이 전압으로, 전압이 숫자로 바뀐다. 센서가 직접 재는 것은 온도가 아니라 저항 변화이고, 컴퓨터는 이 과정을 거꾸로 계산해 온도를 표시한다. 빛 센서, 압력 센서, 가속도 센서도 모두 재기 쉬운 전기량으로 바꾸는 단계를 거친다.
  5. 적용온도 막대를 −20 °C에서 100 °C까지 움직이며 ‘숫자 한 칸’이 몇 °C인지 보자. 곡선이 가장 가파른 온도에서 가장 섬세하게 재고, ADC를 8비트로 바꾸면 한 칸이 네 배 거칠어진다.
  6. 판단화면에 소수점 아래 숫자가 나온다고 그만큼 정확한 것은 아니다. 부품값의 오차(흔히 ±1%), 서미스터가 제 몸의 전류로 데워지는 현상, 전원 전압의 흔들림이 모두 오차가 되기 때문이다. 이 그래프의 곡선도 부품 규격으로 계산한 모형이다.

확인조건이 달라지면

같은 회로에서 ADC만 10비트에서 12비트로 바꾸면, 25 °C 부근에서 ‘숫자 한 칸’이 나타내는 온도 폭은?

탐구 3

센서가 1초에 몇 번 재야 진자의 운동을 제대로 기록할까?

실험 · 운동 센서 · 표본화 빈도 · ADC 분해능
표본화 빈도 Hz
ADC 비트
분해능 (1 LSB)
—
표본 수 / 10 s
—
나이퀴스트 진동수
—

초음파 센서의 측정 범위는 0.15~4.00 m이고, 이 범위를 ADC 비트 수만큼의 단계로 나눠 기록한다. 거리 자체의 우연 오차는 약 ±1 mm이다. 표의 겉보기 주기는 기록된 점들이 평균선을 위로 지나는 시각 사이 간격의 평균이다. 기록 10초 동안 두 번 이상 지나지 않으면 값을 비우고 가로줄만 표시한다. 용수철 상수는 화면에 나타나지 않는다.

  1. 탐구 문제운동 센서를 컴퓨터에 연결하면 거리–시간 그래프가 저절로 그려진다. 그런데 이 그래프는 언제나 실제 운동을 보여 줄까? 센서가 얼마나 자주, 얼마나 잘게 재야 용수철 진자의 주기를 믿을 수 있게 기록할 수 있을까?
  2. 복원센서는 물리량을 전압으로 바꾸고, 인터페이스의 ADC(아날로그–디지털 변환기)가 그 전압을 정해진 시간 간격마다 정수로 바꾼다. 1초에 재는 횟수가 표본화 빈도 fs, 나눌 수 있는 단계 수가 2n(n비트)이다. 측정 범위를 2n으로 나눈 값(1 LSB)이 기록의 분해능이다.
  3. 설계추를 아래로 6 cm쯤 당겼다 놓고, 바로 아래 바닥에 둔 초음파 센서로 추까지의 거리를 10초 동안 기록한다. 조작 변인은 표본화 빈도와 ADC 비트 수, 통제 변인은 추 질량과 진폭이다. 종속 변인은 기록된 그래프에서 구한 겉보기 주기와 진폭이다.
  4. 분석주기적인 신호를 제대로 기록하려면 표본화 빈도가 신호 진동수의 2배보다 커야 한다(나이퀴스트 조건, f < fs/2). 이 조건을 어기면 실제보다 훨씬 느린 가짜 진동이 기록되는데, 이것을 에일리어싱이라고 한다. 겉보기 진동수는 |f − k·fs| 꼴(k는 정수)이 된다. 그래프에서 점선(fs/2) 아래로 떨어지는 점들을 찾아보자.
  5. 측정10 Hz, 10비트로 먼저 기록해 주기를 구해 보자. 그다음 표본화 빈도를 5, 3, 2.5, 2, 1.5, 1 Hz로 낮춰 가며 기록하고, "실제 운동 겹쳐 보기"로 확인해 보자. 마지막으로 10 Hz에서 비트 수를 6으로 낮추면 그래프와 진폭이 어떻게 달라지는가?
  6. 오차·안전표본화 빈도가 낮으면 아무리 정밀한 센서도 엉뚱한 주기를 기록한다(계통 오차). 반대로 너무 높이면 자료만 많아지고 정밀도는 센서 잡음에 묶인다. 진동수의 10배 이상이면 모양까지 잘 보인다. 초음파 센서 앞 15 cm 안쪽은 잴 수 없고, 다른 물체나 옆 모둠의 센서에서 반사된 소리가 섞이면 튀는 값이 생긴다. 추가 떨어지지 않게 고리를 단단히 걸고, 센서 바로 위로 추가 떨어질 수 있으니 진폭을 크게 하지 않는다.

확인조건이 달라지면

진동수 3.0 Hz로 진동하는 물체를 운동 센서로 표본화 빈도 4 Hz로 기록했다. 그래프에 나타나는 진동수는?

탐구 4

센서가 보낸 숫자를 어떻게 온도로 바꿀까?

실험 · 마이크로컨트롤러 · 센서 보정
보정식
—
지금 센서가 말하는 온도
—
기록한 점의 최대 오차
—

센서는 10 kΩ 서미스터(B = 3950)와 10 kΩ 고정 저항으로 전압을 나누고, 10비트 ADC(0~1023)로 읽는다. 기준 온도계는 눈금 0.1 °C, 오차 ±0.2 °C쯤이고, ADC 값은 전기 잡음으로 ±2쯤 흔들린다.

  1. 탐구 문제마이크로컨트롤러에 온도 센서를 연결하면 화면에는 “512” 같은 정수가 찍힌다. 이 숫자를 섭씨온도로 바꾸는 식은 어디서 나올까? 그리고 그 식은 얼마나 믿을 수 있을까?
  2. 복원여기서 쓰는 NTC 서미스터는 온도가 오르면 저항이 줄어드는 소자이다. 고정 저항과 직렬로 연결하면 서미스터 저항에 따라 나뉜 전압이 바뀌고, ADC가 이 전압을 0~1023 사이 정수로 바꾼다. 그런데 이 관계는 직선이 아니다.
  3. 설계그래서 보정(캘리브레이션)이 필요하다. 보정은 믿을 수 있는 기준 기기와 같은 조건에서 함께 재어, 센서 값을 실제 값으로 바꾸는 식을 만드는 일이다. 센서와 기준 온도계를 같은 물에 담그고, 물 온도를 바꿔 가며 두 값을 짝지어 기록한다.
  4. 분석2점 보정은 두 점만으로 직선을 정해 간단하지만, 두 점 가운데 하나라도 오차가 있으면 식 전체가 틀어진다. 여러 점에 직선을 맞추면 우연 오차가 줄어든다. 다만 실제 관계가 S자 곡선이라, 0~80 °C처럼 범위를 넓히면 직선으로는 양 끝에서 오차가 커진다.
  5. 측정20~30 °C 사이에서 다섯 점을 기록해 보정한 뒤, 물 온도를 5 °C나 70 °C로 바꿔 센서가 말하는 온도를 확인해 보자. 그다음 0~80 °C 전체에서 다시 기록하고 보정하면 최대 오차가 어떻게 달라지는지 비교해 보자.
  6. 오차·안전보정식은 보정한 범위 안에서만 믿을 수 있고, 범위 밖으로 늘여 쓰는 것(외삽)은 위험하다. 넓은 범위가 필요하면 구간을 나누어 보정하거나, 서미스터의 곡선식(스타인하트-하트 식)을 쓴다. 뜨거운 물을 다룰 때는 전선과 회로가 물에 닿지 않게 한다.

확인조건이 달라지면

20~30 °C에서 잘 보정한 센서로 냉동실(−15 °C) 온도를 쟀더니 −10 °C로 나왔다. 가장 알맞은 해석은?

AI 출제 문항연습문제 풀어보기7문항
Esc

↑↓ 고르기Enter 열기