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

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

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

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

Есть ли какие-нибудь общие соображения на эту тему? Или безнадёга и придётся, блин, всё-таки решать "в лоб"?
This account has disabled anonymous posting.
If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting

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 Jul. 16th, 2025 03:43 pm
Powered by Dreamwidth Studios