Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: FPU Cortex M4

Пт июн 26, 2015 20:12:58

Макетная установка - автомобильный аккумулятор, нагрузка - два электрода в пластмассовом ведре с соленой водой. Как раз у той установки, куда это будет лепиться - выход 15 В 400 А. Автомобильный аккумулятор не сильно слабее.

bad2cat писал(а):Я так понимаю, там главные потери - динамические на переключателях?

Да, они самые. Там на выходе 10 запараллеленых транзистора IRF4905, шоттки на 600 А, индуктивноость на кольцах из распыленного железа марки 52. Полная гальваническая развязка, силовые цепи связаны по оптике. ОС - изолированный датчик тока на эффекте холла ACS series от Allegro
Потери:
- нагрев проводников
- не бесконечн короткие участки линейной работы полевых транзисторов на время возрастания напряжения на затвоорах
-Активное сопротивление переходов транзисторов.
-Потери в диодах шоттки
-потери в индуктивности

Все вместе до 50-60 Вт

Re: FPU Cortex M4

Пт июн 26, 2015 23:30:40

FPGAlover писал(а):
Cat писал(а): радиусом скажем метр, и длиной пару метров при разрешении 0,01 мм

Да уж, для такой точности, таблица будет ~600К значений
Таблицу можно интерполировать не линейной функцией, а допустим, квадратичной, или более высоким полиномом. Точность растёт очень быстро. Я как-то извращался с полиномиальной аппроксимацией одной ужасной функции. Думаю, для синуса можно что-то аналогичное придумать и быстро считаемое в рамках арифметики с фиксированной точкой (синус в отличие от той функции в математическом смысле очень хорошая функция, и это скажется). Точность можно сделать хоть 10^-10 при желании. Не думаю что размер таблицы вылезет за сотню чисел в сумме по всем коэффициентам всех полиномов.

Re: FPU Cortex M4

Сб июн 27, 2015 01:52:10

Таблица уже неактуальна, допилил модуль - софт считает синус - 9 значащих разрядов с плавающей точкой за 45 тактов. А так как у меня один катет и гипотенуза известны, то через основное тригонометрическое тождество вообще за 30 тактов. Проблема снята. На 168 МГц выше крыши.

П.С. B@R5uk, я к сожалению в высшей математике никогда не был особо силен, и то, что вы кинули по ссылке,- для меня инопланетные разговоры на инопланетном языке о вещах иной цивилизации. :oops: .

Расчеты с фиксирванной точкой для меня неактуальны - АЛУ чипа за 1 такт щелкает операции с плавающей точкой.

Re: FPU Cortex M4

Пн июн 29, 2015 09:23:49

B@R5uk писал(а):Таблицу можно интерполировать не линейной функцией, а допустим, квадратичной, или более высоким полиномом.

Конечно можно, но боремся то за быстродействие.

Re: FPU Cortex M4

Вт июн 30, 2015 13:58:23

Проведя тесты в железе, пришел к тому, что пойду по пути организации "гибридной" логики работы устройства. Что можно(по максимуму) - считать целочисленной арифметикой, что необходимо- с плавающей точкой, поскольку расчетов очень много, ошибка экспоненты накапливается.

Re: FPU Cortex M4

Ср июл 22, 2015 15:43:03

B@R5uk писал(а):Таблицу можно интерполировать не линейной функцией, а допустим, квадратичной, или более высоким полиномом.

Обычно используют не просто полином, а разложение в ряд Тейлора в окрестности текущей точки таблицы. Так получается наилучшее соотношение точности и скорости.

Cat писал(а):софт считает синус - 9 значащих разрядов с плавающей точкой

Эм... У числа с плавающей точкой одинарной точности мантисса имеет всего ~7 десятичных знаков. Откуда 9 взялось?

FPGAlover писал(а):Конечно можно, но боремся то за быстродействие.

Это и так один из самых быстрых и точных методов. Можно быстрее, но точность будет страдать.

Re: FPU Cortex M4

Чт июл 13, 2017 11:46:14

Обычно используют не просто полином, а разложение в ряд Тейлора в окрестности текущей точки таблицы. Так получается наилучшее соотношение точности и скорости

линейная быстрее и при заданной ТС точности (10^-5) - уж точно не хуже.

Cat писал(а): радиусом скажем метр, и длиной пару метров при разрешении 0,01 мм

Да уж, для такой точности, таблица будет ~600К значений
кхм...
Вот тут viewtopic.php?p=3143767#p3143767 Я привёл аргументы, почему таблицы достаточно 3,6 кбайт или даже 360 байт.

Кратенько:
Так вот максимальное отклонение для такой таблицы (шаг 0,1 градуса) всего 0,38 ppm в точке 90 градусов (или 0 градусов для косинуса). А минимальное значение 0,00033 ppm в точке 0 градусов. Сравнение производится в середине интервала между табличными значениями, разумеется.
А для таблицы с шагом 1 градус размер таблицы будет 360 байт, а наихудшее отклонение от идеального синуса (в точке 90 градусов) - 38 ppm. Внизу в файликах - оба случая для трёх точек аппроксимации.

Стоит ли городить сложные и медлительные аппроксимации по рядам Тейлора? Вряд ли.
Вложения
snag-2017-07-010-a.JPG
(60.1 KiB) Скачиваний: 580
snag-2017-07-009-a.JPG
(106.85 KiB) Скачиваний: 565

Re: FPU Cortex M4

Вс авг 06, 2017 15:08:57

Я тут попробовал интерполяцию высоких порядков. Конкретно - конечные разности и первую интерполяционную формулу Ньютона. Исходная таблица синусов - 7 (семь!) значений - для 0, 15, 30, 45, 60, 75 и 90 градусов. Расчет по формуле Ньютона - 11 умножений, 6 делений и штук 20 сложений-вычитаний "точных" (double) чисел, ну, плюс склолько-то манипуляций с индексами и циклами. Ну, еще, для вычисления конечных разностей нужно 21 вычитание, но это можно сделать заранее, подготовив матрицу 7*7, у которой нулевой столбец будет содержать таблицу синусов, а столбцы 1-6 - конечные разности соответствующего порядка.

Так вот, погрешность в диапазоне (0..14) градусов не превышает 0.0035%, причем, что странно, чем меньше угол, тем больше погрешность.

Да, ни разу не вникал в представление плавучки на АРМ, но подозреваю, что у нее есть что-то общее с Системой-360. Так вот, лет 40 назад у нас в политехе происходил массовый переход с ЭВМ "Минск-32" на ЕС ЭВМ, которая клон Системы-360. Там Фортран-4, и там Фортран-4, скопировали, собрали, часть задач пошла молча, а часть начала врать! Выяснилось: у Минск-32 мантисса плавающего числа 28 бит, а у Системы-360 - 23. И эти лишние 5 битов мантиссы оказались весьма критичными, многие численные методы при таком снижении точности вычислений отказались работать. После замены обычной точности на двойную все заработало.

Повторюсь, понятия не имею о плавучке АРМ, но любой четырёхбайтовой плавучке для многих численных методов не хватает точности. Имейте это в виду.

Да, я упражнялся на писюке, на визуальном Си. Могу выложить исходник.

Re: FPU Cortex M4

Вс авг 06, 2017 20:09:12

интерполяционную формулу Ньютона. Исходная таблица синусов - 7 (семь!) значений - для 0, 15, 30, 45, 60, 75 и 90 градусов.
прекрасно!
Расчет по формуле Ньютона - 11 умножений, 6 делений и штук 20 сложений-вычитаний "точных" (double) чисел, ну, плюс склолько-то манипуляций с индексами и циклами.
Ужасно!
Для простейшей линейной интерполяции между значениями таблицы - 1 сложение, 1 вычитание , 1 умножение, 1 деление, + операции с индексами - 1 деление + 2 выборки из памяти
Либо сделать 2 таблицы - 1-я с синусами, 2-я с разницей синусов из первой табл. Тогда на 1 вычитание и 1 деление меньше. Но объём общей таблицы в 2 раза больше.

