Перейти к содержанию
    

Нецелая системная частота STM32F4

Как я понял что сделал jcxz:

- полином 6 степени неплохо аппроксимирует четвертинку синуса;

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

- оставшийся горбик симметричен, если аргумент находится во второй половине горбика, то симметрично пересчитываем его в первую половину;

- после этих манипуляций получаем аргумент в четвертинке - считаем полином 6 степени с учетом насыщения;

- учитываем знак аргумента, возвращаем результат.

у меня получилась такая максимальная погрешность = -0.000000514, типа 20 разрядов честные.

527687087_.thumb.png.71b6189e074d2da0954de93ed2560283.png

зеленый - четверть синусоиды, красный - аппроксимация полиномом 6-й степени на этом участке.

Полином чуть-чуть отличается: -0.9245958*x^6+3.146588*x^5-0.1971828*x^4-5.1333584*x^3-0.0029408*x^2+3.1416923*x-(6.462529*10^(-7)).

Для получения коэффициентов домножить на 2^28.

Кста, нулевой коэффициент тоже не равен нулю, но это, видимо, метод наименьших квадратов сделал минимальную ошибку для всего диапазона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17.07.2021 в 19:02, Arlleex сказал:

Т.е. не на злом языке математики, а на простом человеческом с немудреными формулами:biggrin:

Я уже не помню где взял этот полином и как он называется. За давностью лет. Пользуюсь им с ~2005г или больше. В разных проектах.

17.07.2021 в 20:16, adnega сказал:

причем A0 != 0 поэтому sin(0) будет != 0. Что!?

Ну и что что A0 !=0 ? Из этого совсем не следует sin(0)!=0.

Элементарно же проверить - весь код я привёл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, adnega сказал:

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

- оставшийся горбик симметричен, если аргумент находится во второй половине горбика, то симметрично пересчитываем его в первую половину;

- после этих манипуляций получаем аргумент в четвертинке - считаем полином 6 степени с учетом насыщения;

- учитываем знак аргумента, возвращаем результат.

у меня получилась такая максимальная погрешность = -0.000000514, типа 20 разрядов честные.

Да, это так. По коду функции видно, что расчёт делается для четверти периода + учитываются знаки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, jcxz сказал:

Я уже не помню где взял этот полином и как он называется. За давностью лет. Пользуюсь им с ~2005г или больше. В разных проектах.

Он весьма хорош. Не проверял, но если он ошибку не тупо по квадрату считает, а учитывает значение функции, то это практически идеал.

Но если из 32 разрядов 20 для задачи достаточно, то можно ничего не пересчитывать.

19 минут назад, jcxz сказал:

Ну и что что A0 !=0 ? Из этого совсем не следует sin(0)!=0.

Элементарно же проверить - весь код я привёл.

Позже отписал: там стоит беззнаковый учет насыщения, поэтому маленький отрицательный "не ноль" становится нулем.

Кста, насчет A0 - оно получилось 8 битное - это тоже используется.

Еще я попробовал полином 4 степени - только 3 знака после запятой получается - выигрыш мал, о потери в три разряда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, adnega сказал:

Еще я попробовал полином 4 степени - только 3 знака после запятой получается - выигрыш мал, о потери в три разряда.

В некоторых проектах использовал и такой. Там где скорость была важнее точности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Arlleex said:

который на очень простых аналогиях и "на пальцах" разжевывал весьма сложные вещи

Весьма ценный навык. Обычно он говорит о глубоком владении предметом. Но обычно это раздражает и больно задевает тех, кто мало что понимает, и использует очень сложные формулы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...