ЭУМК по дисциплине "Программирование проблемно-ориентированных вычислительных средств реального времени" › Теория › Тема 1. Программирование синусоидальных сигналов аналитическими и табличными методами

# Электронный учебно-методический
комплекс по дисциплине
"Программирование проблемно-ориентированных вычислительных средств реального времени"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

РАЗДЕЛ 1.
ФОРМИРОВАНИЕ СИГНАЛОВ, ЦИФРОВАЯ ФИЛЬТРАЦИЯ И БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ
Тема 1. Программирование синусоидальных сигналов аналитическими и табличными методами
1.1. Аналитические методы программирования синусоиды
1.1.1. Предмет, цели и задачи курса

Дисциплина «Программирование проблемно-ориентированных вычислительных средств реального времени» является одной из основных дисциплин специализации и направлена на подготовку специалистов в области проектирования, программирования и эксплуатации вычислительных средств, ориентированных на решение определенного класса задач. Она предусматривает изучение как основ программирования проблемно-ориентированных процессоров, так и разработки и практической реализации алгоритмов работы специализированных вычислительных средств и систем на их основе. Целью дисциплины является изучение студентами принципов программирования проблемно-ориентированных вычислительных средств реального времени, а также знакомство с основными алгоритмами цифровой обработки сигналов. Содержание курса включает сведения о принципах программирования цифровых процессоров обработки сигналов (ЦПОС) и основных алгоритмах цифровой обработки сигналов (ЦОС). Содержание дисциплины должно найти отражение в дипломных проектах.
Задачи дисциплины:
– формирование у студентов технического мышления;
– получение практических навыков разработки и отладки алгоритмов и программ для проблемно-ориентированных вычислительных средств.
В результате изучения дисциплины студенты должны:
знать:
- наиболее эффективные и часто используемые на практике алгоритмы цифровой обработки сигналов;
- особенности систем команд проблемно-ориентированных процессоров;
- принципы и приемы программирования проблемно-ориентированных вычислительных средств реального времени;
- язык ассемблера проблемно-ориентированных процессоров;
уметь:
- выполнять алгоритмизацию и программирование задач цифровой обработки сигналов в реальном времени;
- использовать имеющееся программное обеспечение;
- анализировать исходные и выходные данные решаемых задач и формы их представления;
- отлаживать программы;
иметь представление о:
– основах программирования систем цифровой обработки сигналов;
– современном уровне и перспективах развития алгоритмов ЦОС;
владеть методами программирования вычислительных средств на базе ЦПОС;
иметь опыт разработки программ для ЦПОС, их отладки, проектирования специализированных вычислительных систем.
Программа дисциплины рассчитана на один семестр и включает 48 часов лекций, 16 часов практических занятий и 32 часа лабораторных работ. В конце семестра – экзамен.

1.1.2. Рекуррентно-аналитический метод на основе формул суммы двух углов

Существует несколько аналитических (вычислительных) методов формирования синусоидальных сигналов. Один из таких методов основан на формулах суммы двух углов:

| sin(α+β) = sin(α)·cos(β)+cos(α)·sin(β), cos(α+β) = cos(α)·cos(β)–sin(α)·sin(β). | (1.1)

Этот метод применим для последовательной генерации отсчетов одной синусоиды и позволяет вычислить очередной отсчет функции, например sin(an)=sin(a(n-1)+a) через предыдущий sin(a(n-1)).
Использовав a(n-1) в качестве α и a в качестве β и обозначив S1=sin(a), C1=cos(a), Sn(n)=sin(an), Cn(n)=cos(an), получим следующие выражения для вычисления очередных значений синуса и косинуса:

| Sn(n) = C1·Sn(n-1)+S1·Cn(n-1), Cn(n) = C1·Cn(n-1)–S1·Sn(n-1). | (1.2)

