Речевой сигнал обычно представлен в цифровом формате, который является последовательностью двоичных бит. Для приложений хранения и передачи желательно сжимать сигнал, представляя его с как можно меньшим количеством бит, сохраняя при этом его качество восприятия. Квантование является процессом представления сигнала с пониженным уровнем точности. Если вы уменьшаете количество бит, выделенных для квантования вашего речевого сигнала, сигнал искажается, и качество речи ухудшается.
При сжатии узкополосной цифровой речи речевые сигналы дискретизируются со скоростью 8000 выборок в секунду. Каждая выборка обычно представлена 8 битами. Это 8-битное представление соответствует скорости передачи битов 64 кбит в секунду. Дальнейшее сжатие возможно за счет качества. Большинство текущих низкоскоростных речевых кодеров основаны на принципе линейного прогнозирующего речевого кодирования. В этой теме показано, как использовать блоки Scalar Quantizer Encoder и Scalar Quantizer Decoder для реализации простого речевого кодера.
Тип ex_sq_example1
в MATLAB® командная строка, чтобы открыть пример модели.
Эта модель предварительно подчеркивает входной речевой сигнал путем применения конечной импульсной характеристики. Затем он вычисляет коэффициенты отражения каждой системы координат, используя алгоритм Левинсона-Дурбина. Модель использует эти коэффициенты отражения, чтобы создать фильтр линейного анализа предсказания (структура решетки). Затем модель вычисляет остаточный сигнал путем фильтрации каждой системы координат предварительно выделенных речевых выборок с использованием коэффициентов отражения. Остаточный сигнал, который является выходом каскада анализа, обычно имеет более низкую энергию, чем входной сигнал. Блоки на этапе синтеза модели фильтруют остаточный сигнал с помощью коэффициентов отражения и применяют полнополюсный фильтр деудаления. Фильтр исключения акцента является обратным фильтру предварительного акцента. Результатом является полное восстановление исходного сигнала.
Запустите эту модель.
Дважды кликните блоки Original Signal и Processed Signal и прослушайте как исходный, так и обработанный сигнал.
Нет существенного различия между ними, потому что квантование не выполнялось.
Чтобы лучше аппроксимировать реальную систему анализа и синтеза речи, квантуйте остаточный сигнал и коэффициенты отражения перед их передачей.
В предыдущей теме «Анализ и синтез речи» вы узнали теорию, лежащую в основе модели примера анализа и синтеза речи LPC. В этой теме вы задаете остаточный сигнал и коэффициенты отражения в вашем рабочем пространстве MATLAB как переменные E и K, соответственно. Позже вы используете эти значения для создания скалярных квантователей:
Откройте модель примера путем набора ex_sq_example2
в командной строке MATLAB.
Сохраните файл модели как ex_sq_example2
в рабочей папке.
Из Simulink® Библиотека раковин, щелкните-и-перетащите два блока To Workspace в модель.
Соедините выход блока Левинсона-Дурбина с одним из блоков To Workspace.
Дважды кликните этот To Workspace блок и установите параметр Variable name равным K
. Нажмите OK.
Соедините выход блока Time-Variing Analysis Filter с другим блоком To Workspace.
Дважды кликните этот To Workspace блок и установите параметр Variable name равным E
. Нажмите OK.
Теперь ваша модель должна выглядеть аналогично этому рисунку.
Запустите свою модель.
Остаточный сигнал, E и ваши коэффициенты отражения, K, заданы в рабочем пространстве MATLAB.
В этой теме вы добавляете скалярные энкодеры квантователя и декодеры, чтобы квантовать остаточный сигнал, E и коэффициенты отражения, K:
Если модель, созданная вами в разделе Идентифицируйте остаточный сигнал и коэффициенты отражения, не открыта на рабочем столе, можно открыть эквивалентную модель, набрав ex_sq_example2 в командной строке MATLAB.
Запустите эту модель, чтобы задать переменные E и K в рабочем пространстве MATLAB.
Из библиотеки Квантовщиков щелкните - и перетащите Scalar Quantizer Encoder и Scalar Quantizer Decoder блоки в модель для каждого сигнала, который вы хотите квантовать. Квантуйте остаточный сигнал, E и коэффициенты отражения, K
Сохраните модель как ex_sq_example3
. Ваша модель должна выглядеть аналогично следующему рисунку.
Запустите свою модель.
Дважды кликните блоки Original Signal и Processed Signal и прослушайте оба сигнала.
Опять же, нет заметного различия между ними. Поэтому можно сделать вывод, что квантование ваших коэффициентов невязки и отражения не повлияло на способность вашей системы точно воспроизводить входной сигнал.
Теперь вы квантовали коэффициенты невязки и отражения. Битовая скорость системы квантования вычисляется как (биты на систему координат) * (система координат ).
В этом примере скорость передачи битов является [(80 остаточных выборок/кадр) * (7 битов/выборка) + (12 отсчетов/кадр коэффициента отражения) * (7 битов/выборка)] * (100 кадров/секунду), или 64,4 кбит/секунду. Это выше, чем большинство современных речевых кодеров, которые обычно имеют скорость передачи битов от 8 до 24 кбит в секунду. Если вы уменьшаете количество бит, выделенных для квантования коэффициентов отражения или остаточного сигнала, общая скорость передачи битов уменьшается. Однако качество речи также ухудшится.
Для получения информации об уменьшении скорости передачи битов без влияния на качество речи, смотрите Векторные квантователи.
В предыдущем разделе вы квантовали остаточный сигнал и коэффициенты отражения. Битовая скорость вашей скалярной системы квантования составляла 64,4 кбит в секунду. Эта скорость передачи битов выше, чем у большинства современных речевых кодеров. Чтобы разместить большее количество пользователей в каждом канале, необходимо снизить эту скорость передачи битов при сохранении качества вашего речевого сигнала. Можно использовать векторные квантователи, которые используют корреляции между каждой выборкой сигнала, чтобы выполнить эту задачу.
В этой теме вы изменяете скалярную модель квантования так, чтобы вы использовали квантователь разделенных векторов для квантования коэффициентов отражения:
Откройте ex_vq_example1 в командной строке MATLAB. Пример модели ex_vq_example1
добавляет новую подсистему LSF Вектора Quantization к ex_sq_example3
модель. Эта подсистема предварительно сконфигурирована для работы в качестве вектора квантователя. Можно использовать эту подсистему для кодирования и декодирования коэффициентов отражения с помощью метода квантования разделенных векторов.
Удалите энкодеры Q Encoder - Reflection Cofficients и Q Decoder - Reflection Cofficients.
Из библиотеки Simulink Sinks щелкните - и перетащите блок Terminator в модель.
Из библиотеки DSP System Toolbox™ Estimation > Linear Prediction щелкните - и перетащите LSF/LSP в блок LPC Conversion и два блоков LPC в/из RC в вашу модель.
Соедините блоки как показано на следующем рисунке. Вам не нужно подключать блоки Terminator к портам P LPC к блокам RC/из них. Эти порты исчезают, когда вы задаете параметры блоков.
Вы изменили модель, чтобы включить подсистему, способный вектор квантование. В следующем разделе вы сбрасываете параметры модели, чтобы квантовать коэффициенты отражения с помощью метода квантования разделенных векторов.
В предыдущей теме вы сконфигурировали скалярную модель квантования для вектора квантования путем добавления подсистемы LSF Вектора квантования. В этом разделе вы устанавливаете параметры блоков и квантуете коэффициенты отражения с помощью метода квантования разделенных векторов.
Если модель, созданная вами в Build Your Vector Quantzer Model, не открыта на рабочем столе, можно открыть эквивалентную модель, набрав ex_vq_example2 в командной строке MATLAB.
Дважды кликните подсистему LSF Vector Quantization и дважды щелкните подсистему LSF Split VQ.
Откроется подсистема, и вы увидите три блока Vector Quantzer Encoder, используемые для реализации метода квантования разделенных векторов.
Эта подсистема разделяет каждый вектор 10 линейных спектральных частот (LSF), которые представляют ваши коэффициенты отражения, на три подвекторов. Каждый из этих подвекторов отправляется в отдельный векторный квантователь. Этот метод называется квантованием разделенных векторов.
Дважды кликните VQ LSF: 1-й субвекторный блок.
Откроется диалоговое окно Параметров блоков: VQ LSF: 1st подвектор.
Переменная 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.
Этот параметр управляет количеством линейных полиномиальных коэффициентов (LPC), которые входят в метод квантования разделенных векторов.
Дважды кликните блок LPC to/from RC, который соединяется с входом подсистемы LSF Вектора квантования. Снимите флажок Output normalized prediction error power. Нажмите OK.
Дважды кликните блок LSF/LSP в LPC Conversion и установите параметр Input на LSF in range (0 to pi)
. Нажмите OK.
Дважды кликните блок LPC to/from RC, который соединяется с выходом блока LSF/LSP в LPC Conversion. Установите параметр Type of conversion равным LPC to RC
, и снимите флажок Output normalized prediction error power. Нажмите OK.
Запустите свою модель.
Дважды кликните блоки Original Signal и Processed Signal, чтобы прослушать и исходный, и обработанный сигнал.
Между ними нет заметного различия. Квантование коэффициентов отражения с помощью метода квантования разделенных векторов произвело речь хорошего качества без особых искажений.
Теперь вы использовали метод квантования разделенных векторов, чтобы квантовать коэффициенты отражения. Квантователи вектора в подсистеме LSF Вектора квантования используют 30 биты, чтобы квантовать систему координат, содержащую 80 коэффициентов отражения. Битовая скорость системы квантования вычисляется как (биты на систему координат) * (система координат ).
В этом примере скорость передачи битов является [(80 остаточных выборок/кадр) * (7 битов/выборка) + (30 битов/кадр)] * (100 кадров/секунду), или 59 кбит/секунду. Это составляет менее 64,4 кбит в секунду, битовая скорость скалярной системы квантования. Однако качество речевого сигнала не ухудшилось. Если вы хотите дополнительно уменьшить битрейт вашей системы, можно использовать метод векторного квантования, чтобы квантовать остаточный сигнал.