Квантизаторы

Скалярные квантизаторы

Анализ и синтез речи

Можно использовать блоки от библиотеки DSP System Toolbox™ Quantizers, чтобы разработать скалярные энкодеры квантизатора и декодеры. Речевой сигнал обычно представляется в цифровом формате, который является последовательностью битов. Для устройства хранения данных и приложений передачи, желательно сжать сигнал путем представления его с как можно меньшим количеством битов при поддержании его перцепционного качества. Квантование является процессом представления сигнала со сниженным уровнем точности. Если вы сокращаете число битов, выделенных для квантования вашего речевого сигнала, сигнал искажен, и речевое качество ухудшается.

В узкополосном цифровом сжатии речи речевые сигналы выбираются на уровне 8 000 выборок в секунду. Каждая выборка обычно представляется на 8 битов. Это 8-битное представление соответствует небольшому уровню 64 кбит в секунду. Дальнейшее сжатие возможно за счет качества. Большинство текущих речевых кодеров уровня младшего бита основано на принципе линейного прогнозирующего речевого кодирования. Эта тема показывает вам, как использовать Скалярный Энкодер Квантизатора и Скалярные блоки Декодера Квантизатора, чтобы реализовать простой речевой кодер.

  1. Введите ex_sq_example1 в командной строке MATLAB®, чтобы открыть модель в качестве примера.

    Эта модель предварительно подчеркивает входной речевой сигнал путем применения КИХ-фильтра. Затем это вычисляет отражательные коэффициенты каждого кадра с помощью алгоритма Левинсона-Дербина. Модель использует эти отражательные коэффициенты, чтобы создать аналитический фильтр линейного предсказания (структура решетки). Затем, модель вычисляет остаточный сигнал путем фильтрации каждого кадра предварительно подчеркнутых речевых выборок с помощью отражательных коэффициентов. Остаточный сигнал, который является выводом аналитического этапа, обычно имеет более низкую энергию, чем входной сигнал. Блоки на этапе синтеза модели фильтруют остаточный сигнал с помощью отражательных коэффициентов и применяют фильтр de-акцента все-полюса. Фильтр de-акцента является инверсией фильтра перед акцентом. Результатом является полное восстановление исходного сигнала.

  2. Запустите эту модель.

  3. Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала и слушайте и оригинал и обработанный сигнал.

    Нет никакой значительной разницы между двумя, потому что никакое квантование не выполнялось.

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

Идентифицируйте свои остаточные и отражательные коэффициенты сигнала

В предыдущей теме, Анализе и Синтезе Речи, вы изучили теорию позади Анализа LPC и Синтеза Речевой модели в качестве примера. В этой теме вы задаете остаточный сигнал и отражательные коэффициенты в вашем рабочем пространстве MATLAB как переменные E и K, соответственно. Позже, вы используете эти значения, чтобы создать ваши скалярные квантизаторы:

  1. Откройте модель в качестве примера путем ввода ex_sq_example2 в командной строке MATLAB.

  2. Сохраните образцовый файл как ex_sq_example2 в вашей рабочей папке.

  3. От библиотеки Simulink® Sinks перетащите два К блокам Рабочей области в вашу модель.

  4. Соедините вывод блока Левинсона-Дербина к одному из К блокам Рабочей области.

  5. Дважды кликните этот блок To Workspace и установите параметр Variable name на K. Нажмите OK.

  6. Соедините вывод блока Time-Varying Analysis Filter к другому блоку To Workspace.

  7. Дважды кликните этот блок To Workspace и установите параметр Variable name на E. Нажмите OK.

    Ваша модель должна теперь выглядеть подобной этой фигуре.

  8. Запустите свою модель.

    Остаточный сигнал, E, и ваши отражательные коэффициенты, K, задан в рабочем пространстве MATLAB. В следующей теме вы используете эти переменные, чтобы разработать ваши скалярные квантизаторы.

Создайте скалярный квантизатор

В этой теме вы создаете скалярные энкодеры квантизатора и декодеры, чтобы квантовать остаточный сигнал, E, и отражательные коэффициенты, K:

  1. Если модель, в которой вы создали, Идентифицирует, что Ваши Остаточные и Отражательные Коэффициенты Сигнала не открыты на вашем рабочем столе, можно открыть эквивалентную модель путем ввода ex_sq_example2 в подсказке команды MATLAB.

  2. Запустите эту модель, чтобы задать переменные E и K в рабочем пространстве MATLAB.

  3. От библиотеки Quantizers перетащите блок Scalar Quantizer Design в свою модель. Дважды кликните этот блок, чтобы открыть графический интерфейс пользователя Design Tool SQ.

  4. Для параметра Training Set введите K.

    Переменная K представляет отражательные коэффициенты, которые вы хотите квантовать. По определению они колеблются от-1 до 1.

    Примечание

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

  5. Для параметра Number of levels введите 128.

    Примите, что ваша система сжатия имеет 7 битов, чтобы представлять каждый отражательный коэффициент. Это означает, что это способно к представлению 27 или 128 значений. Параметр Number of levels равен общему количеству кодовых комбинаций в книге шифров.

  6. Установите параметр Block type на Both.

  7. Для параметра Encoder block name введите SQ Encoder - Reflection Coefficients.

  8. Для параметра Decoder block name введите SQ Decoder - Reflection Coefficients.

  9. Убедитесь, что ваша желаемая целевая модель, ex_sq_example2, является текущей моделью. Можно ввести gcs в Окне Команды MATLAB, чтобы отобразить имя текущей модели.

  10. В графический интерфейсе пользователя Design Tool SQ нажмите кнопку Design and Plot, чтобы применить изменения, которые вы внесли в параметры.

    Графический интерфейс пользователя должен выглядеть подобным следующей фигуре.

  11. Нажмите кнопку Generate Model.

    Два новых блока, Энкодер SQ - Отражательные Коэффициенты и Декодер SQ - Отражательные Коэффициенты, появляются в вашем образцовом файле.

  12. Нажмите SQ Design Tool GUI и, для параметра Training Set, введите E.

  13. Повторите шаги 5 - 11 для переменной E, которая представляет остаточный сигнал, который вы хотите квантовать. На шагах 6 и 7 назовите свой Энкодер SQ блоков - Невязку и Декодер SQ - Невязка.

    Если вы завершили эти шаги, два новых блока, Энкодер SQ - Невязка и Декодер SQ - Невязка, появляются в вашем образцовом файле.

  14. Закройте графический интерфейс пользователя Design Tool SQ. Вы не должны сохранять сеанс Design Tool SQ.

    Вы теперь создали скалярный энкодер квантизатора и скалярный декодер квантизатора для каждого сигнала, который вы хотите квантовать. Вы готовы квантовать остаточный сигнал, E, и отражательные коэффициенты, K.

  15. Сохраните модель как ex_sq_example3. Ваша модель должна выглядеть подобной следующей фигуре.

  16. Запустите свою модель.

  17. Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала, и слушайте оба сигнала.

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

Вы теперь квантовали остаточные и отражательные коэффициенты. Битрейт системы квантования вычисляется как (биты на кадр) * (частота кадров).

В этом примере битрейт [(80 остаточных выборок/кадров) * (7 битов/выборки) + (12 отражательных содействующих выборок/кадров) * (7 битов/выборки)] * (100 кадров/секунда), или 64,4 кбита в секунду. Это выше, чем большинство современных речевых кодеров, которые обычно имеют немного уровня 8 - 24 кбит в секунду. Если вы сокращаете число битов, выделенных для квантования отражательных коэффициентов или остаточного сигнала, полный битрейт уменьшился бы. Однако речевое качество также ухудшилось бы.

Для получения информации об уменьшении битрейта, не влияя на речевое качество, смотрите Векторные Квантизаторы.

Векторные квантизаторы

Создайте свою векторную модель квантизатора

В предыдущем разделе вы создали скалярные энкодеры квантизатора и декодеры и использовали их, чтобы квантовать ваши остаточные и отражательные коэффициенты сигнала. Битрейт вашей скалярной системы квантования составлял 64,4 кбита в секунду. Этот битрейт выше, чем большинство современных речевых кодеров. Чтобы разместить большее количество пользователей в каждом канале, необходимо понизить этот битрейт при поддержании качества речевого сигнала. Можно использовать векторные квантизаторы, которые используют корреляции между каждой выборкой сигнала, чтобы выполнить эту задачу.

В этой теме вы изменяете свою скалярную модель квантования так, чтобы вы использовали квантизатор вектора разделения, чтобы квантовать ваши отражательные коэффициенты:

  1. Откройте модель, подобную той, в которой вы создали, Создают Скалярный Квантизатор путем ввода ex_vq_example1 в подсказке команды MATLAB. Модель ex_vq_example1 в качестве примера добавляет новую Векторную подсистему Квантования LSF в модель ex_sq_example3. Эта подсистема предварительно сконфигурирована, чтобы работать векторным квантизатором. Можно использовать эту подсистему, чтобы закодировать и декодировать отражательные коэффициенты с помощью метода квантования вектора разделения.

  2. Удалите Энкодер SQ – Отражательные Коэффициенты и Декодер SQ – Отражательные Содействующие блоки.

  3. От библиотеки Simulink Sinks перетащите блок Terminator в свою модель.

  4. От библиотеки DSP System Toolbox Estimation> Linear Prediction перетащите LSF/LSP к блоку LPC Conversion и двум LPC к/от блокам RC в вашу модель.

  5. Соедините блоки как показано в следующей фигуре. Вы не должны соединять блоки Терминатора с портами P LPC к/от блокам RC. Эти порты исчезают, если вы устанавливаете параметры блоков.

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

