Опрос

Какой архиватор наиболее эффективный?:

Новички

Виктор Васильев
Юрий Антонов
Сергей Андреевич
Генадий
Avanasy

Линейно-предсказывающее кодирование

Английское название метода - Linear Prediction Coding (LPC).

Цель - сжатие потока Я-битовых элементов в предположении, что зна­чение каждого из них является линейной комбинацией значений h преды­дущих элементов. Где S/ - i-й Л-битовый элемент; Kj - некоторые коэффициенты, в общем случае непостоянные.

Основная идея состоит в том, чтобы в формируемый поток записывать ошибки предсказаний: разности между реальными S, и предсказанными значениями:

Размер данных в результате применения LPC не изменяется. Более того, размер элементов R может даже увеличиваться на единицу: /?'=Л+1 - за счет добавления бита для сохранения знака разности.

Чем точнее предсказание, тем больше в преобразованной последова­тельности элементов с близкими к нулю значениями, тем лучше можно сжать такую последовательность.

Для сжатия результата работы метода может быть применена любая комбинация методов - RLE, MTF, DC, PBS, HUFF, ARIC, ENUC, SEM...

Методы этой группы являются трансформирующими и поточными (т. е. могут применяться даже в том случае, когда длина блока с данными не задана). Скорость выполнения прямого преобразования равна скорости обратного преобразования и зависит только от размера данных, но не от их содержания, т. е. Скорость=0(Размер). Памяти требуется порядка Л байт.

Из краткого описания общей идеи видно, что

1) можно один раз, при инициализации, задать как А, так и К/,

2) с точки зрения сложности вычислений и качества сжатия полезно ог­раничить й, но периодически определять оптимальные К/,

3) теоретически одна и та же зависимость может быть задана несколь­кими формулами, например

5/=(&_,+й_2)/2 и £> 5и/2 + Яа/2, но реально, из-за использования целочисленной арифметики, они не эквиваленты; в данном случае при вычислении S\- используется два округления вместо одного, поэтому мы получим различие.

ПРЯМОЕ ПРЕОБРАЗОВАНИЕ

В базовом простейшем случае иллюстрируется одной строкой:

//предполагаем, что S[i]*S[i-l] и, следовательно, D[i]«0 D[i]=S[i]-S[i-l];

где S[N] - исходный массив (Source, источник); D[N] - выходной массив преобразованных данных (Destination, приемник, с отклонениями, т. е. раз­ностями, дельтами).

Такой вариант обычно называется дельта-кодированием (Delta Coding), поскольку записываем приращения элементов относительно значений пре­дыдущих элементов. Если в значениях элементов имеется ярко выраженная линейная тенденция, то в результате получаем ряд чисел с близкими значе­ниями.

Три строки, если требуется писать в тот же массив:

current=S[i]; //возьмем очередной элемент

S[i]=current-last; //вычислим его разность с прошлым

last=current; //теперь очередной стал прошлым

Например, из блока (12, 14, 15, 17, 16, 15, 13, 11, 9), применив этот про­стейший вариант преобразования, получим: (2,1,2, -1, -1, -2, -2, -2).

Более сложный вариант: Л=4, предполагаем, что .£,=1/4: S[i>( S[/-l] + S[/-2] + S[/-3] + SD-4] )/4. Тогда в алгоритме:

D[i]=S[i] - (S[i-l]+S[i-2]+S[i-3]+S[i-4])/4;

Здесь мы предполагаем, что явно выраженная линейная тенденция от­сутствует и значение очередного элемента примерно равно значению пре­дыдущего, причем D[i] приобретает отрицательные и положительные зна­чения с равной вероятностью. Чтобы компенсировать влияние случайных возмущений, значение следующего элемента принимаем равным среднему арифметическому нескольких последних элементов. С другой стороны, чем больше элементов усредняем, тем консервативнее наша модель, тем с большим запаздыванием она будет адаптироваться к существенным изме­нениям (необязательно линейного характера) во входных данных.

Если результат преобразования требуется записывать в тот же входной массив S, то это можно реализовать следующим образом. Введем вспомога­тельный массив Last, в котором будем хранить исходные значения послед­них четырех преобразованных элементов массива S.

int Last[4]={ 0,0,0,0 }; int last_pos=0;

И далее в цикле преобразования для каждого элемента S[/] выполняем:

current=S[i]; // возьмем очередной элемент и вычислим

