Pull to refresh
16
0
Вячеслав Мезенцев @ViacheslavMezentsev

Инженер-программист

Send message
Для получения данных о положении руки, в работе используется плоскостная электромиография: отслеживание биопотенциалов, характерных для активности мышц предплечья. Для классификации: специально обученная глубокая нейронная сеть Inception v3. Суть работы в создании программно-аппаратного комплекса для перевода жестов в слова на основе получения и анализа ЭМГ-сигнала. Устройство для получения и обработки электромиограммы построено на основе микроконтроллера PSoC 5LP, классифицирующая нейросеть обучена и развёрнута на облачном сервере.
Итого:
— технический английский на уровне чтения текстов по электромиографии и радиоэлектронике;
— радиоэлектроника (аналоговая и цифровая — датчики там явно не напрямую к мк идут);
— архитектура ARM и я так полагаю, что C/C++;
— цифровая обработка сигналов;
— глубокие нейронные сети + их обучение;
— использование облачных вычислений.

Может стоит вернуться в школу?
Спасибо Носкову Владиславу Юрьевичу (Google Scholar, v.j.noskov[собакен]urfu.ru), за неоценимые советы по разработке общей структуры программно-аппаратного комплекса, советы по отладке отдельных частей системы к тому виду, в котором она функционирует сейчас.
Надо преподавателя премировать за умение объяснить и показать как надо.
После школы я хотел бы поступить в университет международного уровня, что бы иметь возможность продолжать свои исследования, сотрудничая с другими молодыми инженерами и учёными со всего мира, в чём мне, возможно, также поможет участие в этом конкурсе!
Выиграть у других помог препод из УПИ. Я надеюсь он его называет теперь универом международного уровня.
Дополнительные материалы для начинающих.

Курс видеоуроков на youtube: Основы ЦОС в Matlab (2018).

Можно скачать целиком (update.lst для возможной докачки):
youtube-dl.exe --download-archive update.lst --ignore-errors -f best -o "%%(title)s.%%(ext)s" https://www.youtube.com/playlist?list=PLmu_y3-DV2_kpP8oX_Uug0IbgH2T4hRPL
Может быть интересным разложение в ряд Фурье при помощи метода БПФ. В качестве домашнего задания можно вывести соответствие между спектральными компонентами и коэффициентами ряда.

image
Простой тест. Сохраните код в текстовом файле Crc16.cs.cmd и запустите этот скрипт.

/*  
@echo off && cls 
set dotnet=%windir%\Microsoft.NET\Framework
for %%n in (2.0.50727,3.5,4.0.30319) do if exist "%dotnet%\v%%n\csc.exe" set csc="%dotnet%\v%%n\csc.exe"
( %csc% /nologo /out:"%~0.exe" %0 && "%~0.exe" ) && del "%~0.exe" 
exit
*/  
using System;
using System.Collections.Generic;

class Program
{
    public static byte[] Crc16( byte[] bytes )
    {
        int hi = 0xFF, lo = 0xFF;

        foreach ( var t in bytes )
        {
            var b = ( byte ) ( lo ^ t );

            lo = hi; hi = b;

            if ( ( hi & 0x01 ) != 0 ) { hi ^= 0x02; lo ^= 0x40; }
            if ( ( hi & 0x02 ) != 0 ) { hi ^= 0x04; lo ^= 0x80; }
            if ( ( hi & 0x04 ) != 0 ) hi ^= 0x09;
            if ( ( hi & 0x08 ) != 0 ) hi ^= 0x12;
            if ( ( hi & 0x10 ) != 0 ) hi ^= 0x24;
            if ( ( hi & 0x20 ) != 0 ) hi ^= 0x48;
            if ( ( hi & 0x40 ) != 0 ) hi ^= 0x90;
            if ( ( hi & 0x80 ) != 0 ) { hi ^= 0x20; lo ^= 0x01; }
        }

        return new [] { ( byte ) lo, ( byte ) hi };
    }
        
    static void Main( string[] args )
    {
        var query = new List<byte> { 0x01, 0x03, 0x00, 0x02, 0x00, 0x01 };

        query.AddRange( Crc16( query.ToArray() ) );

        Console.WriteLine( BitConverter.ToString( query.ToArray() ) );

        Console.ReadKey();
    }    
}

