Цифровая обработка сигналов на Python. От инженера к разработчику.
Цифровая обработка сигналов на Python. От инженера к разработчику.

Полная версия

Цифровая обработка сигналов на Python. От инженера к разработчику.

Язык: Русский
Год издания: 2026
Добавлена:
Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
1 из 3

Цифровая обработка сигналов на Python. От инженера к разработчику.

***


© А. В. Иванов, текст, 2026

Предисловие

Почему я написал эту книгу

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

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

Я решил разобраться. Я достал старые учебники по цифровой обработке сигналов. Раскрыл. Увидел те же формулы, что и в университете. Закрыл. Открыл снова. На этот раз я не просто читал — я писал код. Каждую формулу я переводил на Python и смотрел, что она делает с реальным звуком. Интеграл становился суммой в цикле. Комплексная экспонента — массивом чисел. Абстрактная теорема — экспериментом, который можно услышать.

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

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


Чем эта книга отличается от других

Существуют отличные учебники по цифровой обработке сигналов. Они строги, полны и математически точны. Но они написаны для математиков и будущих учёных. Они предполагают, что читатель уже владеет высшей математикой на хорошем уровне и готов воспринимать информацию через формулы. Для большинства людей, которые хотят обрабатывать звук — музыкантов, звукорежиссёров, разработчиков аудиософта, — такой подход не работает. Формулы пугают. Абстрактные доказательства кажутся не имеющими отношения к реальности. Читатель бросает книгу на третьей странице и идёт искать туториал на YouTube.

Существуют отличные практические руководства. Они показывают, какую функцию вызвать и какие параметры передать. Они дают результат быстро. Но они не дают понимания. Когда что-то идёт не так — а в обработке звука что-то всегда идёт не так, — читатель остаётся беспомощным. Он знает рецепт, но не знает, почему рецепт работает. Он не может адаптировать его под свою ситуацию.

Эта книга идёт по третьему пути. Я объясняю теорию — но не как лекцию, а как диалог. Каждое новое понятие вводится через вопрос: «Зачем это нужно? Какую реальную проблему это решает?» Затем я даю интуицию — метафору или аналогию из повседневной жизни, которая делает идею понятной до всяких формул. Затем я показываю формулу — но не как истину с неба, а как естественное развитие идеи. Затем мы пишем код, который реализует эту формулу, и смотрим на результат. Работает ли он? Похож ли результат на то, что мы ожидали? Если нет — почему?

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

Как устроена эта книга

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

Со второй по четвёртую главу мы изучаем преобразование Фурье и его вариации. Это главный инструмент анализа звука. Мы пройдём путь от наивного дискретного преобразования Фурье, которое работает медленно, к быстрому алгоритму Кули-Тьюки, который изменил мир. Мы разберёмся с оконными функциями, утечкой спектра и кратковременным преобразованием Фурье, которое лежит в основе спектрограмм.

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

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

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

В девятой главе мы сменим направление и займёмся синтезом звука — созданием звуков с нуля с помощью Python.

Каждая глава следует единой структуре. Сначала я показываю проблему и даю интуицию. Затем мы разбираем теорию шаг за шагом, без пропусков и без «очевидно, что». Затем пишем код. Затем смотрим, что может пойти не так — и как это исправить. Затем я даю творческое задание для самостоятельного исследования. И в конце — чек-лист для самопроверки.

Что вам понадобится

Для работы с книгой вам нужен компьютер с Python версии 3.9 или выше. Все необходимые библиотеки — numpy, scipy, librosa, soundfile, matplotlib — бесплатны и устанавливаются одной командой. В первой главе я покажу, как всё настроить.

Вам понадобятся базовые знания Python. Вы должны понимать, что такое переменная, функция, список, цикл for и условный оператор if. Вы должны уметь открыть файл в редакторе кода и запустить скрипт из командной строки. Этого достаточно. Всему остальному я научу.

Вам понадобится готовность думать. Эта книга не для пассивного чтения. Вы будете писать код, экспериментировать, ошибаться и исправлять ошибки. Это нормально. На ошибках учатся быстрее, чем на успехах. Если что-то не получается с первого раза — вы на верном пути.

