Перейти к содержанию
    

Можно ли быстро сложить 3 переменные?

В цифровом фильтре хочу иметь коэффициенты 3/4, 7/8 и т.п. Если бы получилось умножить за такт, попробовал бы сделать фильтр с БИХ, "экспоненциальное усреднение" называет Р. Лайонс. Но я хотел бы еще и сами коэффициенты менять в процессе. Понял, что

Для БИХ фильтра есть возможность удлинения петли обратной связи до любого количества тактов, ценой увеличения ресурсов, конечно, этот вопрос уже обсуждался тут когда-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если производительность а+б устраивает, то превратить а+б+с в а+б нет никакой проблемы:

 

у полусуматора есть три входа 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; превратилось в то что нужно. но можно посмотреть результат, на всякий случай

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для БИХ фильтра есть возможность удлинения петли обратной связи до любого количества тактов, ценой увеличения ресурсов, конечно, этот вопрос уже обсуждался тут когда-то.

Возможно, я и сам там читал-писал. Но вот конкретный пример:

y(i) = 1/4*x(i) + 3/4*y(i-1)

Вот как ее растянуть на несколько тактов? Если к приходу нового x уже нужно иметь предыдущий y?

 

но подозреваю, что альтеровский синтез это умеет, то есть D <= A + B + C; превратилось в то что нужно. но можно посмотреть результат, на всякий случай

Я уже смотрел. Суммируются последовательно сначала A и B, затем результат с C. C последовательными переносами.

 

Э-э... вспоминаю... Там, в теме, кажется, предлагалось сначала складывать младшую часть битов, а в следующем такте старшую. Буду думать мысль!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, я и сам там читал-писал. Но вот конкретный пример:

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), вот это и обсуждалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если сделать подстановку y(i-1) = 1/4*x(i-1) + 3/4*y(i-2), то получится рекурсивная зависимость y(i) от y(i-2) без y(i-1), вот это и обсуждалось.

Отличное решение! И похоже что универсальное...

А можно ссылку на обсуждение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если сделать подстановку 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. Дополнительный такт появился один.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как математический трюк - интересно. Но дает ли это что-то на практике?

Да,действительно, очень похоже на то что вы правы.

Абстрактный пример.Например мне нужно реализовать простейший фильтр БИХ описываемый следующим уравнением:

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)

Как Вы думаете?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, x должен использоваться тот, что приходит сразу после вычисления y. Если они будут раздвинуты по времени, это будет другой фильтр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, x должен использоваться тот, что приходит сразу после вычисления y. Если они будут раздвинуты по времени, это будет другой фильтр.

А я думаю что Вы ошибаетесь. Фильтр в этом случае будет отличаться от исходного только множителем Z^-2 на входе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел в Матлабе следующие передаточные функции:

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];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я думаю что Вы ошибаетесь. Фильтр в этом случае будет отличаться от исходного только множителем Z^-2 на входе.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ага,значит меня немного занесло в сторону чуть выше.Спасибо за рабочий инструмент!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...