Category: лытдыбр

Category was added automatically. Read all entries about "лытдыбр".

QuatCore

О выборе самого подходящего CRC-кода

Каюсь, что в вопросе выбора полинома для CRC я исходил из "моды": взял попросту самый популярный из CRC-16, под названием CCITT, 0x1021. Другие названия (в зависимости от выбора начального значения, инверсии битов на входе и на выходе): AUG-CCITT, GENIBUS, MCRF4XX, RIELLO, TMS37157, CRC-A, KERMIT, X-25 и X-MODEM, и это только то, что знает crccalc.com.

Сейчас решил всё-таки поискать, а в чём же, собственно, разница, и какой было бы лучше всего выбрать мне для поставленной задачи: МКО (Mil-Std 1553) со своими проверками чётности, от 1 до 32 слов данных (каждое слово 16 бит), ошибки предполагаются случайными и довольно редкими (вероятность 10-7).

Бешеную активность в этом направлении (исследование CRC) развил Филипп Купман (https://users.ece.cmu.edu/~koopman/crc/). Информации очень много, она "утрамбована", вроде бы наконец разобрался, что с ней делать.

Основная идея: выбрать такой код, который для твоего размера сообщения даст наибольшую возможную дистанцию Хэмминга, т.е позволит ГАРАНТИРОВАННО обнаружить как можно больше неправильных битов.

Collapse )

В общем, мне повезло: ровно в моём случае этот полином CCITT действительно хорошо подходит. Для более коротких сообщений или для более длинных лучше подошли бы другие. А здесь мы имеем гарантированное обнаружение до 3 ошибок, а также любого их нечётного количества, и вероятность 99,997% обнаружить 4 ошибки.
QuatCore

Счётчик в кодах Грея - продолжение

Начало здесь.

Пора наконец-то представить "широкой общественности" универсальный, параметризуемый модуль счётчика в кодах Грея на верилоге!

Чтобы сообразить, как он работает, сначала вспомним, как работает самый обычный двоичный счётчик:

0000
0001
0010
0011
0100
0101
0110
0111
1000
...


Самая простая разновидность - это "счётчик пульсаций", он же "асинхронный счётчик", он же ripple counter. Самый младший бит переключается по фронту тактовой частоты, а каждый следующий бит переключается ровно тогда, когда ПРЕДЫДУЩИЙ БИТ переключается с единички на нолик. Если взглянуть на ряд чисел выше, увидим ровно такую закономерность.

Но на ПЛИС делать такие счётчики крайне не рекомендуется, там используют СИНХРОННЫЙ счётчик. Смысл в том, что каждому биту "заранее сообщается", должен ли он переключиться по ближайшему фронту тактовой частоты.

Младшему биту всегда надо переключаться. Следующему за ним - только когда в младшем бите единичка. Это значит, по фронту произойдёт перенос, поэтому и нам надо переключиться. Предпоследнему биту (из нашего примера) надо переключиться, если два младших бита единичных, только тогда произойдёт перенос в наш бит, и так далее. Если использовать D-триггеры, получим такую вот схему:


Collapse )



Ну красота же! Видно, что на каждом такте переключается только один выход. Здесь я не стал делать специальный код для старшего бита, в результате дойдя до последнего значения 1000, счётчик "развернулся задом наперёд", став проходить те же 16 позиций в обратную сторону!

Остаётся добавить несколько полезных входов: clk_en, sload и D, а также ввести "обычную" версию кода Грея, когда после 1000 всё-таки наступает 0000, и цикл в точности повторяется.

Изучать AHDL, чтобы вместить счётчик в N бит в N ЛЭ я уж не буду пока. Как-нибудь потом :)
Sidious

Как убрать "медузу" и прочий мусор из поисковой выдачи

Чего-то вдруг голландская компания yandex N.V стала настойчиво запихивать мне в глотку "медузу" по поводу и без. Ладно, ещё могу понять, когда я искал весёлую картиночку "Один МиГ - и вы в Белоруссии" и первые две ссылки вели на эту горгону и на эхо. Причём в этот момент я попросил яндекс больше не показывать эти сайты, но разумеется никакого эффекта моя просьба не возымела.

