sin () cos () 및 tan () 함수가 필요한 임베디드 응용 프로그램에서 회전 (및 기타) 변환을 수행해야합니다. 나는 당신이 룩업 테이블을 사용할 수 있다는 것을 알고 있는데, 그것은 내 연구를 할 수있는 유일한 솔루션이지만, 거기에 좋은 고정 점 삼각 라이브러리가 있습니까?
응용 프로그램에 cortex M3을 사용하려고 생각하고 있으므로 응용 프로그램을 쉽게 유지하기 위해 가능한 한 부동 소수점에서 멀리하고 싶습니다.
sin () cos () 및 tan () 함수가 필요한 임베디드 응용 프로그램에서 회전 (및 기타) 변환을 수행해야합니다. 나는 당신이 룩업 테이블을 사용할 수 있다는 것을 알고 있는데, 그것은 내 연구를 할 수있는 유일한 솔루션이지만, 거기에 좋은 고정 점 삼각 라이브러리가 있습니까?
응용 프로그램에 cortex M3을 사용하려고 생각하고 있으므로 응용 프로그램을 쉽게 유지하기 위해 가능한 한 부동 소수점에서 멀리하고 싶습니다.
답변:
임베디드 응용 프로그램에서 삼각법을 수행하는 좋은 방법은 필요한 함수에 다항식 근사 를 사용하는 것입니다. 코드는 간결하고 데이터는 몇 가지 계수로 구성되며 필요한 연산은 곱셈과 뺄셈입니다. 많은 임베디드 시스템에는 하드웨어 멀티 플라이어가있어 우수한 성능을 제공합니다.
_Fract
쓰레기 IMHO의 조각이다; 나는 그것이 C위원회에 의해 "표준화되었다"는 사실을 싫어한다. 모든 상황에서 Q15 또는 Q31을 사용하도록 강요하므로 많은 상황에서 의미가 없으며 그러한 상황에 대한 도움없이 좌초됩니다.
이것을 위해 고정 소수점 Cortex 라이브러리를 사용하는 것에 반대하고 있습니까?
q31_t arm_sin_q31 (q31_t x)
Q31 데이터에 대한 삼각 사인 함수에 대한 빠른 근사치.
에서:
CMSIS-DSP : 다양한 데이터 유형에 대한 60 개 이상의 기능이있는 DSP 라이브러리 모음 : 고정 소수점 (분수 q7, q15, q31) 및 단 정밀도 부동 소수점 (32 비트). 라이브러리는 Cortex-M0, Cortex-M3 및 Cortex-M4에 사용할 수 있습니다.
이차 보간법으로 룩업 테이블을 사용하지만 매우 빠릅니다. 속도는 빨라지지만 더 많은 오차는 선형 보간에 적용 할 수 있습니다.
또한 Cortex M4조차도 반드시 FPU를 가질 필요는 없습니다. 나는 그들이 "M4F"라고 부르는 것을 보았습니다.