Использование микроконтроллеров Microchip в задачах воспроизведения звука
Команды сдвига данных
Для решения задач записи, воспроизведения и передачи голоса чаще всего необходимо увеличение производительности основного процессора или использование процессоров обработки сигналов. Это ведет к увеличению стоимости системы и ее размера. Но для получения системы обработки голоса со средним качеством и небольшой полосой пропускания можно использовать 8-разрядные микроконтроллеры.
Алгоритм ADPCM (Adaptive Difference Pulse Code Modulation, по-русски — АДИКМ, адаптивная дифференциальная импульсно-кодовая модуляция), как и любой другой алгоритм кодирования речи, предназначен для уменьшения скорости потока цифровых данных. Это позволяет увеличить пропускную способность линий связи с сохранением их функциональности и уменьшить трафик передачи. Применительно к записи и хранению звуковых данных использование АДИКМ позволяет увеличить количество записываемой информации на единицу носителя.
Из классической теории сигналов известно, что значения отсчетов, взятых через интервал Котельникова, взаимно некоррелированы, если спектр сигнала в занимаемой им полосе частот равномерен (белый шум). Однако на практике в основном используются сигналы, спектр которых неравномерен, поэтому корреляция между отсчетами не равна нулю. При этом степень корреляции возрастает с увеличением частоты дискретизации. Типичным примером таких сигналов является речь, где корреляция между соседними отсчетами достаточно велика при соблюдении теоремы Котельникова в процессе дискретизации.
На этом факте основан принцип передачи, называемый «кодирование с предсказанием». Последовательность коррелированных отсчетов исходного сигнала b(k) подается на один из входов вычитающего устройства, а на другой его вход поступает сигнал предсказания b'(k), сформированный из предыдущих отсчетов.
Полученный сигнал ошибки e(k) предсказания поступает в линию передачи. На приемном конце имеется идентичный передающему предсказатель. Так как он оперирует с теми же предыдущими отсчетами, предсказанное им значение нового отсчета b'''(k) будет таким же, как в передатчике. Добавив к нему принятое значение ошибки e'(k), можно восстановить истинный отсчет b"(k). При этом, чем сильнее корреляционные связи между отсчетами сигнала, тем точнее можно сформировать сигнал предсказания.
В цифровых системах передачи отсчеты сигнала ошибки подвергаются обычным операциям квантования и кодирования, результатом чего является импульсно-кодовое представление передаваемого сигнала. Такой метод называется дифференциальной импульсно-кодовой модуляцией (ДИКМ).
Применение ДИКМ позволяет значительно снизить скорость потока, однако ошибка при восстановлении сигнала зависит от величины шага квантования передаваемого кода. Уменьшение шага квантования (увеличение разрядности кодового слова) уменьшает ошибку и соответственно качество восстановленного сигнала, но увеличивает скорость потока.
Увеличение шага квантования уменьшает скорость потока, но увеличивает ошибку восстановления. В рамках классической ДИКМ с фиксированным шагом квантования это противоречие неразрешимо. Одно из решений заключается во введении адаптации шага квантования в процесс кодирования-декодирования. Такой алгоритм назван АДИКМ (адаптивная дифференциальная импульсно-кодовая модуляция). Впервые рекомендации по использованию АДИКМ были опубликованы в стандарте Международного консультативного комитета по телефонии и телеграфии (CCITT — The International Telegraph and Telephone Consultative Committee) ITU-T G.721. Однако оказалось, что при осуществлении адаптации шкалы квантования возникают значительные запаздывания, ухудшающие качество речи. В 1987 году во вкладе СССР в МККТТ был описан алгоритм АДИКМ G.721-bis с ускоренной адаптацией шага. В 1990 году была издана окончательная редакция стандарта — ITU-T G.726, в которой учтены все поправки. Алгоритм гарантирует оценки MOS на уровне 4.3 (при скорости потока 32 кбит/с), что часто принимается за эталон качества телефонной связи. Этот алгоритм до сих пор используется при передаче речи по спутниковым и другим каналам связи, несмотря на появление кодеков с гораздо более низкой скоростью потока и достаточным качеством восстановления.
Рис. 1
Реализация упрощенного алгоритма ADPCM на микроконтроллере
Стандарт ITU-T G.726 обладает некой избыточностью для данного применения. В частности, кодек G.726 имеет в своем составе преобразователь входной последовательности ИКМ, кодированной по A- или m-закону в линейную ИКМ, детектор тона и перехода, предназначенный для определения состава предаваемых данных (речь или факсимильный обмен), и другие дополнительные блоки, улучшающие помехозащищенность сигнала при передачи по линии связи.
Рассмотрим структуру упрощенного кодера. Входной сигнал кодера si - последовательность линейно квантованных отсчетов речевого сигнала с разрядностью 16 бит, кодированных дополнительным кодом. Выходным сигналом кодера является последовательность адаптивно кодированных четырехразрядных отсчетов ошибки предсказания t, следующих с частотой дискретизации, равной входной.
Таким образом, кодер ADPCM позволяет сократить скорость потока в 4 раза при кодировании 16-разрядных входных данных и в 2 раза при кодировании 8-разрядных данных. Согласно рекомендациям ITU G.721, в речевых системах ADPCM в качестве входного сигнала используется 16-разрядный цифровой поток с частотой дискретизации 8 кГц. Скорость такого потока равна 16x8000 = 128 кбит/с. Скорость потока на выходе кодера составляет 4?8000 = 32 кбит/с.
Рис. 2. Структурная схема процесса кодирования
Адаптационная способность рассматриваемого кодера основана на информации об абсолютном значении предыдущего отсчета ошибки предсказания. Для простоты реализации системы применен табличный метод адаптации (табл. 1–2). Основное отличие рассматриваемого алгоритма от алгоритма ITU G.721 состоит в принципе предсказания. Адаптивный предсказатель кодера ITU G.721 рассчитывает значение предсказанного отсчета, используя в качестве опорных данных значения шести предыдущих ошибок квантования и двух предыдущих предсказанных значений. В данной системе предсказание осуществляется по одной предыдущей ошибке квантования и по одному предыдущему предсказанному отсчету. Синхронность работы кодера и декодера системы обеспечивается тем, что часть кодера представляет собой декодер, поэтому передавать по каналу данные об адаптации нет необходимости.
Таблица 1. Поисковая таблица индексов адаптации шага квантования (16 значений)
–1 |
–1 |
–1 |
–1 |
2 |
4 |
6 |
8 |
–1 |
–1 |
–1 |
–1 |
2 |
4 |
8 |
8 |
Таблица 2. Поисковая таблица шагов квантования (89 значений)
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
17 |
19 |
21 |
23 |
25 |
28 |
31 |
34 |
37 |
41 |
45 |
50 |
55 |
60 |
66 |
73 |
80 |
88 |
97 |
107 |
118 |
130 |
143 |
157 |
173 |
190 |
209 |
230 |
253 |
279 |
307 |
337 |
371 |
408 |
449 |
494 |
544 |
598 |
658 |
724 |
796 |
876 |
963 |
1060 |
1166 |
1282 |
1411 |
1552 |
1707 |
1878 |
2066 |
2272 |
2499 |
2749 |
3024 |
3327 |
3360 |
4026 |
4428 |
4871 |
5358 |
5894 |
6484 |
7132 |
7845 |
8630 |
9493 |
10442 |
11487 |
12635 |
13899 |
15289 |
16818 |
18500 |
20350 |
22385 |
24623 |
27086 |
29794 |
32767 |
|
|
|
|
|
|
|
Сама процедура кодирования-декодирования занимает порядка 600 слов командной памяти и 13 байт памяти данных. Этому требованию по ресурсам удовлетворяют все микроконтроллеры Microchip.
Наиболее оптимальным является использование новых Flash-микроконтроллеров, имеющих в своем составе 10-битный АЦП. В семействе маловыводных контроллеров PIC12 (8-выводный корпус) это PIC12F675, имеющий программную память размером 1 Кслово, встроенную память EEPROM, 2 таймера (8-и 16-битный), компаратор. В том же семействе есть новейший PIC12F683, имеющий увеличенную до 2 Кслов память программ, аппаратный модуль ШИМ и, что немаловажно, режимы пониженного энергопотребления. В сочетании с низкой стоимостью появляется возможность встраивания голосовых функций практически в любые устройства.
Рис. 3. Структурная схема процесса декодирования
Другой вариант — использование более мощного микроконтроллера семейства PIC18, в котором помимо голосовых функций можно реализовать сложные функции управления и обработки данных.
Для обработки звуковых сигналов перспективным видится использование контроллеров семейства dsPIC30F с DSP-ядром. Они совмещают в себе возможности микроконтроллера с мощностью процессоров цифровой обработки сигналов. Имея в своем распоряжении большой объем памяти и специальные команды DSP-ядра, разработчик получает гибкий инструмент для обработки аналоговых сигналов. Мощности контроллера достаточно не только для воспроизведения звука, его фильтрации и синтеза, но и для распознавания речи и говорящего. Это позволяет строить компактные высокоинтеллектуальные охранные системы и комплексы, системы идентификации и голосового управления.
Голосовые кодеки, построенные на основе контроллеров, могут применяться как автономно, так и в составе системы. Для связи основного процессора с кодеком (микроконтроллером) могут применяться различные интерфейсы — последовательные (SPI, I2C, UART) и параллельные.
Для квантования сигнала используется встроенный АЦП контроллера. Полученное 10-битное значение кодируется в 4-битное и упаковывается в байты. Для вывода голосового сигнала применяется блок ШИМ вкупе с внешним ФНЧ. Качества цифроаналогового преобразования на основе ШИМ оказывается достаточно для голосовых приложений.
Примеры программ для контроллеров Microchip, готовые решения и полное описание алгоритмов доступны на сайте www.microchip.com в разделе Application Notes (Application Note 643). Информацию о сторонних разработчиках ПО для обработки звука на основе алгоритмов АДИКМ можно найти в Интернет по адресу http://www.circuitcellar.com/pastissues/articles/richey110/text.htm.
Алексей Сафронов
|