Timmy 1 16 июля, 2016 Опубликовано 16 июля, 2016 · Жалоба В цифровом фильтре хочу иметь коэффициенты 3/4, 7/8 и т.п. Если бы получилось умножить за такт, попробовал бы сделать фильтр с БИХ, "экспоненциальное усреднение" называет Р. Лайонс. Но я хотел бы еще и сами коэффициенты менять в процессе. Понял, что Для БИХ фильтра есть возможность удлинения петли обратной связи до любого количества тактов, ценой увеличения ресурсов, конечно, этот вопрос уже обсуждался тут когда-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 16 июля, 2016 Опубликовано 16 июля, 2016 · Жалоба если производительность а+б устраивает, то превратить а+б+с в а+б нет никакой проблемы: у полусуматора есть три входа a,b,carry_in, и два выхода sum, carry_out. то есть линейка полусуматоров превращает три слагаемых в два - то есть распространение переноса(carry) по разрядам происходит только при сложении результата (двух слагаемых). то есть дополнительно будет задержка двух полусуматоров - то есть задержка a[N]+b[N]+c[N] должна равняться a[N+2]+b[N+2] по науке это называется дерево Уолеса (Wallace tree), так обычно складываются кусочки произведения в умножителе (и работа Wallace собственно про умножители) - поэтому если будете гуглить, то не пугайтесь multiplier-a, смысл в adder-е но подозреваю, что альтеровский синтез это умеет, то есть D <= A + B + C; превратилось в то что нужно. но можно посмотреть результат, на всякий случай Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 июля, 2016 Опубликовано 17 июля, 2016 · Жалоба Для БИХ фильтра есть возможность удлинения петли обратной связи до любого количества тактов, ценой увеличения ресурсов, конечно, этот вопрос уже обсуждался тут когда-то. Возможно, я и сам там читал-писал. Но вот конкретный пример: y(i) = 1/4*x(i) + 3/4*y(i-1) Вот как ее растянуть на несколько тактов? Если к приходу нового x уже нужно иметь предыдущий y? но подозреваю, что альтеровский синтез это умеет, то есть D <= A + B + C; превратилось в то что нужно. но можно посмотреть результат, на всякий случай Я уже смотрел. Суммируются последовательно сначала A и B, затем результат с C. C последовательными переносами. Э-э... вспоминаю... Там, в теме, кажется, предлагалось сначала складывать младшую часть битов, а в следующем такте старшую. Буду думать мысль! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 17 июля, 2016 Опубликовано 17 июля, 2016 · Жалоба Возможно, я и сам там читал-писал. Но вот конкретный пример: y(i) = 1/4*x(i) + 3/4*y(i-1) Вот как ее растянуть на несколько тактов? Если к приходу нового x уже нужно иметь предыдущий y? Если сделать подстановку y(i-1) = 1/4*x(i-1) + 3/4*y(i-2), то получится рекурсивная зависимость y(i) от y(i-2) без y(i-1), вот это и обсуждалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 17 июля, 2016 Опубликовано 17 июля, 2016 · Жалоба Если сделать подстановку y(i-1) = 1/4*x(i-1) + 3/4*y(i-2), то получится рекурсивная зависимость y(i) от y(i-2) без y(i-1), вот это и обсуждалось. Отличное решение! И похоже что универсальное... А можно ссылку на обсуждение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 июля, 2016 Опубликовано 17 июля, 2016 · Жалоба Если сделать подстановку y(i-1) = 1/4*x(i-1) + 3/4*y(i-2), то получится рекурсивная зависимость y(i) от y(i-2) без y(i-1), вот это и обсуждалось. Как математический трюк - интересно. Но дает ли это что-то на практике? y(i) = 1/4*x(i) + 3/16*x(i-1) + 9/16*y(i-2) На каком-то такте нужно суммировать больше двух переменных. Имеется в виду, 3/16 и 9/16 получать суммированием переменной с собой же сдвинутой. До этого было 2 сложения, стало 4. Дополнительный такт появился один. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 17 июля, 2016 Опубликовано 17 июля, 2016 · Жалоба Как математический трюк - интересно. Но дает ли это что-то на практике? Да,действительно, очень похоже на то что вы правы. Абстрактный пример.Например мне нужно реализовать простейший фильтр БИХ описываемый следующим уравнением: y(i) = x(i) + К*y(i-1) тогда y(i-1) = x(i-1) + К*y(i-2) теперь подставляем второе в первое y(i) = x(i) + К*x(i-1) + K^2 * y(i-2) Допустим что операция умножения занимает два такта(pipeline). Тогда нужно вычислить ещё y(i-2) = x(i-2) + К*y(i-3) и y(i) = x(i) + К*x(i-1) + K^2 * x(i-2) + K^3 * y(i-3) Отсюда видно что если относительно y удаётся выдержать нужную латентность, то относительно х ситуация плачевная. Остаётся надеяться что Timmy может внести некоторую ясность. p.s. А может я ошибаюсь? Ведь никто не запрещает написать и так: y(i) = x(i-2) + К*x(i-3) + K^2 * x(i-4) + K^3 * y(i-3) Как Вы думаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июля, 2016 Опубликовано 18 июля, 2016 · Жалоба Я думаю, x должен использоваться тот, что приходит сразу после вычисления y. Если они будут раздвинуты по времени, это будет другой фильтр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 18 июля, 2016 Опубликовано 18 июля, 2016 · Жалоба Я думаю, x должен использоваться тот, что приходит сразу после вычисления y. Если они будут раздвинуты по времени, это будет другой фильтр. А я думаю что Вы ошибаетесь. Фильтр в этом случае будет отличаться от исходного только множителем Z^-2 на входе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 июля, 2016 Опубликовано 18 июля, 2016 · Жалоба Посмотрел в Матлабе следующие передаточные функции: B4 = [1/4]; A4 = [1 -3/4]; B4D = [0 0 0 1/4]; A4D = [1 -3/4]; H = fvtool(B4,A4, B4D,A4D); АЧХ одинаковые. Выходит, я могу задерживать x на сколько захочу. Прикольный фильтр получается: B4X = [1/16 1/8 1/16]; A4X = [1 -3/4]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 18 июля, 2016 Опубликовано 18 июля, 2016 · Жалоба А я думаю что Вы ошибаетесь. Фильтр в этом случае будет отличаться от исходного только множителем Z^-2 на входе. Да, поэтому иксы можно конвейеризовать, как угодно, это только увеличивает групповую задержку фильтра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 18 июля, 2016 Опубликовано 18 июля, 2016 · Жалоба Да, поэтому иксы можно конвейеризовать, как угодно, это только увеличивает групповую задержку фильтра. Ага,значит меня немного занесло в сторону чуть выше.Спасибо за рабочий инструмент! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться