|
|
  |
сложение двух 16 битных чисел |
|
|
|
Sep 14 2008, 20:40
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 31-03-08
Пользователь №: 36 348

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

Группа: Участник
Сообщений: 25
Регистрация: 31-03-08
Пользователь №: 36 348

|
Цитата(rezident @ Sep 14 2008, 23:44)  Вы хотите организовать фильтр типа SMA (простое скользящее среднее)? Посмотрите по ссылке http://www.may.nnov.ru/mak/DSP/chSMA.shtmlНет. Мне надо не SMA: Y[i] = (X[i] + X[i-1] + ... X[i - (N - 1)])/N, а Y[i] = X1[i]/N + X2[i]/N + ... XN[i]/N, где i=[0:4095]. Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название.
Сообщение отредактировал StasK - Sep 14 2008, 23:37
|
|
|
|
|
Sep 15 2008, 05:35
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(StasK @ Sep 15 2008, 02:17)  Нет. Мне надо не SMA: Y[i] = (X[i] + X[i-1] + ... X[i - (N - 1)])/N, а Y[i] = X1[i]/N + X2[i]/N + ... XN[i]/N, где i=[0:4095]. Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название. Если N равен степени двойки тогда 1. Можно поставить суматор, который будет находить сумму X[i] + X[i-1] + ... X[i - (N - 1)], а потом производиться соответствующая операция сдвига на N разрядов. 2. Можно производить соответствующий сдвиг на N разрядов с каждым Х[i], а потом находить их сумму. п. 1 и п. 2 это равноценны
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 15 2008, 06:54
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(mse @ Sep 15 2008, 09:35)  Нискажите ;О) Если сперва всё сложить, а потом сдвинуть, а то и округлить, то ошибка будет 1МЗР(±0,5МЗР при округлении). А если сперва сдвинуть, а потом сложить, то... сами понимаете, в какие ворота можно не влезть... ;О) Ну и ресурсы тоже таво... разные. С первым замечанием еще могу согласиться, а вот со вторым "Ну и ресурсы тоже таво... разные" позвольте не согласиться  Ресурсы для ПЛИС, на мой взгляд, будут одинаковыми, просто последовательность операций иная.
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 15 2008, 07:00
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Цитата Нет. Мне надо не SMA: Y[i] = (X[i] + X[i-1] + ... X[i - (N - 1)])/N, а Y[i] = X1[i]/N + X2[i]/N + ... XN[i]/N, где i=[0:4095]. Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название. А можно словами пояснить в чём отличие? Непонятна двойная индексация в вашем варианте - что значит, например, XN[i]?
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Sep 15 2008, 07:22
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(mse @ Sep 15 2008, 10:00)  Ну почему? ;О) В "точном" случае сумматор будет на всю длину вектора (Win+12), а если сперва усекать, а потом суммировать, то сумматор будет только в ширину выходного вектора. Мельчь, конешно, но тем не менее. ;О) Согласен, просто с точки зрения построения цифровой схемы одинаково.  А разрядность сумматора, я не учитывал
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 18 2008, 19:45
|

Группа:
Сообщений: 10
Регистрация: 3-03-05
Из: МО, Жуковский
Пользователь №: 3 045

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

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
А не подойдёт ли Вам такой вариант? Y[i] = (X[i] - Y[i-1])/N + Y[i-1] - это простейший рекурсивный НЧ-фильтр первого порядка, цифровой эквивалент аналогового ФНЧ на R и C. Если N - кратно степени 2, то ресурсов минимум и помнить кучу выборок не надо. Если не кратно, то можно реализовать в несколько параллельных /N1, /N2, /N3 - каждый из которых кратен степени 2 и складывать результаты. Чтобы сразу не терять в точности на отбрасывании младших бит, исходному X[i] добавить младших нулевых битов, а потом сдвинуть на их кол-во результат. Прикрепил результат моделирования.
Эскизы прикрепленных изображений
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|