|
|
  |
"Все точки над фиксированной.точкой" |
|
|
|
Aug 21 2015, 04:41
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
навскидку: положительное значение fractional bitwidth говорит о том, что десятичный разделитель (точка, отделяющая целую и дробную часть) находится левее на столько-то битов по сравнению с положением этой точки ровно после самого младшего бита разрядной сетки данной переменной. А отрицательное значение - соответственно, что десятичный разделитель находится правее. Это однозначно означает, что разрядная сетка вашей переменной содержит только целую часть, и то не всю, а начиная с какого-то разряда (указанного в отрицательном значении fractional). Вот пример: Код разряды вообще : 9 8 7 6 5 4 3 2 1 0.-1 -2 -3 разрядная сетка : 4 3 2 1 0 конкретной переменной В данном примере у конкретной переменной bitwidth = 5, а fractional bitwidth = -4. Это говорит о том, что нулевой разряд вашей переменной он на самом деле не нулевой, а 4.
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Aug 24 2015, 11:44
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Здравствуйте. Надеюсь, что не помешаю если влезу. Разбираюсь с контроллером ATSAM4SD32C на базе ядра cortex m4. Ядро имеет набор так называемых DSP инструкций, мощь которых (как заявляет ARM) реализована набором ф-ций находящихся в библиотеке CMSIS-DSP. Так среди них есть несколько ф-ций для генерации синуса (для работы с фиксированной и плавающей запятой). Т.к. мой контроллер не имеет на борту FPU, то я выбрал ф-цию работающую с фиксированной запятой. Вот её описание -> http://www.keil.com/pack/doc/CMSIS/DSP/html/group__sin.html. В нём написано, что в качестве аргумента функция принимает значение угла выраженное в радианах. Т.е. допустим я захочу найти синус 180 градусов (да, знаю что он равен 0) т.е. в радианах это запишется так x = sin(3.14159265358979). Но как я понял, тип q31_t может принимать значения [-1; 1 - 2^-(n-1)] или примерно [-1;1]. Если же я засуну в эту ф-цию константу PI, то процессор начнёт обрабатывать плавающую запятую. т.к. #define PI 3.14159265358979f. Что делать то?
|
|
|
|
|
Aug 24 2015, 12:28
|
Знающий
   
Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866

|
Цитата В нём написано, что в качестве аргумента функция принимает значение угла выраженное в радианах. Т.е. допустим я захочу найти синус 180 градусов (да, знаю что он равен 0) т.е. в радианах это запишется так x = sin(3.14159265358979). Но как я понял, тип q31_t может принимать значения [-1; 1 - 2^-(n-1)] или примерно [-1;1]. Если же я засуну в эту ф-цию константу PI, то процессор начнёт обрабатывать плавающую запятую. т.к. #define PI 3.14159265358979f. Что делать то? Смею предположить, что для функции arm_sin_q31 0 рад = 0, pi рад = 2^30, 2*pi = 2^31. Входной диапазон соответственно [0:2*pi) или [0 : 2^31-1)
|
|
|
|
|
Aug 25 2015, 06:22
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 6-11-05
Из: Украина, Киев
Пользователь №: 10 511

|
т.к. #define PI 3.14159265358979f. Что делать то?
При работе с псевдоплавающей точкой из моего опыта вычисляется sin(1) то 90 градусов и однозначно пересчитывается в радианы. Думаю, что сетка [-8;8].
|
|
|
|
|
Aug 26 2015, 12:20
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 6-11-05
Из: Украина, Киев
Пользователь №: 10 511

|
Цитата(Krys @ Aug 25 2015, 10:41)  А что за псевдоплавающая точка, подскажите, плиз? Это блочная которая? Псевдоплавающая точка термин используемый мной по аналогии с анекдотом. Продавец каждый день решает сколько сегодня весит килограмм. Программист для каждой переменной int решает вопрос масштаба : чему равно 0х7fff, или 0x7fffffff и т.п. Когда пользуетесь чужой библиотекой, масштаб ищется в описании или проверяется практикой.
|
|
|
|
|
Aug 27 2015, 05:10
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 6-11-05
Из: Украина, Киев
Пользователь №: 10 511

|
Цитата(KrSvVik @ Aug 25 2015, 09:22)  т.к. #define PI 3.14159265358979f. Что делать то?
При работе с псевдоплавающей точкой из моего опыта вычисляется sin(1) то 90 градусов и однозначно пересчитывается в радианы. Думаю, что сетка [-8;8]. Поправлюсь, не sin(1), а арккосинус0).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|