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

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

탐색과 룩업 테이블

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

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

이진 탐색

1000개500개250개…1개
이진 탐색. 정렬된 표에서 가운데와 비교해 절반씩 버립니다. 1000개도 10번이면 찾습니다.

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

룩업 테이블

각도 30도표의 30번째 칸0.5미리 계산해 둔 sin 값
룩업 테이블. 계산 대신 미리 구해 둔 값을 꺼냅니다.

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 감마 보정, 모터 가감속 곡선

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

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE배운 자료구조를 실제 펌웨어에 넣어 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →