exponenta event banner

Линейное прогнозирование и авторегрессивное моделирование

В этом примере показано, как сравнивать взаимосвязь между авторегрессивным моделированием и линейным предсказанием. Линейное прогнозирование и авторегрессивное моделирование - это две разные задачи, которые могут дать одни и те же численные результаты. В обоих случаях конечной целью является определение параметров линейного фильтра. Однако фильтр, используемый в каждой проблеме, различен.

Введение

В случае линейного прогнозирования предполагается определить фильтр КИХ, который может оптимально предсказывать будущие выборки авторегрессионного процесса на основе линейной комбинации прошлых выборок. Разность между фактическим авторегрессионным сигналом и прогнозируемым сигналом называется ошибкой прогнозирования. В идеале эта ошибка представляет собой белый шум.

Для случая авторегрессивного моделирования целью является определение всеполюсного БИХ-фильтра, который при возбуждении белым шумом выдает сигнал с той же статистикой, что и авторегрессионный процесс, который мы пытаемся моделировать.

Генерация AR-сигнала с использованием всеполюсного фильтра с белым шумом в качестве входного сигнала

Здесь мы используем функцию LPC и фильтр FIR просто, чтобы придумать параметры, которые мы будем использовать для создания авторегрессионного сигнала, с которым мы будем работать. Использование FIR1 и LPC здесь не критично. Например, мы могли бы заменить d чем-то таким простым, как [1 1/2 1/3 1/4 1/5 1/6 1/7 1/8] и p0 чем-то вроде 1e-6. Но форма этого фильтра лучше, поэтому мы используем его вместо этого.

b = fir1(1024, .5);
[d,p0] = lpc(b,7);

Чтобы генерировать авторегрессионный сигнал, возбуждаем всеполюсный фильтр с белым гауссовым шумом дисперсии p0. Обратите внимание, что для получения дисперсии p0 мы должны использовать SQRT (p0) в качестве члена «усиления» в генераторе шума.

rng(0,'twister'); % Allow reproduction of exact experiment
u = sqrt(p0)*randn(8192,1); % White Gaussian noise with variance p0

Теперь мы используем сигнал белого гауссова шума и всеполюсный фильтр для генерации AR-сигнала.

x = filter(1,d,u);

Поиск модели AR по сигналу с помощью метода Юле-Уокера

Решая уравнения Юле - Уокера, мы можем определить параметры для всеполюсного фильтра, что при возбуждении белым шумом будет вырабатываться AR-сигнал, статистика которого совпадает со статистикой данного сигнала, х. Ещё раз это называется авторегрессивным моделированием. Для решения уравнений Юле - Уокера необходимо оценить автокорреляционную функцию x. Алгоритм Левинсона используется тогда для решения уравнений Юле - Уокера эффективным образом. Функция ARYULE делает все это для нас.

[d1,p1] = aryule(x,7);

Сравнение модели AR с сигналом AR

Теперь мы хотели бы вычислить частотную характеристику всеполюсного фильтра, который мы только что использовали для моделирования AR сигнала x. Хорошо известно, что спектральная плотность мощности выходного сигнала этого фильтра, при возбуждении фильтра белым гауссовым шумом задают величину-квадрат его частотной характеристики, умноженную на дисперсию входного сигнала белого шума. Одним из способов вычисления спектральной плотности выходной мощности является использование FREQZ следующим образом:

[H1,w1] = freqz(sqrt(p1),d1);

Чтобы получить представление о том, насколько хорошо мы смоделировали авторегрессионный сигнал x, мы перекрываем спектральную плотность мощности выходного сигнала модели, вычисленную с использованием FREQZ, с оценкой спектральной плотности мощности x, вычисленной с использованием PERIODOGRAM. Обратите внимание, что периодограмма масштабируется на 2 * pi и является односторонней. Нам нужно подстроиться под это, чтобы сравнить.

periodogram(x)
hold on
hp = plot(w1/pi,20*log10(2*abs(H1)/(2*pi)),'r'); % Scale to make one-sided PSD
hp.LineWidth = 2;
xlabel('Normalized frequency (\times \pi rad/sample)')
ylabel('One-sided PSD (dB/rad/sample)')
legend('PSD estimate of x','PSD of model output')

Figure contains an axes. The axes with title Periodogram Power Spectral Density Estimate contains 2 objects of type line. These objects represent PSD estimate of x, PSD of model output.

Использование LPC для линейного прогнозирования

Теперь обратимся к проблеме линейного прогнозирования. Здесь мы пытаемся определить фильтр предсказания FIR. Мы используем LPC для этого, но результат LPC требует небольшой интерпретации. LPC возвращает коэффициенты всего отбеливающего фильтра A (z), этот фильтр принимает как входной авторегрессионный сигнал x и возвращает как выходной ошибку предсказания. Однако A (z) имеет встроенный в него фильтр предсказания в виде B (z) = 1- A (z), где B (z) является фильтром предсказания. Следует отметить, что коэффициенты и дисперсия ошибок, вычисленные с помощью LPC, по существу совпадают с коэффициентами, вычисленными с помощью ARYULE, но их интерпретация отличается.

[d2,p2] = lpc(x,7);
[d1.',d2.']
ans = 8×2

    1.0000    1.0000
   -3.5245   -3.5245
    6.9470    6.9470
   -9.2899   -9.2899
    8.9224    8.9224
   -6.1349   -6.1349
    2.8299    2.8299
   -0.6997   -0.6997

Теперь мы извлекаем B (z) из A (z), как описано выше, чтобы использовать фильтр линейного предсказания FIR для получения оценки будущих значений авторегрессионного сигнала на основе линейных комбинаций прошлых значений.

xh = filter(-d2(2:end),1,x);

Сравнение фактических и прогнозируемых сигналов

Чтобы получить представление о том, что мы сделали с 7-отводным фильтром предсказания FIR, мы строим график (200 выборок) исходного авторегрессионного сигнала вместе с оценкой сигнала, полученной от линейного предсказателя, принимая во внимание задержку в одной выборке в фильтре предсказания.

cla
stem([x(2:end),xh(1:end-1)])
xlabel('Sample time')
ylabel('Signal value')
legend('Original autoregressive signal','Signal estimate from linear predictor')
axis([0 200 -0.08 0.1])

Figure contains an axes. The axes with title Periodogram Power Spectral Density Estimate contains 2 objects of type stem. These objects represent Original autoregressive signal, Signal estimate from linear predictor.

Сравнить ошибки прогнозирования

Мощность ошибки предсказания (дисперсия) возвращается как второй выходной сигнал от LPC. Его значение (теоретически) такое же, как дисперсия белого шума, приводящего в действие всеполюсный фильтр в задаче AR моделирования (p1). Другим способом оценки этой дисперсии является сама ошибка прогнозирования:

p3 = norm(x(2:end)-xh(1:end-1),2)^2/(length(x)-1);

Все следующие значения теоретически одинаковы. Различия обусловлены различными ошибками вычислений и аппроксимации.

[p0 p1 p2 p3]
ans = 1×4
10-5 ×

    0.5127    0.5305    0.5305    0.5068

См. также

|