- •Десятичная упаковка
- •Три в одном (упаковка байта)
- •Компандирование
- •Применение rle
- •Кодирование Хаффмана
- •Ошибки при передаче информации Биты четности
- •Коды с исправлением ошибок
- •Код Хэмминга. Пример работы алгоритма Вступление
- •Как это работает
- •Подготовка
- •Вычисление контрольных бит
- •Декодирование и исправление ошибок
- •Заключение
Лаб8. Сжатие данных. Ошибки при передаче информации Основы информатики
Десятичная упаковка
предназначена для упаковки символьных данных, состоящих только из чисел. Вместо используемых 8 бит под символ можно вполне рационально использовать всего лишь 4 бита для десятичных и шестнадцатеричных цифр, 3 бита для восьмеричных и т.д. При подобном подходе уже ощущается сжатие минимум 1:2.
Три в одном (упаковка байта)
Даны три целых неотрицательных числа: B, G, C. Число B равно нулю или единице, число G находится в диапазоне от 0 до 7, а число C – в диапазоне от 0 до 15. Составить из них число A так, что старший бит его двоичного представления равен B, три следующих бита составляют число G, а младшие четыре бита – число C.Например, если B = 1, G = 3, C =14, то A = 190.
Input: одна строка, содержащая три неотрицательных целых числа B, G, C через пробел.
Output: одна строка, содержащая число A.
Example:
Input |
Output |
1 3 14 |
190 |
Решение.
var a,b, g,c:byte;
begin
readln(b,g,c);
a:=128*b+g*16+c;
writeln(a);
end.
Компандирование
Так называется метод упаковки звука. Название происходит от английского compander, что означает compressing/expanding coder/decoder. При упаковке звука значение амплитуды звука заменяют логарифмом этого значения, округляют и упаковывают полученные значения, что позволяет сжать информацию в два раза. Действительно, при 8-ми битном кодировании звука амплитуда A не превосходит 27, значит, log2 A не превосходит 7 и может быть закодирован тремя двоичными разрядами. Еще один разряд на знак амплитуды и получается четыре разряда.
Итак, Вам предлагается реализовать следующий алгоритм. Даны два целых числа в диапазоне от –32768 до 32767 – амплитуды звука. Требуется упаковать их оба в слово – беззнаковое двухбайтовое число. При упаковке дробная часть логарифма отбрасывается, если амплитуда представлялась отрицательным числом, добавляем единицу, иначе ноль. После преобразования упаковываем в два байта. И наоборот.
Решение
function log(a:longint):byte;
var l:real;t:longint;
begin
l:=ln(a)/ln(2);
t:=trunc(l);
log:=byte(t)
end;
function sig(a:integer):byte;
begin
if a>=0 then sig:=0;
if a<0 then sig:=1;
end;
function make_byte(a:integer):byte;
var l:byte;
begin
l:=log(abs(a));
if sig(a)=1 then l:=l+128;
make_byte:=l
end;
var a1, a2:integer;
l1, l2:integer;
c:word;
begin
readln(a1,a2);
c:=(word(make_byte(a1)) shl 8);
c:=c+make_byte(a2);
writeln(c)
end.
- Относительное кодирование является кодированием с потерей качества. Оно основано на том, что последующий элемент данных отличается от предыдущего на величину, занимающую в памяти меньше места, чем сам элемент. Характерным примером является аудиосжатие ADPCM (Adaptive Differencial Pulse Code Modulation), широко применяемое в цифровой телефонии и позволяющее сжимать звуковые данные в соотношении 1:2 с практически незаметной потерей качества.
- Символьное подавление - способ сжатия информации, при котором длинные последовательности из идентичных данных заменяются более короткими.