Сконфигурируйте и запустите свою модель

В предыдущей теме вы сконфигурировали свою скалярную модель квантования для векторного квантования путем добавления Векторной подсистемы Квантования LSF. В этой теме вы устанавливаете свои параметры блоков и квантуете ваши отражательные коэффициенты с помощью метода квантования вектора разделения.

  1. Если модель, в которой вы создали, Создает Вашу Векторную Модель Квантизатора, не открыто на вашем рабочем столе, можно открыть эквивалентную модель путем ввода ex_vq_example2 в подсказке команды MATLAB.

  2. Дважды кликните Векторную подсистему Квантования LSF, и затем дважды кликните Разделение LSF подсистема VQ.

    Подсистема открывается, и вы видите, что три Векторных блока Энкодера Квантизатора раньше реализовывали метод квантования вектора разделения.

    Эта подсистема делит каждый вектор 10 строк спектральные частоты (LSFs), которые представляют ваши отражательные коэффициенты в три подвектора LSF. Каждый из этих подвекторов отправляется в квантизатор отдельного вектора. Этот метод называется квантованием вектора разделения.

  3. Дважды кликните VQ LSF: 1-й субвекторный блок.

    Параметры блоков: VQ LSF: 1-е субвекторное диалоговое окно открывается.

    Переменная CB_lsf1to3_10bit является книгой шифров для подвектора, который содержит первые три элемента вектора LSF. Это 3 1024 матрица, где 3 число элементов в каждой кодовой комбинации, и 1024 количество кодовых комбинаций в книге шифров. Поскольку 210=1024, требуется 10 битов, чтобы квантовать этот первый подвектор. Точно так же 10-битный векторный квантизатор применяется к вторым и третьим подвекторам, которые содержат элементы 4 - 6 и 7 - 10 из вектора LSF, соответственно. Поэтому требуется 30 битов, чтобы квантовать все три подвектора.

    Примечание

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

  4. В вашем образцовом файле дважды кликните блок Autocorrelation и установите параметр Maximum non-negative lag (less than input length) на 10. Нажмите OK.

    Этот параметр управляет количеством линейных полиномиальных коэффициентов (LPCs), которые вводятся к методу квантования вектора разделения.

  5. Дважды кликните LPC к/от блоку RC, который соединяется с входом Векторной подсистемы Квантования LSF. Снимите флажок Output normalized prediction error power. Нажмите OK.

  6. Дважды кликните LSF/LSP к блоку LPC Conversion и установите параметр Input на LSF in range (0 to pi). Нажмите OK.

  7. Дважды кликните LPC к/от блоку RC, который соединяется с выводом LSF/LSP к блоку LPC Conversion. Установите параметр Type of conversion на LPC to RC и снимите флажок Output normalized prediction error power. Нажмите OK.

  8. Запустите свою модель.

  9. Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала, чтобы слушать и оригинал и обработанный сигнал.

    Между двумя нет никакого заметного различия. Квантование ваших отражательных коэффициентов с помощью метода квантования вектора разделения произвело речь хорошего качества без большого искажения.

Вы теперь использовали метод квантования вектора разделения, чтобы квантовать ваши отражательные коэффициенты. Векторные квантизаторы в Векторной подсистеме Квантования LSF используют 30 битов, чтобы квантовать кадр, содержащий 80 отражательных коэффициентов. Битрейт системы квантования вычисляется как (биты на кадр) * (частота кадров).

В этом примере битрейт [(80 остаточных выборок/кадров) * (7 битов/выборки) + (30 битов/кадры)] * (100 кадров/секунда), или 59 кбит в секунду. Это - меньше чем 64,4 кбита в секунду, битрейт скалярной системы квантования. Однако качество речевого сигнала не ухудшилось. Если вы хотите далее уменьшать битрейт своей системы, можно использовать векторный метод квантования, чтобы квантовать остаточный сигнал.

Для просмотра документации необходимо авторизоваться на сайте