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

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

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

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

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

  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 кбит в секунду, битрейт скалярной системы квантования. Однако качество речевого сигнала не ухудшилось. Если вы хотите далее уменьшать битрейт своей системы, можно использовать векторный метод квантования, чтобы квантовать остаточный сигнал.