Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Определение частоты сердечных сокращений методом корреляции с использованием быстрых Фурье преобразований

Reading time4 min
Views3.9K

При обработке медицинских данных требуется определять частоту сердечных сокращений (ЧСС). Большинство методик расчёта ЧСС использует определение пиков в графике сердечных сокращений и подсчёта длительности интервала между пиками. Альтернативным методом расчёта ЧСС является вычисление корреляции последовательности измерений относительно сдвига графика на заданный интервал времении и выбор в качестве вычисленного интервала того, при котором корреляция максимальная. Недостатком вычисления интервала сердечных сокращений методом рассчёта корреляции является большое число вычислений, однако число этих расчётов можно существенно сократить при использовании быстрых Фурье преобразований (БФП).

Читать далее

Что такое доказательная медицина?

Reading time14 min
Views22K

Доктор Уолтер Фриман и Джеймс Уоттс планируют лоботомию, чтобы помочь человеку справиться с тревожностью.

Раньше врачам было отчасти проще. Если ты был достаточно уважаем и авторитетен, то никто не сомневался в твоих методах лечения. Если врач сказал, что надо регулярно устраивать кровопускания и прикладывать примочки на базе соединений ртути, то так и делали. Медицина постепенно развивалась, но до середины XX века методы лечения держались на авторитете отдельных известных учёных и их учеников. Ваша жена очень часто впадает в истерику и нервничает? Ребёнок постоянно капризничает? Не проблема, есть чудесные лоботомобили. Приедут домой и всё поправят.

Процедура заключалась в следующем: нож для колки льда вставлялся в глазницу пациенту. Лёгкий удар молотком по рукоятке пробивал орбитальную стенку. Затем Фриман водил ножом из стороны в сторону, разрушая лобные доли мозга. Метод, разумеется, эффективен, так как разработан уважаемыми людьми и рекомендовался «буйным», шизофреникам и людям, чьё поведение беспокоило окружающих. Люди из буйных становились тихими и покорными инвалидами. До 6% погибли во время операции.

Это уже сейчас у нас появились стандарты GMP, GTP, GCP, этические комитеты, двойные слепые плацебо-контролируемые исследования и всё остальное, что позволяет разрабатывать наиболее эффективные методы лечения. Сегодня мы будем говорить о клинических исследованиях и о том, как работает доказательная медицина:

  • Можно ли проводить эксперименты на людях и как это сделать этично.
  • Когда нельзя давать плацебо. История эксперимента с сифилисом.
  • Как проводятся клинические испытания.
  • Почему зелёнка — не лучший препарат.
  • Новые способы лечения эпилепсии, мигрени и других патологий.

Читать дальше →

Три архитектуры эльфам, семь гномам, девять людям… где же искать ту, что объединит их все?

Reading time60 min
Views32K

Проводится сеанс разоблачения магии (CISC, RISC, OoO, VLIW, EPIC, ...).
Без традиционной рубрики “а что, если” тоже не обошлось.

Добро пожаловать под кат, правда, лёгкого чтения ожидать не стоит.

Читать далее

Некоторые разработчики никогда не пройдут собеседование

Reading time6 min
Views96K

В нормальном состоянии префронтальная кора свободно осуществляет высокоуровневое мышление. При стрессе выделяется большое количество нейромедиаторов, которые активируют сети, связанные с миндалевидным телом (эмоции), блокируя префронтальную кору

Миша отличный программист. Для него сложная задача — как личный вызов. Он затихает, молча бродит с отсутствующим взглядом несколько дней… Пока его не прорвёт. Тут словно огонь загорается в глазах, парень светится как маньяк, и даже влюблённая девушка не вытянет его из кода поздним вечером. Реально гений.

Но есть проблема. Мишу трудно понять. Видно, что в голове куча мыслей и абстрактных концепций. Но выразить словами толком не получается. Все предложения словно кубики из разных конструкторов, которые никак не скрепляются в единое целое.
Читать дальше →

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views708K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →

C++20 Ranges — Полное руководство

Reading time8 min
Views43K

