Научная статья на тему 'Сравнение реализаций цифровых линейных фильтров на платформе .NET Core'

Сравнение реализаций цифровых линейных фильтров на платформе .NET Core Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
269
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
.NET Core / C# / цифровой фильтр / пространство состояний / разностные уравнения. / .NET Core / C# / digital filter / state space / difference equations

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Шарий Т.В.

В статье производится исследование способов программной реализации цифровых линейных фильтров с бесконечной импульсной характеристикой на платформе .NET Core. Описаны три версии программного кода алгоритмов. Первые две версии основаны на разностных уравнениях. Третья версия основана на представлении фильтра в пространстве состояний. Приведены результаты сравнительного анализа скорости работы фильтров на платформе .NET Core 2.1, а также рекомендации по выбору подходящей реализации.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Сomparison of realizations of digital linear filters on .NET Сore platform

The article provides research of program implementation of digital linear filters with infinite impulse response in .NET environment. Three versions of the program code of algorithms are described. The first two versions are based on difference equations. The third version is based on the state-space representation of a filter. The results of comparative analysis of filtering performance on .NET Core 2.1 platform are given, as well as recommendations concerning the choice of appropriate realization.

Текст научной работы на тему «Сравнение реализаций цифровых линейных фильтров на платформе .NET Core»

УДК 004.421

ШАРИЙ Т.В., к.т.н., доцент (Донецкий национальный университет)

Сравнение реализаций цифровых линейных фильтров на платформе .NET Core

Sharii T.V., Candidate of Technical Sciences, Associate Professor (DONNU) ^mparison of realizations of digital linear filters on .NET Соге platform

Введение

В настоящее время

информационные технологии

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

популярными направлениями, в рамках которых разрабатываются данные инструменты, являются искусственный интеллект, машинное обучение и цифровая обработка звука, изображений и видео [1-5]. Это связано с тем, что большинство современных новаторских проектов посвящено именно этой тематике. В сфере технологий железнодорожного транспорта также актуальны общие вопросы цифровой обработки сигналов. Например, при решении задач дефектоскопии рельсов успешно применяются цифровые фильтры для улучшения качества анализа вибрационных сигналов [6].

Для прототипирования и визуализации научных моделей чаще всего используются языки

программирования Python и R, в силу своего удобства и относительной простоты, а с точки зрения программной реализации самыми эффективными остаются языки C и C++, так как эти технологии предоставляют самые большие

возможности для оптимизации производительности и

распараллеливания вычислений.

Кроме того, в последнее время активно развивается и занимает все новые ниши среда .NET. На данный момент ее достоинствами являются такие характеристики, как: надежность, кросс-платформенность, достаточно высокая скорость, удобство создания графических интерфейсов настольных, мобильных и web-приложений, широкие возможности среды Azure для облачных вычислений.

Анализ последних исследований и публикаций

Исторически первой и по-прежнему очень популярной является платформа .NET Framework, центральным элементом которой является общеязыковая среда выполнения (Common Language Runtime, CLR) [7]. Встроенный в виртуальную машину CLR JIT-компилятор (just-in-time compiler) преобразует промежуточный байт-код в машинные коды процессора. Виртуальная машина CLR также обеспечивает базовую безопасность, управление памятью, организацию системы генерации и перехвата исключений. Платформа .NET Core появилась относительно недавно и является новой разработкой корпорации

Microsoft. В ней используется альтернативная среда выполнения CoreCLR, включающая новый JIT-компилятор RyuJIT, встроенный сборщик мусора и другие компоненты. В целом, скорость выполнения одного и того же кода в .NET Core обычно выше, чем в .NET Framework.

Тем не менее, на сегодняшний день во всей экосистеме .NET набор библиотек с отдельными функциями цифровой обработки сигналов довольно небогат, а универсальных решений, аналогичных пакету sciPy.signal или MATLAB Signal Processing Toolbox [8], практически нет. Функции, связанные с цифровой фильтрацией, предоставляют, например, библиотеки Math.NET Filtering [9], Bonsai [10], DspSharp [11].

Таким образом, задача эффективной реализации цифровых линейных фильтров на современных версиях платформ .NET является актуальной. Фильтры могут

применяться в сфере железнодорожного транспорта, например, для улучшения качества звука переговоров диспетчера. Анализ источников выявил, что подробные исследования по данной проблеме еще не проводились. Несмотря на то, что .NET-решение все же уступает по эффективности реализациям на языках С и С++ с CUDA-вычислениями, задача

уменьшения времени выполнения цифровой фильтрации средствами .NET остается важной.

Цель работы

Целью работы является проведение сравнительного анализа эффективности программных

реализаций линейных инвариантных к сдвигу цифровых фильтров (Linear Time-Invariant filters, LTI filters) на

платформе .NET Core. В работе [1] уже были исследованы скоростные характеристики фильтров с конечной импульсной характеристикой (КИХ). В данной статье внимание уделяется фильтрам с бесконечной импульсной характеристикой (БИХ), в частности, фильтру Баттерворта и Чебышева. Фильтрация производится во временной области.

Основной материал

Во временной области любой LTI-фильтр уникальным образом

описывается конечно-разностным

уравнением вида

N M

y\n\ = 2 bkx[n - к\ amy[n - т\, (1)

к=0 т=1

где x - входной сигнал;

y - выходной сигнал;

n - индекс текущего отсчета сигнала;

M - количество коэффициентов обратной связи (рекурсивной части) фильтра a a2,..., ам };

N - количество коэффициентов нерекурсивной части в разностном уравнении фильтра {b0, b,..., bN }.

В общем случае M > 0, в связи с чем, импульсная характеристика фильтра является бесконечной, и фильтр называется фильтром с бесконечной импульсной характеристикой (БИХ). На рис. 1 показана схема реализации БИХ-фильтра на основе конечно-разностного уравнения.

В частотной области (или точнее, в z-области) линейные фильтры описываются уникальной передаточной функцией с теми же коэффициентами ам } и {b0, bj,..., bN }, что и в формуле (1).

Н (2) =

Рис. 1. Схема реализации БИХ-фильтра

Ъ0 + Ъх2-1 +... + Ъм2 --1

1-1 -

1++...+амг

Еще одним способом описания LTI-фильтра является его

представление в так называемом пространстве состояний:

в[п +1] = Л?[п] + Вх[п] у[п] = С5[п] + Бх[п]

(2)

где 5 - вектор состояния фильтра; х - входной сигнал; у - выходной сигнал; Л - матрица системы; В - матрица управления; С - матрица выхода; Б - матрица прямой связи. С алгоритмической точки зрения, в данном случае потребуются простейшие арифметические операции для вычисления каждого выходного отсчета сигнала на основе входного отсчета и текущего состояния фильтра, а также всего один цикл для обновления вектора состояний. Наиболее эффективна формула именно для БИХ-фильтров и с одинаковым числом рекурсивных и нерекурсивных

коэффициентов. Таковыми являются, например, фильтры Баттерворта, Чебышева I и II рода, эллиптический фильтр. Преимуществом подхода является также возможность явно инициализировать, задавать и контролировать состояние фильтра в любой момент времени. Для КИХ-фильтров представление не дает особых преимуществ в скорости по сравнению с реализацией на основе конечно-разностных уравнений (1).

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

программируются с помощью циклической очереди. Ниже приводится код типового решения на языке C# для БИХ-фильтра (листинг 1):

float Process(float sample)

{

float output = 0; int pos = 0; delayLineB[offset] = sample;

for (int k=offsetB; k<sizeB; k++) {

output+=b[pos++]*delayLineB[k]; }

for (int k=0; k<offsetB; k++) {

output+=b[pos++]*delayLineB[k];

}

pos = 1;

for (int k=offsetA+1;k<sizeA;k++) {

output-=a[pos++]*delayLineA[k];

}

for (int k=0; k<offsetA; k++) {

output-=a[pos++]*delayLineA[k];

}

delayLineA[offsetA]=output; if (— offsetB<0) offsetB=sizeB-1; if (—offsetA<0) offsetA=sizeA-1; return output;

}

Листинг 1. Код реализации работы БИХ-фильтра (версия 1)

В листинге 1 используются переменные sizeA и sizeB (количество коэффициентов a и b, соответственно), delayLineA и delayLineB (массивы линий задержки для рекурсивной и нерекурсивной части фильтра) и offsetA/offsetB (позиции в линиях задержки для текущего отсчета; при обработке очередного нового отсчета входного сигнала offset смещается на 1 влево; при достижении нулевого индекса offset устанавливается в конец очереди). Эти переменные являются полями класса IirFilter, одним из методов которого является функция Process.

Временная сложность алгоритма обработки N отсчетов - O(NK), где K -порядок фильтра. В коде листинга 1

