kincajou: (Default)
[personal profile] kincajou
Простейшая задача, но я почему-то не могу нащупать элегантное решение.

Есть такая задачечка: сделать генератор сигналов Совершенно Произвольной Формы. Техническое обеспечение: микропроцессор и ЦАП. Всё работает, иного и не следовало ожидать.

Подзадача, на которой я торможу: генератор линейных (в смысле - буквально линейшых, вида A*x+B) сигналов. Нет, сделать её "в лоб" можно, и ничего тут такого нет. Но мне совсем не хочется заставлять проц считать в плавающей точке - просто потому, что это отнюдь не Атлон64, не Пентиум и даже не 386 - это восьмибитный микроконтроллер, и вычислительные способности у него далеко не самые выдающиеся. Можно, конечно, ещё на fixed point попробовать, но это неспортивно...

Частично задача решена при помощи алгоритма Брезенхама. Он прекрасно работает, но у него есть исключение - если наклон линии больше 45 градусов (по модулю, т.е. наклон и отрицательный может быть), то алгоритм перестаёт работать. В принципе, его можно было бы перевернуть зеркально относительно этих 45 градусов, если бы не одно ограничение - выходной-то сигнал, фактически, одномерный! Т.е. сам алгоритм генерации идёт вдоль оси t, она же ось x. Нет возможности поменять местами x и y, нет возможности забабахать огромные массивы и т.п., и т.д. Нет так же возможности долго думать между отсчётами - сигнал должен генериться без провалов и потерь выборок. Т.е. алгоритм должен быть строго итерационным, простым и без рекурсий.

Есть ли какие-нибудь общие соображения на эту тему? Или безнадёга и придётся, блин, всё-таки решать "в лоб"?

Date: 2008-03-21 11:41 pm (UTC)
From: [identity profile] thesz.livejournal.com
Фиксированная точка.

Другого не дано. ;)

Всякие оптимизации наподобие Брезенхема подходят только для двух определенных классов генераторов (линия и окружность). Но не в случае произвольной формы.

Date: 2008-03-21 11:44 pm (UTC)
From: [identity profile] kincajou.livejournal.com
ыыы :(

хотя, с другой стороны, на фикседпоинте получается тупой, но однозначный алгоритм, который будет работать везде и всегда (за исключением границ применимости, но до них ещё дойти надо)

Date: 2008-03-21 11:45 pm (UTC)
From: [identity profile] kincajou.livejournal.com
..плюс предсказуемое время выполнения... да, пожалуй.

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25 262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 19th, 2025 05:40 pm
Powered by Dreamwidth Studios