ЭУМК по дисциплине "Программирование проблемно-ориентированных вычислительных средств реального времени" › Теория › Тема 6. Использование проблемно-ориентированных процессоров для компрессии данных

# Электронный учебно-методический
комплекс по дисциплине
"Программирование проблемно-ориентированных вычислительных средств реального времени"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

РАЗДЕЛ 2.
ПРОГРАММИРОВАНИЕ РАЗЛИЧНЫХ ЗАДАЧ ОБРАБОТКИ СИГНАЛОВ НА ПРОБЛЕМНО-ОРИЕНТИРОВАННЫХ ПРОЦЕССОРАХ
Тема 6. Использование проблемно-ориентированных процессоров для компрессии данных
6.1. Алгоритм компрессии сигналов по методу μ-Law
6.1.1. Два основных метода сжатия данных

При компрессии (сжатии) данных по амплитуде (английский термин COMPANDING = COMpressing and exPANDING (сжатие и расширение)) используются два основных стандарта:
m-Law – используется в США, Японии;
A-Law – принят в Европе.
Первый из них описывается выражением:

где F(x) – сжатое выходное значение, x – нормализованный выходной сигнал (диапазон от –1 до +1), μ=255 – параметр сжатия, sgn(x) – знак (±) x, а второй выражением:

где F(x) – сжатое выходное значение, x – нормализованный выходной сигнал (диапазон от –1 до +1), А=87,6 – параметр сжатия, sgn(x) – знак (±) x.
В графическом виде процесс сжатия можно проиллюстрировать следующим образом (рис. 6.1):

###

### Рисунок 6.1 – Сжатие данных на основе логарифмической функции

Оба метода дают примерно одинаковую картинку и заметные отличия начинаются с уровня 1/32. При этом первый метод дает несколько завышенные значения относительно логарифмической шкалы что позволяет перекрыть несколько больший диапазон входного сигнала (до 13 бит после запятой), тогда как предел для второго метода – 12 бит.
При кодировании формируется восьмибитное значение следующего формата Y = PSSSQQQQ, где P – бит знака (0 – плюс, 1 – минус), SSS – трехбитный номер сегмента, QQQQ – четырехбитный уровень квантования.
В процессе передачи полученные значения кода могут инвертироваться целиком или четные/нечетные биты.
В таблице 6.1 приведены теоретические (рассчитанные по формулам) и практические (по выше приведенным таблицам и алгоритмам) значения кодов для двух методов (практические значения приведены в графе КОД).

Таблица | 6.1 – Сравнение двух методов сжатия

| Кодирование μ-255 | Кодирование A-Law
Исходный код | 10cc | 16cc | Дробь | код | 10cc | 16cc | дробь | код
01111111111111 | 127 | 7F | 0.9999 | 7F | 127 | 7F | 0.9999 | 7F
01000000000000 | 112 | 70 | 0.8757 | 70 | 112 | 70 | 0.8733 | 70
00100000000000 | 96 | 60 | 0.7521 | 60 | 96 | 60 | 0.7467 | 60
00010000000000 | 81 | 51 | 0.6299 | 50 | 79 | 4F | 0.6200 | 50
00001000000000 | 65 | 41 | 0.5103 | 41 | 63 | 3F | 0.4934 | 40
00000100000000 | 51 | 33 | 0.3956 | 32 | 47 | 2F | 0.3667 | 30
00000010000000 | 37 | 25 | 0.2897 | 24 | 31 | 1F | 0.2401 | 20
00000001000000 | 25 | 19 | 0.1977 | 18 | 16 | 10 | 0.1250 | 10
00000000100000 | 16 | 10 | 0.1246 | 10 | 8 | 08 | 0.0625 | 08
00000000010000 | 9 | 09 | 0.0729 | 08 | 4 | 04 | 0.0313 | 04
00000000001000 | 5 | 05 | 0.0401 | 04 | 2 | 02 | 0.0156 | 02
00000000000100 | 3 | 03 | 0.0212 | 02 | 1 | 01 | 0.0078 | 01
00000000000010 | 1 | 01 | 0.0109 | 01 | 1 | 01 | 0.0039 | 00
00000000000001 | 1 | 01 | 0.0055 | 01 | 0 | 00 | 0.0019 | –

6.1.2. Принцип сжатия данных по методу μ-255

Границы перехода между сегментами для данного метода имеют следующие значения:
31 = 26 –33
95 = 27 –33
223 = 28 –33
. . .
4063 = 212 –33
Принцип кодирования при данном методе можно представить в следующем виде (табл. 6.2):

Таблица | 6.2 – Принцип кодирования для метода μ-255

Двоичные входные значения | Сжатое слово данных
Бит: 12 11 10 9 8 7 6 5 4 3 2 1 0 | Бит: 6 5 4 3 2 1 0
0 0 0 0 0 0 0 1 Q3 Q2 Q1 Q0 х | 0 0 0 Q3 Q2 Q1 Q0
0 0 0 0 0 0 1 Q3 Q2 Q1 Q0 х х | 0 0 1 Q3 Q2 Q1 Q0
0 0 0 0 0 1 Q3 Q2 Q1 Q0 х х х | 0 1 0 Q3 Q2 Q1 Q0
0 0 0 0 1 Q3 Q2 Q1 Q0 х х х х | 0 1 1 Q3 Q2 Q1 Q0
0 0 0 1 Q3 Q2 Q1 Q0 х х х х х | 1 0 0 Q3 Q2 Q1 Q0
0 0 1 Q3 Q2 Q1 Q0 х х х х х х | 1 0 1 Q3 Q2 Q1 Q0
0 1 Q3 Q2 Q1 Q0 х х х х х х х | 1 1 0 Q3 Q2 Q1 Q0
1 Q3 Q2 Q1 Q0 х х х х х х х х | 1 1 1 Q3 Q2 Q1 Q0

Примеры:
(1) +86610 -> +86610+3310 = +89910 = +38316 = (0)0 0011 1000 00112 -> (0)100 11002 = 4C16
(2) -251210 -> -251210-3310 = -254510 = -9F116 = (1)0 1001 1111 00012 -> (1)110 00112 = E316

6.1.3. Принцип восстановления данных по методу μ-255

Принцип декодирования при данном методе можно представить в следующем виде (табл. 6.3):

Таблица | 6.3 – Принцип декодирования для метода μ-255

Сжатое слово данных | Двоичные входные значения
Бит: 6 5 4 3 2 1 0 | Бит: 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 Q3 Q2 Q1 Q0 | 0 0 0 0 0 0 0 1 Q3 Q2 Q1 Q0 1
0 0 1 Q3 Q2 Q1 Q0 | 0 0 0 0 0 0 1 Q3 Q2 Q1 Q0 1 0
0 1 0 Q3 Q2 Q1 Q0 | 0 0 0 0 0 1 Q3 Q2 Q1 Q0 1 0 0
0 1 1 Q3 Q2 Q1 Q0 | 0 0 0 0 1 Q3 Q2 Q1 Q0 1 0 0 0
1 0 0 Q3 Q2 Q1 Q0 | 0 0 0 1 Q3 Q2 Q1 Q0 1 0 0 0 0
1 0 1 Q3 Q2 Q1 Q0 | 0 0 1 Q3 Q2 Q1 Q0 1 0 0 0 0 0
1 1 0 Q3 Q2 Q1 Q0 | 0 1 Q3 Q2 Q1 Q0 1 0 0 0 0 0 0
1 1 1 Q3 Q2 Q1 Q0 | 1 Q3 Q2 Q1 Q0 1 0 0 0 0 0 0 0

Примеры:
(1) 4C16 = (0)100 11002 -> (0)0 0011 1001 00002 = +39016 = +91210 -> +91210-3310 = +87910
(2) E316 = (1)110 00112 -> (1)0 1001 1100 00002 = -9C016 = -249610 -> -249610+3310 = -246310

6.1.4. Алгоритмы сжатия и восстановления данных по методу μ-255

Схемы алгоритмов кодирования и декодирования данных по методу μ-255 представлены на рис. 6.2 и 6.3.

