Перейти к содержанию
    

Генерация синуса

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

Само сбой можно заранее заготовить массивы значений и потом делить/умножать его, но этот вариант мне не совсем подходит(

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Само сбой можно заранее заготовить массивы значений и потом делить/умножать его, но этот вариант мне не совсем подходит(

 

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

Используйте.

 

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

 

 

for(i=0; i<64; i++)

{

Re = A*cos(p * i); // заполняем действительную часть сигнала

 

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

}

 

зы

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но этот вариант мне не совсем подходит(
Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чем не подходит? Еще можно генерить по алгоритму Герцеля. Пример тут и тут

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И чем же нас fixed point не устраивает? коэффициент умножить, результат поделить.
:biggrin: Ну нас то устраивает, но если бы все было так просто стал бы стартер спрашивать?

 

Работает прекрасно. sin(), кстати, в целых числах тоже может лишь 1,0,-1 выдавать, значит, вольно или невольно, но фиксированную точку использовать придется.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в том, что если стартеру нужно очень быстро и сразу в int то быстрее чем на IIR у него не выйдет

Он еще и фазу хочет двигать.. Не пойдет дифур...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он еще и фазу хочет двигать.. Не пойдет дифур...

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так чо?

Тогда вообще красота

Y[n+1] = K*Y[n] - Y[n-1]

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

 

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

С учетом наличия FPU cordic тама suxx :)

Изменено пользователем _Pasha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С учетом наличия FPU cordic тама suxx :)

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что такое FPU?Само само собой википедию и многие статьи я прочитал)
Вы бы еще на заборе что нибудь почитали :1111493779:

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Правильно сказали выше. Самая простая функция F(x) = Amp * sin (2*pi*f + alpha)

f - частота, Amp - амплитуда, alpha - начальная фаза

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно сказали выше. Самая простая функция F(x) = Amp * sin (2*pi*f*t + alpha)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...