StasK 0 14 сентября, 2008 Опубликовано 14 сентября, 2008 · Жалоба Есть проект на ATF1508AS (128 макроселл) для снятия 4096 чисел данных с 14 битного АЦП, запись в SRAM, потом считывание, все по командам контроллера. На каждое число есть 4 такта, частота - 2 МГц. Как реализовать усреднение по 2, 4, 8, 16. 34? Т.е. при первом считывании каждую i-ую точку сдвинуть на соответствующее кол-во разрядов вправо и записать в SRAM, на каждой следующей i-ой точке надо считать i-ое данное с SRAM, сложить со сдвинутым текущим i-ым и опять записать в SRAM. Возможно-ли это сделать на данном устройстве? Может поставить еще одну ПЛИС или DSP для суммирования? Большого опыта работы с ПЛИС нет. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 14 сентября, 2008 Опубликовано 14 сентября, 2008 · Жалоба Вы хотите организовать фильтр типа SMA (простое скользящее среднее)? Посмотрите по ссылке http://www.may.nnov.ru/mak/DSP/chSMA.shtml Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StasK 0 14 сентября, 2008 Опубликовано 14 сентября, 2008 (изменено) · Жалоба Вы хотите организовать фильтр типа 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]. Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название. Изменено 14 сентября, 2008 пользователем StasK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба Нет. Мне надо не 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 это равноценны Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mse 0 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба п. 1 и п. 2 это равноценны Нискажите ;О) Если сперва всё сложить, а потом сдвинуть, а то и округлить, то ошибка будет 1МЗР(±0,5МЗР при округлении). А если сперва сдвинуть, а потом сложить, то... сами понимаете, в какие ворота можно не влезть... ;О) Ну и ресурсы тоже таво... разные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба Нискажите ;О) Если сперва всё сложить, а потом сдвинуть, а то и округлить, то ошибка будет 1МЗР(±0,5МЗР при округлении). А если сперва сдвинуть, а потом сложить, то... сами понимаете, в какие ворота можно не влезть... ;О) Ну и ресурсы тоже таво... разные. С первым замечанием еще могу согласиться, а вот со вторым "Ну и ресурсы тоже таво... разные" позвольте не согласиться :) Ресурсы для ПЛИС, на мой взгляд, будут одинаковыми, просто последовательность операций иная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mse 0 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба С первым замечанием еще могу согласиться, а вот со вторым "Ну и ресурсы тоже таво... разные" не могу согласиться :) Ресурсы для ПЛИС будут одинаковыми, просто последовательность операций иная. Ну почему? ;О) В "точном" случае сумматор будет на всю длину вектора (Win+12), а если сперва усекать, а потом суммировать, то сумматор будет только в ширину выходного вектора. Мельчь, конешно, но тем не менее. ;О) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Intekus 0 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба Нет. Мне надо не SMA: Y = (X + X[i-1] + ... X[i - (N - 1)])/N, а Y = X1/N + X2/N + ... XN/N, где i=[0:4095]. Т.е. я бы назвал это усреднением векторов, но наверняка есть стандартное название. А можно словами пояснить в чём отличие? Непонятна двойная индексация в вашем варианте - что значит, например, XN? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mse 0 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба А можно словами пояснить в чём отличие? См пост №5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 15 сентября, 2008 Опубликовано 15 сентября, 2008 · Жалоба Ну почему? ;О) В "точном" случае сумматор будет на всю длину вектора (Win+12), а если сперва усекать, а потом суммировать, то сумматор будет только в ширину выходного вектора. Мельчь, конешно, но тем не менее. ;О) Согласен, просто с точки зрения построения цифровой схемы одинаково. :) А разрядность сумматора, я не учитывал :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Splice 0 18 сентября, 2008 Опубликовано 18 сентября, 2008 · Жалоба Что точно можно сказать, деление на N не кратное двум, сожрёт много ресурсов. Пару месяцев назад делал на EPF10K100Е вычисления над 16-ти битными числами пару сложений и умножений, сожрало треть ёмкости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 19 сентября, 2008 Опубликовано 19 сентября, 2008 · Жалоба А не подойдёт ли Вам такой вариант? Y = (X - Y[i-1])/N + Y[i-1] - это простейший рекурсивный НЧ-фильтр первого порядка, цифровой эквивалент аналогового ФНЧ на R и C. Если N - кратно степени 2, то ресурсов минимум и помнить кучу выборок не надо. Если не кратно, то можно реализовать в несколько параллельных /N1, /N2, /N3 - каждый из которых кратен степени 2 и складывать результаты. Чтобы сразу не терять в точности на отбрасывании младших бит, исходному X добавить младших нулевых битов, а потом сдвинуть на их кол-во результат. Прикрепил результат моделирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться