В определенных приложениях, таких как речевая обработка, распространено использовать вычисление логарифма, названное компрессором, перед квантованием. Обратная работа компрессора называется расширителем. Комбинация компрессора и расширителя называется компандером.
Функция compand
поддерживает два вида компандеров: µ-law и компандеры A-закона. Его страница с описанием перечисляет оба закона о компрессоре.
Квантуйте экспоненциальный сигнал с и без компандирования и сравните среднеквадратические искажения.
Установите μ-law параметр Mu
.
Mu = 255;
Создайте экспоненциальный сигнал и найдите его максимальное значение.
sig = exp(-4:0.1:4); V = max(sig);
Квантуйте сигнал с помощью интервалов равной длины. Установите аргументы partition
и codebook
, принимающие квантование на шесть битов.
partition = 0:2^6-1; codebook = 0:2^6; [~,~,distor] = quantiz(sig,partition,codebook);
Сожмите сигнал с помощью функции compand
. Примените квантование и расширьте квантованный сигнал. Вычислите среднеквадратическое искажение.
compsig = compand(sig,Mu,V,'mu/compressor'); [~,quants] = quantiz(compsig,partition,codebook); newsig = compand(quants,Mu,max(quants),'mu/expander'); distor2 = sum((newsig-sig).^2)/length(sig);
Сравните среднеквадратические искажения. Вывод показывает, что искажение меньше, когда компандирование используется. Это вызвано тем, что интервалы равной длины хорошо подходят для логарифма sig
, но не хорошо подходят для самого sig
.
[distor, distor2]
ans = 1×2
0.5348 0.0397
Постройте сигнал и его companded версию.
plot([sig' compsig']) legend('Original','Companded','location','nw')