C++20 Ranges, также известная как STL v2, представляет из себя более эффективную замену существующих алгоритмов и технических средств STL. В этой статье мы пройдемся по изменениям, введенным Ranges (диапазоны/интервалы), обсудим представления (views), которые представляют собой новый подход к композиции алгоритмов, и рассмотрим примеры реализации FizzBuzz с использованием трех разных методов, в каждом из которых используются некоторые аспекты библиотеки Ranges.

Однако сразу следует отметить, что Ranges — это одна из фич, реализованных в C++ 20 в полуготовом состоянии. C++23 должен приблизить нас к полной поддержке всего задуманного в рамках Ranges. Поэтому в некоторых примерах будет использоваться библиотека range v3.

Читать далее

Создаём простейший проект для ПЛИС Lattice в среде Litex

Reading time16 min
Views7.7K

В предыдущей паре статей я рассуждал про ПЛИС Lattice. Давайте сегодня поговорим об эффективной разработке под них. Один наш крупный руководитель уверяет, что из разговоров с иностранными Заказчиками, он выяснил, что российских разработчиков считают пишущими классные вещи, но делающими это крайне медленно. Ну, разумеется, по сравнению с разработчиками из других стран. И разумеется, «классные» идёт на первом месте.

Один из методов обхода проблемы скорости разработки – использование готовой инфраструктуры для проектов. Я делал цикл статей про комплекс Redd, где продвигал использование готовой шинной инфраструктуры в среде разработки Quartus. Сначала это была честная процессорная система, потом – процессор мы изъяли, а шины – оставили.

Затем я делал пару циклов, где активно использовал данный подход. Мне приходилось дописывать только проблемно-ориентированные модули, остальное — среда разработки создавала за меня.

Есть ли что-то подобное для Lattice в частности и сцепки Yosys/NextPNR в целом? Вы не поверите! Решение не просто есть, но оно ещё и настолько кроссплатформенное, что подойдёт и для Yosys/NextPNR, и для Quartus, и для Vivado! И называется оно Litex. Итак, давайте попробуем поэкспериментировать с ним для подхода, который я уже давно продвигаю: «делаем штатную основу, а на неё нанизываем свои целевые блоки».

Читать далее

Базовые концепции аллокаторов

Reading time10 min
Views19K

Находясь в поисках какой-то агрегированной информации о стандартных приёмах, используемых при проектировании кастомных аллокаторов, я обнаружил, что существует достаточное количество статей о том, как аллокаторы работают в C++, каких-то базовых вариантах или наоборот очень специфических версиях, но ничего достаточно общего. Попался только замечательный доклад замечательного Андрея Александреску про неправильную архитектуру std::allocator и собственно базовые концепции построения своего нового самого крутого в мире аллокатора. Эта статья является довольно вольным переводом второй части его выступления с моими небольшими дополнениями. Конечно же, категорически рекомендую посмотреть оригинальный доклад, но, если вы любитель текстовых версий, прошу под кат.

Выделить знания...

Как я восстановил данные после форматирования, создания разделов и установки системы на «не том» жестком диске

Reading time12 min
Views116K

Здесь будет история о том, как я восстановил файлы и каталоги с жёсткого диска, который превратился в неразмеченную область, был частично отформатирован, разбит на новые разделы, на один из которых и была установлена новая система Linux. Если вам всё ещё интересно, вэлком под кат.
Читать дальше →

Как разработать микросхему, от идеи до результата. Часть 1. Теория

Reading time19 min
Views29K
Пока наши соседи по цеху спорят о конкурентоспособности Эльбруса, я продолжаю идти к своей заветной цели — склепать свой собственный Отечественный Процессор (TM). Ранее я рассказывал про программу, финансируемую Google, которая позволяет энтузиастам бесплатно получить прототип их разработок в кремнии. Если вы хотите увидеть всю подноготную процесса производства современных чипов, то этот туториал точно для вас!

Читать дальше →

Другой взгляд на многопоточность

Reading time7 min
Views23K

Вот уже в который раз хочется поднять тему многопоточного программирования. Сейчас я попытаюсь донести мысль, что если посмотреть на эту тему под другим - более простым, как мне кажется, углом, то она не будет казаться такой сложной и неприступной для начинающих. В этой статье будет минимум формализма и известных (и не очень) терминов.

Читать далее