Исходными данными для вычисления первой гармоники (с минимальной возможной частотой) являются следующие значения: Sn(0)=0, Cn(0)=1 – значения синуса и косинуса для нулевого аргумента; N – длина выборки (число отсчетов в первой гармонике); a=2Π/N – минимальное приращение аргумента и S1=sin(2Π/N), C1=cos(2Π/N) – значения синуса и косинуса для минимального аргумента.
На рис. 1.1 показан пример синусоиды с периодом 8 отсчетов (N=8).

###

### Рисунок 1.1 – Синусоида с периодом 8 отсчетов

Учитывая, что исходными значениями для k-й гармоники являются начальный угол β=ak, Sk=sin(ak) и Ck=cos(ak), для их вычисления можно использовать те же самые формулы:

| Sk(k) = C1·Sk(k-1)+S1·Ck(k-1), Ck(k) = C1·Ck(k-1)–S1·Sk(k-1). | (1.3)

Исходными данными для вычисления, как и в выражении (1.2), являются значения Sk(0)=0 и Ck(0)=1.
Расположив данные в памяти следующим образом: Cn, Sn, Ck, Sk, C1, S1, можно использовать одну и ту же подпрограмму с косвенной адресацией для вычисления как отсчетов очередной гармоники Sn и Cn, так и начальных значений Sk и Ck.
Для чего вначале устанавливаем указатель (адрес во вспомогательном регистре) на Ck и вычисляем очередное значение Ck и Sk, а затем на Cn и вычисляем нужное число отсчетов очередной гармоники Sn и Cn:

| Sn(n) = Ck·Sn(n-1)+Sk·Cn(n-1), Cn(n) = Ck·Cn(n-1)–Sk·Sn(n-1). | (1.4)

При программировании синусоиды данным методом необходимо учесть следующие замечания:

- используя два вспомогательных регистра и двухоперандные команды (Xmem, Ymem), вычисление синуса (косинуса) можно выполнить тремя командами;
- поскольку ассемблер TMS320VC5402 не имеет директив для задания дробных чисел, то дробные числа (формат Q15) переводятся в целые путем умножения на 32768 и используется директива .word;
- поскольку не существует кода для положительной единицы, то для задания cos(0) используется приближенное значение 7FFFh = 1-2-15;
- для того чтобы формируемая синусоида (косинусоида) не затухала, начальное значение C1=cos(2Π/N) увеличивается на одну или две единицы младшего разряда и вычисления выполняются в старшей части аккумулятора при установленном режиме коррекции переполнения.

1.1.3. Рекуррентно-аналитический метод на основе формул двойного угла

Другой аналитический метод основан на формулах двойного угла:

| sin(2α) = 2· sin(α)·cos(α), cos(2α) = cos2(α)–sin2(α)=1–2· sin2(α)=2· cos2(α)–1. | (1.5)

Для вычисления косинуса целесообразно использовать второе выражение, т.к. первое требует возведения в квадрат двух значений, а третье – дает не точный результат из-за того, что косинус малого угла близок к единице.
Данный метод позволяет вычислить синус и косинус любого угла, но требует больше затрат для вычисления последовательных отсчетов синуса и косинуса.
Суть метода заключается в вычислении очередного значения аргумента синуса (косинуса) a(n)=a(n-1)+s(k), где s(k) – шаг приращения аргумента (угла) для k-й гармоники. При этом данный шаг вычисляется по аналогичной формуле s(k)=s(k-1)+a, где a=2Π/N – приращение аргумента первой гармоники.
Для вычисления функции аргумент a(n) делится на два m раз до тех пор, пока не будет выполняться с заданной точностью соотношение sin(α)=α, где α=a/2m.
После чего, применив m раз вышеприведенные формулы (1.5) и использовав в качестве первого приближения sin(α) = α и cos2(α) = 1 – sin2(α) = 1 – α2, получим значения синуса и косинуса угла a(n).
Например, для угла 0.0625 рад (0.0625×32768=2048=800h) точное значение синуса равно 0.0624593 (2046.7=7FFh), а косинуса – 0.9980475 (32704=7FC0h); для угла 0.03125 рад (1024=400h) значение синуса равно 0.0312449 (1023.8=400h), а косинуса – 0.9995117 (32752=7FF0h), и для угла 0.015625 рад (512=200h) значение синуса равно 0.0156244 (511.9=200h), а косинуса – 0.9998779 (32764=7FFCh).