А вчера я просто искал, что же это ЖЖ у меня не работает, не грузится и всё тут, написал что-то вроде "ЖЖ лежит" - и мне первой ссылкой статья на эту "медузу" про артемия лебедева, который с ЖЖ торжественно уходит. А почему ЖЖ висит, так и не понял, но к вечеру вроде зафурычил, и даже козёл Фрэнк среди ночи проснулся.

И я решил посмотреть, а можно ли как-то запретить поисковикам выдавать странички с тех сайтов, что мне не нравятся? Даже хрен с ней, с медузой, а есть просто довольно популярные сайты, которые почти всегда на верхних местах в поиске, но при переходе на которые по конкретной ссылке они может что-то и покажут, но тут же на весь экран будут предлагать зарегистрироваться, при том что какой-то особо ценной информации, стоящей того, там всё равно нет. Так себя ведёт твиттер, реддит, пинтерест кажется, там целый выводок.

Пока результат такой: яндекс подобную фичу не поддерживает, а вот в гугле и DuckDuckGo можно этот процесс "автоматизировать", то бишь один раз вписать нелюбимые сайты - и искать без них :)

Collapse )

Не удивлюсь, если есть способ ГОРАЗДО ПРОЩЕ, просто не знаю, по каким словам его искать.
QuatCore

Вычисление матрицы для нахождения аффинного преобразования

Когда-то я вкратце обозначил, что это за зверь такой. Самое время рассказать подробнее, и самому в это время вспомнить, как оно делается.

У нас есть координаты центров уголковых отражателей в метрах, т.е как именно они расположены на "пассивном КА":
A0 (0; 0,08429; -0,05135),
A1 (0; 0,15832; 0,00860),
A2 (0; 0,06939; 0,04274),
A3 (0; -0,06939; 0,04274),
A4 (0; -0,15832; 0,00860),
A5 (0; -0,08429; -0,05135)


Ещё два "центральных" мы сюда не включили, для этого алгоритма от них больше вреда, чем пользы.

А эти 6 точек лежат в одной плоскости X=0. Назовём Apn (ayn, azn) эти же точки, но в двух измерениях (p от слова planar - на плоскости).

Они создают на фотоприёмной матрице изображения с координатами Fn (fxn, fyn), причём мы уже идентифицировали, какая точка соответствует какому уголку. И теперь мы ищем такую матрицу T (2х2) и вектор r аффинного преобразования:



которое давало бы наилучшее совпадение с точками, которые мы "увидели" на фотоприёмной матрице.

Collapse )

Ну и найдём значение матрицы для конкретной конфигурации мишени, которую привели в начале поста:


UPD. первый раз здесь неправильные значения привёл, где первые 2 строки поделены на 8. Сейчас исправил.

Какова бы ни была мишень, всегда сумма верхних коэффициентов будет нулевой, равно как и сумма по второй строке. А сумма по нижней строке будет равна единице. Оно и понятно: если мы просто сдвинем все точки на определённый вектор, матрица T (2x2) поменяться не должна, должен поменяться только вектор r, ровно на величину параллельного переноса. Здесь это особенно легко проверяется.

Но из-за огромной симметрии, присущей конкретно этой мишени, мы видим просто "одну шестую" во всех нижних строках и повторяющиеся с чередующимися знаками значения в верхних строках. Вообще, симметричная матрица 3х3, которая у нас возникала в процессе вычислений, тут выходит диагональной, в чём также можно убедиться без вычислений, просто увидев, что все слагаемые вне главной диагонали взаимно друг друга погасят.

Для мишени дальней дистанции ничего подобного не получалось. Впрочем, как это полезно использовать - ни малейшего понятия.

