Глава 6. Прототип программы идентификации параметров линейной системы.

 

6.1. Случайность и непредсказуемость.

Важнейшее отличие методов анализа временных рядов от анализа случайных величин состоит в том, что считается конечным результатом исследования. Нам придется признать невозможность продолжения анализа, если будет установлено, что исследуемый ряд представляет собой выборку т.е. последовательность одинакова распределенных независимых в совокупности случайных величин. Посмотрим, что может дать в этом случае спектральный анализ. Вызовом randn создадим такую

выборку {r(n), n=1:1024} и проведем соответствующую оценку спектра. Далее проведем сглажиавние сгенерированного ряда при помощи скользящего cреднего c параметром прогноза ro=0.98: {sr(n)=r(n)+ro*sr(n-1), n=2:1024}.

r=randn([1 1024]);

Выборка из стандартного нормального закона

fr=fft(r);

Преобразование Фурье от нее

dens=fr.*conj(fr);

Мощность спектра

ro=0.98; b=1; a=[1 -ro];

Вводим параметры производящего преобразование фильтра

sr=filter(b,a,r);

Здесь из r получают sr(n)=r(n)+ro*sr(n-1)

fsr=fft(sr);

 

sdens=fsr.*conj(fsr);

 

subplot(2,2,1),plot(r),grid,title('Случайный ряд - выборка')

subplot(2,2,2),plot(dens),grid,title('Случайный ряд спектр')

subplot(2,2,3),plot(sr),grid,title('Cглаженный ряда')

subplot(2,2,4),plot(sdens),grid,title('Спектр сглаженного ряда')

Как видно, амплитуда сглаженного ряда заметно превышает амплитуду исходного, сами колебания преобрели выраженный систематический характер, а спектр - практически сосредоточен в низкочастотной области и не содержит заметных выбросов. С уменьшением ro, спектр начинает "растекаться", а размах колебаний сокращается. Соотношения типа X(n)=r(n)+ro*X(n-1) и Y(n)=r(n)+ro*X(n-1) (см. [10]) возникают в практике анализа временных рядов, когда делается попытка связать разновременные значения отсчетов одного и того же ряда, или различных рядов, близких по своему происхождению. Тогда и возикает мысль оценить параметр ro методом наименьших квадратов. В случае первого уравнения оценка приводит к равенству , где - ряд отклонений исходного ряда от общего среднего. Величина называется автокорреляцией ряда с лагом 1. Если, по небольшому отрезку данных получить оценку для , то для всего ряда можно применить соотношение X1(n)=ro*X(n-1) с целью получить прогноз X(n) по X(n-1), а потом вычислить поправку r(n)=X1(n)-X(n). Если структура ряда такова, диапазон значений r(n) существенно уже, чем для X(n), то хранить и передавать значения поправок выгоднее, чем актуальные значения.

Совершенно аналогично соотношение для прогоза значений одного ряда по другому приводит к равенству , с аналогичными соглашениями об удалении общего среднего значения из обоих рядов. Полученная величина носит название кросс-корреляцией с лагом 1. Так возникает оценка параметров модели порождения одного временного ряда по другому с возможностью применить эту оценку к задаче упаковки данных при передаче их по линии связи или хранении. Перейдем к модельному расчету.

 

6.2. Упаковка стереоданных с помощью кросс-корреляции.

Идея исследуемого алгоритма состоит в следующем. Подсчитаем коэфициент корреляции двух стереоканалов. Полученный коэффициент корреляции (если он достаточно велик) позволит предсказывать значения одного ряда отсчетов по другому с достаточной точностью, т.е. ошибка потребует заметно меньше ресурса для передачи, чем все значение. Неизбежные ошибки, конечно, надо вычислить и сохранить. Польза от такого распределения ролей состоит в следующем. один ряд – ведущий – храним неизменным в разрядной сетке 16 бит, а другой – поправки – чкажем, с разрядностью 12 бит. Если вероятность клиппирования поправок при сохранении станет существенной, то после восстановления такая стереозапись заметно потеряет качество. Но, возможно, нам и повезет…

Сначала попробуем силы на связи между каналами, предполагая, что можно прогнозировать один канал по другому, и поправку сохранять:

Сначала попробуем силы на связи между каналами, предполагая, что можно прогнозировать один канал по другому, и поправку сохранять:

N1=2000

Начало блока отсчетов

N2=5000

Конец блока отсчетов

row=N2-N1+1;

Число строк-отсчетов

[x1,x2,x3]=wavread('cocer1.wav',[N1,N2]);

Считали звуковые отсчеты в x1 (оба канала), x2 - частота дискретизации, x3 - число бит на отсчет

[size(x1) x2 x3]

 

ans = 3001 2 44100 16

 

ee=corrcoef(x1)

 