Безопасно рисуем иконки в ПЗУ и ловим UB в C++ коде на IAR компиляторе

Reading time10 min
Views4.5K

Доброго времени суток хабровчане. Давненько я не писал, был довольно сильно занят семьей, начались тренировки и нужно каждый день возить детей. Но вот наконец-то есть время чтобы немного вспомнить про разработку ПО.

Сегодня будем выводить иконку на черной белый графический LCD — но это слишком простая задача. Потому что перед тем как её вывести, необходимо её нарисовать. Рисовать можно в Paint, потом использовать генератор, который переведет растровое изображение в код и использовать его для вывода на экран.

Но мы не ищем простых путей, поэтому иконку будем рисовать сами на С++ для CortexM4 микроконтроллера и сразу в ПЗУ, чтобы не зависеть от всех этих внешних программ, заодно и посмотрим как можно отловить ошибки в уже существующем коде (студентов), которые никто не заметил (даже PVS-Studio).

А еще некоторые компиляторы запрещают делать UB для кода исполняющегося во времени компиляции, поэтому можно отлавливать и UB. Например, мой IAR прекрасно ловит переполнения int. Но обо всем поподробнее.

Чтобы было просто — рисовать будем круг.

Читать далее

Code Review. 80 lvl

Reading time4 min
Views20K

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

Основными критериями качественного кода являются следующие: простота восприятия, гибкость для модификаций, возможность обновления, понятность, тестируемость. Однако зачастую работа над проектом ведется в спешке, под давлением и код пишется людьми с разным уровнем квалификации (с разным мышлением). И даже опытные разработчики не всегда пишут код самого высокого качества. Поэтому для повышения качества кода проводится процедура code review.

Читать далее

Что такое Strict Aliasing и почему нас должно это волновать? Часть 1

Reading time7 min
Views21K
(ИЛИ каламбур типизации, неопределенное поведение и выравнивание, о мой Бог!)

Всем привет, уже через несколько недель мы запускаем новый поток по курсу «Разработчик С++». Этому событию и будет посвящен наш сегодняшний материал

Что такое strict aliasing? Сначала мы опишем, что такое алиасинг (aliasing), а затем мы узнаем, к чему тут строгость (strict).

В C и C ++ алиасинг связан с тем, через какие типы выражений нам разрешен доступ к хранимым значениям. Как в C, так и в C ++ стандарт определяет, какие выражения для именования каких типов допустимы. Компилятору и оптимизатору разрешается предполагать, что мы строго следуем правилам алиасинга, отсюда и термин — правило строгого алиасинга (strict aliasing rule). Если мы пытаемся получить доступ к значению, используя недопустимый тип, оно классифицируется как неопределенное поведение (undefined behavior — UB). Когда у нас неопределенное поведение, все ставки сделаны, результаты нашей программы перестают быть достоверными.

К сожалению, с нарушениями строго алиасинга, мы часто получаем ожидаемые результаты, оставляя возможность того, что будущая версия компилятора с новой оптимизацией нарушит код, который мы считали допустимым. Это нежелательно, стоит понять строгие правила алиасинга и избежать их нарушения.



Чтобы лучше понять, почему нас должно это волновать, мы обсудим проблемы, возникающие при нарушении правил строго алиасинга, каламбур типизаций (type punning), так как он часто используется в правилах строгого алиасинга, а также о том, как правильно создавать каламбур, наряду с некоторой возможной помощью C++20, чтобы упростить каламбур и уменьшить вероятность ошибок. Мы подведем итоги обсуждения, рассмотрев некоторые методы выявления нарушений правил строго алиасинга.
Читать дальше →

Модные видео гличи на C++

Reading time5 min
Views6K

В этой статье рассказывается о способах создания видео фильтров на C++ для разных программ, а так же тут рекламируется моя опенсорс программа SEZE II с интересными эффектами на подобии пиксельной сортировки, эмулятора аналогового ТВ, случайного 3-битного дизеринга и прочим

Читать далее

Мифы про аутизм и вещи, которые можно сделать вовремя, если знать

Reading time15 min
Views35K


