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

сложение двух 16 битных чисел

Есть проект на ATF1508AS (128 макроселл) для снятия 4096 чисел данных с 14 битного АЦП, запись в SRAM, потом считывание, все по командам контроллера. На каждое число есть 4 такта, частота - 2 МГц. Как реализовать усреднение по 2, 4, 8, 16. 34? Т.е. при первом считывании каждую i-ую точку сдвинуть на соответствующее кол-во разрядов вправо и записать в SRAM, на каждой следующей i-ой точке надо считать i-ое данное с SRAM, сложить со сдвинутым текущим i-ым и опять записать в SRAM. Возможно-ли это сделать на данном устройстве? Может поставить еще одну ПЛИС или DSP для суммирования? Большого опыта работы с ПЛИС нет.

Спасибо.

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


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

Вы хотите организовать фильтр типа SMA (простое скользящее среднее)?

Посмотрите по ссылке http://www.may.nnov.ru/mak/DSP/chSMA.shtml

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


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

Вы хотите организовать фильтр типа SMA (простое скользящее среднее)?

Посмотрите по ссылке http://www.may.nnov.ru/mak/DSP/chSMA.shtml

 

Нет. Мне надо не SMA: Y = (X + X[i-1] + ... X[i - (N - 1)])/N, а

Y = X1/N + X2/N + ... XN/N, где i=[0:4095].

Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название.

Изменено пользователем StasK

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


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

Нет. Мне надо не SMA: Y = (X + X[i-1] + ... X[i - (N - 1)])/N, а

Y = X1/N + X2/N + ... XN/N, где i=[0:4095].

Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название.

 

Если N равен степени двойки тогда

1. Можно поставить суматор, который будет находить сумму X + X[i-1] + ... X[i - (N - 1)], а потом производиться соответствующая операция сдвига на N разрядов.

2. Можно производить соответствующий сдвиг на N разрядов с каждым Х, а потом находить их сумму.

 

п. 1 и п. 2 это равноценны

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


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

п. 1 и п. 2 это равноценны

Нискажите ;О) Если сперва всё сложить, а потом сдвинуть, а то и округлить, то ошибка будет 1МЗР(±0,5МЗР при округлении). А если сперва сдвинуть, а потом сложить, то... сами понимаете, в какие ворота можно не влезть... ;О) Ну и ресурсы тоже таво... разные.

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


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

Нискажите ;О) Если сперва всё сложить, а потом сдвинуть, а то и округлить, то ошибка будет 1МЗР(±0,5МЗР при округлении). А если сперва сдвинуть, а потом сложить, то... сами понимаете, в какие ворота можно не влезть... ;О) Ну и ресурсы тоже таво... разные.

 

С первым замечанием еще могу согласиться, а вот со вторым "Ну и ресурсы тоже таво... разные" позвольте не согласиться :) Ресурсы для ПЛИС, на мой взгляд, будут одинаковыми, просто последовательность операций иная.

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


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

С первым замечанием еще могу согласиться, а вот со вторым "Ну и ресурсы тоже таво... разные" не могу согласиться :) Ресурсы для ПЛИС будут одинаковыми, просто последовательность операций иная.

Ну почему? ;О) В "точном" случае сумматор будет на всю длину вектора (Win+12), а если сперва усекать, а потом суммировать, то сумматор будет только в ширину выходного вектора. Мельчь, конешно, но тем не менее. ;О)

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


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

Нет. Мне надо не SMA: Y = (X + X[i-1] + ... X[i - (N - 1)])/N, а

Y = X1/N + X2/N + ... XN/N, где i=[0:4095].

Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название.

А можно словами пояснить в чём отличие? Непонятна двойная индексация в вашем варианте - что значит, например, XN?

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


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

Ну почему? ;О) В "точном" случае сумматор будет на всю длину вектора (Win+12), а если сперва усекать, а потом суммировать, то сумматор будет только в ширину выходного вектора. Мельчь, конешно, но тем не менее. ;О)

 

Согласен, просто с точки зрения построения цифровой схемы одинаково. :) А разрядность сумматора, я не учитывал :(

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


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

Что точно можно сказать, деление на N не кратное двум, сожрёт много ресурсов. Пару месяцев назад делал на EPF10K100Е вычисления над 16-ти битными числами пару сложений и умножений, сожрало треть ёмкости.

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


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

А не подойдёт ли Вам такой вариант?

Y = (X - Y[i-1])/N + Y[i-1] - это простейший рекурсивный НЧ-фильтр первого порядка, цифровой эквивалент аналогового ФНЧ на R и C.

Если N - кратно степени 2, то ресурсов минимум и помнить кучу выборок не надо.

Если не кратно, то можно реализовать в несколько параллельных /N1, /N2, /N3 - каждый из которых кратен степени 2 и складывать результаты.

Чтобы сразу не терять в точности на отбрасывании младших бит, исходному X добавить младших нулевых битов, а потом сдвинуть на их кол-во результат.

Прикрепил результат моделирования.

post-17402-1221801684_thumb.jpg

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


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

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

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

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

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

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

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

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

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

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