Как работает фазовый аккумулятор DSP / FPGA? - PullRequest
2 голосов
/ 17 октября 2008

Я смотрю на код для фазового аккумулятора, и я, должно быть, простак, потому что я его не понимаю. Код достаточно прост:

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

аккумулятор - это 32-битный регистр. Очевидно, что в какой-то момент он перевернется.

Мой вопрос на самом деле: как это связано с фазой?

Ответы [ 3 ]

3 голосов
/ 18 октября 2008

Отвечая на мой собственный вопрос, я нашел еще одну интересную статью онлайн , описывающую фазовый аккумулятор для синтеза частоты.

Вот мое понимание того, как работает фазовый аккумулятор:
Регистр аккумулятора на самом деле представляет 360 градусов. Таким образом, значение 0 представляет 0 градусов, значение 2 ^ 32 представляет 360 градусов.

Аккумулятор фазы добавляет значение (M) к каждому такту. Это представляет угол, перемещающийся по кругу на (M / 2 ^ 32) градусов. Когда регистр переполняется, мы просто переворачиваем все 360 градусов и начинаем заново.

3 голосов
/ 17 октября 2008

Эта статья может помочь.

На этапе работы счетчик (правильно называемый фазовым аккумулятором) получает команду на опережение с определенным шагом каждого импульса от задания частоты. Выход фазового аккумулятора (фаза) используется для выбора каждого элемента в таблице данных по очереди. Наконец, ЦАП преобразует эту последовательность данных в аналоговый сигнал.

В рабочем шаге счетчик (правильно называется фаза аккумулятор) поручено заранее с определенным приращением на каждом импульсе от задания частоты. выход фазового аккумулятора ( фаза) используется для выбора каждого элемента в таблица данных в свою очередь. Наконец, ЦАП преобразует эту последовательность данных в аналоговый сигнал. Чтобы генерировать периодическую форму волны, схема настроена так, что один проход через таблицу занимает время равное в период формы волны. За Например, если опорная частота 1 МГц, а таблица содержит 1000 записи, затем полный проход через таблица с шагом фазы 1 займет 1000/1 МГц = 1 мс, поэтому частота выходного сигнала будет быть 1 / (1 мс) = 1 кГц.

Эта система может генерировать более высокие выходная частота просто за счет увеличения приращение фазы, так что счетчик пробегает по столу больше быстро. В приведенном выше примере приращение фазы равно 1, поэтому следующая возможная частота получается установка приращения до 2, в результате чего в удвоении выходной частоты. к получить более точный контроль частоты чем это, стандартная фаза приращение может быть установлено, скажем, 10. Это затем позволяет немного выше или ниже выходные частоты. Например, увеличение прироста до 11 будет увеличить выходную частоту на 10%, и уменьшение до 9 уменьшится выходная частота такая же доля. Чем больше точность требуется по частоте, тем больше биты нужны в счетчике.

0 голосов
/ 02 января 2015

Формула такая:

Пример использования осцилляторов с периодом формы волны (x) period = x (0-1), а не x (0-2Pi)

Одна переменная для каждого аудиопотока, называемая акк / аккумулятор,

Каждый образец, накапливать его по:

    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, используйте 2pi вместо 1,0

Например, сигнал будет работать с 0-1 с частотой p2freq (примечание) в секунду.

...