문제

1024 크기의 char 테이블을 채우기 위해 사인파를 생성해야합니다. 마이크로 컨트롤러의 단어 크기는 16 비트이며 부동 소수점 연산을 사용할 수 없습니다.

사인파 자체는 0에서 255 사이의 값 사이에서 진동하며 127이 중심점입니다.

아이디어가 있습니까?

도움이 되었습니까?

해결책

실제로 사인파의 1/4 만 저장하면됩니다. 1 사분면에서 나머지 3/4를 조회 할 수 있습니다.따라서 256 바이트 만 필요합니다.

마이크로 컨트롤러에서 값을 생성하려면 CORDIC 을 구현하세요.하나의 값을 저장하고 그로부터 전체 사인파를 생성 할 수 있습니다.

다른 팁

PC에 미리 계산 된 배열을 만듭니다.ROM (또는 플래시 또는 코드 세그먼트와 같은 동등한 공간) 공간이 부족한 경우 어레이의 4 분의 1 만 생성 한 다음이 부분을 어레이의 다른 768 바이트로 미러링합니다.

float를 사용하여 원하는 언어로 sin 테이블 생성기를 작성하세요.
결과를 원하는 범위 인 1024 / -127 .. + 128로 조정하고 반올림합니다 (바로 수행 할 수 있음). 테이블에서 ASM 또는 C로 소스 파일을 생성하십시오. 더 나은 방법이 있습니다.
생성 된 테이블이 C에서 "const"로 표시된 것을 확인하거나 ASM의 적절한 섹션으로 이동하여 RAM이 아닌 FLASH로 이동합니다.
프로젝트에 파일을 포함하십시오.

이제 intsin (x) 1은 다음과 같습니다. 라코 디스

1 사분면에 대해서만 표를 사용하여 해상도를 개선 할 수 있습니다.양수 값만 사용할 수도 있습니다 (0..255).그러면 intsin (x)가 사분면을 결정하고 1 사분면 결과를 미러링해야합니다.

PC에서 테이블을 생성하고 MCU에서 사용하기 만하면됩니다.누군가가 4 분의 1 마침표가 필요하다고 말했듯이 질문에 완전히 답하려면 1024 자 모두 다음과 같습니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top