Результат должен быть таким:

01-03-00-02-00-01-25-CA
На c# код может выглядеть так:

public static byte[] Crc16( byte[] bytes )
{
    int hi = 0xFF, lo = 0xFF;

    foreach ( var t in bytes )
    {
        var b = ( byte ) ( lo ^ t );

        lo = hi; hi = b;

        if ( ( hi & 0x01 ) != 0 ) { hi ^= 0x02; lo ^= 0x40; }
        if ( ( hi & 0x02 ) != 0 ) { hi ^= 0x04; lo ^= 0x80; }
        if ( ( hi & 0x04 ) != 0 ) hi ^= 0x09;
        if ( ( hi & 0x08 ) != 0 ) hi ^= 0x12;
        if ( ( hi & 0x10 ) != 0 ) hi ^= 0x24;
        if ( ( hi & 0x20 ) != 0 ) hi ^= 0x48;
        if ( ( hi & 0x40 ) != 0 ) hi ^= 0x90;
        if ( ( hi & 0x80 ) != 0 ) { hi ^= 0x20; lo ^= 0x01; }
    }

    return new [] { ( byte ) lo, ( byte ) hi };
}
У меня нет нормальной зарядки, точнее одна была, да сдохла. На картинке вижу хорошую штуку. Видимо зарядка не только может заряжать, но и выступать в качестве powerbank'а от разного типа батареек. Да, именно такую штуку в поход хочу. Хорошо бы ещё 4 батарейки можно было вставлять и 2 USB выхода иметь :)
В походе обычно рации и фонарики питаются от AAA, а вот навигатор — AA. Можно было бы остатки батареек собрать и телефон зарядить. Это бывает важно.
Это на самой акб написано: зарядный ток и время заряда при этом токе (прямо на батарее AA). Сам я заряжал при помощи навигатора (Garmin GPSMAP64), где указывается тип акб. Оставлял на ночь включенным дома. Использовал какой-то имеющийся ИБП с usb выходом. Ток естественно не контролировал, поэтому и не знаю сколько нужно реально его заряжать, чтобы потом целый день использовать. Сначала пробовал пару часов, но потом понял, что этого мало при зарядке от навигатора.
Сам же я хочу купить какое-то устройство, которым можно было бы регулировать параметры заряда. Либо powerbank какой-нибудь, который умеет это делать и показывать токи, напряжения и температуру.
Да, отдельный логгер тоже нужен, но как чёрный ящик. Он должен быть настраиваемым, чтобы не писать всё подряд. В спортивных горных походах бывает очень важным не столько ориентирование, сколько безопасное оптимальное ориентирование. Даже 100 м, которые вы прошли, выбрав неправильное направление, могут создать опасность для всей группы. Чем выше категория, тем выше цена ошибки. Со временем ошибки накапливаются.
Недавно был в Восточной Дигории (Сев. Осетия). Там во второй половине дня выше 2000 м стабильно ходили в тумане (межсезонье). Без навигатора делать вообще нечего.
Я тестировал параллельно спец. фитнес часы и смартфон на Android. И тот и другой смогли записать полный трек на весь поход. И для этого достаточно было просто powerbank'а. Но пользоваться ими неудобно. Т.е. в принципе дело идёт у тому, что должны появиться устройства с малым потреблением и удобством специального, которого бы хватило на весь поход. Увы, но рынок порешал, что либо фитнес трекеры и телефоны, либо прожорливые тупые навигаторы.
Да, пишу полный трек для статистики. Навигатор всегда включен. Там, где мы ходим в горных походах, лучше держать навигатор в работе. Это для руковода. После похода удобно, когда у тебя есть полный трек с метками времени. Можешь восстановить полную картину за 2+ недели для каждого дня. Не всегда есть возможность писать летопись по объективным причинам.
Интересует такой момент как время заряда до определённой ёмкости при определённом токе :)
Хожу в горные походы. Для навигаторов Garmin таскаем с собой пару AA на каждый день (зимой и летом). Это лишний вес, т.к. приходится таскать около 15 и более пар батареек. Есть желание попробовать аккумуляторы AA, т.к. powerbank'и тоже у многих есть. В принципе, летом я протестировал в реальном походе одну пару аккумуляторов (Duracell, 1.2 В, 2500 мАч, 16 ч/250 мА), но только 1 день, т.е. до разряда. Хотелось бы теоретически рассчитать есть ли какой смысл вообще использовать аккумуляторы вместо батареек с учётом реалий похода. Там есть некоторые ограничения и особенности. Например, обычно заряжаешь что-то ночью, но явно не 16 ч, как это рекомендуется на аккумуляторе (зимой ночь правда длиннее). Хочу вот прикинуть на сколько зарядов хватит современных powerbank'ов, чтобы зарядить пару AA аккумуляторов. По моим прикидкам 20000 мАч вроде бы хватает на 3 неполных заряда. Т.е. на данный момент смысла большого нет, т.к. навигаторы (Garmin) очень прожорливы. Но прогресс не стоит на месте. Некоторые часы и смартфоны уже могут соревноваться с профессиональными навигаторами, в т.ч. по времени работы (проверял в походе).

