exponenta event banner

compand

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

Описание

пример

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

пример

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

Примеры

свернуть все

Создайте последовательность данных.

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

     2     4     6     8    10    12

Сжимайте последовательность данных с помощью mu-law компрессора. Установите значение для 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-law. Расширенная последовательность данных почти идентична исходной последовательности данных.

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-law. Применение квантования и расширение квантованного сигнала. Вычислите среднеквадратичное искажение компандированного сигнала.

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 или A компаньона, указанное как положительный скаляр. Преобладающие значения, используемые на практике, 255 и A = 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).

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

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

y 1 = sgn (y) (1 мкс) ((1 +  мкс )  |  y  | − 1) для - 1≤y≤1

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

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

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

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

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

Ссылки

[1] Склар, Бернард. Цифровые коммуникации: основы и приложения. Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1988.

См. также

Функции

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