compand

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

Описание

пример

out = compand(in,param,v) выполняет сжатие mu-закона на последовательности входных данных. 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-закона. Установите значение для к 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-закона. Примените квантование и расширьте квантованный сигнал. Вычислите среднеквадратическое искажение сигнала companded.

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);

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

[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 object. The axes object with title Comparison Between Original, Quantized, and Expanded Signals contains 3 objects of type line. These objects represent Original, Quantized, Expanded.

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

свернуть все

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

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

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

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

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

  • mu/compressor

  • mu/expander

  • A/compressor

  • A/expander

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

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

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

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

свернуть все

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

Алгоритмы

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

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

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

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

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

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

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

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

A является параметром A-закона компандера, log натуральный логарифм и sgn сигнум-функция (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] Sklar, Бернард. Цифровая связь: основные принципы и приложения. Englewood Cliffs, NJ: Prentice Hall, 1988.

Смотрите также

Функции

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