Jump to content

    
Sign in to follow this  
mcaffee

помогите разобраться с кодом

Recommended Posts

Для ускорения аккумулятора больше 4 счетчиков избыточно-частота перестает расти. Для реализации синуса можно использовать кусочно-линейную аппроксимацию. Хватает двух таблиц на 256 точек - основная и поправочная. Точность выходить в районе 16 бит. Что лучше таблицы в 4096 точек - дает только 12 бит.

Стандартный DDS это аккумулятор+сумматор фазы+табличка.

Share this post


Link to post
Share on other sites

И как пользоваться поправочной табличкой? Может, дадите ссылку, что читануть по этому поводу?

И вот Вы пишете:

"Стандартный DDS это аккумулятор+сумматор фазы+табличка."

непонятно: чем аккумулятор отличается от сумматора фазы?

Share this post


Link to post
Share on other sites

ну как так?

аккумулятор - аккумулирует

а сумматор - суммирует...

 

 

потому что там w*t+fi

сумматор складывает фазу fi и набегующую от времени w*t. А она в свою очередь реализуется аккумулятором, складывающим по тактам...

Share this post


Link to post
Share on other sites

иногда просто под аккумулятором понимается сумматор с регистром хранения предыдущих данных. Без суммирования не накопить.

А здесь похоже под аккумулятором понимается просто регистр. Зачем тогда путать людей и использовать один термин вместо другого...

Начальную фазу fi можно затолкать сразу в регистр аккумулятора как начальное значение. Тогда её не придётся постоянно прибавлять к текущей фазе wt

Share this post


Link to post
Share on other sites

аккумулятор - это хранение и сумма

сумматор - это сумма просто

 

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

Share this post


Link to post
Share on other sites

Видимо эти 2 таблицы это таблица значений и таблица коэфициентов для линейной поправки.

Если берем 16 бит фазы phase[15:0], то старшие 8 бит будут использоваться для выбора значений из таблиц, а младшие 8 бит для линейной поправки.

Если таблица A - значения, а B - коэфициенты, то что-то типа:

A[phase[15:8]] + B[phase[15:8]]*phase[7:0]/256

 

Share this post


Link to post
Share on other sites

Хорошо, допустим с таблицами понятно.

Хотя тоже не очень. Если Вы говорите про линейную поправку, подразумевая кусочно-линейную сплайн-интерполяцию, то почему бы её без таблицы не сделать примерно такой записью:

A[phase[15:8]] + (A[phase[15:8 + 1'b1]] - A[phase[15:8]]) * phase[7:0] / 256

?

Т.е. берутся 2 соседние точки таблицы, между ними проводится прямая, конкретная точка на прямой определяется младшими разрядами фазы.

 

 

 

Остаётся тогда вопрос: что за 4 счётчика?

Share this post


Link to post
Share on other sites

Ну, я это вариант не предлагал, а только написал свое объяснение (возможно, неточное или даже неверное :laughing: ).

 

Кстати, в варианте:

A[phase[15:8]] + (A[phase[15:8] + 1'b1] - A[phase[15:8]]) * phase[7:0] / 256

будет два обращения к памяти по адресу phase[15:8] и phase[15:8] + 1'b1, соответственно, нужно либо 2 такта, либо опять две таблицы.

 

4 счетчика, видимо (я опять только предполагаю), относится к самому началу темы, когда ТС спрашивал, зачем делить один счетчик на 10 маленьких.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this