Как работает фазовый аккумулятор DSP / FPGA?

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
5 507
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

In the running step, the counter (properly called the phase accumulator) is instructed to advance by a certain increment on each pulse from the frequency reference. The output of the phase accumulator (the phase) is used to select each item in the data table in turn. Finally, the DAC converts this sequence of data to an analogue waveform. To generate a periodic waveform, the circuit is set up so that one pass through the table takes a time equal to the period of the waveform. For example, if the reference frequency is 1 MHz, and the table contains 1000 entries, then a complete pass through the table with a phase increment of 1 will take 1000 / 1 MHz = 1 ms, so the frequency of the output waveform will be 1/(1 ms) = 1 kHz.

This system can generate a higher output frequency simply by increasing the phase increment so that the counter runs through the table more quickly. In the example above, the phase increment is equal to 1, so the next possible frequency is obtained by setting the increment to 2, resulting in a doubling of output frequency. To obtain a finer control of frequency than this, the standard phase increment can be set to, say, 10. This then allows slightly higher or lower output frequencies. For example, increasing the increment to 11 would increase the output frequency by 10%, and reducing it to 9 would decrease the output frequency by the same proportion. The more precision required over the frequency, the more bits are needed in the counter.

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

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

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

Вы правильно понимаете, как работает фазовый аккумулятор. Это называется фазой, потому что, если вы рассматриваете функцию sin(x+phi), где phi - это фаза, тогда, когда phi кратен 360, функция выглядит точно так же, как и раньше.

freespace 19.10.2008 18:18

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

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

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

Каждый сэмпл накапливается с помощью 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

Если вы используете классический Sin с периодом 2pi, используйте 2pi вместо 1.0.

Таким образом, форма волны будет работать от 0 до 1 с периодом p2freq (примечание) в секунду.

Другие вопросы по теме