погрешность в диапазоне (0..14) градусов не превышает 0.0035%, причем, что странно, чем меньше угол, тем больше погрешность.
т.е. 35 ppm (частей на миллион).
Это многовато для библио-функции, но лишку для любого прикладного Фурье или анализатора спектра. Там достаточно суммарного, т.е. по всем операциям 0,5%, или, если считать за экран FHD т.е. 1000 линий, должно быть не более размаха в 0,5 пиксела, или 0,25 х10E-3 или 250 ppm, а учитывая, что обычно график на экране занимает не более пол-экрана, то и все 500 ppm точности.

Кстати, для диапазона 0-15 градусов, размер таблицы для линейной интерполяции может быть очень мал. для точности 0,025 ppm (т.е. 0,25 x10E-9 или 9 фактических дес.знаков) это 1200 байт (это позволяет делать длительные расчёты, накопительные). или
для точности 0,1 ppm - для одно-двукратного расчёта, размер таблицы можно снизить до 600 байт.

посчитал ваш случай - 36,8 ppm, 0-14 градусов, теже 7 значений таблицы :)) 28 байт.

И эти лишние 5 битов мантиссы оказались весьма критичными,
ну это 1,5 десятичных знака добавка.
1. на картинке - первая строка, второй столбец - кол-во дес.знаков.... первый столбец - разрядность мантиссы.
там было 8, ну я для вашего случая подставил 5.)

2\a. Вторая картинка - вычисление погрешности табличного синуса при линейной интерполяции на 15 градусах. Полная таблица 0-90 займёт 7200 байт. До 15 градусов в 6 раз меньше - 1200 байт
2\b. Ошибка перемножения БПФ
это попытка подсчитать общую ошибку БПФ 1024 точек, используя таблицу синусов с аппроксимацией. Вычисленная дельта (ошибка) берётся 22 раза - 10 бабочек (умножение и сложение) + нормализация и окно. Итого 22 операции. Формула такая - корень кв. из 22 квадратов дельты.
Вложения
snag-2017-08-094-a.JPG
(62.97 KiB) Скачиваний: 434
snag-2017-08-093-a.JPG
(71.35 KiB) Скачиваний: 556

Re: FPU Cortex M4

Пн авг 07, 2017 04:18:05

Вы чуточку не въехали. Во-первых, это просто демонстрация возможностей интерполяции высоких порядков, а не предложение "делай так". Во-вторых, для диапазона 15-30 градусов нужно рассчитать свою таблицу конечных разностей, для 15-30-45-60-75-90-105(==75) градусов. И, поскольку в первой интерполяционной формуле Ньютона для диапазона из первого шага (у нас шаг 15 градусов) используются только дельта Y0, их можно просчитать заранее, в виде таблицы:
Код:
x0=0     Y0, dY0, d2Y0...d6Y0   // посчитанное для x0=0
x0=15    Y0, dY0, d2Y0...d6Y0   // посчитанное для x0=15
x0=30    ......
И т.д., до 75 (или 90) градусов.

И вообще, эта формула Ньютона при N=1 дает простую линейную интерполяцию, при N=2 - квадратичную, и т.д. Практически, я бы подобрал величину шага и N, т.е. порядок интерполяции, ориентируясь на скорость и память, применительно к конкретному случаю.

Re: FPU Cortex M4

Чт авг 17, 2017 15:53:04

Таблица уже неактуальна, допилил модуль - софт считает синус - 9 значащих разрядов с плавающей точкой за 45 тактов

45 - многовато как-то. У меня на фиксированной точке синус полиномом считается за 27 тактов (на ядре M4). Правда точность немного ниже - погрешность чуть меньше 1e-6.
При желании можно ещё примерно в 2 раза быстрее - если сразу массив значений считать.

И "9 значащих разрядов с плавающей точкой" - не верю. У float размер мантиссы меньше чем 9 разрядов - не может в принципе она обеспечить такой точности.

Re: FPU Cortex M4

Пн май 31, 2021 19:56:11

[uquote="Cat",url="/forum/viewtopic.php?p=2419929#p2419929"]И "9 значащих разрядов с плавающей точкой" - не верю. У float размер мантиссы меньше чем 9 разрядов - не может в принципе она обеспечить такой точности.

