compand

Кодирование источника mu-закон или компрессор A-закон или расширитель

Описание

пример

out = compand(in,param,v) выполняет сжатие mu-закона на последовательности входных данных. The param вход задает значение сжатия mu-закон и должен быть установлен на mu значение для расчета компрессора mu-закон (на практике используется значение mu-закон 255). v задает пиковые величины последовательности входных данных.

пример

out = compand(in,param,v,method) выполняет сжатие или расширение mu-закона или A-закона на последовательности входных данных. param задает значение компании mu-закон или A-закон (на практике используется значение mu-закон 255 и значение A-закон 87,6). method задает тип расчета компрессора или расширителя для функции, которая должна выполняться в последовательности входных данных.

Примеры

свернуть все

Сгенерируйте последовательность данных.

data = 2:2:12
data = 1×6

     2     4     6     8    10    12

Сжатие последовательности данных с помощью компрессора mu-закон. Установите значение для mu равным 255. Теперь последовательность сжатых данных находится в диапазоне от 8,1 до 12.

compressed = compand(data,255,max(data),'mu/compressor')
compressed = 1×6

    8.1644    9.6394   10.5084   11.1268   11.6071   12.0000

Разверните последовательность сжатых данных с помощью расширителя mu-закон. Расширенная последовательность данных почти идентична исходной последовательности данных.

expanded = compand(compressed,255,max(data),'mu/expander')
expanded = 1×6

    2.0000    4.0000    6.0000    8.0000   10.0000   12.0000

Вычислите различие между исходной последовательностью данных и расширенной последовательностью.

diffvalue = expanded - data
diffvalue = 1×6
10-14 ×

   -0.0444    0.1776    0.0888    0.1776    0.1776   -0.3553

Сгенерируйте последовательность данных.

data = 1:5;

Сжатие последовательности данных с помощью компрессора A-закона. Установите значение A равным 87,6. Теперь последовательность сжатых данных находится в диапазоне от 3,5 до 5.

compressed = compand(data,87.6,max(data),'A/compressor')
compressed = 1×5

    3.5296    4.1629    4.5333    4.7961    5.0000

Разверните последовательность сжатых данных с помощью расширителя A-закона. Расширенная последовательность данных почти идентична исходной последовательности данных.

expanded = compand(compressed,87.6,max(data),'A/expander')
expanded = 1×5

    1.0000    2.0000    3.0000    4.0000    5.0000

Вычислите различие между исходной последовательностью данных и расширенной последовательностью.

diffvalue = expanded - data
diffvalue = 1×5
10-14 ×

         0         0    0.1332    0.0888    0.0888

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

Создайте экспоненциальный сигнал и вычислите его максимальное значение.

sig = exp(-4:0.1:4);
V = max(sig);

Квантуйте сигнал с помощью интервалов равной длины. Установите значения разделов и кодовых книг, принимая 6-битное квантование. Вычислите среднее квадратное искажение.

partition = 0:2^6 - 1;
codebook = 0:2^6;
[~,qsig,distortion] = quantiz(sig,partition,codebook);

Сжатие сигнала при помощи compand функция, сконфигурированная для применения метода mu-закон. Примените квантование и разверните квантованный сигнал. Вычислите среднее квадратное искажение компилируемого сигнала.

mu = 255; % mu-law parameter
csig_compressed = compand(sig,mu,V,'mu/compressor');
[~,quants] = quantiz(csig_compressed,partition,codebook);
csig_expanded = compand(quants,mu,max(quants),'mu/expander');
distortion2 = sum((csig_expanded - sig).^2)/length(sig);

Сравните среднее квадратное искажение для квантования с комбинированным компилированием и квантованием. Искажение для компилируемого и квантованного сигнала на порядок величине ниже, чем искажение квантованного сигнала. Интервалы равной длины хорошо подходят для логарифма экспоненциального сигнала, но не хорошо подходят для самого экспоненциального сигнала.

[distortion, distortion2]
ans = 1×2

    0.5348    0.0397

Постройте график исходного экспоненциального сигнала, квантованного сигнала и расширенного сигнала. Масштабирование оси, чтобы выделить ошибку квантованного сигнала на более низких уровнях сигнала.

plot([sig' qsig' csig_expanded']);
title('Comparison Between Original, Quantized, and Expanded Signals');
xlabel('Interval');
ylabel('Apmlitude');
legend('Original','Quantized','Expanded','location','nw');
axis([0 70 0 20])

Figure contains an axes. The axes with title Comparison Between Original, Quantized, and Expanded Signals contains 3 objects of type line. These objects represent Original, Quantized, Expanded.

Входные параметры

свернуть все

Последовательность входных данных, заданная как вектор-строка. Этот вход задает последовательность данных для функции, чтобы выполнить сжатие или расширение.

Типы данных: double

mu или Значение компании, заданное как положительная скалярная величина. Преобладающими значениями, используемыми на практике, являются u = 255 и A = 87.6.

Типы данных: double

Тип компрессора или расчета расширителя для функции, выполняемой в последовательности входных данных, заданной в качестве одного из следующих значений.

  • mu/compressor

  • mu/expander

  • A/compressor

  • A/expander

Типы данных: char | string

Пиковая величина последовательности входных данных, заданная как положительная скалярная величина.

Типы данных: double

Выходные аргументы

свернуть все

Сжатый или расширенный сигнал, возвращаемый как положительный вектор-строка. Размер out соответствует стандарту входного параметра in.

Алгоритмы

В некоторых приложениях, таких как обработка речи, использование логарифмического расчета (называемого компрессором) перед квантованием входных данных является общим. Обратная операция компрессора называется расширителем. Комбинация компрессора и расширителя называется компандером.

Для заданного сигнала, x, выход (µ -law) компрессора является

y=log(1+μ|x|)log(1+μ)sgn(x).

µ является параметром β-закона компаньона, log является естественным логарифмом, и sgn - функция signum (sign в MATLAB®).

Это расширение для входного сигнала, x задается обратной функцией y-1,

y1=sgn(y)(1μ)((1+μ)|y|1)         для -1y1

Для заданного сигнала, x, выход (A -law) компрессора является

y={A|x|1+logAsgn(x)(1+log(A|x|))1+logAsgn(x)для 0|x|1Aдля 1A<|x|1

A является параметром A-закона компаньона, log является естественным логарифмом, и sgn - функция signum (sign в MATLAB).

Расширение A-закона для входного сигнала x задается обратной функцией y-1,

y1=sgn(y){|y|(1+log(A))Aexp(|y|(1+log(A))1)Aдля 0|y|<11+log(A)для 11+log(A)|y|<1

Ссылки

[1] Склар, Бернард. Цифровые коммуникации: основы и приложения. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1988.

См. также

Функции

Представлено до R2006a