Pull to refresh
  • by relevance
  • by date
  • by rating

Основы цифровой обработки сигналов для самых маленьких

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

Читать дальше →
Total votes 33: ↑30 and ↓3 +27
Views 2.8K
Comments 13

Построение цифрового фильтра с конечной импульсной характеристикой

Algorithms *
Sandbox
Вступление издалека

Недавно передо мной встала достаточно интересная задача, с которой я раньше никогда не сталкивался — борьба с шумом. Мы принимали сигнал с датчиков на аналогово-цифровой преобразователь (АЦП)
А так как данная тема для меня была (хотя и сейчас есть кое-где) темным лесом, я пошел мучить вопросами гугл, мне показалось освещена эта тема не очень подробно и доступно, поэтому решил написать статью с примером разработки и готовым исходником.
Читать дальше →
Total votes 39: ↑36 and ↓3 +33
Views 109K
Comments 32

Сглаживание цифровых сигналов

Algorithms *
Sandbox

Введение


Данную статью меня заставил написать пост habrahabr.ru/post/183986, где не совсем правильно используется некоторый алгоритм сглаживания изображения.

Сразу перейдём к сути дела.

Математические модели цифровых сигналов — вектора и матрицы, элементами которых являются числа. Числа могут быть двоичными (бинарный сигнал), десятичными («обычный» сигнал) и так далее. Любой звук, любое изображение и видео могут быть преобразованы в цифровой сигнал1: звук — в вектор, изображение — в матрицу, а видео — в последовательный набор матриц. Поэтому цифровой сигнал — это, можно сказать, универсальный объект для представления информации.

Задача сглаживания — это, по сути, задача фильтрации сигнала от скачкообразных (ступенчатых) изменений. Считается, что полезный сигнал их не содержит. Ступенчатый сигнал за счёт множества резких, но небольших по амплитуде, перепадов уровня содержит высокочастотные составляющие, которых нет в сглаженном сигнале. Поэтому для некоторого алгоритма сглаживания в первую очередь необходимо определить как сильно ослабляются разные частотные составляющие. Другими словами, необходимо построить амплитудно-частотную характеристику соответствующего фильтра, иначе велика вероятность «нарваться» на артефакты.

Задача сглаживания может использоваться при прореживании сигналов, то есть когда, например, необходимо отобразить большую картинку на небольшой экран. Или когда частота дискретизации звука снижается, например, с 48000 Гц до 44100 Гц. Понижение частоты выборок — коварная операция, требующая предварительной обработки сигнала (низкочастотной фильтрации), но это — тема отдельного разговора…

Приведём пример «плохого» сглаживания


Казалось бы, обычное усреднение и сигнал на выходе должен быть «гладким». Но как определить, насколько он стал «глаже»? Не переборщили ли мы? А может быть некоторые коэффициенты выбрать не по 1/3? А может быть усреднить по пяти точкам? Как определить насколько ослабляются частотные составляющие в сигнале? Как найти свой (то есть для конкретной задачи) оптимум?
На эти и некоторые другие вопросы я постараюсь ответить так, чтобы «обычный» программист смог обосновать свой алгоритм, — надеюсь, не только алгоритм на тему «Сглаживание», так как идеи будут излагаться весьма общие, заставляющие думать самому
Читать дальше →
Total votes 38: ↑36 and ↓2 +34
Views 85K
Comments 31

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

Information Security *
Sandbox
Ежедневно в социальных сетях, на форумах и на различных сайтах появляется информация, как очередной пользователь современных технологий стал жертвой мошенников. А сколько постов написано об этом на Хабре, дополненных комментариями – можно неделю читать, как большую книгу по безопасности использования благ цивилизации. Но давайте зададимся простым вопросом: как ведет себя большинство потребителей этой информации? Ответ очевиден: читает, закрывает страницу и…забывает. Лишь небольшая часть пользователей пытается вынести урок из чужих ошибок, чтобы не повторять их. Но сознательных пользователей современных технологий так мало, что у меня почти нет сомнений – этот материал для многих откроет заново смысл ежедневных и привычных действий, опасности которых почти всегда игнорируются, хотя для сознательных пользователей в этом посте найдутся прописные истины.
Читать дальше →
Total votes 36: ↑13 and ↓23 -10
Views 8.3K
Comments 24

Борьба с мельницами — 1: интерполяционные сплайны

Abnormal programming *Algorithms *Mathematics *
В данной статье лирический герой бросает вызов оптимальной реализации классического полиномиального интерполятора Лагранжа (Фарроу), в процессе битвы случайно открывает и доказывает тривиальное никому не нужное математгическое заклинание, с помощью которого пытается потеснить противника, но по результатам всех раундов боя решением судей фиксируется ничья.

