그라운드 임베디드 유튜브 구독

노트 / 자료구조와 알고리즘

탐색과 룩업 테이블

정렬된 표에서 이진 탐색으로 빠르게 찾고, sin이나 센서 보정처럼 비싼 계산은 표로 미리 만들어 둡니다.

GROUND EMBEDDED · 정리 노트자료구조 06탐색과 룩업 테이블 1static const int16_t sin_lut[256] = { 0… 2int16_t s = sin_lut[angle >> 8];// 16비트 …

이진 탐색

정렬된 배열에서 가운데 값과 비교해 절반을 버리는 것을 반복합니다. 1024개 중 하나를 찾는 데 비교 10번이면 됩니다. 서미스터 저항값으로 온도를 찾는 표처럼 정렬된 보정 표에 잘 맞습니다.

룩업 테이블

FPU가 없는 MCU에서 sinf()는 수백 클럭이 걸립니다. 한 주기를 256칸으로 나눈 표를 미리 만들어 두면 배열 읽기 한 번으로 끝납니다.

static const int16_t sin_lut[256] = { 0, 804, 1608, /* ... */ };
int16_t s = sin_lut[angle >> 8];   // 16비트 각도의 상위 8비트로 인덱스
  • const를 붙여 RAM이 아니라 Flash에 둡니다.
  • 칸 사이 값이 필요하면 이웃한 두 칸을 선형 보간합니다.
  • 표는 파이썬 스크립트로 생성해서 헤더 파일로 넣으면 실수가 없습니다.

어디에 쓰나

  • BLDC 정현파 구동과 FOC의 sin/cos
  • 서미스터, 열전대 같은 비선형 센서 보정
  • LED 감마 보정, 모터 가감속 곡선

속도와 메모리를 맞바꾸는 대표적인 기법입니다. 표 크기와 필요한 정밀도를 같이 따져서 정합니다.