Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: альтеровская корка FIR
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
vadimuzzz
понадобился тут мне интерполятор x16, завел мегавизард, вбил параметры, скомпилял, уже хотел в железо шить и думаю: дай-ка проверю. и не зря. подал сначала дельта-функцию:

все нормально, а вот реакция на единичный скачок:

как видно, получился генератор. это как-то расходится с моими представлениями об интерполяторах и FIR-фильтрах вообще. у альтеры какая-то своя математика?
des00
Цитата(vadimuzzz @ Sep 14 2010, 01:12) *
все нормально, а вот реакция на единичный скачок:

а что единичный скачок делает в интерполяторе ? Вы уверены что фильтр построен без учета преобразования частоты?
vadimuzzz
Цитата(des00 @ Sep 14 2010, 14:36) *
а что единичный скачок делает в интерполяторе ? Вы уверены что фильтр построен без учета преобразования частоты?

не понял ни одного вопроса smile.gif дело не в единичном скачке, а в том, что на входе - константа, а на выходе синусоида. я не знаю, как это можно сделать при помощи линейного устройства, которым является FIR-фильтр. (интерполятор именно на FIR, т.е. каждый отсчет добивается N-1 нулями и пропускается через ФНЧ)
des00
Цитата(vadimuzzz @ Sep 14 2010, 02:59) *
дело не в единичном скачке, а в том, что на входе - константа, а на выходе синусоида.

вот именно, что константа делает на входе устройства, если устройство спроектировано под
Цитата
каждый отсчет добивается N-1 нулями и пропускается через ФНЧ


Но это все голословные утверждения, надо смотреть как построен интерполятор внутри. Может быть то что вы видите не генерация, а работа цепей ограничения сигнала, которые стоят как раз для этих случаев (такая интерполяция валит энергетику сигнала и на выходе фильтра нужно его усиливать или изменять усиление фильтра). Или сделать свой интерполятор, в преобразовании частоты на 16 ть никаких подводных камней нет %)
vadimuzzz
Цитата(des00 @ Sep 14 2010, 15:06) *
вот именно, что константа делает на входе устройства

так корка устроена (сама нули вставляет, где сигнал valid = 0), я с ней и раньше работал.
впрочем, пожалуйста:

Цитата
Или сделать свой интерполятор, в преобразовании частоты на 16 ть никаких подводных камней нет %)

т.е. корки не нужны? smile.gif
des00
Цитата(vadimuzzz @ Sep 14 2010, 03:16) *
так корка устроена (сама нули вставляет, где сигнал valid = 0), я с ней и раньше работал.
впрочем, пожалуйста:


а вот это уже интересно, мыльните проект, расковыряю что там да как

Цитата
т.е. корки не нужны? smile.gif

для таких вещей как интерполяция на 16, мне не нужны %) Вот простой интерполятор на 16ть
Код
always_ff @(posedge iclk) begin
  data <= ival ? idat : 0;
end

dat_t acc [0 : 3][0 : 15];

always_ff @(posedge iclk) begin
  for (int i = 0; i < $size(acc); i++) begin
    for (int j = 0; j < $size(acc[i]; j++) begin
        if (i == 0)
          acc[i][j] <= (j == 0) ? data        : (acc[i][j-1] + data);
        else
          acc[i][j] <= (j == 0) ? acc[i-1][0] : (acc[i][j-1] + acc[i-1][0])
    end
  end
end

подавление зеркала должно быть где то 60дБ. Отсюда можно уйти на цики или на acc ram фильтры %)
vadimuzzz
Цитата(des00 @ Sep 14 2010, 15:27) *
для таких вещей как интерполяция на 16, мне не нужны %) Вот простой интерполятор на 16ть

а что на выход идет?
des00
Цитата(vadimuzzz @ Sep 14 2010, 02:53) *
а что на выход идет?

acc[3][15]

цик фильтр это FIR со всеми единичными коэффициентами, для интерполяции на 16ть надо FIR 16го порядка, для набора затухания включаете их каскадно. Кста в коде есть недомолвка с разрядностью, в этих фильтрах разрядность между каскадами можно усекать (в коде не показано). В самих фильтрах разрядность растет + log2(Order).
vadimuzzz
Цитата(des00 @ Sep 14 2010, 16:14) *
acc[3][15]

а можно в мат. форме (не матерной smile.gif) ?
а то я не могу понять, где используются значения acc[0][15:1].
как я понял, по индексу j это гребенчатые фильтры?
des00
Цитата(vadimuzzz @ Sep 14 2010, 03:33) *
а можно в мат. форме (не матерной smile.gif) ?
а то я не могу понять, где используются значения acc[0][15:1].
как я понял, по индексу j это гребенчатые фильтры?