Вам понадобится любопытство. Желание заглянуть под капот и понять, как всё устроено. Если вы из тех людей, кто в детстве разбирал игрушки, чтобы посмотреть, что внутри, — эта книга для вас. Цифровая обработка сигналов — это разобранная на детали аудиовселенная. И она потрясающе красива.

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

Введение. Почему понимать — это выгодно

О чём эта книга

Возьмите любую программу для обработки звука. Откройте в ней эффект шумоподавления. Вы увидите ползунки с названиями: «Порог», «Соотношение», «Атака», «Релиз». Вы двигаете их туда-сюда, слушаете результат и в какой-то момент думаете: «Вроде неплохо». Но понимаете ли вы, что именно вы сделали? Можете ли вы предсказать, как поведёт себя этот эффект на другой записи, с другим типом шума, с другим голосом? Можете ли вы объяснить другому человеку, почему ползунок «Порог» нужно поставить именно в это положение, а не на пять делений левее?

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

Эта книга написана для того, чтобы вы перестали угадывать и начали управлять. Чтобы вы понимали не только «что делать», но и «почему это работает». Чтобы вы могли не просто применить готовый алгоритм, но и написать свой, заточенный под вашу конкретную задачу. Чтобы вы перешли с уровня пользователя на уровень создателя.

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

Теперь мы пойдём на оружейный завод. Мы разберёмся, как устроены патроны, порох и ствол. Мы поймём физику выстрела и баллистику пули. И в результате мы сможем не только стрелять — мы сможем создавать оружие под себя.

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

Для кого эта книга

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

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

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

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

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

Существует множество книг по цифровой обработке сигналов. Почти все они делятся на две категории. Первая — академические учебники. Они полны формул, интегралов, доказательств теорем. Они строги, точны и абсолютно непригодны для самостоятельного изучения обычным человеком. Если вы не сидите в университетской аудитории с профессором, который объясняет каждый шаг, вы застрянете на третьей странице. Я знаю это, потому что сам застревал. Я инженер, я люблю математику, но академические учебники по ЦОС вызывали у меня желание биться головой о стол.

Вторая категория — практические руководства. Они говорят: «Вот библиотека, вот функция, вызовите её с такими-то параметрами, получите результат». Они не объясняют, что внутри функции. Они не дают понимания. Они дают рецепты. И когда рецепт перестаёт работать в ваших условиях — а он обязательно перестанет, потому что универсальных рецептов не бывает, — вы остаётесь беспомощны. Вы не можете адаптировать рецепт, потому что не понимаете, как он устроен.

Эта книга идёт по третьему пути. Она объясняет теорию — но не через формулы и доказательства, а через метафоры, визуализации и код. Она даёт практические навыки — но не через готовые рецепты, а через написание алгоритмов с нуля. Вы будете не просто читать о быстром преобразовании Фурье — вы напишете его сами. Вы будете не просто знать, что такое КИХ-фильтр — вы создадите свой фильтр и проверите его на реальном звуке. Теория и практика идут рука об руку, и ни одна не забегает вперёд.

Как устроена эта книга

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

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

Главы можно читать последовательно — каждая следующая опирается на предыдущие. Но можно и выборочно — если вас интересуют конкретно фильтры или конкретно синтез звука, открывайте нужную главу. Я постарался сделать изложение максимально связным, но при этом каждую главу можно изучать как самостоятельный модуль.

Что вам понадобится

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

Вам понадобится базовое знакомство с Python. Вы должны знать, что такое переменная, функция, список, цикл for, условный оператор if. Если вы этого не знаете — прочитайте первые две главы нашей первой книги, там это объяснено с нуля. Этого достаточно.

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

Вам понадобится привычка экспериментировать. Код в этой книге — не священное писание. Это приглашение к игре. Меняйте параметры. Ломайте алгоритмы. Смотрите, что получается. Лучший способ понять, как что-то работает — это сломать это и посмотреть, что изменилось. Я даю вам безопасную среду для поломок: вы всегда можете вернуться к исходному коду из книги.

Чего в этой книге нет

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

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

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


Краткое содержание глав

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поехали.

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

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

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

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

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

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

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

На страницу:
1 из 3