Зачем обрабатывать сигналы
Понимаем, какие практические задачи решает DSP и почему её делают именно в цифре.
Цифровая обработка сигналов — это применение алгоритмов к отсчётам сигнала, чтобы извлечь информацию, улучшить качество или преобразовать сигнал в нужную форму.
Зачем вообще что-то «обрабатывать»? Потому что сырой сигнал от датчика почти никогда не годится напрямую: в нём шум, наводки, лишние частоты, неудобный масштаб. DSP — это набор инструментов, который превращает сырьё в полезный результат.
Четыре больших задачи DSP
- Очистка (фильтрация). Убрать шум, сетевую наводку 50 Гц из ЭКГ, фон вентилятора из записи голоса. Это самая частая задача.
- Анализ. Узнать, какие частоты есть в сигнале, найти основной тон голоса, обнаружить пик или эхо, измерить пульс по кардиограмме.
- Преобразование. Сжать звук в MP3, изменить тональность, наложить эффект, перенести радиосигнал на другую частоту (модуляция).
- Распознавание. Понять, что за слово сказано, какая мелодия играет, есть ли аритмия — это вход в машинное обучение, но признаки для него готовит DSP.
Почему именно в цифре
Раньше всё это делали аналоговыми схемами: катушки, конденсаторы, операционные усилители. Цифровой подход победил, потому что:
| Аналоговая обработка | Цифровая (DSP) |
| фильтр — это паяная схема | фильтр — это несколько строк кода |
| параметры «плывут» от температуры | идеальная повторяемость, точность задаёт разрядность |
| сложно перенастроить | поменял число в массиве — готов новый фильтр |
| каждая функция — отдельное железо | один процессор делает всё программно |
Минусы тоже есть: нужно дискретизировать (теряем то, что выше половины частоты дискретизации) и квантовать (вносим небольшой шум). Но плюсы перевешивают: ваш телефон — это DSP-комбайн, который кодирует голос, давит эхо, шумоподавляет и распознаёт речь одновременно.
Самый простой пример обработки: сглаживание
Покажем суть DSP на крошечной задаче. Есть зашумлённые показания датчика; хотим сгладить их, заменяя каждое значение средним по трём соседним. Это уже фильтр — простейший фильтр скользящего среднего.
# Зашумлённые показания датчика
raw = [20, 22, 19, 50, 21, 23, 20, 22] # 50 - явный выброс
def smooth(x):
out = []
for i in range(len(x)):
lo = max(0, i - 1)
hi = min(len(x), i + 2)
window = x[lo:hi]
out.append(round(sum(window) / len(window), 1))
return out
print("Было:", raw)
print("Стало:", smooth(raw))
Вывод:
Было: [20, 22, 19, 50, 21, 23, 20, 22] Стало: [21.0, 20.3, 30.3, 30.0, 31.3, 21.3, 21.7, 21.0]
Выброс 50 «размазался» и стал менее резким, соседи подтянулись к нему. Усреднение по окну — это и есть простейшая свёртка, главная операция DSP, которой посвящён отдельный раздел.
Как работает под капотом
Любой DSP-алгоритм — это арифметика над массивом: сложения, умножения и иногда комплексные числа. Никакой магии. Сложные эффекты собираются из простых кирпичиков: задержка, умножение на коэффициент, суммирование. Поэтому, освоив несколько базовых операций (сдвиг, масштаб, свёртка, преобразование Фурье), вы сможете собрать почти любой обработчик. Специальные чипы (DSP-процессоры, например серия TI C6000) умеют делать «умножить-и-накопить» за один такт, потому что именно эта операция встречается в DSP миллиарды раз в секунду.
Частые ошибки
- «Сначала обработаю, потом подумаю, что было в сигнале». Без понимания природы сигнала (частоты, диапазон) фильтр легко настроить так, что он убьёт полезное вместе с шумом.
- Считать сглаживание бесплатным. Любой фильтр что-то искажает: сглаживание «съедает» резкие фронты и вносит задержку. Всегда есть компромисс.
- Применять DSP вслепую вместо измерения. Прежде чем фильтровать, полезно посмотреть спектр и понять, какие частоты лишние.
Итог
- DSP решает четыре класса задач: очистка, анализ, преобразование, распознавание.
- Цифровая обработка точна, повторяема и перенастраивается изменением чисел в коде.
- Даже простое скользящее среднее — уже фильтр и частный случай свёртки.
- Любой алгоритм DSP сводится к сложениям и умножениям над массивом отсчётов.