реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Генерация синуса, stm32f405 CooCox
stm32f4
сообщение Dec 14 2012, 07:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Всем привет) Народ подскажи , существует ли возможность генерации значений синуса?например какаяниб функция, которая будет генерировать синус заданной амплитуды с определенным кол точек!Как можно проще сделать фазовый сдвиг, этого синуса ?
Само сбой можно заранее заготовить массивы значений и потом делить/умножать его, но этот вариант мне не совсем подходит(

Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Dec 14 2012, 07:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Проверенная временем A * sin(t + f) не подходит?
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 14 2012, 07:36
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



QUOTE (stm32f4 @ Dec 14 2012, 10:23) *
Всем привет) Народ подскажи , существует ли возможность генерации значений синуса?например какаяниб функция, которая будет генерировать синус заданной амплитуды с определенным кол точек!Как можно проще сделать фазовый сдвиг, этого синуса ?
Само сбой можно заранее заготовить массивы значений и потом делить/умножать его, но этот вариант мне не совсем подходит(


в си есть библиотека math.h . Там есть функция синуса, косинуса .
Используйте.

float p = 2 * 3.141592653589 / 8; // будет 8 отсчетов на период


for(i=0; i<64; i++)
{
Re[i] = A*cos(p * i); // заполняем действительную часть сигнала

Im[i] = 0.0; // заполняем мнимую часть сигнала
}

зы
пример из проверки 64 точечного БПФ


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2012, 09:34
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (stm32f4 @ Dec 14 2012, 09:23) *
но этот вариант мне не совсем подходит(
Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Dec 14 2012, 10:32
Сообщение #5


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Сергей Борщ @ Dec 14 2012, 11:34) *
Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут

...можно... Но я его так для integer и не научился эффективно применять. Это для fix или float скорее. Можно еще дифуром генерить - сопряженные полюса на единичной окружности и вуаля. Я тут недавно ссылку на книгу Роде и Шварца приводил.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2012, 10:39
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (DRUID3 @ Dec 14 2012, 12:32) *
Это для fix или float скорее.
И чем же нас fixed point не устраивает? коэффициент умножить, результат поделить. Работает прекрасно. sin(), кстати, в целых числах тоже может лишь 1,0,-1 выдавать, значит, вольно или невольно, но фиксированную точку использовать придется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Dec 14 2012, 11:07
Сообщение #7


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Сергей Борщ @ Dec 14 2012, 12:39) *
И чем же нас fixed point не устраивает? коэффициент умножить, результат поделить.
biggrin.gif Ну нас то устраивает, но если бы все было так просто стал бы стартер спрашивать?

Цитата(Сергей Борщ @ Dec 14 2012, 12:39) *
Работает прекрасно. sin(), кстати, в целых числах тоже может лишь 1,0,-1 выдавать, значит, вольно или невольно, но фиксированную точку использовать придется.

Ну он и в тех трех как бы не совсем целые выдает, но не в этом суть. А в том, что если стартеру нужно очень быстро и сразу в int то быстрее чем на IIR у него не выйдет(ну разве что таблица), но первые значения(переходной процесс) все-равно придется отбрасывать - и перестройка по частоте получается не мгновенная - это да, минус.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 14 2012, 11:20
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(DRUID3 @ Dec 14 2012, 14:07) *
А в том, что если стартеру нужно очень быстро и сразу в int то быстрее чем на IIR у него не выйдет

Он еще и фазу хочет двигать.. Не пойдет дифур...
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Dec 14 2012, 11:37
Сообщение #9


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(_Pasha @ Dec 14 2012, 13:20) *
Он еще и фазу хочет двигать.. Не пойдет дифур...

Так чо? Фазу двигать там просто - частоту много сложнее. Дифур пишет в "кольцо", а по кольцу прыгай куда хошь. Этож гармоника.

Кстати у простейшего DDS построенного только на таком принципе нет и не может быть никакого "усечения фазы" - это на заметку тем кто разрабатывает "сверхчистые" синтезаторы.


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 14 2012, 11:48
Сообщение #10


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..алгоритм CORDIC.

http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 14 2012, 11:54
Сообщение #11


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(DRUID3 @ Dec 14 2012, 15:37) *
Так чо?

Тогда вообще красота
Код
Y[n+1] = K*Y[n] - Y[n-1]

Нестабильность по амплитуде вследствие простой перестройки K можно компенсировать на полупериоде. Кольцо только может быть большим.

Цитата(Lmx2315 @ Dec 14 2012, 15:48) *
..алгоритм CORDIC.

С учетом наличия FPU cordic тама suxx sm.gif

Сообщение отредактировал _Pasha - Dec 14 2012, 11:55
Go to the top of the page
 
+Quote Post
stm32f4
сообщение Dec 27 2012, 20:17
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Цитата(_Pasha @ Dec 14 2012, 15:54) *
С учетом наличия FPU cordic тама suxx sm.gif

А что такое FPU?Само само собой википедию и многие статьи я прочитал)Но как его применить к генерации синуса- я не оч понял(В даташите по поводу fpu ничего конкретного нет, одни регистры!!!

По-моему люди не поняли что я говорю о процессоре cortex m4 stm32f405((( wacko.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 28 2012, 08:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(stm32f4 @ Dec 28 2012, 00:17) *
А что такое FPU?Само само собой википедию и многие статьи я прочитал)
Вы бы еще на заборе что нибудь почитали 1111493779.gif

Цитата
По-моему люди не поняли что я говорю о процессоре cortex m4 stm32f405((( wacko.gif
Смотрим сайт ST ( http://www.st.com/internet/mcu/product/252144.jsp )
Цитата
The Cortex-M4 core features a Floating point unit (FPU) single precision which supports all ARM single-precision data-processing instructions and data types. It also implements a full set of DSP instructions and a memory protection unit (MPU) which enhances application security. The Cortex-M4 core with FPU will be referred to as Cortex-M4F throughout this document.

Цитата
даташите по поводу fpu ничего конкретного нет
Это надо искать не в DS, а в описании архитектуры Cortex M4 на сайте ARM - http://infocenter.arm.com/help/index.jsp?t...439c/index.html

Go to the top of the page
 
+Quote Post
thodnev
сообщение Jan 30 2013, 18:40
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 20-01-13
Из: Украина, Киев
Пользователь №: 75 259



Цитата(stm32f4 @ Dec 27 2012, 22:17) *
А что такое FPU?Само само собой википедию и многие статьи я прочитал)Но как его применить к генерации синуса- я не оч понял(В даташите по поводу fpu ничего конкретного нет, одни регистры!!!

По-моему люди не поняли что я говорю о процессоре cortex m4 stm32f405((( wacko.gif


Правильно сказали выше. Самая простая функция F(x) = Amp * sin (2*pi*f + alpha)
f - частота, Amp - амплитуда, alpha - начальная фаза
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 31 2013, 02:44
Сообщение #15


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (thodnev @ Jan 31 2013, 02:40) *
Правильно сказали выше. Самая простая функция F(x) = Amp * sin (2*pi*f*t + alpha)



--------------------
Выбор.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 16:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016