Продолжение следует, сейчас верхние строки этой матрицы имеют размерность "пиксели на метры", а нижняя строка - безразмерная. Нужно туда впрячь радианы и перевести в 16-битные значения для QuatCore...
Sidious

Колесо с того света

После того падения колесу пришлось совсем туго:


в субботу попробовал всё-таки выправить его, и пока переднее колесо снято - ещё и амортизационную вилку перебрать. В неё за всё время существования этого велосипеда не залезали, а после зимы она чего-то вообще работать перестала. Я ждал худшего, но вот такой картины не ожидал:
IMG20210411023049.jpg

Под катом страшные картинки колеса, амортизатора и бонусная Марта.

Collapse )
QuatCore

Хотел выпендриться

Одно из замечаний к моему протоколу информационного обмена: ДОБАВЬ 16-битные заголовки к каждому сообщению!

Нам могут прислать командное слово с подадресом 1, и это будет обозначать, к примеру, "выдай целевую информацию", либо с подадресом 2 - и это будет "выдай телеметрию", либо с подадресом 3 - и это будет "дамп памяти" (в отладочных целях).

Как положено, к командному слову есть бит чётности, и если он неверен - мы команду игнорируем "от греха подальше". Но им этого кажется недостаточно: вдруг нам так не повезёт, что ошибочно сменилось ДВА бита, и теперь мы решим, что надо выдать целевую информацию, хотя на самом деле заказывали телеметрию!

И далее мы выдадим ответное сообщение без каких-либо ошибок, вот только НЕ ТО! Чтобы этого не произошло, они и хотят, чтобы у каждого ответного сообщения был свой уникальный код. Вот тогда-то они увидят, что они заказывали одно, а мы прислали совсем другое!

И тут мне захотелось, раз уж вы ребята так помешались на помехоустойчивости - сделать эти уникальные коды максимально разнесёнными друг от друга, насколько это позволяют отведённые 16 бит.

Но застрял с этим вопросом уже на несколько дней...

Collapse )

В общем, нельзя верить Википедии, и нельзя верить StackOverflow :) И по-моему, повторю я одно 5-битное значение 3 раза, добавлю бит чётности - и скажу, что так и надо!
Sidious

Это про меня


(ссылка)

- Дилберт, ты возглавишь проект, который решит твою карьеру. Вся дальнейшая твоя жизнь зависит от того, как ты покажешь себя здесь.
- Каков мой бюджет?
- Никакого.


Пока сижу "глубоко в отладке" - вроде всё неплохо, но как вспоминаю, как это всё начиналось, и кто всем командует - злость берёт!

Collapse )
beaver with chainsaw

Урановый 2021 год!

За эти новогодние праздники один раз прокатился на горных лыжах в МООСО (москвичам он более известен как Лоза) - склон небольшой, но хоть вспомнил немного, что это такое. А то я в своё время (где-то между 8 и 12 годиками) РАЗУЧИЛСЯ КАТАТЬСЯ НА ВЕЛОСИПЕДЕ!

А затем, 2-го января с Сафроновской группой (ныне "Беговые походы по субботам") на беговых лыжах по маршруту Некрасовская-Морозки, 38 км.
IMG20210102120250.jpg

Потом 3-го января пилатлон в Сергиев Посаде, расчищал подходы к Гремячему.
IMG20210103153317.jpg

И наконец, 9-го января - разведка боем в Лосином острове, 15 км в пределах МКАДа (за МКАД начинается особо охраняемая природная зона, одно время там егеря лютовали, это ж не СВХ строить, это НА ЛЫЖАХ ПРОЕХАТЬ ПО ЛЕСУ - НЕДОПУСТИМО!).

Фотографий и видео немного, но кое-чего есть. И бонусом ещё одна зевающая Марта :)
Collapse )
Sidious

Еду я по выбоинам

Только я поставил зимнюю резину, поездил на ней 3 дня (с субботы по понедельник), даже в лосином острове лыжню встретил:
IMG20201123131331.jpg

как зима резко закончилась, и всю неделю слякоть.

