![]() ![]() |
Кодиране с линейно предсказване
Кодирането с линейно предсказване (или LPC – Linear Predictive Coding) използва идея близка до подобрението на RLE за последователни, близки числа.
LPC използва подобен механизъм за сравнение на всеки символ от входното съобщение с друг елемент. Колкото този друг елемент е по-близък до сравнявания с него, толкова повече намалява амплитудата на кодираното съобщение.
Очевидно, най-подходящ елемент, който да се използва за базов и спрямо който да се извършва сравнението с останалите символи би бил елемент, който е максимално близък до средната стойност на останалите елементи. Стойността на този базов елемент може да се изчисли като математическото очакване на кода на симовла от входното съобщение.
![]() |
Математическо очакване
Математическото очакване на дискретна случайна велична x, приемаща стойности x1, x2, ... , xn с вероятности P(x2), P(x2), .... ,P(x3) се изчислява като
|
Преди да пристъпим към изчисляване на дадено очакване, трябва да знаем как да изчислим дадена вероятност.
Разглеждаме случайна велична x, която приема стойност 0 или 1 в зависимост от това, дали се пада ези или тура при хвърляне на монета.
Извършваме 10 000 хвърляния и получаваме 5043 пъти тура и 4957 пъти ези. Следователно вероятността x да стане 1 ( т.е. да се падне тура ) е 5043 / 10 000 = 0,5043.
Ако разгледаме зарче за игра, стойностите на случайната величана ще бъдат 1,2,3,4,5 и 6 и са равновероятни. Тогава, вероятността да се падне например 2 е
P ( 2 ) = 3 / 6 = 1 / 2
Аналогично, вероятността да се падне всяко едно от числата i на зарчето е
P( i ) = 1 / 6, 1 ≤ i ≤ 6
В такъв случай, математическото очакване за зарчето ще бъде:
|
|||
= 1 . ( 1 / 6 ) + 2 . ( 1 / 6 ) + 3 . ( 1 / 6 ) + 4 . ( 1 / 6 ) + 5 . ( 1 / 6 ) + 6 . ( 1 / 6 ) = |
|||
= ( 1 + 2 + 3 + 4 + 5 + 6 ) / 6 = 21 / 6 = 3,5 |
По този начин получаваме, че 3, 5 е средния брой точки които се падат от зарчето.
![]() |
ВАЖНО 3,5 не е естествено число и не е стойност на случайната величина. Очевидно, не е възможно да хвърлим 3,5. |
Как се прилага математическото очакване в контекста на теорията на компресията:
![]() |
Пример Нека е даден текст от 200 букви, като тяхното разпределние по думи е следното:
Имайки предвид, че общия брой думи в текста е 74 + 31 + 10 + 2 + 1 = 118, можем да изчислим, че вероятността следващата дума да има k букви е : P ( k ) = (брой думи с дължина k) / 118, k I { 1, 2, 3, 5, 24 } Изчисляваме очакването:
|
![]() |
Кодиране с линейно предсказване Кодирането с линейно предсказване работи като в процеса на преминване на входното съобщение натрупва статистически данни и пресмята очакването за всеки един символ. На изхода се предава единствено разликата между очакването и реалната стойност на кодирания символ. Вместо да изчислява наново очакването за всеки отделен символ, което би било крайно неефективно, алгоритъмът използва рекурентна връзка между старата стойност EXст и новото очакване – EXнов. В сила е: EXнов = ( (n – 1). EXст + код_на_символ ) / n Където: - n е дължината на съобщението (в брой знаци). - код_на_символ е кодът на текущия знак спрямо конкретната кодираща таблица (например ASCII). - EXст = { x1 |