ee =

1.0000 0.5957

0.5957 1.0000

ee - матрица корреляций между каналами.

beg=1500:3000;

beg - индексы для графиков

ro=ee(1,2);

ro - корреляция между 1-м и 2-м каналами

z=filter([0 ro],1,x1(:,1));

z - линейный прогноз с помощью коэффициента корреляции между каналами: z(t+1)=ro*x1(t,1)

Вычислим поправки eps, т. е. ошибку от замены отсчета в правом канале на линейный прогнозом по смежному каналу. Это соответствует формуле: eps(t+1)=x1(t+1,2)-ro*x1(t,1), а вот на графике сравнение прогноза и реального значения:

eps=x1(:,2)-z(:);

subplot(211),plot(beg/x2,x1(beg,1)), title('Значение в левом канале'),grid;

subplot(212),plot(beg/x2,eps(beg)), title('Поправка к прогнозу значений в правом канале'),grid;

Проведем вычисления коэффициентов корреляции между eps - поправкой и каналами.

x1eps1=corrcoef([x1(:,1),eps])

x2eps1=corrcoef([x1(:,2),eps])

x1eps1 = 1.0000 -0.1311

-0.1311 1.0000

x2eps1 = 1.0000 0.7173

0.7173 1.0000

Как видим, поправка практически не зависит от значений, которые мы будем сохранять и весьма тесно связана с теми данными, которые она должна помочь восстановить.Таким образом, вычисленее поправки озачает декорреляцию, т. е. снижение избыточности хранимой информации.

Однако, давайте вычислим, сколько, все-таки поправок укладывается в отведенный для них байт, иными словами, их абсолютное значение не превосходит 1/2^3 от максимального - что даст выигрыш в четыре бита.Эту работу выполнит функция find.

help find

FIND Находит индексы ненулевых элементов

I = FIND(X) возвращает вектора X, которые соответствуют ненулевым элементам. Напимер, I = FIND(A>100), возвращаентиндексы элементов A превосходящих 100.

[I,J] = FIND(X) возвращаеи индексы строк и колон ненулевых элементов матрицы X. [I,J,V] = FIND(X) также возвращает вектор, содержащий ненулевые значенмия.

index=find(abs(eps)>1/2^3); Найдем те значения, которые вызовут переполнение (16-4)-битной разрядной сетки

prob=length(index)/length(eps)

prob =

0.0880

Ну, неплохо. А теперь вычислим характеристику, которую статистики считают оценкой качества регрессионной модели - доля выриации, которую позволяет оценить модель по сравнению с полной вариацией данных.

AllVar=var(x1) - Полная вариация

AllVar =

0.0093 0.0067

EpsVar=var(eps) - Необъясненная моделью вариация

EpsVar =

0.0045

Доля необъясненной вариации

EpsVar/AllVar(2)

ans =

0.6690

Результат настораживает. В самом деле ничего страшного. Мы и не собирались устранить все ошибки, нам было бы достаточно сохранить "достаточно высокое" качество стереозвучания. Так что последнее слова за слушателем.

 

6.3. Упаковка данных с помощью авто-корреляции.

Теперь попробуем связи между соседними по времени отсчетами 1-го канала, полагая, что можно прогнозировать значение отсчета в момент (t+1) по отсчету в момент t, и поправку сохранять

x1=[x1(:,1) [0; x1(1:row-1,1)]];

Запишем в таблицу x1 вместо второго канала – запоздавший на один отсчет первый и проведем расчеты по предыдущему сценарию.

ee=corrcoef(x1)

 

ee =

1.0000 0.9985

0.9985 1.0000

ee- матрица корреляций между сдвигами

ro=ee(1,2);

Корреляция между сдаигами

z=filter([0 ro],1,x1(:,1));

z - линейный прогноз с помощью коэффициента корреляции между сдвигами: z(t+1)=ro*x1(t,2)

eps=x1(:,2)-z(:);

ошибка предсказания

beg=[N1:N2]'

 

subplot(2,1,1),plot(beg/x2,x1(:,1)), title('Сигнал в 1-м канале'),grid;

subplot(2,1,2),plot(beg/x2, eps), title('Прогноз в в 1-м канале'),grid;

 

Вычисление поправки озачает декорреляцию, т. е. замену отсчета на разность между текущим значением и линейным прогнозом по уже полученному значению:

xeps=corrcoef([x1(:,1),eps])

xeps =

1.0000 0.9985

0.9985 1.0000

xeps - матрица корреляций между отсчетаим и поправкой. Ну а теперь тест на вероятность "больших" ошибок.

index=find(abs(eps)>1/2^12);

prob=length(index)/length(eps)

prob =

0.0906

Надежда на экономию в 12 бит на отсчет.

 

Оглавление