Только хотел похвастаться, что моё заднее колесо, собственноручно заспицованное в 4 креста с использованием натяжителя спиц, уже больше месяца катается без каких-либо проблем, как сегодня снова обнаружил лопнувший ниппель:
IMG20201127141949.jpg

В общем-то, вчера я действительно влетел на скорости в несколько выбоин, которые были тщательно замаскированы лужами, удары были заметными. Но всё равно странно: никогда ранее у меня не лопались ниппели, всегда лопались именно СПИЦЫ - чаще в районе втулки, где они загибаются под 90°, но у многострадального декатлоновского колеса - всегда у резьбы. Ну, ещё обод трескался однажды, но его уже успешно угнали.

Что-то мне кажется, что всё-таки спицовка в 4 креста с этим ободом не шибко совместима - ниппеля ложатся на один бок, из-за чего испытывают нерасчётные нагрузки, которые их и лопают в итоге.

Под катом - очередные динамо-причиндалы, дурацкие декатлоновские тормоза, немножко зимних видов и, конечно, кошка Марта.

Collapse )

"Стоимость проезда" на велосипеде теперь составила от 60 рублей за поездку (если пока не включать стоимость динамки и фар) до 89 рублей за поездку (если уже включить), или порядка 3,5..5,2 рубля за километр! До сих пор дохрена! А ещё предстоит спицы покупать с ниппелями, а там, глядишь, и цепи с кассетой придётся заменять.

С другой стороны, у меня скоро будет ТРИ запасных колеса: два передних и одно заднее декатлоновское, и ещё "отреставрированная" каретка :) И инструментов на все случаи жизни.

UPD. Посчитал: мне на переднее колесо с динамкой нужны спицы 262 и 263 мм, а на заднем колесе в 4 креста стоят 264 и 266. А вот на декатлоновском колесе как раз 260 и 262, и запасные я к нему покупал, 10 штук правых и 5 штук левых. Его, что ль, каннибализировать в этот раз?

UPD2. И похоже, я в этом году уже проехал на велике свыше 5000 км. Спидометра у меня нет, я просто посчитал, сколько прошло рабочих дней с 13 мая 2020 (когда я вышел из самоизоляции на даче): 140 дней. Помножил на 34 километра (поездка до работы и назад), вышло 4760 км. И ещё добавить 10% на поездки в РКК Энергию и на дачу, т.к каждую неделю уж или туда, или сюда обязательно ездил - и выходит 5236 км.
Sidious

Холивор про Си и надёжность :)

Вот чем мне нравится ЖЖшная тусовка - выложив разжигающий пост о выборах в США, получил холивор, но не про выборы и не про политику, а про язык C/C++, микроконтроллеры и всё с этим связанное! А это всяко интереснее :)

Подкину что ль ещё дровишек, расскажу свои мысли по поводу. Сугубое ИМХО.

Я изучал и С, и С++, и программировал на них, но так и не полюбил. Мне они всегда казались слишком низкоуровневыми для языков высокого уровня, но при этом слишком высокоуровневыми для ассемблера, эдакий компромисс, собравший худшее от обоих вариантов.

Картинка для привлечения внимания, "зловещая долина автоматизации". Видел что-то подобное в нескольких местах, но сходу найти, где именно, не смог, нарисовал сам в экселе :)

(цифры очень условные, главное тут форма кривой)

Пока возился со своим процессором, одолжил книжку у друга:

Думал, может сейчас почитаю "отцов-основателей" - и пойму, как это дело употреблять. Наверное, я понял, как он возник и почему обрёл такую популярность, но только укрепился в своём мнении, что не хочу писать на C...

Collapse )

Вся надежда на то что, в эпоху "тёмного кремния", которая вовсю началась, да ещё с торговыми войнами, когда все на всех вводят санкции, нам неизбежно придётся всё это дело переосмыслить и, кто знает, прийти к более адекватным штукам. Но это уже тема для другого холивара :) Приятно временами языком почесать!