MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Simulink

Работы-участники конкурса Simulink-моделей.

Сплайн-интерполяторы сигналов

архив работы zip-файл

Шелевицкий Игорь Владимирович, доцент Криворожское подразделение Европейского университета (Украина), igors@kdeu.dp.ua, sheleviv@mail.ru

Устройства предназначены для интерполяции (повышения частоты дискретизации) сигналов, а также могут использоваться для генерации сигналов сложной формы (например кардио сигналы, реографические сигналы в медицинской диагностике).

Модели устройств представляют своеобразный конструктор для проектирования сплайн-интерполяторов. Здесь представлены основные конструкции этих устройств. Процесс интерполяции происходит согласно выражению , где входные отсчеты; выходные отсчеты; базисная сплайн функция. Для интерполяции используются базисные сплайны состоящие из четырех фрагментов в эрмитовой форме. В конкретных примерах использован кубический эрмитов сплайн. Но схема устройств не изменяется при выборе и иного базисного сплайна. Особенности построения таких базисов применительно к конкретным сигналам рассмотрены в [1].

Сплайн-интерполятор, имеющий полифазную структуру, представлен в файле SplPolyInt. Блок SplPLInt04 выполняет интерполяцию входного сигнала в четыре раза с помощью кубического эрмитового сплайна (рис.1). Моделирование выполняется на высокой выходной частоте. Тестовый синусоидальный сигнал предварительно понижается в частоте дискретизации. Осциллограммы показаны на рис.2. Сверху - исходный сигнал. В средине - прореженный тестовый сигнал. Внизу - интерполированный к исходной частоте сигнал.

Рисунок 1. Пример интерполяции полифазным сплайн-фильтром.

Рисунок 2. Осциллограммы исходного, интерполируемого и интерполированного сигналов.

Коэффициенты ветвей фильтра приведены к целым значениям умножением на 4096. Кратный двум множитель позволяет реализовать деление результата путем коммутации.

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

Для расчета коэффициентов полифазного фильтра следует воспользоваться функциями spl1forr, crbspl, их можно взять из http://www.exponenta.ru/educat/free/fileexchange/shelevitski/shelevitski.php

Схема имеет максимальное быстродействие и предельно проста в построении, но требует значительных схемных ресурсов.

Серия сплайн-интерполяторов реализованных по коммутационной схеме представлена в файле SplRomInt. На рис.3 показано их применение для интерполяции синусоиды. Паттерны формируют сигналы записи отсчетов синусоиды в регистры интерполяторов. Блоки SplInt_64_, …, Spl_02_ выполняют интерполяцию соответственно в 64, 32, 16, 8, 4, 2 раза.

Рисунок 3. Пример реализации интерполяции синусоиды сплайн-фильтрами.

Блоки SplInt_64_, …, Spl_04_ по своей структуре отличаются очень незначительно. Схема блока SplInt_16_ показана на рис.4. Остальные отличаются только разрядностью счетчика, генерирующего адреса для блоков ROM EAB и объем ROM EAB. В блоках ROM EAB содержатся значения базисного сплайна. Число отсчетов в каждом блоке равно степени интерполяции. Значения отсчетов базисной функции загружаются в блоки ROM EAB из файлов spl01601.hex, spl01602.hex, spl01603.hex, spl01604.hex (для SplInt_16_) соответственно в ROM EAB, ROM EAB1, ROM EAB2, ROM EAB3. Для формирования файлов spl*.hex служит программа bsplhex (для кубического эрмитового сплайна). Для формирования указанных файлов нужно набрать в командной строке: bsplhex 16 12 0. Для конвертации иной базисной функции из текстового файла (столбца целых чисел) служит программа creathex.

Блок SplInt_02_ значительно проще предыдущих. Для двухкратной интерполяции нет смысла хранить коэффициенты базисного сплайна в ROM. Значения базисной функции заносим непосредственно в сумматор-умножитель.

Рисунок 4. Сплайн-интерполятор для интерполяции сигнала в 16 раз

Рисунок 5. Сплайн-интерполятор для интерполяции сигнала в 2 раза

Пример использования сплайн-интерполятора для генерации сигналов сложной формы представлено в файле ECGGenDemo. Здесь генерируется электрокардиографический сигнал. Изменения в интерполяторе рис.6 минимальны. Добавлен ROM ECG в который из файла ECG32.hex заносятся 32 узловых отсчета ЭКГ сигнала. Интерполятор увеличивает число отсчетов на выходе в 16 раз. Вид выходного сигнала показан на рис.7. Исходные отсчеты ЭКГ сигнала находятся в файле ecg32.txt. Для их преобразования в ECG32.hex следует в командной строке набрать: creathex ecg32.txt ecg32.hex 0. Изменяя исходные отсчеты можно изменять форму генерируемого сигнала.

Рисунок 6. Генератор сигналов сложной формы (ЭКГ сигнала).

Рисунок 7. Выходной сигнал генератора.

Представленные схемные решения разработаны для 10 разрядних входа и выхода. Но их легко перестроить для необходимой разрядности. Понятно, что они могут быть реализованы на ПЛИС микросхемах.

Литература

  1. Шелевицкий И.В. Интерполяционные сплайны в задачах цифровой обработки сигналов // Exponenta Pro. -2003. №4. - С.42-53.

Поиск по сайту:

Система Orphus

Яндекс.Метрика