Easyelectronics.ru

Электроника для всех
Текущее время: 21 июл 2018, 04:59

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 11:46 
Заглядывает иногда

Зарегистрирован: 01 июн 2012, 12:04
Сообщения: 36
Здравствуйте коллеги!

Вот кусок:
static float Re[8];
static float Im[8];
float p = 2 * 3.141592653589 / 8; // будет 8 отсчетов на период

int i;
// формируем сигнал
for(i=0; i<8; i++)
{
Re[i] = cos(p * i); // заполняем действительную часть сигнала
Im[i] = 0.0; // заполняем мнимую часть сигнала
}
А вот вывод в консоль:
0.000000 0.000000
1580414336.000000 0.000000
-814559552.000000 0.000000
1757589504.000000 0.000000
-34.000000 0.000000
643988992.000000 0.000000
-1184779904.000000 0.000000
-462077696.000000 0.000000

В первом столбце значения косинуса от p*i. Только значения странные... Не косинус...
Да и отладчике я вижу:
i=1
p=0.785398185
Re[i]=1.58041434e+009
Что я наблюдаю? И как получить косинус на stm32f103c8?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 11:49 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1957
Аргумент функции представлен в радианах. В одном периоде 6,28 (или 2*pi) радиан


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 11:54 
Заглядывает иногда

Зарегистрирован: 01 июн 2012, 12:04
Сообщения: 36
Да хоть в попугаях... Но как косинус от попугая получился 1580414336.000000?? Он же должен быть в пределах [-1,1].


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 11:58 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1957
Так это дело не в конкретном МК, а в ПО. МК не имеет тригонометрического сопроцессора, тригонометрия считается в ПО разработчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 12:05 
Заглядывает иногда

Зарегистрирован: 01 июн 2012, 12:04
Сообщения: 36
В моем проекте нет реализации косинуса.
И что тогда я вызвал в строке:
cos(p*i)
?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 12:17 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1957
Это встроенная функция.
Код:
   float val[8];

   for(uint8_t i = 0; i < 8; i++)
   {
      val[i] = cos((float)(6.28F/8) * i);
   }

Вложение:
Без-имени-1.jpg
Без-имени-1.jpg [ 39.99 Кб | Просмотров: 1253 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 13:24 
Заглядывает иногда

Зарегистрирован: 01 июн 2012, 12:04
Сообщения: 36
Странно, а у меня ваш пример тоже такую же лажу дает.

Может с настройками проекта что-то не то?


Вложения:
Безымянный1.png
Безымянный1.png [ 12.15 Кб | Просмотров: 1234 ]
Безымянный.png
Безымянный.png [ 4.49 Кб | Просмотров: 1234 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 13:30 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1957
#include <math.h> написано?

Кстати, для всего лишь восьми значений вы можете посчитать таблицу косинусов вручную и внести их сразу в инициализованный массив.
Я даже по памяти могу это написать, еще со школы помню, чему равен косинус 45°:
float cos_table[8] = {1, 0.7071, 0, -0.7071, -1, -0.7071, 0, 0.7071};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 24 дек 2017, 17:19 
Заглядывает иногда

Зарегистрирован: 01 июн 2012, 12:04
Сообщения: 36
Ну восемь значений я и сам посчитать могу. :)
Проверил я вашу последнюю гипотезу.
Коллега, благодарю, вы правы. Я удалил инклюд. Получается это был вызов не косинуса.
Вопрос: а что за функция это была?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 29 дек 2017, 14:31 
Старожил

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 733
Откуда: Украина, Харьков
pandrew писал(а):
...
float p = 2 * 3.141592653589 / 8; // будет 8 отсчетов на период...


И всё-таки должно быть:
Код:
float  p = 2.0f * 3.141592653589f / 8.0f;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 29 дек 2017, 20:28 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2514
Откуда: КЧР, поселок Нижний Архыз
Флоаты на STM32F103? Да вы, батенька, тот еще извращенец!
Синусы-косинусы реализуются таблично (таблица должна быть не равноотстоящей, а подготовленной под заданную точность, это легко делается + расход флеша сокращается). Естественно, никакой плавающей запятой — только фиксированная!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f103c8t6 + cos
СообщениеДобавлено: 29 дек 2017, 20:30 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 452
У вас по ходу или "cos" не той системы или с выводом чего напутали
вот код:
Код:
#include <stdio.h>
#include <math.h>

double mp = M_PI * 2 / 8;

main() {
double rcos;

   for (int i = 0; i < 8; i++) {
      rcos = cos(mp * (double)i);
      printf("%f\n",rcos);
   }
   return(0);
}

Вот результат
Цитата:
1.000000
0.707107
0.000000
-0.707107
-1.000000
-0.707107
-0.000000
0.707107


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB