Речевой сигнал обычно представляется в цифровом формате, который является последовательностью битов. Для устройства хранения данных и приложений передачи, желательно сжать сигнал путем представления его как можно меньшим количеством битов при поддержании его перцепционного качества. Квантование является процессом представления сигнала со сниженным уровнем точности. Если вы сокращаете число битов, выделенных для квантования вашего речевого сигнала, сигнал искажен, и речевое качество ухудшается.
В узкополосном цифровом сжатии речи речевые сигналы производятся на уровне 8 000 выборок в секунду. Каждая выборка обычно представляется на 8 битов. Это 8-битное представление соответствует небольшому уровню 64 кбит в секунду. Дальнейшее сжатие возможно за счет качества. Большинство текущих речевых кодеров уровня младшего бита основано на принципе линейного прогнозирующего речевого кодирования. Эта тема показывает вам, как использовать Scalar Quantizer Encoder и блоки Scalar Quantizer Decoder, чтобы реализовать простой речевой кодер.
Введите ex_sq_example1
в командной строке MATLAB®, чтобы открыть модель в качестве примера.
Эта модель предварительно подчеркивает входной речевой сигнал путем применения КИХ-фильтра. Затем это вычисляет отражательные коэффициенты каждой системы координат с помощью алгоритма Левинсона-Дербина. Модель использует эти отражательные коэффициенты, чтобы создать аналитический фильтр линейного предсказания (структура решетки). Затем модель вычисляет остаточный сигнал путем фильтрации каждой системы координат предварительно подчеркнутых речевых выборок с помощью отражательных коэффициентов. Остаточный сигнал, который является выходом аналитического этапа, обычно имеет более низкую энергию, чем входной сигнал. Блоки на этапе синтеза модели фильтруют остаточный сигнал с помощью отражательных коэффициентов и применяют фильтр de-акцента все-полюса. Фильтр de-акцента является инверсией фильтра перед акцентом. Результатом является полное восстановление исходного сигнала.
Запустите эту модель.
Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала и слушайте и оригинал и обработанный сигнал.
Нет никакой значительной разницы между двумя, потому что никакое квантование не выполнялось.
Чтобы лучше аппроксимировать реальную речевую систему анализа и синтеза, квантуйте остаточные и отражательные коэффициенты сигнала, прежде чем они будут переданы.
В предыдущей теме, Анализе и Синтезе Речи, вы изучили теорию позади Анализа LPC и Синтеза Речевой модели в качестве примера. В этой теме вы задаете остаточный сигнал и отражательные коэффициенты в вашем рабочем пространстве MATLAB как переменные E и K, соответственно. Позже, вы используете эти значения, чтобы создать ваши скалярные квантизаторы:
Откройте модель в качестве примера путем ввода ex_sq_example2
в командной строке MATLAB.
Сохраните файл модели как ex_sq_example2
в вашей рабочей папке.
От библиотеки Simulink® Sinks перетащите два блока To Workspace в свою модель.
Соедините выход блока Левинсона-Дербина с одним из блоков To Workspace.
Дважды кликните этот блок To Workspace и установите параметр Variable name на K
. Нажмите OK.
Соедините выход блока Time-Varying Analysis Filter с другим блоком To Workspace.
Дважды кликните этот блок To Workspace и установите параметр Variable name на E
. Нажмите OK.
Ваша модель должна теперь выглядеть похожей на этот рисунок.
Запустите свою модель.
Остаточный сигнал, E, и ваши отражательные коэффициенты, K, задан в рабочем пространстве MATLAB.
В этой теме вы добавляете скалярные энкодеры квантизатора и декодеры, чтобы квантовать остаточный сигнал, E, и отражательные коэффициенты, K:
Если модель, в которой вы создали, Идентифицирует, что Ваши Остаточные и Отражательные Коэффициенты Сигнала не открыты на вашем рабочем столе, можно открыть эквивалентную модель путем ввода ex_sq_example2 в командной строке MATLAB.
Запустите эту модель, чтобы задать переменные E и K в рабочем пространстве MATLAB.
От библиотеки Quantizers перетащите Scalar Quantizer Encoder и блоки Scalar Quantizer Decoder к модели для каждого сигнала, который вы хотите квантовать. Квантуйте остаточный сигнал, E, и отражательные коэффициенты, K
Сохраните модель как ex_sq_example3
. Ваша модель должна выглядеть похожей на следующую фигуру.
Запустите свою модель.
Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала, и слушайте оба сигнала.
Снова, между двумя нет никакого заметного различия. Можно поэтому прийти к заключению, что квантование остаточных и отражательных коэффициентов не влияло на способность системы точно воспроизвести входной сигнал.
Вы теперь квантовали остаточные и отражательные коэффициенты. Битрейт системы квантования вычисляется как (биты на систему координат) * (частота кадров).
В этом примере битрейт [(80 остаточных выборок/систем координат) * (7 битов/выборки) + (12 отражательных содействующих выборок/систем координат) * (7 битов/выборки)] * (100 систем координат/секунда), или 64,4 кбита в секунду. Это выше, чем большинство современных речевых кодеров, которые обычно имеют немного уровня 8 - 24 кбит в секунду. Если вы сокращаете число битов, выделенных для квантования отражательных коэффициентов или остаточного сигнала, полный битрейт уменьшился бы. Однако речевое качество также ухудшилось бы.
Для получения информации об уменьшении битрейта, не влияя на речевое качество, смотрите Векторные Квантизаторы.
В предыдущем разделе вы квантовали свои остаточные и отражательные коэффициенты сигнала. Битрейт вашей скалярной системы квантования составлял 64,4 кбита в секунду. Этот битрейт выше, чем большинство современных речевых кодеров. Чтобы вместить большее количество пользователей в каждом канале, необходимо понизить этот битрейт при поддержании качества речевого сигнала. Можно использовать векторные квантизаторы, которые используют корреляции между каждой выборкой сигнала, чтобы выполнить эту задачу.
В этой теме вы изменяете свою скалярную модель квантования так, чтобы вы использовали квантизатор вектора разделения, чтобы квантовать ваши отражательные коэффициенты:
Откройте ex_vq_example1 в командной строке MATLAB. Модель ex_vq_example1
в качестве примера добавляет новая Векторная подсистема Квантования LSF к
ex_sq_example3
модель. Эта подсистема предварительно сконфигурирована, чтобы работать векторным квантизатором. Можно использовать эту подсистему, чтобы закодировать и декодировать отражательные коэффициенты с помощью метода квантования вектора разделения.
Удалите Энкодер SQ – Отражательные Коэффициенты и Декодер SQ – Отражательные Содействующие блоки.
От библиотеки Simulink Sinks перетащите блок Terminator в свою модель.
От библиотеки DSP System Toolbox™ Estimation> Linear Prediction перетащите LSF/LSP с блоком LPC Conversion и двумя LPC с блоками RC в вашу модель.
Соедините блоки как показано в следующем рисунке. Вы не должны соединять блоки Терминатора с портами P LPC с блоками RC. Эти порты исчезают, если вы устанавливаете параметры блоков.
Вы изменили свою модель, чтобы включать подсистему, способную к векторному квантованию. В следующей теме вы сбрасываете свои параметры модели, чтобы квантовать ваши отражательные коэффициенты с помощью метода квантования вектора разделения.
В предыдущей теме вы сконфигурировали свою скалярную модель квантования для векторного квантования путем добавления Векторной подсистемы Квантования LSF. В этой теме вы устанавливаете свои параметры блоков и квантуете ваши отражательные коэффициенты с помощью метода квантования вектора разделения.
Если модель, в которой вы создали, Создает Вашу Векторную Модель Квантизатора, не открыто на вашем рабочем столе, можно открыть эквивалентную модель путем ввода ex_vq_example2 в командной строке MATLAB.
Дважды кликните Векторную подсистему Квантования LSF, и затем дважды кликните Разделение LSF подсистема VQ.
Подсистема открывается, и вы видите, что три Векторных блока Энкодера Квантизатора раньше реализовывали метод квантования вектора разделения.
Эта подсистема делит каждый вектор из 10 линейных спектральных частот (LSFs), которые представляют ваши отражательные коэффициенты в три подвектора LSF. Каждый из этих подвекторов отправляется в квантизатор отдельного вектора. Этот метод называется квантованием вектора разделения.
Дважды кликните VQ LSF: 1-й субвекторный блок.
Параметры блоков: VQ LSF: 1-е субвекторное диалоговое окно открывается.
Переменная CB_lsf1to3_10bit
книга шифров для подвектора, который содержит первые три элемента вектора LSF. Это 3 1024 матрица, где 3 число элементов в каждой кодовой комбинации, и 1024 количество кодовых комбинаций в книге шифров. Поскольку , требуется 10 битов, чтобы квантовать этот первый подвектор. Точно так же 10-битный векторный квантизатор применяется к вторым и третьим подвекторам, которые содержат элементы 4 - 6 и 7 - 10 из вектора LSF, соответственно. Поэтому требуется 30 битов, чтобы квантовать все три подвектора.
Примечание
Если бы вы использовали векторный метод квантования, чтобы квантовать ваши отражательные коэффициенты, вам было бы нужно 230 или 1.0737e9 значения книги шифров, чтобы достигнуть той же степени точности как метод квантования вектора разделения.
В вашем файле модели дважды кликните блок Autocorrelation и установите параметр Maximum non-negative lag (less than input length) на 10
. Нажмите OK.
Этот параметр управляет количеством линейных полиномиальных коэффициентов (LPCs), которые вводятся к методу квантования вектора разделения.
Дважды кликните LPC с блоком RC, который соединяется с входом Векторной подсистемы Квантования LSF. Снимите флажок Output normalized prediction error power. Нажмите OK.
Дважды кликните LSF/LSP с блоком LPC Conversion и установите параметр Input на LSF in range (0 to pi)
. Нажмите OK.
Дважды кликните LPC с блоком RC, который соединяется с выходом LSF/LSP с блоком LPC Conversion. Установите параметр Type of conversion на LPC to RC
, и снимите флажок Output normalized prediction error power. Нажмите OK.
Запустите свою модель.
Дважды кликните Исходный Сигнал и Обработанные блоки Сигнала, чтобы слушать и оригинал и обработанный сигнал.
Между двумя нет никакого заметного различия. Квантование ваших отражательных коэффициентов с помощью метода квантования вектора разделения произвело речь хорошего качества без большого искажения.
Вы теперь использовали метод квантования вектора разделения, чтобы квантовать ваши отражательные коэффициенты. Векторные квантизаторы в Векторной подсистеме Квантования LSF используют 30 битов, чтобы квантовать систему координат, содержащую 80 отражательных коэффициентов. Битрейт системы квантования вычисляется как (биты на систему координат) * (частота кадров).
В этом примере битрейт [(80 остаточных выборок/систем координат) * (7 битов/выборки) + (30 битов/системы координат)] * (100 систем координат/секунда), или 59 кбит в секунду. Это меньше 64,4 кбит в секунду, битрейт скалярной системы квантования. Однако качество речевого сигнала не ухудшилось. Если вы хотите далее уменьшать битрейт своей системы, можно использовать векторный метод квантования, чтобы квантовать остаточный сигнал.