Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2018, 15:55

Часовой пояс: 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
Сообщения: 33
Здравствуйте коллеги!

Вот кусок:
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
Сообщения: 1478
Аргумент функции представлен в радианах. В одном периоде 6,28 (или 2*pi) радиан


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

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


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

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


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

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


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

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
Это встроенная функция.
Код:
   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 Кб | Просмотров: 1193 ]


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

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

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


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

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
#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
Сообщения: 33
Ну восемь значений я и сам посчитать могу. :)
Проверил я вашу последнюю гипотезу.
Коллега, благодарю, вы правы. Я удалил инклюд. Получается это был вызов не косинуса.
Вопрос: а что за функция это была?


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

Зарегистрирован: 13 фев 2012, 23:48
Сообщения: 732
Откуда: Украина, Харьков
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
Сообщения: 2330
Откуда: КЧР, поселок Нижний Архыз
Флоаты на STM32F103? Да вы, батенька, тот еще извращенец!
Синусы-косинусы реализуются таблично (таблица должна быть не равноотстоящей, а подготовленной под заданную точность, это легко делается + расход флеша сокращается). Естественно, никакой плавающей запятой — только фиксированная!!!


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

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 398
У вас по ходу или "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 часов


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

Сейчас этот форум просматривают: arhiv_6, kos, Редиска, Sergey_spb, void1509


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

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

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