lg(2^31bit)=9,3 разрядов (+1 бит это знак числа).
если конечно самому арифметику делать на фикс точке.

Re: FPU Cortex M4

Пн май 31, 2021 20:08:59

Таблица синусов не влезет ни в какую память, когда надо отрисовать дугу радиусом скажем метр, и длиной пару метров при разрешении 0,01 мм.

Вообще есть метода называется trigonometric identity. Позволяет заменить таблицу фаз с 2^N на две длиной 2^(N/2). Тоесть для 32битной таблицы синуса нужно две таблицы по 65к точек. При этом получаются не интерполированые а истинные значения синуса и косинуса. Для вычисления одной точки нужно два умножения и сложение. Супер шустро потому что на кортексе-м4 это одна команда для 16биток. Пример есть в книжке Digital waveform generation ( https://www.amazon.com/Digital-Waveform ... 1107020972 ).
Также описано в старой редакции Титце Шенка Полупроводниковая схемотехника (Москва: Издательство «Мир»: Редакция литературы по новой технике, 1982), страницы 341 и 342 (книжка с зеленой обложкой)
titze.jpg
(9.51 KiB) Скачиваний: 151

Re: FPU Cortex M4

Вт июн 08, 2021 19:43:45

Таблица синусов не влезет ни в какую память, когда надо отрисовать дугу радиусом скажем метр, и длиной пару метров при разрешении 0,01 мм.

Еще Рабинер Гоулд, Теория и применение цифровой обработки сигналов 1978
rabiner.png
книжка
(216.14 KiB) Скачиваний: 137

Re: FPU Cortex M4

Пн июн 28, 2021 13:48:14

Вообще есть метода называется trigonometric identity. Позволяет заменить таблицу фаз с 2^N на две длиной 2^(N/2). Тоесть для 32битной таблицы синуса нужно две таблицы по 65к точек..
Не нужно, почитайте комменты, Когда вы, программисты, научитесь читать ?))
я даже таблички приводил, что нужно всего 900 ячеек (3600 байт), чтобы удовлетворило 32 бита (10 в -9, меньше 1ppm).
И опять, очередной программист, делает "открытие".
в этом и отличие радиоинженера- электронщика, от особо одарённых, от программистов. они ничего не проверяют

Добавлено after 12 minutes 48 seconds:
вот ссылочка на тему, кот 5 лет.
https://radiokot.ru/forum/viewtopic.php ... 7#p3143767

Re: FPU Cortex M4

Пт июл 02, 2021 18:41:07

Не нужно, почитайте комменты, Когда вы, программисты, научитесь читать ?))
я даже таблички приводил, что нужно всего 900 ячеек (3600 байт), чтобы удовлетворило 32 бита (10 в -9, меньше 1ppm).

С чего такая агрессия? человеку нужно было точное решение, варианты с разложением в ряд тейлора и с тригонометрическим оба позволяют выбрать нужную точность апроксимации. Решение линейной интерполяцией это разложение в ряд тейлора с первыми двумя членами. Я бы не стал такое знание выдавать за собственное изобретение, кроме неграмотности ничего не показывает. И да, таблица в 3600 нужной точности не обеспечит, это все тюлька. А большее количество членов ряда автору топика слишком долго вычислять, он поэтому и написал.

И опять, очередной программист, делает "открытие".
в этом и отличие радиоинженера- электронщика, от особо одарённых, от программистов. они ничего не проверяют
Да уж куда нам убогим до целого инженера-электронщика...

Re: FPU Cortex M4

Пт июл 02, 2021 21:35:20

ха-ха, переизбыток лишних знаний у человека затмевает разум. в 100й раз, типичный случай )
опять, "читать не буду, ваши знания - тюлька".
програмист зашит программой биоробота "идиота" с синдромом Даннинга Крюгера: "вы все дураки, только я молодец, откуда у вас агрессия, надо нежно со мной, я люблю Эпл и вообще запад".
ну это вообще комплексом любовь к западу идёт и предательство своих, может у этой модели и нет этого.
но ещё ни разу я не ошибался )
посмотрим дальше.
Ответить