|
Алгоритм нелинейной регрессии для AVR, возможно-ли такое |
|
|
|
Nov 6 2009, 07:16
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(nikolas_osu @ Nov 6 2009, 09:37)  Необходимо аппроксимировать 400 точек полиномом 11 степени, потом полиномы 11 степени будут передаваться по медленному каналу связи... Есть ли какие-нибудь готовые алгоритмы для этого?.. На платформе AVR, как и на любой другой, можно запрограммировать любые вычисления, если ... хватит места под данные. Особеность тут только та, что МК этой платформы не имеют аппаратного умножения чисел с плавающей точкой, а с использованием эмуляции сложный расчет может занять порядочное время. Полином 11-ой степени уже не подарок, т.к. расчет в лоб потребует инвертирования матрицы, которая к тому же очень плохо определена (близка к матрице Гильберта). Поэтому такой расчет на AVR лучше не делать, а если и посылать в него данные, то не коэффициенты полинома, а уже готовую обращенную матрицу, чтобы тот только множил на нее вектор данных и больше ни о чем не заботился. А ту матрицу пусть хоть писюк посчитает. Только при этом нужно учесть, что такая матрица-сомножитель для вашего случая будет иметь размерность 400x11=4400 элементов, а если каждый по 4 байта (тип float), то выйдет 17.6 килобайт. Уже многонько, не каждая AVR-ка потянет. А с точностью double потребуется еще вдвое больше памяти. Да и само умножение получится не быстрым при такой большой матрице и медленной реализации умножения. А если говорить об алгоритмах, то тут, полагаю, надо попытать расчет коэффициентов через полиномы Чебышева. Кажется где-то есть такой способ, отличающийся устойчивостью. Однако в любом случае AVR придется делать одну и ту же операцию умножения вектора длиной 400 на матрицу размером 400х12. А алгоритмы будут различаться между собой только тем, как такая матрица вычисляется. В любом случае вычислять ее надо будет не на AVR, а засылать ему уже готовую.
|
|
|
|
|
Nov 6 2009, 08:01
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046

|
Цитата(_Pasha @ Nov 6 2009, 12:57)  Какое время выделяется на обсчет? 0.7 секунды
|
|
|
|
|
Nov 6 2009, 21:40
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

|
Цитата(nikolas_osu @ Nov 6 2009, 09:37)  Необходимо аппроксимировать 400 точек полиномом 11 степени, потом полиномы 11 степени будут передаваться по медленному каналу связи... Есть ли какие-нибудь готовые алгоритмы для этого?.. А Вы для начала алгоритм в том-же матлабе или просто на С/С++ уже промоделировали? Всё устойчиво и хорошо опраксимирует? Что-то подсказывает что будут проблемы с точностью опраксимации, уж очень много точек на один полином. Если только у точек не какой хитрый закон, которых хорошо ляжет на полином. Если у Вас на руках есть алгоритм, как делали? Неужели там нет много матриччных вычислений? Давно что-то похожее делал, подробности забыл, но для нахождения параметров полинома использовались множители Лагранжа. Так помнится были проблемы, часто после апроксимации, при проверке качества апроксимации результат был плохой. Хотя у меня было много граничных условий, в Вашем случае может всё лучше будет работать. После чего участо разбивался на 2 части, и для них всё считалось одельно. И так дробил отрезок, покуда не получал нужной точности апроксимации. Возможно этот алгоритм не очень хорошо работал, но тем не менее, есть сомнненя что 400 точек лягут на один полином. Ну а по теме, 0,7 секунды на AVR для 400 точек, IMHO не реально, у вас будут большие матрыцы, не позубам так быстро считать для AVR.
|
|
|
|
|
Nov 9 2009, 21:12
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата Алгоритм нелинейной регрессии для AVR Есть ли какие-нибудь готовые алгоритмы для этого?.. http://www.google.ru/search?&q=polynomial+fittingтолько почему она нелинейная-то? Цитата( @ Nov 6 2009, 14:16)  На платформе AVR, как и на любой другой, можно запрограммировать любые вычисления, если ... хватит места под данные. Особеность тут только та, что МК этой платформы не имеют аппаратного умножения чисел с плавающей точкой, а с использованием эмуляции сложный расчет может занять порядочное время. А ту матрицу пусть хоть писюк посчитает. Только при этом нужно учесть, что такая матрица-сомножитель для вашего случая будет иметь размерность 400x11=4400 элементов, а если каждый по 4 байта (тип float), то выйдет 17.6 килобайт. Ну матрица будет всего 11х11, не так уж и много. Если даже по Гауссу занулять, за секунду вроде можно успеть, да и операции с плавающей запятой наверное можно ускорить немного, от точности зависит, никто же соответствия ieee-754 не требует. Однако, целесообразность сего действа действительно крайне сомнительна.
|
|
|
|
|
Nov 10 2009, 12:24
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052

|
Цитата(Oldring @ Nov 7 2009, 20:39)  Ну еще полином 255-й степени в общеупотребимых кодах Рида-Соломона вспомни. Это была оценка вычислительной сложности.Конкретнее следующее. Если взять какой-нибудь стандарт компрессии речи типа G721, то там есть Си-программки, в том числе и нахождение АР-модели кадра речи - ее можно взять за основу и даже странслировать в AVR. Правда, степень полинома нужно будет увеличить с10 до 11. В стандарте программа сделана очень профессионально -есть чему поучиться.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|