// его разность с предсказываемым значением: S[i]=current-(Last[0]+Last[1]+Last[2]+Last[3])/4; Last[last_pos]=current; // внесем current в массив Last last_pos=(last_pos+l)S3; // новое значение позиции в Last

С&. Упражнение. Как будет выглядеть алгоритм для модели S[/]=( S[/-1] + S[/-2] + +S[A-3) )/3? Будет ли он выполняться быстрее или медленнее рассмотренного варианта с л=4 и К/=1/4?

Обратное преобразование

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

S[i]=D[i]+S[i-l]; // по предположенному S[i]=S[i-l]

Если для D и S используем один и тот же массив (S): S[i]-S[i]+S[i-1]; // сумма дельты с предыдущим элементом

В случае Л=4 , К/=1/4 :

S[i]-D[i] + (S[i-l]+S[i-2]+S[i-3]+S[i-4])/4;

Если пишем в тот же массив, то и в этом случае, в отличие от прямого преобразования, не требуется каких-то ухищрений:

S[i]=S[i] + (S[i-l]+S[i-2]+S[i-3]+S[i-4])/4;

Действительно, к моменту обратного преобразования очередного эле­мента S[i] в ячейках S[/-l],..., S[i-4] уже находятся восстановленные значе­ния, а не отклонения, что нам как раз и нужно. Таким образом, использовать при разжатии два массива совершенно необязательно.

Пути увеличения скорости сжатия

Если можно записывать в тот же массив, то можно обойтись без излиш­него массива Last[A] и связанных с ним операций, выполняемых на каждом шаге цикла преобразования.

Рассмотрим все тот же пример с А=4 , Kj=l/4. Сделаем так, чтобы внутри цикла было присваивание:

S[i-4]=S[i] - (S[i-l]+S[i-2]+S[i-3]+S[i-4])/4;

Тогда первые 4 элемента нам придется записывать отдельно:

First[0]«S[0];

First[l]-S[l] - S[0];

First[2]-S[2] - (S[l]+S[0])/2;

First[3]=S[3] - (S[2]+S[l]+S[0])/3;

Далее с помощью цикла преобразуем цепочку из последних (N-4) эле­ментов и запишем результаты в первые (N-4) ячейки массива S:

for (i=4; i<N; i++)

S[i-4]=S[i] - (S[i-l]+S[i-2]+S[i-3]+S[i-4])/4;

Или даже так:

sum=S[3)+S[2]+S[l]+S[0]; for (i=4; i<N; i++)

j=S[i-4], S[i-4]=S[i] - sum/4, sum=sum-j+S[i];

Теперь мы можем переписать первые 4 преобразованных элемента из вспомогательного массива First в S:

for (i-0; i<4; i++) S[N-4+i]-First[i];

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

Единственное осложнение - метод, сжимающий данные, полученные в результате преобразования LPC, должен сначала обработать А элементов из конца массива S, а лишь затем (N-h) из начала.

Если работаем не с потоком, а с блоком и длина массива S известна за­ранее, можно обрабатывать из конца в начало: в цикле по i от 7V-1 до 0 де­лаем: S[/+1]-=S[/].

Увеличение скорости разжатия

Если памяти достаточно и входных данных много, может оказаться вы­годным сделать табличную реализацию каких-то арифметических операций (функций). С целью ускорения работы основного цикла можно, например, за счет этого избежать операции деления, выполняемой обычно гораздо дольше, чем операции сложения/вычитания и записи/чтения в/из памяти.

Например, вместо S[i-3)=S[i] - (S[i-l]+S[i-2]+S(i-3])/3;

намного быстрее на большинстве процессоров и для большинства компиля­торов будет

S[i-3]-S[i]- Value[ S[i-l]+S[i-2]+S[i-3] ];

или даже

// R - размер элементов массива S в битах S[i-3]-Value2[ (S[i-l]+S[i-2]+S[i-3] )«R + S[i] ] ;

Упражнение. Напишите циклы, заполняющие вспомогательные массивы Value[] и Value2[].

Естественно, такой подход применим и для увеличения скорости сжатия.

Пути улучшения степени сжатия

Как мы уже отмечали, целесообразно повторно вычислять коэффициен­ты Kj через каждые Р шагов. На основании последних обработанных дан­ных находим значения коэффициентов, оптимальные с точки зрения точно­сти предсказания значений элементов, встреченных в блоке последних об­работанных данных. Если Р=\, такой вариант обычно называется адап­тивным. При большом значении Р вариант называется статическим, если значения Kj записываются в сжатый поток, и "полуадаптивным", "блочно-адаптивным" или "квазистатическим", если в явном виде значения Kj не за­писываются.

При сжатии с потерями можем сохранять не точные значения каждой разности Di = 5, - 1(K/Sj), а только первые В бит или, например, номер пер­вого ненулевого бита. Но тогда при сжатии нужно использовать на сле­дующих шагах то же значение 5„ которое получится при разжатии, а имен­но Si"= I.(KjSj)+Di, т. е. результат предсказания плюс сохраненная часть разности - дельты.

Метод LPC применяется обычно для сжатия аналоговых сигналов. И как правило, каждый элемент сигнала отклоняется от своего предсказываемого значения не только из-за "сильных" обусловленных изменений - эволюции, но и из-за "слабых" фоновых колебаний, т. е. шума. Поэтому возможно два противоположных типа моделей:

■ вклад шума невелик по сравнению с вкладом эволюции;

■ вклад эволюции невелик по сравнению с вкладом шума.

