alterna ai
ALTERNA AI / ГЛАВА 11 · 01

11.1 Сигнал становится отдельными отсчётами

Повторное использование коэффициентов и параллельные суммы понятны.

Измерение через равные интервалы сохраняет только часть сведений. Разные исходные колебания иногда дают одинаковые числа.

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

От функции времени к последовательности

Непрерывный сигнал s(t) и массив отсчётов x[n] различаются. При равномерном sampling x[n]=s(n/f_s), где f_s — число отсчётов в секунду, а n — целый индекс. Отдельно происходит квантование амплитуды: даже при точных отсчётах времени конечный формат числа вносит округление.

Для косинуса частоты f:

x[n]=cos⁡(2πfn/fs).x[n]=\cos(2\pi fn/f_s).

При f=3Гц и f_s=16Гц отсчёты совпадают с косинусом13Гц:13=16−3, а cos(2πn−θ)=cosθ. Это проверяемый alias, не ошибка вычисления. По одним этим отсчётам нельзя определить, какая из двух непрерывных частот была исходной.

Для идеального восстановления полосоограниченного сигнала нужна частота sampling выше удвоенной максимальной частоты и соответствующее восстановление. В реальных системах применяют anti-alias filtering до дискретизации. Равенство на самой границе требует осторожности с фазой: синус на частоте f_s/2 может давать одни нули.

Эксперимент. Сравните3и13Гц при f_s=16, затем увеличьте f_s. В режиме ручного JSON-массива исходная непрерывная функция неизвестна, поэтому лаборатория не рисует выдуманную «истинную волну». Контролы генератора в этом режиме отключаются.

Длина записи N влияет на длительность наблюдения N/f_s и шаг частотных bins f_s/N. Больше samples не исправляет уже произошедшее смешение частот, если сам f_s остался недостаточным. Это различие пригодится при чтении спектра.

from math import cos,pi
a=[cos(2*pi*3*n/16) for n in range(16)]
b=[cos(2*pi*13*n/16) for n in range(16)]
assert max(abs(x-y) for x,y in zip(a,b))<1e-12

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

cos(2πn−θ)=cosθ. По отсчётам эти два генератора неразличимы.

Окно перемещается по сигналу. Как этот вопрос продолжает полученный результат?

Python-примеры главы 11 Академическая база →