— Где вы видите великанов? — спросил Санчо Панса.
— Да вон они, с громадными руками, — отвечал его господин. — У некоторых из них длина рук достигает почти двух миль.
— Помилуйте, сеньор, — возразил Санчо, — то, что там виднеется, вовсе не великаны, а ветряные мельницы; то же, что вы принимаете за их руки, — это крылья: они кружатся от ветра и приводят в движение мельничные жернова.
— Сейчас видно неопытного искателя приключений, — заметил Дон Кихот, — это великаны. И если ты боишься, то отъезжай в сторону и помолись, а я тем временем вступлю с ними в жестокий и неравный бой…

Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Views 8.4K
Comments 5

Программирование&Музыка: понимаем и пишем VSTi синтезатор на C# WPF. Часть 1

Programming *.NET *Algorithms *
Sandbox

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


Я планирую несколько статей, в которых будет пошагово рассказано, как написать свой VST плагин/инструмент: программирование осциллятора, частотного фильтра, различных эффектов и модуляции параметров. Упор будет сделан на практику, объяснение программисту простым языком, как же все это работает. Теорию (суровые выводы и доказательства) обойдем стороной (естественно, будут ссылки на статьи и книги).


Обычно плагины пишутся на C++ (кроссплатформенность, возможность эффективно реализовать алгоритмы), но я решил выбрать более подходящий для меня язык — C#; сфокусироваться на изучении самого синтезатора, алгоритмов, а не технических деталей программирования. Для создания красивого интерфейса я использовал WPF. Возможность использования архитектуры .NET дала возможность библиотека-обертка VST. NET.


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



Предстоит нелегкий путь, если вы готовы — добро пожаловать под кат.


Total votes 55: ↑54 and ↓1 +53
Views 37K
Comments 19

Программирование&Музыка: ADSR-огибающая сигнала. Часть 2

Programming *.NET *Algorithms *

Всем привет!
Вы читаете вторую часть статьи про создание VST-синтезатора на С#. В первой части был рассмотрен SDK и библиотеки для создания VST плагинов, рассмотрено программирование осциллятора.
В этой части я расскажу про огибающие сигнала, их разновидности, применение в обработке звука. В статье будет рассмотрено программирование ADSR-огибающей для управления амплитудой сигнала, генерируемого осциллятором.
Огибающие есть в любом синтезаторе, применяются не только в синтезе, а повсеместно обработке звука.


Исходный код написанного мною синтезатора доступен на GitHub'е.



Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 9.9K
Comments 10

Программирование&Музыка: Частотный фильтр Баттервота. Часть 3

Programming *.NET *Algorithms *

Всем привет! Вы читаете третью часть статьи про создание VST-синтезатора на С#. В предыдущих частях был рассмотрен SDK и библиотеки для создания VST плагинов, рассмотрено программирование осциллятора и ADSR-огибающей для управления амплитудой сигнала.


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


Будет рассмотрен исходный код и применение эквалайзера из библиотеки NAudio (библиотека для работы со звуком под .NET).


Внимание — будет много матана — будем рассчитывать формулы для коэффициентов фильтра.


Исходный код написанного мною синтезатора доступен на GitHub'е.



Скриншот VST плагина-эквалайзера Fab Filter Pro Q


Читать дальше →
Total votes 30: ↑29 and ↓1 +28
Views 17K
Comments 11

Программирование&Музыка: Delay, Distortion и модуляция параметров. Часть 4

Programming *.NET *Algorithms *

Всем привет! Вы читаете четвертую часть статьи про создание VST-синтезатора на С#. В прошлых частях мы генерировали сигнал, применяли к нему амплитудную огибающую и фильтр частот.


В этот раз мы рассмотрим эффекты Distortion — искажение сигнала, знакомое любому электрогитаристу и Delay (оно же эхо).


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


Исходный код написанного мною синтезатора доступен на GitHub'е.



Скриншот VST плагина GClip


Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 8.6K
Comments 6

Программный синтез звука на ранних персональных компьютерах. Часть 1

Python *Programming *Algorithms *Reading room Sound
Это статья о первых программных синтезаторах, которые были когда-то созданы на самых обычных персональных компьютерах. Я даю несколько практических примеров по реализации простых методов звукового синтеза в историческом контексте.

Перейти ко второй части

Total votes 39: ↑38 and ↓1 +37
Views 16K
Comments 11

Программный синтез звука на ранних персональных компьютерах. Часть 2

Python *Programming *Algorithms *Reading room Sound
Это статья о первых программных синтезаторах, которые были когда-то созданы на самых обычных персональных компьютерах. Я даю несколько практических примеров по реализации простых методов звукового синтеза в историческом контексте.

Перейти к первой части

Total votes 24: ↑23 and ↓1 +22
Views 9.9K
Comments 35