В первом случае мы будем предсказывать значение S[/j на основании сложившейся линейной тенденции, во втором - как равное среднему ариф­метическому h предыдущих элементов.

1 Тенденция может быть и нелинейной, например S[i]=:S[i-l]+2*(S[i-lJ-S[i-- 2J), но такие модели на практике в большинстве случаев менее выгодны и мы их рассматривать не будем.

Если ресурсов достаточно, можно вычислять предсказываемые значения, даваемые несколькими моделями, и затем либо синтезировать эти несколь­ко предсказаний, либо выбирать (через каждые Р шагов) ту модель, которая оптимальна на заданном числе предыдущих элементов.

Требуется минимизировать ошибки предсказаний, поэтому рациональ­нее (выгоднее) та модель, которая дает наименьшую сумму абсолютных значений этих ошибок:

Эта задача имеет элементарное аналитическое решение: min\D\ = min (\Y— -К*Х\) ->К = Y*X', где Y-вектор из S[i] (реально наблюдаемых), К-матрица коэффициентов и Х-матрица S[i-x] (x = l,...,h). Но 1) сложность вычисления обратной матрицы не менее 0(h2) и перевычислять ее невыгодно, 2) высокая точность прогноза обычно не нужна, так как на практике стационарные по­следовательности встречаются редко.

Рассмотрим подробнее на примерах.

Общий случай

Если h-\, то учитывается только один последний элемент: S[/]=/C-S[/'-l]. Об эволюции не известно ничего, но можно предполагать, что К=1.

Упражнение. Изобразите сигнал, оптимально сжимаемый с помощью модели сл=1 иК=-1.

Все это, однако, не помешает нам действовать следующим образом: вы­берем начальное значение К0, шаг StepK изменения К, размер окна F, а так­же Р. Будем следить, с какой из трех моделей - К=К0, Kp=K0+StepK, Km=K0--StepK - сжатие последних F элементов лучше (меньше суммарная ошибка предсказания), и через каждые Р элементов выбирать лучшую (в данный момент) из трех моделей, с помощью которой и будут сжиматься следую­щие Р элементов.

Если это не текущая, а одна из двух с ±StepK, то изменяются и Кр с Кт, если, конечно, их значения не совпадают с границами: -1 или 1.

Например, можно использовать К0=0, StepK=\IA, F=10 и Р=2. Имеет смысл задать еще один параметр М - минимальный размер выигрыша оп­тимальной модели у текущей. Если выигрыш меньше М, то отказываемся от смены модели.

Следующий по сложности вариант использует переменный шаг для К. Также мы можем похожим образом корректировать F (например, изменять с шагом StepF, через каждые Q обработанных элементов).

Если h=2

Выражение S, = ^Г KjSj можно всегда переписать в таком виде: ./=1-1

s^/r^+zV^s^-s,..,.,).

J-1 Поэтому модель при А=2 можно представить как

S[i№S[i-1] + К2( S[/-l] - S[/-2]).

Найдем значения коэффициентов эволюционной модели. Если шум стремится к нулю, то изменения элементов объясняются только линейной тенденцией (эволюцией). Иначе говоря:

S[i]-S[i-l]=S[i-l]-S[i-2].

Отсюда получаем: /ч=1, К2=\.

Для шумовой модели S[/]=(S[M]+S[/-2])/2, и коэффициенты Kj получим из системы:

К\+К2=\/2 (коэффициент при S[/'-l])

2=1/2 (коэффициент при S[/-2])

Находим: К\=\, К2= -1/2. Таким образом, имеет смысл корректировать К2 в диапазоне не от 0 до 1, как может показаться на первый взгляд, а от -1/2 до 1.

Если А=3

S[Z№S[M] + Ј2(S[M]-S[/-2]) + *j-(S[f-2]-S[i-3]). (2.1)

У эволюционных моделей уже нет однозначного ответа о К\, К2 и Ку. Ki=l, K2+Ky=l (так как в общем случае через 3 точки нельзя провести пря­мую). Например, можно взять К2=3/4 и Ку=1/4, т. е. последнее приращение имеет втрое больший вес, чем предпоследнее. Или же #2-2, Ку= -1 (вторая производная постоянна).

Шумовая модель в одномерном случае одна при любых А, и при Л=3:

S[/]=(S[M] + S[/-2] + S[/-3])/3 (2.2)

Попробуем совместить обе модели - шумовую и эволюционную. При каких К\, К2 и Кз эволюционная (2.1) становится шумовой (2.2)? Из системы

Ki+K2=l/3 (коэффициент при S[/-l]);

23=\/3 (коэффициент при S[/-2]);

-Ку=\/3 (коэффициент при SJ7-3])

находим: К\=1, К2= -2/3, К3= -1/3.

Имеет смысл пытаться корректировать £3 от -1 до 1„ при этом: (К2+К1) от -1 (шумовая модель) до 1 (эволюционная), т. е. К2 от (- l-ЛГз) до (1-К3):

к23

-1

1

-l-Ki

ш

l-Ki

э

э

э

э

Ш - такая пара значений 2= -2/3, Къ= -1/3) соответствует шумовой моде­ли; Э - такие пары К2+Ку=\ соответствуют эволюционной (а остальные -"средней").

При Л = 2 существует только одна эволюционная модель (через две точ­ки всегда можно провести только одну прямую), по которой предсказывае­мое значение 5[/] = 5(2,[/] (рис. 2.1.);

При Л = 3 возможно использование множества модел гй: например, если считать изменение Sfrl-ST'-l] более важным, чем S[i-2]-S[i-3], то такая мо­дель может дать, например, предсказание 5,(3,[/] или, е:ли считать S[i-2]--S[i-3] и S[i]-S[i-\] равноправными, прогнозное значение £<3)[/'].


Рис. 2. /. Эволюционная модель при h—2 uh=3

Кроме того, при й=3 возникает возможность уменьшать шум. Метод заключается в следующем. После того как найдено среднее значение (S[/-1]+S[i-2]+S[i-3])/3, определим, какой из трех элементов больше отклоняется от него. Будем считать, что именно этот элемент содержит больше шума, чем остальные два, поэтому именно его учитывать не будем (или, что то же самое, положим его равным полусумме двух остальных). В качестве пред­сказания, даваемого шумовой моделью, возьмем полусумму двух остальных элементов.

Аналогично при Л=4 есть возможность взять 3 приращения ("дельты") и оставить те два, которые ближе к среднему всех трех.

Остается добавить, что ряд методов для сжатия речи с потерями (CELP, CS-ACELP, MELP) использует LPC для вычисления нескольких характери­стик фрагментов сигнала (процесс называется LPC analysis). После обратно­го процесса (LPC synthesis) получается сигнал с теми же характеристиками, но совершенно другими данными, т. е. значениями элементов.

Двумерный случай

Рассмотрим только самый простой обход плоскости' - строками. В каждой точке плоскости уже обработанные, известные элементы -выше данной точки, а также на том же уровне, но левее ее.

'Задача обхода плоскости возникает при обработке двумерных данных. Цель обхода - создание одномерного массива D из двумерного S. Подробнее смотри в разд. 2.

sri-z.-n

Sri-Ll

S[/-L+l]

st«-i]

sm

Здесь L - число элементов в строке. Ближайших к S[i] элементов - четыре. Обозначим для краткости так:

А

В

С

D

Е

У шумовой модели есть 4 варианта с Л=1,6 вариантов с й=2,4 варианта с А=3 и один с А=4:

E=tf, D + К2С + КуВ + К4А (2.3)

Можно изначально задать К\=К2=Ку=К4=\14 и корректировать Kt выше­изложенным методом. Границы будут заданы условиями: Kj>0, K1+K2+K3+ +К4=1, и, например, Ki=K3, К24 (и таким образом, Ki+Kz=l/2, достаточно корректировать К{).

У вариантов с й>2 есть возможность уменьшать шум тем же методом, что и в одномерном случае.

Таким образом, если использовать только 4 или меньше ближайших элементов, шумовая модель дает 20 вариантов: 4 - с й=1, 6 - с А=2, 8 - с А=3 и 2 - с А=4.

Эволюционная модель делает то же предположение, что и в одномер­ном случае: сохраняется линейная тенденция, приращение на текущем шаге примерно равно приращению на предыдущем. Но теперь, в двумерном слу­чае, необходимо как минимум 3 элемента, а не 2:

E=ArB + Ј2-(D-A);

E=AVD + K2(B-A); (2.4)

E=Ki-D + K2iB-A) + K3iC-B). (2.5)

Первые два варианта, по предположению эволюционной модели, сводят­ся к одному: Ki=K2=l. В третьем, при коррекции в рамках эволюционной модели, границы таковы: К\-1,К2+Ку=1.

Попробуем построить модель с А=4, объединяющую два противополож­ных полюса - шумовой и эволюционный.

При каких Ки Кг и К3 эволюционная модель (2.5) становится шумовой: (2.3)c*i-l/4?

К\=1 /4 (коэффициент при D)

Ку= 1 /4 (коэффициент при С)

К2-Ку= 1 /4 (коэффициент при В)

2= 1 /4 (коэффициент при А)

Решений нет, и правильный ответ: ни при каких. Потому что в (2.3) ко­эффициенты при С, В и А должны быть К{>0. Применяя это условие к (2.5), получаем:

(С): *3Х);

(А): К2<0;

(В): К23>0 (это несовместимо с результатами по С и А).

Тем не менее синтез шумовой и эволюционной модели при А=4 возмо­жен. Будем брать предсказание того из 20 вариантов шумовой модели, ко­торый ближе всего к предсказанию эволюционной, т. е. разность между ни­ми минимальна.

Как раз такой путь реализован в популярном алгоритме PNG, а именно в самом сложном, самом интеллектуальном его фильтре Paeth: 3 варианта шумовой модели (с использованием элементов А, В и D) и эволюционная модель (2.4). По сути это тот же метод, что и описанный выше в подразд. "Общий случай", только вместо среднего по трем точкам берется "двумер­ное эволюционное" значение и исключаются два элемента, а не один. Другой синтез возможен, если эволюционную модель модифицировать:
Е=К, D 2(В-А) +tf3-(C-B)+i:4-A; (2.6)

Е=АГ, D 2(В-А) +Л:3-(С-В)+Л:4-В; (2.7)

Е=Л:, D +*2-(В-А) +Ку(С-В)+КАС. (2.8)

Чтобы формулы описывали эволюционную модель, должно быть АГ4=0, К\=К23=1. В шумовой модели /^=1/4, а К2, Kj и КА найдем из условий: ко­эффициенты при А, В и С должны быть равны 1/4:

в случае (2.6) С: АГ3=1/4, В:К2=1/2, А: .£,= 3/4;

в случае (2.7) С: Я3=1/4, А:К2=-1/4, В:ЛГ4=3/4;

в случае (2.8) А: К2—1/4, В:/С3=-1/2, O.K^Va.

Рассмотрим, например, (2.7). Имеет смысл корректировать К\ от 1/4 (шу­мовая модель) до 1 (эволюционная); КА найдется из условия К\+КА=\; Ку=1/4; К23 от 0 (шумовая) до 1 (эволюционная), т. е. К2 от -1/4 до 3/4.

Таким образом, из (2.7) получается эволюционная модель при К\=1, К2=3/4 и шумовая при /ч=1/4, К2= -1/4.

Sk Упражнение. Каким будет синтез эволюционной и шумовой моделей в случаях (2.6) и (2.7) ?

LPC в алгоритме PNG

Для сжатия изображения можно выбрать одну из следующих LPC-mo-делей (называемых также фильтрами): 1) Е=0 (нет фильтра);

2) E=D (элемент слева);

3) Е=В (элемент сверху);

4) E=(B+D)/2;

5) вышеописанный алгоритм Paeth.

Все 5 моделей - варианты шумовой модели, и только последняя модель является комбинированной, учитывающей эволюцию.

LPCe алгоритме Lossless Jpeg

Может быть задан один из восьми предсказателей-фильтров:

1) Е=0 (нет фильтра);

2) Е=В (элемент сверху);

3) E=D (элемент слева);

4) Е=А (выше и левее);

5) E=B+D-A;

6) E=B+(D-A)/2;

7) E=D+(B-A)/2;

8) E=(B+D)/2.

Пятый, шестой и седьмой - варианты эволюционной модели, осталь­ные - шумовой.

Выбор фильтра

Итак, имеем множество фильтров Spa[X,Y\=S0(KiyS[X-i,Y-j]) дающих оценки-предсказания Spn для значения элемента в позиции (X,Y) как функ­цию S„ от значений элементов контекста, т. е. элементов, соседних с теку­щим S[X,Y].

Два уже рассмотренных (в подразд. "Общий случай") пути дальнейших действий:

1) выбрать одно значение Sp„, даваемое той функцией S„, которая точнее на заданном числе предыдущих элементов;

2) выбрать значение, вычисляемое как сумма всех Sp„, взятых с разны­ми весами: Sp = Z(WnSp„), 0<W„<1.