Для ПВД уже видно, что использовать можно. Заряжаешь powerbank и акб. Не нужно постоянно покупать батарейки (дома они уже килограммами лежат). Но это на пару дней.

Кстати, температура тоже важна. Хорошо бы указывать её для заряда и разряда. Зимние условия навигации быстро садят батарейки. Хотелось бы знать какие живут дольше в диапазоне от -15 °C до -30 °C. Или хотя бы для -20 °С (в среднем).
Честно говоря, так и не понял про что это. Реальные сигналы от отдельных телескопов заменены модельными навигационными сигналами со спутников? Где именно происходит мат. обработка? Ведь сигналы от отдельных телескопов значительно удалены. Их оцифровывают перед обработкой? Тогда на каком этапе? Могу предположить, что после гетеродинирования на одну из доступных для дискретизации частот.
Т.е. должны быть сырые оцифрованные данные, которые поступают в некий центр обработки? Где их уже «коррелируют» с использованием метода БПФ. А для чего нужна корреляционная функция? Чтобы сдвиг по времени между двумя сигналами посчитать? А для чего? Чтобы улучшить отношение сигнал/шум?
По-моему, в статье не хватает некоторого охвата сверху. Т.е. как именно получаемая «картинка» от телескопа связана с описанным алгоритмом.
А если сравнить с предложениями работодателей в городах :) Что-то таких цифр я не видел нигде кроме Москвы и дальнего забугорья. Думаю, что для реальности картины нужно разделить всю статистику напополам.
Выбрал спортивный горный туризм. Развивает не только тело. Подготовка к походам (ПВД) позволяет взглянуть на мир вокруг места жительства. Получаешь разносторонние навыки: готовка еды, установка/сборка лагеря, выбор современной спортивной одежды/обуви, ориентирование на местности (карта, навигатор), разработка маршрута, первая мед. помощь, для чего нужны разные таблетки, осваиваешь разный спортивный инвентарь, фото-/видео-технику. Всегда есть куда расти и с кем.
Более того, регистр передачи данных Modbus является 16-битным, что сразу же накладывает ограничения на передачу типов real и double. Они передаются либо по частям, либо с потерей точности

Писать надо: real и lreal (в языках МЭК), либо float и double (C/C++). Сам modbus не ограничивает точность передаваемых данных. Что передаёте — то и получаете.
Жаль только, что Bascom AVR платный для таких применений (когда объём кода больше 4К, насколько я помню).
Тоже баловался переключателем задач для Bascom AVR. Дальше дело не пошло.
Тестировал виртуально всё.
Чем Rider не устраивает?
Так это мечты, а в реальности нужна поддержка C++/CLI и решений вперемешку (C#, C++/CLI). Думается, что только студия это умеет.

Какой производительности по сравнению с плюсами там не хватает?
Такой, чтобы применять в embedded проектах на Linux'ах, например. Пробовали и отказались в пользу Qt
Не пробовал. В идеале хочется иметь одну Visual Studio и всё остальное, написанное на одном языке и везде работающее. Мечты.
Жаль только, что C# не настолько быстродействующий как C/C++. Между прочим, некоторые конверторы с фортрана на C# очень хорошо себя показали (DotNumerics).

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity