Базовые сигналы: синус, импульс, ступень, шум
Собираем «алфавит» 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.