Кроме довольно очевидного способа - корректировки W„, весов, с кото­рыми берутся предсказания, даваемые разными фильтрами, есть и еще ва­рианты:

■ Брать те К значений Spn, которые дают Sn, лучшие на К (задаваемом чис­ле) ближайших элементов контекста (некоторые из этих Sn могут совпа­дать, и их останется меньше чем К).

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

Четвертый вариант является простым расширением первого. Третий же предполагает постановку в соответствие каждому элементу одной S„, даю­щей для него самое точное предсказание. В обоих случаях, если требуется выбрать одну S„ из нескольких 5, с одинаковым значением точности, можно посмотреть значения точности этих St на большем числе элементов.

Во 2, 3 и 4-м часто полезно уменьшить шум вышеописанным способом. И в конечном итоге сложить оставшиеся Sp = T,(Wn-SpJ. В простейшем слу­чае Wn=\IH, где Я- количество оставшихся Sn.

И еще три простых, но важных замечания.

Во-первых, сжатие обычно лучше, если значения оценок-предсказаний Spn не выходят за границы диапазона допустимых значений элементов входного потока S[i]. EcimA<S[i]<B, то и Spn[/] должны быть ^<Sp„[j]<S.

Во-вторых, если известно, что доля шума постоянна во всем блоке данных, очень полезно делать SEM до LPC, если нет другого метода для отделения шума.

И в-третьих, в каждой точке (х,у) веса Кл)) значений 5„,ь из (х-а, у-Ь) должны зависеть от расстояния до (х,у), вычисляемого как R~{a2+b2)ia. Эти веса должны убывать с увеличением расстояния R. Из четырех ближайших элементов контекста, рассмотренных в подразд. "Двумерный случай", D и В находятся на расстоянии 1, а А и С на расстоянии 2т. Поэтому, если как в формуле (2.3), шумовая модель складывает значения четырех ближайших элементов контекста с разными весами К-,:

e=a:,-d+к2с+КуВ+а:4а

имеет смысл задавать /ч=ЛТ3, ^2=^4. и еще из-за учета расстояний K-JK\=2m (и конечно, К1234= 1).

. Точно так же при вычислении точностей фильтров на элементах контек­ста ошибки их предсказаний У^ъ (а точнее, абсолютные значения этих оши­бок) должны учитываться с весами АГа,ь, зависящими от расстояний: К^Ща22)).

У эволюционной модели, использующей 4 элемента контекста (А, В, С, D), приращения (В-А), (D-A) и (С-В) находятся на равном расстоянии и имеют одинаковый вес. Но если используется больше четырех элементов, тоже необходимо вычислять расстояния.

Характеристики методов семейства LPC:

Степень сжатия: увеличивается примерно в 1.1-1.9 раза.

Типы данных: методы предназначены для сжатия количественных | данных.

Симметричность по скорости: в общем случае 1:1.

Характерные особенности: чем меньше доля "шума" в данных, тем ^ выгоднее применение методов LPC.