Помехоустойчивое кодирование. Часть 1: код Хэмминга

Programming *
Sandbox


Код Хэмминга – не цель этой статьи. Я лишь хочу на его примере познакомить вас с самими принципами кодирования. Но здесь не будет строгих определений, математических формулировок и т.д. Эта просто неплохой трамплин для понимания более сложных блочных кодов.
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Views 47K
Comments 15

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

Computer hardware CPU Electronics for beginners
Одна из самых заметных проблем, с которыми сталкиваются разработчики встроенных систем, — это разнообразие технических требований к организации внешнего интерфейса ввода-вывода. Независимо от того, будь то Ethernet с оптическим или «медным» физическим уровнем передачи данных, аналоговый интерфейс или гигабитный последовательный интерфейс, разработчикам системы требуется набор средств для эффективного создания необходимого сочетания интерфейсов в вычислительной системе.


Мезонинный модуль стандарта FMC
Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 13K
Comments 7

Измерим гармонию — анализатор звукового спектра на STM32L4 Discovery

Gadgets Wearable electronics DIY
В предыдущей публикации мы подключали дешевый китайский LCD экран к плате STM32L4 Discovery. Теперь мы попробуем реализовать на этой комбинации что-то выходящее за рамки традиционного моргания светодиодом, а именно анализатор звукового спектра, который использует имеющийся на плате микрофон. Заодно я расскажу, как пользоваться операционной системой FreeRTOS, и зачем она нужна, а также почему в нотной октаве 12 нот, и чем 53 ноты лучше, чем 12.



Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Views 14K
Comments 14

Определение цифры на слух: реализация на Arduino

Programming *Developing for Arduino *Electronics for beginners
В этой статье я продолжу воплощать свое вдохновение лабораторной работой №3 уже в железе. Речь пойдет о детектировании цифры по звуку в тоновом режиме набора на Arduino с помощью алгоритма Герцеля.
Total votes 31: ↑30 and ↓1 +29
Views 11K
Comments 10

Преобразование Фурье. The Fast and the Furious

Algorithms *Mathematics *
Sandbox
Зачастую при разработке алгоритмов мы упираемся в предел вычислительной сложности, который, казалось бы, преодолеть невозможно. Преобразование Фурье имеет сложность $O(n^2)$, а быстрый вариант, предложенный около 1805 года Гаусом1 (и переизобретенный в 1965 году Джеймсом Кули и Джоном Тьюки) $O(nlog(n))$. В данной статье хочу вам показать, что можно получить результаты преобразования за линейное время $O(n)$ или даже достичь константной сложности $O(1)$ при определенных условиях, которые встречаются в реальных задачах.

Читать дальше →
Total votes 40: ↑37 and ↓3 +34
Views 21K
Comments 16

Учим компьютер различать звуки: знакомство с конкурсом DCASE и сборка своего аудио классификатора за 30 минут

Центр речевых технологий (ЦРТ) corporate blog Python *Machine learning *Sound
Sandbox

Статья написана совместно с ananaskelly.


Введение


Всем привет, хабр! Работая в Центре Речевых Технологий в Санкт-Петербурге, мы накопили немного опыта в решении задач классификации и детектирования акустических событий и решили, что готовы им с вами поделиться. Цель этой статьи — познакомить вас с некоторыми задачами и рассказать о соревновании по автоматической обработке звука “DCASE 2018”. Рассказывая вам о конкурсе, мы обойдемся без сложных формул и определений, связанных с машинным обучением, таким образом общий смысл статьи будет понятен широкой аудитории.


Для тех, кого в названии привлекла именно сборка классификатора, мы подготовили небольшой код на python, и по ссылке на гитхабе вы можете найти notebook, где мы на примере второго трека конкурса DCASE создаем простую сверточную сеть на keras для классификации аудиофайлов. Там мы немного рассказываем о сети и признаках, используемых для обучения, и как с помощью простой архитектуры получить близкий к baseline результат (MAP@3 = 0.6).



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

Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Views 5K
Comments 0

Курс лекций «Основы цифровой обработки сигналов»

Open source *Python *Algorithms *Mathematics *Matlab *
Всем привет!

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

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


Читать дальше →
Total votes 100: ↑100 and ↓0 +100
Views 100K
Comments 94

Реверс инжиниринг протокола активации Яндекс.Станции

Information Security *Programming *Reverse engineering *Gadgets


«Яндекс.Станция» — умная колонка с голосовым помощником Алиса. Чтобы её активировать, нужно поднести телефон и проиграть звук из приложения «Яндекс». Под катом я расскажу, как устроен этот сигнал, про пароль от WiFi в открытом виде и попробую развить идею передачи данных через звук.
Читать дальше →
Total votes 175: ↑171 and ↓4 +167
Views 48K
Comments 84
1