Линейное предсказание (англ. linear prediction) – это вычислительная процедура, позволяющая по набору
предшествующих отсчётов сигнала предсказать текущий отсчёт. Алгоритм широко применяется в цифровой обработке
сигналов, телекоммуникациях, акустике, экономическом моделировании и машинном обучении.
Основные понятия
- Сигнал — последовательность чисел
s(i), гдеi– индекс отсчёта. - Порядок предсказания (N) — количество предыдущих отсчётов, используемых для оценки текущего.
- Коэффициенты предсказания — множество чисел
α₁, α₂, …, α_N, которые необходимо определить. - Ошибка предсказания — разница между реальным и оценённым значением:
e(i) = s(i) – Ŝ(i).
Математическая модель
Оценка текущего отсчёта формируется как линейная комбинация предшествующих отсчётов:
Ŝ(i) = Σk=1N αₖ · s(i‑k)
Задача алгоритма – найти такие коэффициенты αₖ, при которых среднеквадратичная ошибка предсказания
будет минимальной:
⟨(s(i) – Ŝ(i))²⟩ → min
В этом выражении ⟨·⟩ обозначает математическое ожидание (среднее по всем отсчётам).
Как вычислить коэффициенты
3.1 Метод автокорреляции (Yule‑Walker)
Для стационарного сигнала сформулируються уравнения:
Σk=1N αₖ·R(|m‑k|) = R(m), m = 1…N
где R(m) – автокорреляционная функция сигнала:
R(m) = ⟨s(i)·s(i‑m)⟩
Эти уравнения записываются в виде симметричной матрицы Тёплица, которую удобно решать алгоритмом
Левинсона‑Дюрбина.
3.2 Алгоритм Левинсона‑Дюрбина
- Инициализация:
α₁ = R(1) / R(0), ошибкаε₁ = R(0)·(1‑α₁²). - Для
k = 2 … Nвычисляем рефлекционный коэффициент
γₖ = (R(k) – Σj=1k‑1 αⱼ·R(k‑j)) / εₖ₋₁. - Обновляем коэффициенты:
αⱼ ← αⱼ – γₖ·αk‑j, j = 1 … k‑1 αₖ ← γₖ
- Обновляем ошибку:
εₖ = εₖ₋₁·(1‑γₖ²).
После N итераций получаем набор коэффициентов α₁…α_N, которые минимизируют среднеквадратичную ошибку.
Применения линейного предсказания
- Сжатие речи – LPC (Linear Predictive Coding) используется в телефонных кодеках (G.711, G.729).
- Акустический анализ – выделение форму́л резонансных частот (формантов) голоса.
- Экономика и финансы – предсказание временных рядов, например, цен акций.
- Системы управления – предсказание будущих состояний процесса для построения предиктивных контроллеров.
- Машинное обучение – как один из базовых методов в предсказательном моделировании, часто используется в
качестве базовой линии перед более сложными нелинейными моделями.
Связь с другими методами
Линейное предсказание является частным случаем многомерной линейной регрессии, где независимыми переменными
являются прошлые отсчёты сигнала. В отличие от обычной регрессии, в LP цель – минимизировать автокорреляцию ошибки,
что приводит к специфическим уравнениям (Yule‑Walker).
При наличии нелинейных зависимостей используют расширения:
- Нелинейное предсказание (полиномиальное, ядровое).
- Рекуррентные нейронные сети (RNN, LSTM) – «глубокий» аналог линейного предсказателя.
Практический пример (Python)
Ниже показан минимальный пример вычисления коэффициентов линейного предсказателя с помощью алгоритма
Левинсона‑Дюрбина, реализованного в библиотеке scipy.
import numpy as np
from scipy.linalg import toeplitz, solve_toeplitz
def autocorrelation(x, lag):
"""Вычисляет автокорреляцию до заданного лага."""
n = len(x)
r = np.array([np.dot(x[:n‑k], x[k:]) for k in range(lag+1)])
return r / n
signal = np.array([0.5, 1.2, 0.9, 1.4, 1.1, 0.7, 0.8, 1.0, 1.3, 0.9])
N = 4
R = autocorrelation(signal, N)
R_matrix = toeplitz(R[:-1])
rhs = R[1:]
alpha = solve_toeplitz((R[:-1], R[:-1]), rhs)
print("Коэффициенты предсказания:", alpha)
def predict(s, a):
"""Возвращает предсказанные значения для всего сигнала."""
N = len(a)
pred = np.zeros_like(s, dtype=float)
for i in range(N, len(s)):
pred[i] = np.dot(a, s[i‑N:i][::-1])
return pred
predicted = predict(signal, alpha)
error = signal — predicted
print("Среднеквадратичная ошибка:", np.mean(error**2))
В результате получаем набор коэффициентов αₖ, которые минимизируют ошибку предсказания для данного
сигнала.
Оценка качества предсказателя
Для сравнения разных моделей используют следующие метрики:
- Среднеквадратичная ошибка (MSE) –
⟨e(i)²⟩. - Отношение сигнал/шум (SNR) – измеряется в дБ:
SNR = 10·log₁₀( Σ s(i)² / Σ e(i)² )
- Коэффициент детерминации (R²) – показывает, какая часть дисперсии сигнала объяснена моделью.
Ограничения и подводные камни
- Линейное предсказание эффективно только для стационарных или «медленно меняющихся» сигналов.
- Выбор порядка
Nкритичен: слишком малый порядок не захватывает структуру, слишком большой
приводит к переобучению и росту вычислительной нагрузки. - Алгоритм чувствителен к шуму и выбросам – в таких случаях часто применяют предобработку
(фильтрацию, нормализацию).
Советы по практическому использованию
- Перед построением предсказателя выполните детренинг сигнала (удалите среднее, при необходимости
примените оконные функции). - Для выбора оптимального порядка используйте критерии AIC (Akaike Information Criterion) или
BIC (Bayesian Information Criterion). - Если требуется адаптивное предсказание (изменяющийся сигнал), применяйте адаптивные алгоритмы:
LMS (Least‑Mean‑Squares), RLS (Recursive Least Squares). - В реальных системах (например, кодеки речи) коэффициенты часто кодируются с помощью
векторного квантования для экономии битрейта.
Линейный предсказательный алгоритм – фундаментальный инструмент цифровой обработки сигналов. Его
математическая простота и возможность эффективного вычисления (особенно с помощью алгоритма
Левинсона‑Дюрбина) делают его незаменимым в задачах сжатия речи, анализа акустических параметров,
прогнозирования временных рядов и в качестве базовой модели в машинном обучении. При правильном выборе
порядка, предварительной обработке данных и оценке качества предсказателя линейный алгоритм может достигать
высоких значений SNR и служить надёжным строительным блоком для более сложных нелинейных систем.
Ссылки:
- Википедия. Линейное предсказание. 24 сентября 2008.
- Солонина А.И., Улахович Д.А. Основы цифровой обработки сигналов: курс лекций. СПб.: БХВ‑Петербург, 2‑е изд.
- Habr. Предсказательное моделирование. 21 ноября 2023.