Jump to content

    

iiv

Свой
  • Content Count

    2265
  • Joined

  • Last visited

Everything posted by iiv


  1. Ага, верно. Вроде о том же. Я про сингулярные числа говорю только из-за того, чтобы понять какие они у вас. Я не советовал их вычислять. Тут конкретика двояка (даже трояка), но, для начала условимся: sum_i || x(i) * b - z(i) ||^2 -> min и рассмотрим A = [X Z] Если у этой матрицы разброс сингулярных значений меньше обратного из корня из машинной точности, то надо решать b = inv(X' * X) * X' * Z и не морочить себе голову. Если у этой матрицы разброс сингулярных значений больше обратного из машинной точности, то надо выбрасывать часть сингулярных чисел, иначе вы хоть даже в точной арифметике будете получать погоду на марсе вместо решения. Для этого - применимы методы регуляризации по Тихонову, и классикой является, например, такое решение b = inv(X' * X + a I) * X' * Z, где I - единичная диагональная, а скаляр a - величина близкая к отбрасываемым сингулярным значениям. Я не призываю сингулярные числа искать, надо иметь их оценку, чтобы регуляризовать. Если же есть желание решать в промежуточном диапазоне, то тут только метод построения X' * X в удвоенной точности, и потом обращение с учетом того, что числа даны в удвоенной точности. Идеальным вариантом тут подходит 1. вначале построение в удвоенной точности A = X' * X, и B = X' * Z, 2. вычисление Холецкого с выбором диагонального элемента или блока A = L L' (тоже в удвоенной точности), 3. вычисление сингулярного разложения L = UDV' уже в обычной точности, 4. перезапись A = U D^2 U' и использование его далее, то есть умножение в удвоенной точности C = U' B, вычисление F = inv(D^2) C, и окончательное умножение в обычной точности b = U F. Все остальное может быть применимо только если вы можете к самой матрице X хотя бы несколько раз обращаться, а не получать ее по строкам.
  2. я конечно, бывает, тоже падежи не согласовываю, когда пишу, но тут, похоже, ТС к экстрасенсам взывает. Если вопрос формулировать абстрактно, то пишите модуль dgemm/zgemm (это функции умножения матриц) для blas (очень изместная библиотека Basic Linear Algebra Subroutines) и уговаривайте Интел встроить это в MKL (Math Kernel Library). Если вы не это имели ввиду, то тогда нужна конкретика, и экстрасенсы все на карантине.
  3. Спасибо! Да, Вы правы, вначале так и хотел, но побоялся сделать, так как перед первой сборкой не было понимания какой шаг будет, да и три пина идут полностью впараллель, а еще один - с каждых нескольких отдельно, и размеры этих блоков и сейчас меняются от эксперимента к эксперименту. Возможно сделаю эту кроссплату на три одинаковых пина, а остальные протащу как получается. Перемерил еще раз... Я, кажется, всех ввел в заблуждение... Действительно на 1МГц у меня чехорда ВЕЗДЕ и на ноге МК, и на ноге оптопары, хотя питание вроде стабильно стоит. На 10КГц все стабильно. Пошел делать шины и переразводить управляющую плату с linear buffers Спасибо большое всем за советы!!!
  4. Спасибо большое, _pv, за ответ! Да, в настоящее время, то, что я смог потестировать было вначале по отдельности проверенно, потом собрано и залито. Подлезть я смог только на самую дальнюю оптопару и на ноги МК. Провода, которыми я соединял - это были провода со шлейфа, я шлейф расптаскивал на жилы с одной стороны, а с другой - соединял стандартную IDC колодку. То есть чехорда была на самом дальнем, на средних померить не могу, так как там у меня стенка и подлезть сквозь стенку не реально. На 10КГц работает совершенно стабильно и все каналы отзываются и функционируют. На 100КГц уже есть редко пропуски, на 1МГц перестает работать. Раньше предыдущая версия с меньшим числом блоков на тех же платах уверенно работала на 500КГц несколько месяцев по 40 часов в неделю, а также я ее тестировал до 2МГц - тоже все было нормально. Один из каналов с fanout x20 тоже проверил, завалы тоже на 1МГц есть. Конечно сама конструкция может давать хорошие помехи, там каждый канал имеет после оптопары свое напряжение ни как не зависящее от основного и может уползать вверх-вниз в некоторых случаях до 5КВ. По земле на последнем канале тоже помехи есть, хотя на управляющей плате помех не видно. Но как-то не понятно, у провода на 30см сопротивление меньше 0.1Ом, на входе керамика стоит, питалово на оптопары и этот контроллер 3А. Интересно, что при 10КГц все работает... То есть я конечно софтверно могу вытянуть этот блок, посылая данные на маленькой скорости (всяко у меня там по МК стоит), но конечно же передавать на большей скорости было бы реально лучше.
  5. не, 160 всего плат, просто если на них внимательно посмотреть, то видно, что их можно в шахматном порядке ставить, и выходы (4 пина) не только с краю, но и по центру сделать (эти платы у меня уже кончились, я показать не могу). То есть 40 по 4 пина, но 4 раза, всего 160 оптопар. Как я говорил, 2 пина - питание, 1 пин fanout x160 и еще один пин с fanout x20 - то есть на МК приходит 1 пин с fanout x160, и 8 пинов с fanout x20. К моменту написания моего первого поста в этой теме 8 пинов с fanout x20 микроконтроллер тянул, а вот 1 пин fanout x160 нет. Я объединял несколько друг за другом расположенных плат в параллель, и тянул оттуда проводок. Сейчас возникла идея объединить все одной шиной (шин суммарно будет 4 комплекта, на каждой по 40 оптопар), протянув провода насквозь этих плат и пропаяв (всяко это не разборная конструкция). Будет ли лучше такая шина, или правильнее к каждой группе тянуть свой провод и соединять звездой? На выходе от МК я понятно по несколько linear buffers ставить планировал.
  6. Спасибо большое, за советы!!! Позвольте, пожалуйста, задать еще один вопрос вдогонку на эту же тему. У меня контакты для входа на каждый комплект из оптопар выведены на краю платы в виде отверстий. Эти платы стоят рядом друг с другом на расстоянии примерно по 7 мм друг от друга и образуют примерно 30 см блок, в котором параллельно стоят 40 таких плат. Управляющая плата стоит с торца (то есть до первой платы там всего 7мм, а до последней где-то 30см). Собранный кубик сфотографировать не могу, ибо он уже залит маслом и уже ничего не видно, а вот несколько плат из него прилагаю, они сфотографированы примерно также, как и они стоят в аппаратуре и контакты видны на торце. Слева на право там GND, 3.3V, fanout x160, fanout x20. Сейчас я проводками от каждой платы тянул до управляющей, и там все соединял. Так как управляющую все равно буду переразводить, я могу вместо 40 таких проводков сделать шину. То есть шина будет насквозь все эти платы пронизывать и у нее будет только два контакта питания, .этот пин на fanout x160 и несколько пинов для fanout x20. Как я понимаю, шина должна иметь меньше паразитной емкости. В то же время, если первые оптопары будут сильно линию просаживать, то до последних будет доходить много шума. Посоветуйте, пожалуйста, как правильнее - одна шина с общей длинной 30см, или 40 проводков с различной длиной 7-300мм? Спасибо!
  7. Огромное спасибо всем за очень важное для меня обсуждение! Поставлю два восьмибитных logic buffer на этот fanout, а также еще по такому буферу на каждый канал с fanout x20, и тогда все мои 160 оптопары должны будут успешно работать.
  8. ой, да, точно, спасибо, что заметили! тут у меня оптимизма совсем нет, так как еще 8 выходов того же контроллера попадают на ту же оптопару, но каждый пин с fanout x20, а еще другие 8 пинов тоже что-то по 2-3мА управляют. Суммарно МК может и захлебывается из-за этого. Похоже, что мосфет-драйверов на 3.3В нет, только логика. Скажите, пожалуйста, правильно ли я понимаю, что, в моем случае, было бы правильнее перейти на 5В питание МК, и тогда можно было бы использовать большой набор мосфет драйверов?
  9. Спасибо большое, MegaVolt и Herz советы!! Я пролистывал в мойсере buffer/line driver, но, повидимому на них не остановился из-за того, что у них выходной ток обычно 20-30мА, то есть даже меньше чем у моего МК. Скажите, пожалуйста, правильно ли я понимаю, что buffer/line driver от 5МГц и выше с током больше 30мА не бывает, и всяко я должен топологию звезда делать: то есть МК раздает на 10, а те, в свою очередь, каждый по 16. PS: потыкался еще осциллографом, получается, что если прижаться к ноге оптопары, то часто там какая-то чехорда идет, вместо сигнала, а вот с ноги МК - сигнал более менее похож на истину.
  10. Спасибо большое, за советы! вот я сам тоже об этом думаю, у меня получается, что все эти 160 пинов вначале объединяются примерно по 10 (от 6 до 14), и далее от каждой такой группы идут в виде 20 проводков почти в параллель. Далее по 10 они попадают на 2.54 колодку, в которой все пины на одном полигоне и уже эта пара идет на ногу МК. У МК рядом 3А DC-DC (TPS82130), который питает и МК, и питание оптопар, они при 1МГц когда их было 40, потребляли 400мА, а сейчас должны 1.6А потреблять, то есть на МК оставшиеся полтора ампера должны хватить. Осциллограф на питание МК ставил, визуально скачков не наблюдал. скажите, пожалуйста, а как такое правильно по-английски называется, а то вроде описание в гугле есть, что конкретно искать в farnell, mouser или digi-key - так и не смог понять. Спасибо!
  11. Добрый день, есть МК, к одной выходной ноге которого подключено N цифровых оптокоплеров (Si8620BD-B-IS). По даташитам с МК нога может до 40мА давать. Напряжение на МК и ноге 3.3В Раньше у меня было N=40 оптокоплеров, все работало классно и надежно. Недавно поменял и нарастил конструкцию, теперь стало N=160. Заметил, что про 10кГц все тоже надежно работает, а при 1МГц почти всегда есть пропуски. Если считать, что 1МГц и 40мА, при 160 оптокоплеров в параллель, то на каждый мне надо 250мкА или около 70пФ паразитной емкости. В даташите входной ток не нашел, паразитная емкость ноги на землю 3пФ. Гипотез две 1. у меня в проводах 70пФ набегает (там от МК до оптокоплеров примерно 30см), 2. либо таки сами оптокоплеры потребляют с пина около 250мкА. Скажите, пожалуйста, правильно ли я понимаю, что мне надо поставить какой-то повторитель, и, если да, то что? Мосфет драйвер на 3.3В вроде не бывает, а что еще может существенно больше 100мА дать на частоте где-то до 5МГц? Спасибо!
  12. Позвольте вдогонку задать ламерский вопрос в тему. А если в линуксе открыть браузер и рисовать все на javascript, прокинув коммуникацию на местный процесс (даже сервер стартовать локально не надо, только сокет зацепить). Как я понимаю, средства современного JS довольно хороши, если нужна быстрая графика то WebGL в помощь. Наружу сорсы не видны, внутри можно по крайней мере обфурсить. Все остальное - в выполнялке, и как я понимаю, все бесплатно. Понятно, что на очень слабом линуксе Qt наверное будет быстрее ездить, но если линукс не совсем тормознутый и 1ГБ оперативки есть, чем такой вариант будет существенно хуже Qt, и почему таких вариантов почти нет в готовых устройствах?
  13. Спасибо большое, всем помогавшим и сочувствовавшим! Пробовал и в конфиг параметры передать: ./configure --with-float-abi=hard и в Makefile make CFLAGS='-mfloat-abi=hard' и даже залинковать soft include на hard include и дописывал дополнительно -march=armv7-a, -mfpu=neon, а в одной из попыток попробовал поставить --disable-multilib все разы падает, иногда правда проходит дальше, но все равно собирается не правильно и вникают ошибки. Скажите, пожалуйста, правильно ли я понимаю, что единственное оставшееся решение собирать на обычном компе, то есть crosscompile, мне правда надо, чтобы компилятор после сборки работал на arm, то есть на самой плате de10-nano, то есть какая-то часть сборки-проверки рабочести компилятора должна быть опущена, так? Спасибо!
  14. пока именно этого и хотелось избежать, если не решится через линукс, то это наверное единственное решение...
  15. Добрый день, есть ембеддед линукс, вернее его вариант на DE10-Nano или DE0-Nano-SoC на нем стоит с очень стародавним репозитарием на http://feeds.angstrom-distribution.org/feeds/v2016.12/ в котором нет lapack/blas, и есть желание собрать gcc, по возможности новее (или какой получится) с исходников, но чтоб там точно был gfortran и не менее С++14. Пробовал gcc-10.2, gcc-9-3, gcc-linaro-7.5 собирать там, и кросскомпиллить на 20.04 убунте. Во всех случаях после пары часов сборки возникает ошибка: Гугление на эту ошибку приводит к тому, что надо установить -mfloat-abi=hard во время компиляции. Я пробовал собирать с такими флагами: дополнительно засовывал в Makefile в каждый вызов компилера '-mfloat-abi=hard' но падать не перестает. В репозитарии прикомпилленого gfortran нет, в linaro подходящего уже собраннного gcc, который содержит хотя бы c,c++,fortran - тоже нет. Пожалуйста, посоветуйте, что я делаю не так и куда правильно надо поместить эту опцию, чтобы избавитться от ошибки компилляции gcc c сорсов? Спасибо!
  16. Спасибо большое, за ответ! Да, я хочу как-то и, действительно, по возможности не отключая консоль. У меня в аппаратуре запланирована DE10-Nano борда и один супервизор на atmega2560 с ардуиновским загрузчиком. У этой DE10-Nano на борту и есть два выхода - один как ком-порт через ftdi232, а один - как полноценный USB OTG. Мне бы надо иметь возможность менять прошивку на atmega2560 с ардуиновским загрузчиком через avrdude. Подключить могу хоть на ftdi232, хоть на USB OTG. На на ftdi232 висит линукс консоль, и, похоже ее убить не очень просто. На USB OTG есть проблема с драйверами, борда видна в lsusb, но не видна в /dev/ttyACM0, то есть usb-devices показывает: и, понятно, avrdude ее не видет. А как через zmodem пустить avrdude, у него же какой-то свой протокол и avrdude его повидимому не поймет? Спасибо!
  17. Все-таки я что-то тут не понимаю... Переставил линукс на более свежий (вместо 2014 на 2016, более позднего вроде нет). Имею после выполнения консоль, повешенную на первый процесс: но никак не могу найти, где запустился init с такими аргументами. /etc/init.d как у всех нормальных линуксов у меня нет... Подскажите, пожалуйста, где искать, или подскажите, как поднять ком-порт на USB, как я вопрошаю в соседней ветке:
  18. так нету... и пока не понимаю, как поставить, так как systemctl | grep -i -n cdc дает пустоту, в то же время opkg list | grep -i cdc находит kernel-module-g-cdc и Ядро еще не компилил, ибо боюсь :) последний раз делал для PC в 1995 и многое с того времени забылось :( Скажите, пожалуйста, а можно как-то без перекомпилляции ядра обойтись, и, если да, скажите, пожалуйста, как? Спасибо! PS: Странно, еще раз перегрузил, получил дополнительно в dmesg но нужного /dev/ttyACM0 так и не появилось...
  19. Добрый день, имею DE10-Nano и, как написано в иструкции по ссылке https://www.glennklockwood.com/sysadmin-howtos/terasic-de10-nano.html я активировал OTG USB, повесил на него хаб и воткнул туда WiFi - и эта часть заработала. Теперь я хочу туда воткнуть обычную борду с 2560 атмегой, которая бы общалась с DE10-Nano через компорт. При втыкании имею в dmesg то есть как-то она распозналась, в lsusb она есть, но видна только по ID: а вот в /dev/ нет ни /dev/ttyACM0, ни /dev/ttyUSB0, да и вообще ничего не появляется, если втыкнуть и вытыкнуть. Как я понимаю, проблема в ядре, вернее модуле для ACM, но lsmod показывает: то есть usb_f_acm есть, но он почему-то ничего в /dev/ не генерит. Пожалуйста, подскажите, в каком направлении копать, чтобы получить /dev/ttyACM0! Спасибо!
  20. Спасибо большое, Eddy_Em!!! да, действительно, agetty убить можно, у меня удалось остановить респаун только через хотя пока так /dev/ttyS0 пока еще не работает, как я хочу, но, возможно, пока еще не все попробовал.
  21. Спасибо за ответ! Если бы все было бы так, яб не спрашивал... С консоли я запустить программу могу, но мне надо перенаправить получаемый ввод-вывод на char-device, так как другая программа только с таким char-device работать может...
  22. второй семестр нумерики любого ВУЗа по специальности "вычислительная математика" причём пройти на следующий уровень нельзя, если не умеешь такие задачи решать. Поэтому я реально не понимаю ТС, что он всячески уповает только на точность вычисления матриц, забывая что он возводит в квадрат обусловленность, пренебрегает оценкой разброса сингулярных чисел и согласованности правой части с левыми сингулярными векторами. В теме много ключевых слов вам насоветовали, но вы к ним не прислушиваетесь, а жаль, и, именно из-за этого вам и кажется, что вы "переоткрываете Америку".
  23. Добрый день, есть борда с yocto-linux (de10-nano или de0-nano-soc). У борды есть линукс консоль, которая зацеплена на COM порт. Хочется отключать консоль превращая ее в /dev/xxx для того, чтобы использовать этот девайс для загрузки прошивки в контроллере, который висит на этом ком-порте. В остальное время хочется, чтобы этот контроллер продолжал обычным образом видеть все, что есть на этой консоли - то есть как-бы одновременно быть супервизором линукса. Как я понимаю, могу запустить в этой консоле программу, которая небуфферизовано будет читать и писать stdio / stdout создать char-device вызвав int mknod(const char *pathname, mode_t mode, dev_t dev); но вот как я должен подцепить stdio на вход char-device и stdout на выход char-device - пока не понимаю. Пожалуйста, подскажите! Спасибо! ИИВ
  24. не верное утверждение, гуглите на методы регуляризации, в том числе Тихоновские, и читайте мои комментарии выше.