Привет, Хабр! Я врач-невролог, и ко мне часто попадают пациенты с РАС или подозрением на РАС. Поскольку я детский невролог, то занимаюсь детьми и подростками. Пожалуй, из всего спектра моей работы именно аутизм больше всего подвержен разным выдумкам и мифам как среди пациентов, так и среди специалистов. В последние годы появилось немало новых научных исследований с хорошими уровнями достоверности, которые меняют представление о том, что можно сделать, а что — нет. И поэтому давайте разберём основные мифы.

Первое и главное — ранняя диагностика до двух лет позволяет иногда очень сильно скомпенсировать возможные последствия.

Второе — люди нередко считают, что РАС — «бесперспективный» диагноз. Это уже давно не так, и есть состояния, при которых правильная и своевременная помощь специалистов может очень хорошо помочь даже во взрослом возрасте.

В общем, давайте я расскажу, с чем часто сталкиваюсь в работе, и попробую объяснить, чем на самом деле можно помочь пациентам с РАС. Ниже будут список мифов и разбор каждого из них.
Читать дальше →

Осваиваем кросс-компиляцию с помощью Clang и LLVM

Reading time21 min
Views28K

Каждый, кто когда-либо пробовал собрать программу на C/C++ через кросс-компиляцию знает, насколько болезненным может быть этот процесс. Главными причинами столь печального положения вещей являются недружелюбность систем сборки при конфигурации кросс-компиляции, а также запутанность процесса настройки набора утилит (тулчейна).


Одним из основных виновников этих проблем, по моему опыту, является тулчейн GNU — древний мамонт, на котором много десятилетий строится весь мир POSIX. Подобно многим компиляторам былых времён, семейство GCC и binutils никогда не ориентировалось на поддержку множества различных целей сборки в одной установке, и единственным способом хоть как-то добиться желаемого была настройка полной кросс-билд-системы для каждой целевой платформы на каждом хосте.

Читать дальше →

Стратегии оптимизации HDL-кода и синтезатора нетлиста для FPGA

Reading time22 min
Views7.3K

В статье будет рассмотрена работа синтезатора нетлиста, его возможности по оптимизации кода и трудности, с которыми он может столкнуться. Показаны две техники написания кода логических схем на Verilog в зависимости от преследуемых целей оптимизации проекта на этапе синтеза. А также разбор некоторых настроек синтезатора Xilinx Vivado, которые призваны пытаться оптимизировать логическую схему за разработчика. В конце мы возьмём модуль, который попробуем привести к рабочему состоянию исключительно за счёт возможностей синтезатора.

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

Читать далее

Структуры данных: двоичная куча (binary heap)

Reading time4 min
Views252K
Двоичная куча (binary heap) – просто реализуемая структура данных, позволяющая быстро (за логарифмическое время) добавлять элементы и извлекать элемент с максимальным приоритетом (например, максимальный по значению).

Для дальнейшего чтения необходимо иметь представление о деревьях, а также желательно знать об оценке сложности алгоритмов. Алгоритмы в этой статье будут сопровождаться кодом на C#.

Введение


Двоичная куча представляет собой полное бинарное дерево, для которого выполняется основное свойство кучи: приоритет каждой вершины больше приоритетов её потомков. В простейшем случае приоритет каждой вершины можно считать равным её значению. В таком случае структура называется max-heap, поскольку корень поддерева является максимумом из значений элементов поддерева. В этой статье для простоты используется именно такое представление. Напомню также, что дерево называется полным бинарным, если у каждой вершины есть не более двух потомков, а заполнение уровней вершин идет сверху вниз (в пределах одного уровня – слева направо).



Читать дальше →

Костыли и колеса (не от велосипеда) — как я структурировала прием таблеток

Reading time5 min
Views9.8K

Так уж получилось, что в последнее время я много и долго болею ?

Мой стандартный способ лечения "если простуду лечить — она пройдет за 7 дней, а если не лечить — за неделю" перестал работать (ох уж эта старость).

Пришлось обращаться к врачу и прибегать к особенному лечению.

Под особенным лечением — я имею ввиду гигантский список из таблеток, уколов и других препаратов со всякими особенностями.

Запомнить это все невозможно - поэтому пришлось визуализировать с помощью костылей и велосипедов.

Читать далее

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux