Pull to refresh
-2
0
Send message

Практическое применение преобразования Фурье для анализа сигналов. Введение для начинающих

Reading time9 min
Views285K

1. Преобразование Фурье и спектр сигнала


Во многих случаях задача получения (вычисления) спектра сигнала выглядит следующим образом. Имеется АЦП, который с частотой дискретизации Fd преобразует непрерывный сигнал, поступающий на его вход в течение времени Т, в цифровые отсчеты — N штук. Далее массив отсчетов подается в некую программку, которая выдает N/2 каких-то числовых значений (программист, который утянул из инета написал программку, уверяет, что она делает преобразование Фурье).

Чтобы проверить, правильно ли работает программа, сформируем массив отсчетов как сумму двух синусоид sin(10*2*pi*x)+0,5*sin(5*2*pi*x) и подсунем программке. Программа нарисовала следующее:

image
рис.1 График временной функции сигнала

image
рис.2 График спектра сигнала

На графике спектра имеется две палки (гармоники) 5 Гц с амплитудой 0.5 В и 10 Гц — с амплитудой 1 В, все как в формуле исходного сигнала. Все отлично, программист молодец! Программа работает правильно.

Это значит, что если мы подадим на вход АЦП реальный сигнал из смеси двух синусоид, то мы получим аналогичный спектр, состоящий из двух гармоник.

Итого, наш реальный измеренный сигнал, длительностью 5 сек, оцифрованный АЦП, то есть представленный дискретными отсчетами, имеет дискретный непериодический спектр.
С математической точки зрения — сколько ошибок в этой фразе?

Теперь начальство решило мы решили, что 5 секунд — это слишком долго, давай измерять сигнал за 0.5 сек.
Читать дальше →
Total votes 51: ↑46 and ↓5+41
Comments83

Определение области коллизии

Level of difficultyMedium
Reading time15 min
Views7.7K

Поиск контактных точек коллизии

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

Давайте же посмотрим как это сделать!

Поехали
Total votes 48: ↑48 and ↓0+48
Comments13

Приборы и материалы для чистки зубов (какая щётка лучше, например)

Level of difficultyEasy
Reading time14 min
Views35K
Вот это южнокорейская зубная щётка. Она в два раза длиннее обычной, потому что корейцы привыкли получать максимум эффекта на каждую потраченную вону. Теперь простой вопрос: может, стоит тоже купить такую, раз она больше? Можно будет чистить зубы быстрее или эффективнее?

image

Нет, не стоит. Лучше купить щётку с большим количеством щетинок, хотя бы 5 тысячами штук.

Такие щётки стоят в Москве 500–900 рублей в аптеках. Вот с ними реально одно движение может быть эквивалентно по эффекту 4–5 движениям обычной щёткой.

Следующий вопрос: а, может, купить электрическую или ультразвуковую? Возможно, но вместе с налётом вы будете счищать часть эмали или греть зубы.

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

Давайте разбираться, как лучше чистить зубы с позиции девайсов и здравого смысла.
Читать дальше →
Total votes 70: ↑65 and ↓5+71
Comments65

Выбор структур данных для самописного текстового редактора

Level of difficultyMedium
Reading time13 min
Views11K

Программирование текстовых редакторов может быть очень интересной и сложной задачей. Типы задач, которые должны решать текстовые редакторы, варьируются от тривиальных до невероятно трудных. Недавно я занимался переработкой внутренних структур данных редактора, над которым я работаю. В частности, самой фундаментальной для любого текстового редактора структуры данных: текста.

Ресурсы


Прежде чем мы приступим к разбору того, что я сделал, важно упомянуть очень полезные ресурсы для создания собственного текстового редактора:

  • Build Your Own Text Editor — наверно, самый фундаментальный пост о создании текстового редактора с нуля, который я видел. Это превосходный туториал на случай, если вы хотите начать писать собственный текстовый редактор. Стоит заметить, что в редакторе из этого туториала в качестве внутренней структуры для текста используется, по сути, вектор строк.
  • Text Editor: Data Structures — отличный обзор множества структур данных, которые можно использовать при реализации текстового редактора. (Спойлер: как минимум одна из них будет рассмотрена в моём посте)
  • Плейлист Ded (Text Editor) на YouTube — это потрясающая серия, в которой @tscoding фиксирует процесс создания с нуля текстового редактора. Эти видео стали для меня источником вдохновения.

Зачем?


Если в сети есть так много хороших ресурсов о создании собственного текстового редактора (не говоря уже о том, что уже существует множество феноменальных текстовых редакторов), то зачем я это пишу? На то есть несколько причин:

  1. Я хотел заняться проектом, непохожим ни на один свой прошлый.
  2. Я хотел создать инструмент, которым смогу пользоваться.
  3. Мне всегда хотелось глубже разобраться с созданием собственных структур данных.
Читать дальше →
Total votes 47: ↑46 and ↓1+58
Comments18

Как устроено распределение памяти

Level of difficultyMedium
Reading time11 min
Views25K

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

В этом посте я познакомлю вас с основами распределения памяти (memory allocation). Распределители памяти существуют, потому что иметь доступную память недостаточно, необходимо ещё и эффективно её использовать. Мы наглядно изучим, как работают простые распределители. Мы рассмотрим некоторые из задач, которые им необходимо решать, а также некоторые из методик, которыми они их решают. Прочитав этот пост, вы узнаете всё, что необходимо для написания собственного распределителя.
Читать дальше →
Total votes 56: ↑54 and ↓2+73
Comments6

Что для вас Linux? Или как устроен запуск процессов

Level of difficultyMedium
Reading time15 min
Views39K

Как бы вы ответили на вопрос, что такое операционная система?

Скорее всего, вы легко сможете ответить на этот вопрос человеку далекому от IT, но подобный вопрос вам может задать, например, HR - в попытке переманить вас в какой-нибудь Facebook или Google. С одной стороны, ответить на этот вопрос очень легко и в интернете можно найти много определений, но относится ли, например, конфигурация DNS и файл /etc/resolv.conf к ОС ? Или в какой области памяти работает ОС - в памяти с безграничными возможностями для кода, называемой kernel space, или все же в лимитированной user space?

На эти вопросы даже в этой статье вы не найдете однозначного ответа, и только вам решать, что для вас ОС, а что пользовательские приложения. Но в конце статьи я все же приведу свои аргументы, почему важно знать, как это работает, даже если вы сеньор программист/админ/девопс, проживший без этих знаний 35 лет и весьма успешно запустивший множество проектов. 

Читать далее
Total votes 78: ↑78 and ↓0+78
Comments20

Реализация двустороннего A* на двух потоках

Level of difficultyHard
Reading time10 min
Views5.4K

На Хабре можно найти немало статей, посвящённых оптимизациям поиска кратчайшего пути на графе. Я расскажу ещё про еще один подход. Речь пойдёт о распараллеливании алгоритма A* и исполнении его на двух потоках, а также о сложностях, с которыми я столкнулся при реализации, и их преодолении.

Читать далее
Total votes 56: ↑56 and ↓0+56
Comments35

Стохастический язык программирования на основе алгоритмов Маркова

Reading time13 min
Views27K

MarkovJunior — это вероятностный язык программирования, в котором программы являются сочетаниями правил перезаписи, а инференс выполняется при помощи распространения ограничений. MarkovJunior назван в честь математика Андрея Андреевича Маркова, придумавшего и исследовавшего то, что сейчас называется алгоритмами Маркова.
Читать дальше →
Total votes 139: ↑139 and ↓0+139
Comments24

Почему коптеры не летают долго?

Level of difficultyMedium
Reading time4 min
Views10K

Коптеры (мультироторные летательные аппараты) сейчас получили огромное распространение от игрушек до оружия или профессиональной видеосъемки. Оно и понятно — относительно простая конструкция; все базируется на инерциальной системе; 3,4 или больше пропеллеров — и полетел.

Но почему же коптеры не летают долго? Среднее время работы на одном аккумуляторе у большинства моделей не превышает 1го часа. Так в чем тут дело?

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

И так начнем.

Возьмем характеристику любого двигателя одного из самых популярных производителей моторов для коптеров компании T‑motor. Мне показался интересным мотор MN7005, просто потому что он подходил под мои задачи.

    

Читать далее
Total votes 17: ↑13 and ↓4+13
Comments119

Как программы общаются между собой

Level of difficultyMedium
Reading time9 min
Views16K

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

С развитием технологий, прошествием времени и увеличением масштабов ответить на этот вопрос становится всё сложнее.

Давайте совершим экскурс в историю и узнаем, как много было сделано и как мало изменилось.

Предупреждение: в статье я буду упрощать и жертвовать точностью ради понятности.
Читать дальше →
Total votes 39: ↑34 and ↓5+44
Comments8

Заблуждения программистов о тексте

Reading time11 min
Views19K


Возжелавший прильнуть к жанру вестернов обратится либо к десятой строчке топ-250 лучших фильмов по версии IMDb, либо уже будет обладать знанием, что начинать нужно с «Хороший, плохой, злой». Там он увидит жадных потных мужчин, которые заканчивают фильм напряжённым мексиканским противостоянием. Жалкая охота за золотом конфедератов разворачивается на фоне кровавых битв Гражданской войны между «Севером» и «Югом». Таким зритель запомнит вестерны как жанр.

В реальности «Хороший» — это не классика, а яркий представитель поджанра ревизионистских вестернов, снят в Европе и наоборот, критикует американскую идеологию направления. В нём нет ничего общего с картинами, где герой встаёт на защиту правильного и справедливого общества от злодеев или кровожадных индейцев. В пятидесятых и шестидесятых классический вестерн сошёл на нет, но в коллективном сознании критика быстро заместила критикуемый объект. Когда Марти Макфлай жалуется на анахронизм наряда, он сравнивает себя с антигероями Клинта Иствуда, а не бравыми ковбоями в исполнении Джона Уэйна.

Иногда нашему восприятию требуются корректировки. Собственные заблуждения необходимо не забыть при проектировании информационных систем. Помнить нужно о многом: для времени, карт и почтовых адресов получаются длинные списки. Для текста неожиданностей мало.

Заблуждение 1. Любые символы, кроме управляющих, имеют предсказуемую ширину


В реальности ширина символов может отличаться даже в моноширных шрифтах.
Читать дальше →
Total votes 95: ↑95 and ↓0+95
Comments51

Импортозамещение, которое мы потеряли: Советские прообразы цифровой трансформации, ERP и DSS в 50-х — 60-х (часть 1)

Reading time9 min
Views11K

Импортозамещение в ИТ, локальный российский тренд последних лет. На протяжении последнего года — это слово многократно звучало из каждого “утюга”. Причины — крупные западные вендоры, в силу геополитических причин, ушли из России. Это болезненно отразилось на промышленности и крупных компаниях, они потеряли доступ к покупке лицензий, поддержке, обновлениям ect. Больно терять ERP, DSS, цифровая трансформация промышленности и бизнеса в России, очевидно, замедлится. Распространено мнение, что опыт цифровой трансформации и автоматизации, а также разработка систем управления процессами предприятий начались в России в девяностые, а 1С, Галактика и Монолит выросли на ровном месте, но это не совсем так...

Читать далее
Total votes 40: ↑38 and ↓2+46
Comments18

Мини-дайджест FPV 2022

Reading time2 min
Views6.8K

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

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments4

Обмен данными по SPI между Raspberry Pi и Arduino

Reading time4 min
Views11K

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

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments22

Отечественная образовательная робототехника. Часть 2: Переклеивание шильдиков или самобытные решения?

Reading time5 min
Views6.9K

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

Читать далее
Total votes 13: ↑12 and ↓1+15
Comments78

Как завладеть сетью /16 с помощью libpcap и libdnet

Reading time16 min
Views12K

Всем привет. Сегодня я попытаюсь рассказать про сетевое программирование на довольно низком уровне, с библиотеками libpacp и libdnet. Про последнюю многие наверное и не слышали, т.к. информации о ней в сети фактически нет. А ведь её использует сам Fyodor :)
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments1

Немного деталей про грузовой беспилотник SWAN с газодинамической системой управления, вертикальным взлетом и посадкой

Reading time8 min
Views38K

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

Однако несколько лет назад родился проект грузового беспилотника SWAN, который взлетает, управляться и садится за счет этого и других аэродинамических эффектов, не используя поворотные сопла или иную механику.

Читать далее
Total votes 61: ↑57 and ↓4+70
Comments86

Пособие по программированию модулей ядра Linux. Ч.7

Reading time25 min
Views12K

Заключительная часть последней версии руководства по созданию модулей ядра от 02 июля 2022 года. Здесь мы рассмотрим обработку прерываний, криптографию, стандартизацию интерфейсов с помощью модели устройства, а также разберём принцип работы драйвера виртуального устройства ввода и возможность внесения в модуль некоторой оптимизации. В завершение же я укажу на пару неявных, но важных нюансов, а также дам рекомендации по дальнейшему погружению в тему программирования ядра.
Читать дальше →
Total votes 27: ↑26 and ↓1+40
Comments0

Проект Repka Pi — переклеивание этикеток или реальная разработка?

Reading time10 min
Views39K

Проект Repka Pi - переклеивание этикеток или реальная разработка?

Сайт проекта Repka Pi http://repka-pi.ru/

Статья с ответами на волну вопросов после первых анонсов проекта Repka Pi ещё задолго до выхода проекта на рынок и появления многочисленных тестов и обзоров.

Читать далее
Total votes 110: ↑97 and ↓13+110
Comments141
1

Information

Rating
Does not participate
Registered
Activity