в коде приведено 4 FIRa со всеми единичными коэффициентами, которые обладают такой АЧХ, которая может использоваться для интерполяции. Фильтры реализованы по схеме цепи, как здесь. Фильтры соединены между собой следующим образом : data -> acc[0][15] -> acc[1][15] -> acc[2][15] -> acc[3][15].

Такой интерполятор многожрущий по ресурсу, но простой и гарантировано рабочий. Этот фильтр является полным аналогом CIC фильтра с N =4, M=1, R=16.

PS. Если не вставлять нули по входу, то получим в цепи еще один фильтр и не завалим энергетику.
vadimuzzz
Цитата(des00 @ Sep 14 2010, 17:00) *
Фильтры соединены между собой следующим образом : data -> acc[0][15] -> acc[1][15] -> acc[2][15] -> acc[3][15].

только не бейте, но в упор не вижу такой связи smile.gif. я вижу 4 гребенчатых фильтра на 16 коэффициентов каждый. фильтры сдвинуты друг отн-но друга на 1 сэмпл каждый. но включены они параллельно, а не последовательно. вот это мне и непонятно. или это из контекста выдрано?
des00
Цитата(vadimuzzz @ Sep 14 2010, 06:36) *
только не бейте, но в упор не вижу такой связи smile.gif. я вижу 4 гребенчатых фильтра на 16 коэффициентов каждый. фильтры сдвинуты друг отн-но друга на 1 сэмпл каждый. но включены они параллельно, а не последовательно. вот это мне и непонятно. или это из контекста выдрано?

потому как ошибка в коде %)
Код
acc[i][j] <= (j == 0) ? acc[i-1][15] : (acc[i][j-1] + acc[i-1][15])

ну смысл то я думаю понятен %)
vadimuzzz
такой вопросик по CIC: у него АЧХ ~sin(x)/x, надо ли делать ее коррекцию?
des00
Цитата(vadimuzzz @ Sep 14 2010, 20:37) *
такой вопросик по CIC: у него АЧХ ~sin(x)/x, надо ли делать ее коррекцию?

от полосы и вида приложения зависит. оцените насколько он валит полосу сигнала, тогда решите вопрос о коррекции. Но если вам требуется коррекция, тогда лучше выкинуть цик и посчитать нормальный FIR фильтр %)
ViKo
Цитата(vadimuzzz @ Sep 14 2010, 10:59) *
... я не знаю, как это можно сделать при помощи линейного устройства, которым является FIR-фильтр...

Наверное, у вас где-то есть обратная связь, охватывающая фильтр, и FIR фильтр превратился в IIR. И разрядности не хватило.
По каскадным интеграторам-гребенчатым фильтрам добавлю - книга Ричард Лайонс. Цифровая обработка сигналов, раздел 10.5. Там им уделено столько места, сколько они заслуживают smile.gif
P.S. Обнаружил, что в книге повторяется то же, что в одной из приведенных выше ссылок, только на "великом и могучем". Оно и неудивительно, автор-то тот же.
vadimuzzz
Цитата(ViKo @ Sep 15 2010, 12:01) *
Наверное, у вас где-то есть обратная связь, охватывающая фильтр, и FIR фильтр превратился в IIR. И разрядности не хватило.

нет там никаких обратных связей, сразу на ЦАП выводится.
Цитата
По каскадным интеграторам-гребенчатым фильтрам добавлю - книга Ричард Лайонс. Цифровая обработка сигналов, раздел 10.5. Там им уделено столько места, сколько они заслуживают smile.gif

поднял глаза и увидел ее на полке. вот что лень с людьми делает.
ViKo
У вас 2 фильтра? Типа квадратурной модуляции? Может быть, составляющие складываются не вовремя? Или биты сдвинуты?

vadimuzzz
я как только это непотребство увидел, сразу загнал в м-сим один голый фильтр. так что, скорее всего, это камень в огород 10-го квартуса.
ViKo
ModelSim потребовал tx_intfir, которого нет в приложенном архиве sad.gif

vadimuzzz
Цитата(ViKo @ Sep 15 2010, 16:51) *
ModelSim потребовал tx_intfir, которого нет в приложенном архиве sad.gif

есть, tx_intfir.vo
vadimuzzz
накидал параметризуемый CIC-интерполятор, может кому пригодится
des00
Цитата(vadimuzzz @ Sep 15 2010, 23:22) *
накидал параметризуемый CIC-интерполятор, может кому пригодится

Покритикую немножко, я бы поставил на выходе фильтра блок скалирования разрядности. Что бы не городить его снаружи.
vadimuzzz
Цитата(des00 @ Sep 16 2010, 11:49) *
я бы поставил на выходе фильтра блок скалирования разрядности. Что бы не городить его снаружи.

специально не стал делать, округлять-то можно по разному
Цитата
Покритикую немножко

можно и множко smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.