В этом примере показано, как сравнить отношение между авторегрессивным моделированием и линейным предсказанием. Линейное предсказание и авторегрессивное моделирование являются двумя различными проблемами, которые могут привести к тем же числовым результатам. В обоих случаях конечная цель должна определить параметры линейного фильтра. Однако фильтр, используемый в каждой проблеме, отличается.
В случае линейного предсказания намерение состоит в том, чтобы определить КИХ-фильтр, который может оптимально предсказать будущие выборки авторегрессивного процесса на основе линейной комбинации прошлых выборок. Различие между фактическим авторегрессивным сигналом и предсказанным сигналом называется ошибкой предсказания. Идеально, эта ошибка является белым шумом.
Для случая авторегрессивного моделирования намерение состоит в том, чтобы определить БИХ-фильтр все-полюса, который, когда взволновано с белым шумом производит сигнал с той же статистикой как авторегрессивный процесс, что мы пытаемся смоделировать.
Здесь мы используем функцию LPC и КИХ-фильтр просто, чтобы придумать параметры, которые мы будем использовать, чтобы создать авторегрессивный сигнал, с которым мы будем работать. Использование 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, статистические данные которого совпадают с теми из данного сигнала, x. Еще раз это называется авторегрессивным моделированием. Для того, чтобы решить уравнения Уокера Рождества, необходимо оценить автокорреляционную функцию x. Алгоритм Левинсона используется затем, чтобы решить уравнения Уокера Рождества эффективным способом. Функциональный ARYULE делает все это для нас.
[d1,p1] = aryule(x,7);
Мы теперь хотели бы вычислить частотную характеристику фильтра все-полюса, мы только что раньше моделировали сигнал x AR. Это известно, который степень спектральная плотность выхода этого фильтра, когда фильтр взволнован с белым Гауссовым шумом, дана в квадрате величиной из его частотной характеристики, умноженной на отклонение бело-шумового входа. Один способ вычислить эту выходную мощность спектральная плотность при помощи FREQZ можно следующим образом:
[H1,w1] = freqz(sqrt(p1),d1);
Для того, чтобы понять то, как хорошо мы смоделировали авторегрессивный сигнал x, мы накладываем степень спектральная плотность выхода модели, вычислил использование, FREQZ, со степенью спектральная оценка плотности x, вычислил ПЕРИОДОГРАММУ использования. Заметьте, что периодограмма масштабируется 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')
Мы теперь обращаемся к проблеме линейного предсказания. Здесь мы пытаемся определить КИХ-предсказательный фильтр. Мы используем LPC для этого, но результат LPC требует небольшой интерпретации. LPC возвращает коэффициенты целого фильтра отбеливания (z), этот фильтр берет в качестве входа авторегрессивный сигнал x и возвращает, как выведено ошибку предсказания. Однако (z) встроили предсказательный фильтр в него, в форму B (z) = 1-(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) из (z) аналогичного описанному выше, чтобы использовать КИХ линейный фильтр предиктора, чтобы получить оценку будущих значений авторегрессивного сигнала на основе линейных комбинаций прошлых значений.
xh = filter(-d2(2:end),1,x);
Чтобы получить чувство для того, что мы сделали с КИХ-предсказательным фильтром с 7 касаниями, мы строим (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])
Ошибочная степень предсказания (отклонение) возвращена как второй выход в 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