Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб10.Сжатие данных.Ошибки при передаче информации.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
573.45 Кб
Скачать

Лаб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 с практически незаметной потерей качества.

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