문제

나는 위상 축적기에 대한 코드를보고 있으며, 나는 그것을 얻지 못하기 때문에 단순한 사람이어야합니다. 코드는 충분히 간단합니다.

  Every Clock Tick do:
    accum = accum + NCO_param;
    return accum;

Accum은 32 비트 레지스터입니다. 분명히, 어느 시점에서 그것은 롤오버됩니다.

내 질문은 실제로 : 이것은 단계와 어떤 관련이 있습니까?

도움이 되었습니까?

해결책

이 기사 도움이 될 수 있습니다.

실행 단계에서 카운터 (위상 축적기라고 함)는 주파수 참조로부터 각 펄스에서 특정 증분으로 전진하도록 지시받습니다. 위상 축적기 (위상)의 출력은 데이터 테이블의 각 항목을 차례로 선택하는 데 사용됩니다. 마지막으로, DAC는이 데이터 시퀀스를 아날로그 파형으로 변환합니다.

실행 단계에서 카운터 (위상 축적기라고 함)는 주파수 참조로부터 각 펄스에서 특정 증분으로 전진하도록 지시받습니다. 위상 축적기 (위상)의 출력은 데이터 테이블의 각 항목을 차례로 선택하는 데 사용됩니다. 마지막으로, DAC는이 데이터 시퀀스를 아날로그 파형으로 변환합니다. 주기적인 파형을 생성하기 위해 회로가 설정되어 테이블을 통과하는 패스가 파형의 기간과 동일하게 시간이 걸립니다. 예를 들어, 기준 주파수가 1MHz이고 테이블에 1000 개의 항목이 포함 된 경우, 위상 증분이 1 인 테이블을 통해 전체 패스는 1000 / 1 MHz = 1ms가되므로 출력 파형의 주파수는 1/(1ms) = 1 kHz.

이 시스템은 위상 증분을 증가시켜 카운터가 테이블을 더 빨리 실행하도록하여 더 높은 출력 주파수를 생성 할 수 있습니다. 위의 예에서 위상 증분은 1과 같으므로 증분을 2로 설정하여 다음 가능한 주파수를 얻어 출력 주파수가 두 배가됩니다. 이보다 주파수의 더 미세한 제어를 얻으려면 표준 위상 증분을 10으로 설정할 수 있습니다. 이렇게하면 출력 주파수가 약간 높거나 낮아집니다. 예를 들어, 증분을 11으로 증가 시키면 출력 주파수가 10%증가하고 9로 감소하면 출력 주파수가 동일한 비율만큼 감소합니다. 주파수에 대한 정밀도가 높을수록 카운터에서 더 많은 비트가 필요합니다.

다른 팁

내 자신의 질문에 대답하면서 또 다른 흥미로운 기사를 찾았습니다. 온라인 주파수 합성을위한 위상 축적기를 설명합니다.

위상 축적기의 작동 방식에 대한 이해는 다음과 같습니다.
축합기 레지스터는 실제로 360도를 나타냅니다. 따라서 0의 값은 0도를 나타내고, 2^32의 값은 360도를 나타냅니다.

위상 축적기는 모든 시계 진드기 값 (m)을 추가합니다. 이것은 원 주위를 (m/2^32) 도로 움직이는 각도를 나타냅니다. 레지스터가 넘치면 단순히 360도를 순환하고 다시 시작했습니다.

공식은 이것입니다.

x (0-2pi)가 아닌 파형 (x) 기간 = x (0-1)가있는 오실러 사용 예

ACC/Accumulator라는 오디오 스트림 당 하나의 변수

모든 샘플은 Accadd에 의해 축적됩니다.

    var accadd = 1.0/( sampleRate / p2freq( note ) ) ;
    acc+= accadd;
    acc = acc%1.0;// not sure to do this as accurately using if statement. can reset acc every noteOn

2PI 기간으로 고전적인 죄를 사용하는 경우 1.0 대신 2PI를 사용하십시오.

이와 같이 파형은 초당 P2FREQ (참고) 기간에서 0-1에서 실행됩니다.

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