18+
реклама
18+
Бургер менюБургер меню

Александр Иванов – Цифровая обработка сигналов на Python. От инженера к разработчику. (страница 3)

18

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

В седьмой главе мы перейдём к адаптивным алгоритмам — фильтрам, которые подстраиваются под изменяющийся сигнал. Мы реализуем LMS-алгоритм и применим его для подавления нестационарного шума и эхокомпенсации.

В восьмой главе мы займёмся анализом высоты голоса. Мы разберём несколько методов определения основного тона — от простой автокорреляции до кепстрального анализа — и напишем свой детектор pitch.

В девятой главе мы переключимся с анализа на синтез. Мы создадим звуки с нуля: аддитивный синтез, субтрактивный синтез, частотная модуляция, физическое моделирование струны. Мы напишем простой синтезатор на Python.

Как получить максимум от этой книги

Не просто читайте — программируйте. Открывайте редактор кода и набирайте примеры руками. Когда вы набираете код, а не копируете его, ваш мозг работает иначе — он запоминает и понимает. Когда вы копируете — он расслабляется.

Меняйте параметры. Если я пишу np.sin(2 * np.pi * 440 * t), попробуйте 880 вместо 440. Что изменилось? Почему? Такие маленькие эксперименты дают понимание, которое невозможно получить из текста.

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

Ведите конспект. Не просто читайте, а записывайте главные мысли своими словами. Когда вы переводите идею из текста книги в свои слова, вы присваиваете её. Она становится вашей.

Обсуждайте с другими. Если у вас есть друг или коллега, который тоже интересуется обработкой звука, читайте книгу вместе. Объясняйте друг другу сложные места. Объяснение другому — лучший способ проверить, действительно ли вы поняли.

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

Пара слов перед стартом

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

Цифровая обработка сигналов — это красивая область. Она соединяет математику, физику и программирование в единое целое. Она позволяет заглянуть внутрь звука и увидеть его структуру. Она даёт суперсилу: способность менять звук так, как вы хотите, а не так, как позволяет программа.

Эта суперсила доступна каждому. Она не требует дорогого оборудования или специального образования. Она требует только желания разобраться и готовности думать. Всё остальное я дам.

Поехали.

Глава 1. Звук как математика: сигналы, отсчёты и теорема, которую нельзя нарушать

«Когда ты понимаешь, как работает алгоритм, ты перестаёшь зависеть от того, кто его написал»

О чём эта глава

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

Эта глава даёт ответы на эти вопросы. Мы начнём с самого фундамента: что такое звук с физической точки зрения, как он распространяется в воздухе и как микрофон превращает его в электрический сигнал. Затем мы разберём два ключевых процесса, которые делают возможной цифровую запись: дискретизацию и квантование. Мы узнаем, почему частота дискретизации для компакт-дисков равна 44 100 Гц, а для телефонных разговоров — 8 000 Гц. Мы поймём теорему Найквиста-Шеннона — не как абстрактную математическую истину, а как практическое правило, нарушение которого приводит к слышимым и неприятным последствиям. Мы познакомимся с алиасингом — эффектом, который возникает, когда частота дискретизации слишком низкая, и научимся его избегать.

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

Что такое звук

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

Микрофон работает похоже. Внутри микрофона есть мембрана — тонкая плёнка, которая колеблется под воздействием звуковых волн. Эти колебания превращаются в электрический сигнал: напряжение на выходе микрофона меняется пропорционально звуковому давлению. Если подключить микрофон к осциллографу — прибору, который рисует график напряжения во времени, — мы увидим волну. Эта волна и есть аналоговый звуковой сигнал: непрерывная, плавная линия, которая поднимается и опускается в такт колебаниям воздуха.

У этой волны есть несколько важных характеристик. Первая — амплитуда. Это высота волны, то есть насколько сильно звуковое давление отклоняется от среднего значения. Амплитуда определяет воспринимаемую громкость звука: чем выше волна, тем громче звук. Вторая — частота. Это количество полных колебаний в секунду. Частота определяет высоту звука: чем больше колебаний в секунду, тем выше звук. Частота измеряется в герцах (Гц). Один герц — одно колебание в секунду. Человеческое ухо в среднем слышит звуки от 20 Гц (очень низкий бас) до 20 000 Гц (очень высокий писк). С возрастом верхняя граница снижается — многие взрослые не слышат звуки выше 15 000-16 000 Гц. Третья характеристика — фаза. Это положение волны в конкретный момент времени относительно начала цикла. Две волны одинаковой частоты и амплитуды могут быть сдвинуты друг относительно друга, и этот сдвиг влияет на то, как они складываются.

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

Дискретизация: делаем непрерывное прерывистым

Цифровой компьютер не может работать с непрерывными сигналами. Компьютер — существо дискретное. Он оперирует отдельными числами в отдельные моменты времени. Чтобы записать звук, нам нужно взять непрерывную звуковую волну и измерить её значение в определённые моменты времени. Этот процесс называется дискретизацией. Мы как бы фотографируем волну много раз в секунду, и каждая фотография — это одно число.

Количество таких измерений в секунду называется частотой дискретизации. Частота дискретизации 44 100 Гц означает, что мы измеряем звуковое давление 44 100 раз в секунду. Почему именно 44 100, а не круглые 40 000 или 50 000? Ответ даёт теорема, открытая Гарри Найквистом и Клодом Шенноном. Она гласит: чтобы точно записать и потом восстановить сигнал, частота дискретизации должна быть как минимум в два раза выше, чем самая высокая частота в этом сигнале.

Человеческое ухо слышит звуки примерно до 20 000 Гц. Значит, чтобы записать всё, что слышит человек, нужна частота дискретизации не менее 40 000 Гц. Разработчики компакт-дисков взяли 44 100 Гц — чуть больше, чем 40 000, с небольшим запасом. Почему именно 44 100, а не 44 000? Это связано с тем, что первые цифровые записи делались на видеомагнитофоны, и частота дискретизации выбиралась так, чтобы быть кратной частоте кадров видео. В Европе это было 25 кадров в секунду, и число 44 100 хорошо ложилось в этот формат. Так техническая необходимость определила стандарт, которым мы пользуемся до сих пор.