Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генерация синуса
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
stm32f4
Всем привет) Народ подскажи , существует ли возможность генерации значений синуса?например какаяниб функция, которая будет генерировать синус заданной амплитуды с определенным кол точек!Как можно проще сделать фазовый сдвиг, этого синуса ?
Само сбой можно заранее заготовить массивы значений и потом делить/умножать его, но этот вариант мне не совсем подходит(

RabidRabbit
Проверенная временем A * sin(t + f) не подходит?
Lmx2315
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 точечного БПФ
Сергей Борщ
QUOTE (stm32f4 @ Dec 14 2012, 09:23) *
но этот вариант мне не совсем подходит(
Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут
DRUID3
Цитата(Сергей Борщ @ Dec 14 2012, 11:34) *
Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут

...можно... Но я его так для integer и не научился эффективно применять. Это для fix или float скорее. Можно еще дифуром генерить - сопряженные полюса на единичной окружности и вуаля. Я тут недавно ссылку на книгу Роде и Шварца приводил.
Сергей Борщ
QUOTE (DRUID3 @ Dec 14 2012, 12:32) *
Это для fix или float скорее.
И чем же нас fixed point не устраивает? коэффициент умножить, результат поделить. Работает прекрасно. sin(), кстати, в целых числах тоже может лишь 1,0,-1 выдавать, значит, вольно или невольно, но фиксированную точку использовать придется.
DRUID3
Цитата(Сергей Борщ @ Dec 14 2012, 12:39) *
И чем же нас fixed point не устраивает? коэффициент умножить, результат поделить.
biggrin.gif Ну нас то устраивает, но если бы все было так просто стал бы стартер спрашивать?

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

Ну он и в тех трех как бы не совсем целые выдает, но не в этом суть. А в том, что если стартеру нужно очень быстро и сразу в int то быстрее чем на IIR у него не выйдет(ну разве что таблица), но первые значения(переходной процесс) все-равно придется отбрасывать - и перестройка по частоте получается не мгновенная - это да, минус.
_Pasha
Цитата(DRUID3 @ Dec 14 2012, 14:07) *
А в том, что если стартеру нужно очень быстро и сразу в int то быстрее чем на IIR у него не выйдет

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

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

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

http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
_Pasha
Цитата(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
stm32f4
Цитата(_Pasha @ Dec 14 2012, 15:54) *
С учетом наличия FPU cordic тама suxx sm.gif

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

По-моему люди не поняли что я говорю о процессоре cortex m4 stm32f405((( wacko.gif
XVR
Цитата(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

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

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


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

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.