마이크로 컨트롤러 신세기에서 작업 중이지만 볼륨 인 벨롭 생성에 문제가 있습니다. 나는 순간에이 코드를 가지고 :
to_dac =(SinTable[lut_pos] * (volume))>>8;
MCU에서 효율적인 진폭 변조 (C)
그것은 잘 작동하지만 해상도가 정말 나쁜 내가 어떻게가가로 아직도 (충분히 빨리 실행할 수있는 방법으로 그것을 개선하는 아무 생각이 없다
,536 :이 지금지고있어 결과입니다) 모든 샘플에 대해 미리 형성 할 수
MSP430 장치를 사용하고 있습니다. (실제로는 MSP430G2553이지만 실제로 필요한 경우 MSP430F5510 (더 많은 메모리, 더 빠른 속도)을 사용할 수 있습니다. 예제를 살펴 보았지만 모두 부동 소수점 변수를 사용합니다. 죄(); 함수 및 기타 math.h에서하지만, 그 사람의 명품을 가지고 있지 않다 ...
편집 : 나는 완전한 바보 였고 또 다른 코드 조각은 진폭 범위의 낮은 해상도를 가졌지 만 그럼에도 불구하고 진폭 변조를위한 다른 솔루션을 위해 열려 있습니다.
부동 소수점 없음 - 고정 소수점 수학 또는 정수를 사용하고 있습니까? 8 비트 소수 구성 요소가있는 고정 소수점 형식을 사용한다고 가정해야합니까? – Throwback1986
오실레이터는 NCO를 기반으로합니다. 32 비트 위상 누산기 마녀가 8 비트까지 잘려져 있으며, 룩업 테이블 (lut_pos)의 위치입니다. 나는 사인파의 진폭 제어를위한 더 나은 방법을 발견했다. 단지 2 개의 사인파를 다른 위상과 함께 추가하여 최소한의 수학으로 진폭 제어를 제공한다. '((SinTable [lut_pos [0]] + SinTable [lut_p_phase [0]]))' –