Поскольку точные значения косинуса малого угла отличаются от единицы, то для повышения точности расчета следовало бы для его первого приближения находить значение из выражения cos2(α) = 1 – sin2(α). Но так как вычисление квадратного корня трудоемкая операция, то с достаточно высокой точностью можно получить значение косинуса по формуле cos(α) = 1 – α2/2, что для малых углов дает очень хорошее приближение. По этой формуле для трех приведенных выше углов получим следующие значения: 0.9980469 (32704=7FC0h), 0.9995117 (32752=7FF0h) и 0.9998779 (32764=7FFCh). Из приведенных выше расчетов видно, что с точностью ½ младшего разряда мы получим результат при углах, меньших 0.03125 рад или 1,8° (1024=400h).
Для нахождения m и для деления на 2m можно использовать специализированные команды цифрового процессора сигналов (ЦПС) EXP и NORM. Так, например, если порог равен 400h, а аргумент равен 0.09473 рад (0C20h), то его необходимо разделить на 2 два раза (m=2), чтобы получить значение 308h, меньшее порога. Исходное число после загрузки в старшую часть 40-разрядного аккумулятор содержит слева 3 незначащих двоичных нуля (000C200000h), а максимальное число, меньшее порога, – 5 (0003FF0000h), т.к. незначащие нули считаются без 8-ми защитных разрядов. Выполнив команду EXP, мы получим в регистре T значение 3, и, вычтя его из 5, мы получим 2, что равно m, для организации цикла итерационных вычислений по формуле (1.5) нужно m-1 (т.е. 4-Т), которое загружается во вспомогательный регистр. А для деления на 2m нужно число -m, которое получается вычитанием из регистра T значения 5, и, использовав команду NORM, получим в старшей части аккумулятора значение 0C20h, деленное на 2m, т.е. 308h. Если в результате выполнения команды EXP в регистре T получается значение ≥5, то значит аргумент меньше порога и итерации выполнять не нужно, а в качестве синуса берется sin(α) = α.

При программировании синусоиды данным методом необходимо учесть следующие замечания:

- поскольку аргумент и шаг могут быть >1 (максимальное значение аргумента 6.28=2Π), то для исключения переполнения необходимо промасштабировать все переменные (разделить на 8);
- значение m-1=7-Т (у порога 8 нулей), а для команды NORM из регистра T нужно вычитать по прежнему 5, а не 8, чтобы восстановить аргумент (/2m и *8);
- вычисления выполняются без коррекции переполнения (увеличение аргумента), а для коррекции переполнения (при записи) используется бит SST в PMST;
- необходима проверка для малых углов (меньше порога), иначе получится отрицательное число переполнений.

Схема алгоритма формирования последовательности синусоид с возрастающей частотой для двух приведенных выше алгоритмов представлена на рис. 1.2.

###

### Рисунок 1.2 – Схема алгоритма формирования последовательности синусоид

При программировании последовательности синусоиды необходимо учесть следующие замечания:

- процедура вычисления начальных значений k-й гармоники в начале повторяется k раз (начать с k-гармоники), а затем 1 раз (перейти к следующей гармонике) или i раз (перейти к гармонике k+i);
- процедура вычисления начальных значений k-й гармоники это подпрограмма вычисления очередного значения синуса и косинуса для первого алгоритма и увеличение приращения аргумента (s(k)=s(k-1)+a) – для второго;
- во втором алгоритме необходимо перед каждым вызовом подпрограммы выполнять увеличение аргумента a(n)=a(n-1)+s(k).

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах
© БГУИР , 2012