복잡한 함수를 위한 Table 만들기

Yoonkyo·2025년 2월 5일

임베디드

목록 보기
2/3

MCU를 이용한 개발에서 우리가 기존에 배웠던 C언어의 math.h에 정의된 수학 함수들(ex. sin(), cos(), tan(), atan()…)을 사용한다면, 처리가 매우 느려질 수 있다.

이를 해결하기 위해 변환 테이블을 미리 만들어두고 사용하면 복잡도를 줄일 수 있다.

float Sin[21] = {0.3090, 0.5878, 0.8090, 0.9511, 1.0000, ...};

위의 코드처럼 전역에 미리 배열을 생성하여 근사값을 대입할 수 있도록 한다.

이를 메모리 측면에서 효율적으로 바꾼다면?

int Sin[21] = {3090, 5878, 8090, 9511, 10000, ...};

각 value에 *10000을 한다면, float보다 비교적 가벼운 int를 사용할 수 있다.

// When we apply sin(pi/2) function
#define PI 3.141592

20 : 2pi = x : pi/2;
x = 5;
Sin[5];

위의 코드와 같이 사용한다면, 시간 복잡도가 약 30배 이상 차이가 난다. 주의할 점은, 값의 정확도를 올리는 목적으로 전역에 선언한 Array의 크기를 늘리게 된다면, memory사용량이 커지게 된다. 즉 computing complexity와 memory간의 trade-off문제이므로, MCU의 성능을 고려해 적절하게 사용하자.

profile
코드로 상상하고, 로봇으로 실현하는 개발자입니다😊

0개의 댓글