Romm Yakov Evseevich - Taganrog State Pedagogical Institute; e-mail: [email protected]; 48, Initsiativnaya street, Taganrog, 347926, Russia; phones: +78634601753, +78634601812, +78634601807; the department of information science; head of the department; dr. of eng. sc.; professor.
Stakhovskaya Irina Illarionovna - e-mail: [email protected]; phone: +79034604006; the student grade.
УДК 681.3.06(075)
М.И. Ледовской
АЛГОРИТМ ВЫЧИСЛЕНИЯ ФУНКЦИЙ SIN(X) И COS(X) ДЛЯ 16-РАЗРЯДНЫХ МИКРОКОНТРОЛЛЕРОВ
При использовании микроконтроллеров во встраиваемых системах различного назначения возникает необходимость вычисления элементарных функций sin(x) и cos(x). Решение этой задачи с помощью стандартной библиотеки функций языка С приводит к существенному росту программного кода и времени вычислений для микроконтроллеров с ограниченными вычислительными возможностями. В этом случае альтернативой могут служить собственные подпрограммы на основе таблично-алгоритмического метода, реализуемого с помощью целочисленной арифметики микроконтроллера. Однако преимущества таблично-алгоритмического метода проявляются в том случае, если поправки к табличным значениям функций вычисляются с помощью простейших методов аппроксимации. Негативным следствием применения указанных методов является значительный объем табличных значений функций, которые требуется хранить в памяти микроконтроллера. По этой причине реализация таблично-алгоритмического метода затрудняется. В настоящей работе предлагается алгоритм таблично-алгоритмического метода, который по сравнению с аналогом обеспечивает требуемую точность и позволяет сократить в 8 раз объем табличных значений функций. Алгоритм может найти применение, например, при создании различных устройств со сверхнизким энергопотреблением на базе 16-разрядных микроконтроллеров MSP430 без аппаратного умножителя.
Функция sin(x); cos(x); таблично-алгоритмический метод; целочисленный алгоритм, микроконтроллер; погрешность; MATLAB; модель.
M.I. Ledovskoy
THE ALGORITHM OF CALCULATION OF THE FUNCTIONS SIN(X), COS(X) FOR 16-BIT MICROCONTROLLERS
When using microcontrollers and embedded systems for various purposes there is a necessity of calculation of elementary functions sin(x) and cos(x). The solution to this problem using standard С-library functions with leads to substantial growth of code and time of calculations for microcontrollers with limited computing power. In this case, the alternative can serve as your own routines based table-algorithmic method, which is implemented using integer arithmetic microcontroller. However, the advantages of table-algorithmic method appear in the case, if the amendments to the tabular values of the functions are computed using the simplest methods of approximation. A negative consequence of use of the mentioned methods is a significant amount of tabular values of the functions that you want to store in memory of the microcontroller. For this reason, the implementation of a table-algorithmic method difficult. In the present paper an algorithm is proposed table-algorithmic method, which in comparison with the similar provides the required accuracy and reduces to 8 times the amount of the tabular values of functions. The algorithm can find application, for example, the creation of different devices with ultra low power consumption-based 16-bit MSP430 microcontrollers without hardware multiplier.
The function sin(x); cos(x); table-algorithmic method; integer algorithm; microcontroller; error; MATLAB; model.
При использовании микроконтроллеров во встраиваемых системах различного назначения зачастую возникает необходимость вычисления элементарных функций, например, зт(х) и говС*:). Решение этой задачи с помощью стандартной библиотеки функций языка С [1], основанной на арифметике вещественных чисел, приводит к существенному росту программного кода и времени вычислений для микроконтроллеров с ограниченной разрядностью, где аппаратная поддержки режима плавающей точки отсутствует. В этом случае альтернативой функциям языка С могут служить собственные подпрограммы на основе таблично-алгоритмического метода [2, 3], реализуемого с помощью целочисленной арифметики микроконтроллера. Такой прием положительно сказывается на объеме программного кода и скорости вычислений. Однако преимущества таблично-алгоритмического метода проявляются в том случае, если поправки к табличным значениям функций вычисляются с помощью простейших методов аппроксимации, например, одночленного ряда Тейлора или линейной интерполяции. Это наиболее заметно для тех микроконтроллеров, которые не поддерживают аппаратно целочисленную операцию умножения. Негативным следствием применения указанных методов аппроксимации является значительный объем табличных значений функций, которые требуется хранить в памяти микроконтроллера. По этой причине реализация таблично-алгоритмического метода в условиях ограниченных вычислительных возможностей микроконтроллера затрудняется.
В этой связи возникает необходимость в разработке алгоритмов таблично-алгоритмического метода, обеспечивающих сокращение количества табличных значений функций и не требующих использования целочисленной операции умножения. В настоящей работе рассматривается одно из возможных решений данной задачи на примере функций зт(х) и говС*:).
Как известно, таблично-алгоритмический метод основан на разбиении интервала изменения аргумента х и образовании узловых точек хк, для которых заранее вычисляются значения функции, помещаемые в таблицу [2]. Причем хк = хк-] + к, где к - шаг таблицы по аргументу х. Тогда значения функции для промежуточных значений аргумента определяются путем выборки из таблицы ближайшего узлового значения и вычисления поправки. В рамках таблично-алгоритмического метода могут применяться различные методы аппроксимации функций для вычисления поправок. Предлагаемый алгоритм основан на вычислении поправок путем интегрирования порождающей системы дифференциальных уравнений Шеннона [4] для функций зт(х) и соз(х):
X
У1( X) = Хк) + | У2( х)Жс,
хк
х (1)
У2(х) = У2(хк)" | У1(х)бх,
хк
где у^х^тОх) и у2(х)=газ(х) - искомые значения функций в точке х; у1(хк) и у2(хк) - ближайшие табличные значения этих функций в узловой точке хк. Интегралы, стоящие в правой части уравнений (1), представляют собой поправки к табличным значениям функций. Для получения численного алгоритма необходимо подобрать разностную схему, которая аппроксимирует уравнения (1), обеспечивая баланс между методической и инструментальной погрешностью функций при известной разрядности микроконтроллера. Далее для определенности разрядность микроконтроллера принимается равной п=16.
Методическую погрешность можно получить, используя известную методику оценки погрешности воспроизведения элементарных функций путем численного интегрирования порождающих уравнений Шеннона [4]. В частности, если интегралы в уравнениях (1) вычисляются по формуле трапеций, то выражение для методической погрешности функции уДх^тх на интервале [хк, х] имеет вид
1 2
£м1(х) = — (ух) (х - хк х), (2)
где Ух - шаг численного интегрирования по аргументу х. Поскольку sm(x)шax=1 и (х-хк)шах= к, где к - шаг таблицы по аргументу х для функции sin(x), то
1 2
*м1 <-(Ух)2 к (3)
Помимо влияния на величину методической погрешности £м1, параметр к определяет количество табличных значений функции sin(x) на заданном интервале изменения аргумента х, например [0, 1-2-8], а параметр Ух - количество шагов интегрирования на интервале [хк, х], т.е. время вычисления текущего значения этой функции.
Вместо нахождения инструментальной погрешности, требующей сложных выкладок, можно ограничиться получением погрешности округления, возникающей при представлении вещественных значений переменных в целочисленном формате [5]. Например, для функции у^х^т(х) достаточно найти квант, соответствующий единице младшего разряда целочисленного формата со знаком: Ду1= =|у1(х)|шах/(2""1-1) = 2"("_1), что является предельным значением погрешности округления с недостатком. Если табличные значения функции у^х^т^), являясь вещественными величинами, преобразуются в целочисленный формат по формуле Г1к=гоиш1(у1(хк)/Ду1), где гоипёО - функция округления до ближайшего целого, то погрешность округления подчиняется оценке £о1< 2'" (округление по 1/2) .
Налагая более жесткие условия на методическую погрешность, определим баланс погрешностей в виде £м1<£о1 или
^(Ух)2к < 2-". (4)
Выражение (4) содержит два неизвестных параметра Ух и к, одним из которых необходимо задаться. В отличие от к, параметр Ух будет явным образом присутствовать в алгоритме и влиять на его сложность. Поэтому его следует выбрать в виде степени числа 2, например, 2-8. Такой выбор упрощает алгоритм и фактически исключает необходимость использования операции целочисленного умножения. Полагая Ух=2-8, из (4) при "=16 получаем к<1/12.
С целью дальнейшего упрощения алгоритма шаг таблицы Ь по аргументу х также представим в виде степени числа 2. В этом случае старшие разряды целочисленного значения аргумента Х=гоиш1(х/Дх) представляют узловое (табличное) значение Хк=гоипё(хк/Дх) и одновременно - адрес ближайшего табличного значения функции. Здесь Дх=|х|шах/(2"-1-1) - квант аргумента х.
Учитывая ограничение к<1/12, примем к=2-4. Тогда количество табличных значений функции sin(x) на интервале изменения аргумента [0, 1-2-8] составит 16 и максимальное количество шагов интегрирования Ух=2-8 на отрезке (х-хк)шах= к=2-4 тоже получается равным 16.
Заметим, что в случае вычисления поправки к табличным значениям функции sin(x) с помощью одночленного ряда Тейлора, шаг таблицы, найденный при тех же условиях из баланса методической погрешности и погрешности округления, будет равен к=2-7 [6]. При этом объем таблицы возрастет до 128. Следовательно, предлагаемый подход позволяет сократить объем таблицы для функции sin(x) в 8 раз.
Таким образом, формула трапеций подходит для построения разностной схемы, аппроксимирующей уравнения (1). В случае ее использования разностную схему можно представить следующим образом:
У* = 2У20-1) " У2(1-2),
Ун = Ущ -1) + 2-1( У*,' + У2(,--ц^Х
У2. = У2(,-1) - 2-1(Ух, + Ущ-1) ^ (5)
х = х,-1
Х0 = Хк, У10 = У1к, У20 = У2(-1) = У2к , , = 1,2,3,...,
где знак * обозначает экстраполированное значение.
При построении целочисленного алгоритма на основе разностной схемы (5), помимо основного 16-разрядного формата данных, используется внутренний 32-разрядный формат, что позволяет исключить накопление инструментальной погрешности. Обозначения этих форматов приведены в табл. 1.
Таблица 1
Вид целочисленного формата Обозначение формата Обозначение старшего слова Обозначение младшего слова
32-разрядный формат 16.16 16.0 0.16
16-разрядный формат 16 - -
Целочисленный алгоритм вычисления функций у^х)=8т(х), и у2(х)=ссв(х) представлен на рис. 1. Переменные, входящие в данный алгоритм, связаны с вещественными переменными разностной схемы (5) следующими зависимостями: Х=гшпё(х-Мх), Хк=гоипфк-Мх), РХ=гоипё( VxМх), У1=гсипё(У1-МУ), Г1к=готё(У7к-МУ), Г2=гоипё(У2-МУ), Г2к=гоипё(У2к-МУ), где Мх, МУ - масштабы, которые определяются как обратные значения соответствующих квантов и округляются до ближайшей степени числа 2. Значения масштабов и целочисленные значения переменных приведены в табл. 2.
Целочисленный шаг Н, приведенный в табл. 2, не присутствует явно в алгоритме, но определяет фактический диапазон изменения узловых значений аргумента Хк. Если не считать нулевого значения, то 211< Хк<215-2И, так как Хк= Хк-1 + Н и Н=211. Поэтому старшие разряды текущего значения целочисленного аргумента Х, начиная с 11-го по 14-й, несут информацию о величине Хк и могут использоваться в качестве адреса ближайших табличных значений У1к и У2к.
Заметим также, что учет коэффициента 27 не требует выполнения операции умножения. Если представить 27=28 -2"1, то 2-1 реализуется операцией сдвига на 1 двоичный разряд, а 28 - перестановкой байтов в регистре микроконтроллера.
Для проверки точностных характеристик проведено моделирование целочисленного алгоритма в системе МЛТЬЛБ. Цель эксперимента состояла в анализе полной, методической и инструментальной погрешностей вычисления функций Бт(х) и сс8(х) на интервале изменения аргумента [0, 1-2-8] при й=2"4 и Vx=2~s. Для этого использовалась методика [7], в соответствии с которой разработана структура модели (рис. 2) и создан ш-файл модели на языке МЛТЬЛБ.
Рис. 1. Целочисленный алгоритм вычисления функций зт(х), соэ(х) для 16-разрядных микроконтроллеров
Таблица 2
Вещественная переменная Масштаб Целочисленное значение
yi ¡л IN и Sf 0<Y1<215-1
У2 My 0<Y2<215-1
x 1/1 IN и sT 0<X<215-27
xk Mx 0< Zk<215-211
Vx Mx VX=27
h Mx H=211
Функции 5т(х). соф) МАТХАВ Методическая погрешность
Текущие значения аргумента х Алгор итм в формате целых чисел Полная погрешность
V
Инструментальная погрешность
—> Алгор и тм в формате плавающей точки / *
Рис. 2. Структура МЛТЬЛБ-модели для экспериментального анализа погрешностей вычисления функций ят(х) и еоз(х)
Главный блок модели реализует целочисленный алгоритм, характеризуемый методической ем, инструментальной еи, а также полной погрешностью е=ем+еи. Эталонный блок модели обеспечивает вычисление функций 8т(х) и сс8(х) в формате «двойное вещественное» (формат плавающей точки) с ем~0 и е-0 путем вызова библиотечных функций МЛТЬЛБ. Вспомогательный блок модели реализует разностную схему (5) также в формате «двойное вещественное» и характеризуется методической погрешностью ем, равной погрешности главного блока, и инструментальной погрешностью е=0. Поэтому сопоставление результатов указанных блоков, как это показано на рис. 2, обеспечивает достижение цели моделирования.
Рис. 3. Результаты моделирования целочисленного алгоритма в системе МЛТЬЛБ
Из результатов моделирования, представленных на рис. 3, видно, что полная погрешность вычисления функций sin(x) и cos(x) не превышает величины 1,5-10-5, что соответствует погрешности округления для 16-разрядного формата данных. Заданный баланс методической и инструментальной погрешностей £м<£„ соблюдается.
Наряду с приемлемыми точностными характеристиками предлагаемый алгоритм, как отмечалось выше, обеспечивает сокращение в 8 раз объема табличных значений функций по сравнению с аналогом.
Алгоритм может найти применение при создании различных устройств со сверхнизким энергопотреблением на базе 16-разрядных микроконтроллеров MSP430 без аппаратного умножителя, например, MSP430F135.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Керниган Б., Ритчи Д. Язык программирования С. - 2-е изд.: Пер. с англ. - М.: Вильямс, 2010. - 304 с.
2. Попов Б.А., Теслер Г.С. Вычисление функций на ЭВМ: Справочник. - Киев: Наукова думка, 1984. - 600 с.
3. Ромм Я.Е., Аксайская Л.Н. Кусочно-полиномиальная аппроксимации функций, производных и определенных интегралов на основе интерполяции по Ньютону // Известия ЮФУ. Технические науки. - 2008. - № 2 (79). - С. 14-21.
4. Каляев А.В. Теория цифровых интегрирующих машин и структур. - М.: Советское радио, 1970. - 472 с.
5. Ледовской М.И. Обработка вещественных данных в микроконтроллерах с арифметикой фиксированной точки // Известия ТРТУ. - 2004. - № 2 (37). - С. 52-58.
6. Байков В.Д, Смолов В.Б. Специализированные процессоры: итерационные алгоритмы и структуры. - М.: Радио и связь, 1985. - 288 с.
7. Ледовской М.И. Моделирование алгоритма инерциальной навигации в MATLAB-SIMULINK // Ползуновский вестник. - 2011. - № 3/1. - С. 9-11.
Статью рекомендовал к опубликованию д.т.н., профессор А. А. Зори.
Ледовской Михаил Иванович - Южный федеральный университет; e-mail: [email protected]; 347900, г. Таганрог, ул. Петровская, 81; тел.: 88634328025; кафедра микропроцессорных систем; к.т.н.; доцент.
Ledovskoy Mikhail Ivanovich - Southern Federal University; e-mail: [email protected]; 81, Petrovsky street, Taganrog, 347930, Russia; phone: +78634328025; the department of microprocessor systems; cand. of eng. sc.; associate professor.