###

### Рисунок 6.2 – Алгоритм сжатия данных по методу μ-255

###

### Рисунок 6.3 – Алгоритм восстановления данных по методу μ-255

6.1.5. Программная реализация метода μ-255

Ниже представлены примеры программ сжатия и восстановления данных по методу μ-255.

    ; ППО ЭВС РВ Лекции
    ; (c) Клюс В.Б. 08/12/04 07:00
    ; Сжатие и восстановление сигналов методом m-law
    	.mmregs				; Определение регистров
    TEMP	.set	60h
    ONE	.set	61h
    X	.set	62h
    Y	.set	63h
    P	.set	64h
    Z	.set	65h
    Cnt	.set	2048-1			; Число элементов массива
    Stp	.set	32				; Шаг приращения
    Buf	.set	1000h				; Буфер ввода
    BufI	.set	2000h				; Буфер ввода
    BufO	.set	3000h				; Буфер вывода
    	.def	_c_int00			; Метка начала программы
    	.align	80h			; Выровнять на начало страницы
    _c_int00:
    	stm	#BufI, SP			; Указатель стека
    	ld	#0, DP			; Текущая страница
    	st	#1, ONE
    	ssbx	SXM				; Расширение знака
    	ssbx	OVM				;
    	stm	#Cnt, BRC
    	ld	#8000h-Stp, a
    	rptbd	Fill-1
    	stm	#BufI, ar1			;2w

    	add	#Stp, a
    	stl	a, *ar1+
    Fill
    	stm	#Cnt, ar1
    	stm	#BufI, ar2
    	stm	#BufO, ar3
    	stm	#Buf, ar4
    Loop	mvdk	*ar2+, X
    ;	stm	#-0aaah, X
    	call	MlawCom
    	mvkd	Y, *ar3+
    	call	MlawExp
    	call	MlawTab
    	mvkd	X, *ar4+
    	mvkd	Z, *ar4(Cnt)
    	banz	Loop, *ar1-
    	nop
    	nop

    MlawCom:					; Normal -> m-law
    ;	portr	PA0, X
    ;;	stm	#4, X
    	ld	X, 16, a
    	bcd	ts1, ageq
    ;	bcd	ts1, aleq			; для таблицы
    	stm	#0, P				;2w

    	orm	#8000h, P			;
    ts1:	abs	a
    	rsbx	OVA
    	add	#210h, 14, a		;+33
    	bcd	ts2, aov
    	exp	a				;1w
    	ld	#7, b				;1w

    	sub	T, b
    	addm	#-6, T
    	ld	bl, 16, b
    	norm	a
    	and	#0F0h, 16, a
    	or	b, 8, a
    ts2	sfta	a, 4
    	add	P, 16, a
    	cmpl	a
    	and	#0FF00h, 16, a
    	sth	a, Y
    ;	portw	Y, PA0
    	ret
    MlawExp:					; m-law -> Normal
    ;	portr	PA0, Y
    	ld	Y, 16, a
    	cmpl	a
    	bcd	tc1, ageq
    	stm	#0, P				;2w

    	orm	#8000h, P			;
    tc1:	ld	a, -4, b
    	and	#7000h, 16, a		; S
    	and	#0F0h, 16, b

    	add	#-1000h, 16, a
    	sth	a, -12, T
    	add	#108h, 16, b		; +33
    	norm	b
    tc2	bitf	P, #8000h
    	bcd	tc3, ntc
    	add	#-108h, 15, b		;-33
    	neg	b
    tc3	sth	b, X
    ;	portw	X, PA0
    	ret
    MlawTab:					; A-law -> Normal
    	ld	Y, 8, a
    ;	cmpl	a
    	and	#0FFh, 16, a
    	add	#MLAW, 16, a
    	sth	a, ar5
    	nop
    	nop
    	ld	*ar5, 2, b
    	stl	b, Z
    	ret
    	.align	80h			; Выровнять на начало страницы
    	.include "M-law.inc"
    	.end					; Конец программы

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах
© БГУИР , 2012