Базовые сигналы: синус, импульс, ступень, шум

Собираем «алфавит» DSP: несколько элементарных сигналов, из которых строится всё остальное.

Базовые сигналы — это эталонные формы (синус, импульс, ступень, шум), через которые описывают, тестируют и анализируют любые системы обработки.

В DSP есть несколько «кирпичей», которые встречаются повсюду. Синус — потому что любой сигнал раскладывается на синусы (преобразование Фурье). Импульс — потому что им «тыкают» систему, чтобы узнать её характеристику. Ступень — модель включения. Шум — модель помех. Научимся генерировать каждый.

Синус и косинус — несущие колебания

Синусоида A*sin(2*pi*f*n/fs + phi) — главный сигнал DSP. Косинус — это синус, сдвинутый по фазе на четверть периода. Сгенерируем оба.

import math

fs = 8
n = range(fs)
s = [round(math.sin(2 * math.pi * k / fs), 3) for k in n]
c = [round(math.cos(2 * math.pi * k / fs), 3) for k in n]
print("sin:", s)
print("cos:", c)

Вывод:

sin: [0.0, 0.707, 1.0, 0.707, 0.0, -0.707, -1.0, -0.707]
cos: [1.0, 0.707, 0.0, -0.707, -1.0, -0.707, -0.0, 0.707]

Косинус начинается с 1, синус — с 0; в остальном это одна и та же волна, сдвинутая по фазе.

Импульс и ступень — пробники систем

Единичный импульс — один ненулевой отсчёт. Единичная ступень — «включение». Этими сигналами проверяют реакцию системы.

N = 8
impulse = [1 if n == 0 else 0 for n in range(N)]
step = [1 if n >= 0 else 0 for n in range(N)]
ramp = [n for n in range(N)]   # линейно растущий сигнал

print("импульс:", impulse)
print("ступень:", step)
print("пила   :", ramp)

Вывод:

импульс: [1, 0, 0, 0, 0, 0, 0, 0]
ступень: [1, 1, 1, 1, 1, 1, 1, 1]
пила   : [0, 1, 2, 3, 4, 5, 6, 7]

Шум — модель помехи

Белый шум — случайные независимые отсчёты. «Белый» означает, что в нём поровну всех частот (как белый свет содержит все цвета). Он моделирует тепловые помехи, фон, ошибки.

import random, statistics
random.seed(7)

noise = [round(random.gauss(0, 1), 2) for _ in range(8)]
print("Белый шум:", noise)
print("Среднее ~ 0:", round(statistics.mean(noise), 2))
print("СКО ~ 1:", round(statistics.pstdev(noise), 2))

Вывод:

Белый шум: [-0.26, 0.51, -0.23, -0.32, -0.93, -0.21, 1.11, 0.42]
Среднее ~ 0: 0.01
СКО ~ 1: 0.59

Как работает под капотом

Почему именно эти четыре? Синус — собственная функция линейных систем: подайте синус на любой линейный фильтр, на выходе будет синус той же частоты (изменятся только амплитуда и фаза). Никакая другая форма таким свойством не обладает — поэтому через синусы анализируют всё. Импульс — нейтральный элемент свёртки: реакция системы на импульс (импульсный отклик) полностью её описывает. Ступень — это сумма импульсов, её реакция показывает переходный процесс. Шум — статистический эталон, относительно которого измеряют, насколько фильтр улучшил сигнал. Четыре кирпича покрывают и анализ (синус), и описание систем (импульс/ступень), и оценку качества (шум).

Частые ошибки

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

Итог

  • Синус/косинус — несущие колебания; через них раскладывают любой сигнал.
  • Импульс и ступень — пробники: их реакция описывает систему.
  • Белый шум — модель помехи с равномерным спектром.
  • Все четыре генерируются парой строк на чистом Python.
Проверьте себя
1. Чем синус отличается от косинуса?
AЧастотой
BТолько фазой — сдвигом на четверть периода
CАмплитудой
DКосинус не является сигналом
2. Почему синусоида особенно важна для линейных систем?
AЕё легко рисовать
BНа выходе линейной системы синус остаётся синусом той же частоты
CОна не содержит шума
DОна самая громкая
3. Что значит «белый» шум?
AОн очень громкий
BВ нём примерно поровну всех частот, как белый свет содержит все цвета
CОн белого цвета на экране
DУ него нулевая амплитуда