проход по циклическому буферу линий задержки начинается с отсчета по индексу offset до конца массива и затем с нулевого отсчета до индекса offset-1. Это может замедлять фильтрацию из-за особенностей работы кэш-памяти процессора. Поэтому в данной работе, по аналогии с [1], для сравнения была реализована вторая версия метода Process. В этой версии обеспечивается непрерывность прохода по массиву за счет дублирования коэффициентов (листинг 2):

// В конструкторе класса сначала // создаются «удвоенные» массивы b,a

// [b0, b1, ... bN] ->

// [b0, b1, ... bN, b0, b1, ... bN]

// [a1, ... aN] ->

// [a1, a2, ... aN, a1, a2, ... aN]

float Process(float sample) {

delayLineB[offset] = sample; delayLineA[offset] = 0; float output = 0; for (int i=0, j = sizeB-offsetB; i < sizeB; i++, j++)

{

output += delayLineB[i]*b[j];

}

for (int i=0, j = sizeA-offsetA; i < sizeA; i++, j++)

{

output -= delayLineA[i]*a[j];

}

delayLineA[offsetA]=output; if (--offsetB<0) offsetB=sizeB-1; if (--offsetA<0) offsetA=sizeA-1;

return output;

}

Листинг 2. Код реализации работы БИХ-фильтра (версия 2)

Вторая версия требует вдвое больше памяти для коэффициентов фильтра и имеет ту же временную сложность O(NK), что и первая версия.

Наконец, третья версия представляет собой программную реализацию формулы (2) и выглядит очень компактно:

float Process(float sample) {

var output = b[0]*sample + s[0];

for (var j = 1; j < s.Length; j++)

{

s[j - 1] = b[j]*sample -

a[j]*output + s[j];

}

return output;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

}

Листинг 3. Код реализации работы БИХ-фильтра (версия 3)

Массив s предназначен для хранения вектора состояний фильтра. Размер этого массива равен максимальному числу из количества коэффициентов рекурсивной и нерекурсивной частей формулы (1). Из листинга видно, что используется всего один цикл. В случае нулевых значений коэффициентов фильтра будут выполнены лишние арифметические операции, но в остальных случаях третья версия кода должна отработать быстрее первых двух.

К экспериментам были подготовлены также фрагменты кода, работающие с вещественными числами двойной точности (double, 64 бит) вместо одинарной точности (float, 32 бит). Существенного замедления эти варианты не дают, и обычно выбор

определяется из соображений более эффективного использования

оперативной памяти или прямой необходимости в двойной точности вычислений.

Эксперимент проводился с аудиоданными в формате PCM WAV со следующими характеристиками: частота дискретизации - 22050 Гц, количество бит на отсчет - 16, количество каналов - 1 (моно сигнал). Замеры времени производились с

предварительным «разогревом»

процессора, несколько раз и в различном порядке, затем полученные значения усреднялись. Порядок фильтра варьировался в пределах от 5 до 31. Проектировались полосовые фильтры Чебышева и Баттерворта с различными частотами среза (впрочем, конкретный вид фильтра не играет роли в этих экспериментах). На рис. 2 приведены скоростные показатели фильтрации сигнала длительностью 20 минут (около 26,5 миллионов отсчетов).

Эксперименты производились на персональном компьютере со следующими характеристиками:

процессор Intel Core i3 с тактовой частотой 3,5 ГГц; объем оперативной памяти 12 Гб.

—•— версия 1 —версия 2

—версия 3

1 с

3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33

Порядок фильтра

Рис. 2. Результаты экспериментов

Эксперименты выявили более высокую эффективность третьей версии кода по сравнению с первыми двумя. В отличие от ситуации с КИХ-фильтрами, первые две версии кода для БИХ-фильтров практически не отличаются по скорости. Для более высоких порядков фильтров прирост скорости в третьей версии является весьма ощутимым (около 25%).

Выводы

Проведенные исследования

позволили сравнить показатели скорости цифровой фильтрации различными способами на новейшей платформе .NET Core. Исходя из результатов, можно выработать следующие рекомендации для БИХ-фильтров. Для фильтров Баттерворта, Чебышева, эллиптических фильтров, а также в общем случае равенства числа коэффициентов рекурсивной и нерекурсивной части, предпочтительна третья версия кода, описанная в статье, основанная на представлении системы в пространстве состояний. Выбор между первыми двумя версиями кода, основанными на конечно-разностных уравнениях, не так критичен. Вторая версия работает несколько быстрее, но требует в два раза больше памяти.

Список литературы:

1 . Шарий Т.В. Об особенностях реализации цифровых линейных фильтров на платформах .NET Framework и .NET Core / Т.В. Шарий. -Вестник Донецкого национального университета. Серия Г. Технические науки, 2019. - Вып. 3. - С. 2G-25.

2. Lyons R. Understanding Digital Signal Processing. 3rd Edition / R.Lyons. -Prentice Hall, 2G14. - 984 p.

3. Downey A. Think DSP. Digital Signal Processing in Python / A.Downey. -

O'Reilly Media, 2016. - 176 p.

4. The Scientist and Engineer's Guide to Digital Signal Processing by S.W. Smith [Электронный ресурс] : сайт. -Электрон. дан. - California Technical Publishing, 1997-2011. - Режим доступа: http://www.dspguide.com. - Загл. с экрана.

5. Orfanidis S. Introduction to signal processing / S.Orfanidis. - Prentice Hall, 2010. - 783 p.

6. Sridhar B. / Railway Track Fault Monitoring System using Signal Processing Techniques / B. Sridhar, B. Devi, A. Lavanya. - I-Manager's Journal on Digital Signal Processing, 2018. -Vol.6 (3). - P.24-32.

7. Common Language Runtime (CLR) Overview [Электронный ресурс] : сайт. - Электрон. дан. - Microsoft, 2020. - Режим доступа: https://docs.microsoft.com/en-us/dotnet/standard/clr. - Загл. с экрана.

8. Signal Processing Toolbox [Электронный ресурс] : сайт. -Электрон. дан. - The MathWorks, Inc., 1994-2020. - Режим доступа: https://www.mathworks.com/ products/signal.html. - Загл. с экрана.

9. Math.NET Filtering [Электронный ресурс] : сайт. -Электрон. дан. - Math.NET Project, 2020. - Режим доступа: https://filtering.mathdotnet.com. - Загл. с экрана.

10. Bonsai. A visual programming language for reactive systems built on top of Rx for .NET [Электронный ресурс] : сайт. - Электрон. дан. - NeuroGEARS, 2020. - Режим доступа: https://bonsai-rx.org. - Загл. с экрана.

11. DspSharp. API for Digital Signal Processing in C# [Электронный ресурс] : сайт. - Электрон. дан. - Jonathan Arweck at GitHub, 2020. - Режим доступа: https://github.com/Jonarw/DspSharp. -Загл. с экрана.

Аннотации:

В статье производится исследование способов программной реализации цифровых линейных фильтров с бесконечной импульсной характеристикой на платформе .NET Core. Описаны три версии программного кода алгоритмов. Первые две версии основаны на разностных уравнениях. Третья версия основана на представлении фильтра в пространстве состояний. Приведены результаты

сравнительного анализа скорости работы фильтров на платформе .NET Core 2.1, а также рекомендации по выбору подходящей реализации.

Ключевые слова: .NET Core; C#; цифровой фильтр; пространство состояний; разностные уравнения.

The article provides research of program implementation of digital linear filters with infinite impulse response in .NET environment. Three versions of the program code of algorithms are described. The first two versions are based on difference equations. The third version is based on the state-space representation of a filter. The results of comparative analysis of filtering performance on .NET Core 2.1 platform are given, as well as recommendations concerning the choice of appropriate realization.

Keywords: .NET Core; C#; digital filter; state space; difference equations.

УДК 004.771

ЧЕПЦОВ М.Н., д.т.н., профессор (Донецкий институт железнодорожного транспорта) СОРОКИН В.Е., старший преподаватель (Донецкий институт железнодорожного транспорта)

Синтез модели работы оптимальной системы интервального регулирования движением поездов на базе цифрового радиоканала

Cheptsov M.N., Doctor of Technical Sciences, Professor (DRTI) Sorokin V.E., Senior Lecturer (DRTI)

Synthesis of the model of the optimal system of interval control by train movement on the basis of a digital radio channel

Введение

Системы интервального

регулирования движением поездов (ИРДП) на базе цифрового радиоканала работают на основе принципов радиоблокировки. Радиоблокировка -это система интервального

регулирования движением поездов, предназначенная для организации и управления движением на участках железных дорог с использованием

цифрового радиоканала различных стандартов.

В системах ИРДП передача информации по цифровому радиоканалу как текущей координаты поезда gi от бортового оборудования поезда в центр радиоблокировки (ЦРБ), так и передача информации координаты прицельного торможения х^ в обратном направлении, могут быть подвержены воздействию помех и искажающих факторов щ, которые в наихудших условиях

i Надоели баннеры? Вы всегда можете отключить рекламу.