2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 
 Re: Рекуррентная формула для синуса
Сообщение12.04.2013, 11:06 
Заслуженный участник
Аватара пользователя


11/03/08
9490
Москва
Запишите несколько более формально, что Вы понимаете под "линейно меняющейся" или "экспоненциально меняющейся" частотой. И хорошо бы - для чего. Реализация для сигнального процессора или для ЭВМ с полной системой команд будет разная, и наличная память влияет. Ну и на каком отрезке и какие ошибки допустимы.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение12.04.2013, 13:24 


11/04/13
14
Евгений Машеров
Подробности: Сделать низкочастотный генератор качающейся частоты(до 100кГц). Частота дискретизации - 4Мгц, частота качания - единицы-десятки Герц. Реализация на Aletra. Делать это в NIOS или стандартными путями, пока не решил. Генератор для фиксированной частоты смоделировал в MathCad - получается хорошо, только требования к точности вычислений очень высокие. Чем интересен именно метод рекурсии, так это малыми требованиями к ресурсам - пересчёт использует умножение и разность, памяти - вообще четыре ячейки. Частота генератора может меняться по линейному закону. Думаю, интересен так же вариант по закону exp(A*t). Меня в ваших выкладках очень заинтересовала теория. Когда учился, мы чего-то считали. Но применения на практике z-преобразования я ни разу не встречал, да и в работе синтезом до сих пор не занимался. Сразу куча идей. :idea:

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение13.04.2013, 15:11 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
profrotter в сообщении #486424 писал(а):
В частном случае при $\alpha=0$ получим формулы для синуса: $$y_n=2\cos(\omega_0 T)y_{n-1}-y_{n-2},&n>1$$ с начальными условиями $$y_0=0,y_1=\sin(\omega_0 T)$$
Попробуйте прямо по этим формулам, только вместо $\omega_0$ сделайте переменную по заданному закону частоту $\omega_n$. Вообще это подход не честный, но при вашем соотношении девиации частоты и частоты дискретизации может и сработает. Посмотреть бы на результаты.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение14.04.2013, 18:29 


11/04/13
14
profrotter
Спасибо за идею, но мне надо уйти от непрерывного вычисления косинуса, ибо вычислять надо с большой точностью. Кстати, я и подмену такую делал в маткаде. Получалось, формула верна лишь в небольших пределах, да и то ценой быстрого отклонения амплитуды колебаний. Короче, no pacaran!

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение14.04.2013, 18:59 
Заслуженный участник
Аватара пользователя


11/03/08
9490
Москва
Косинус тоже можно считать рекуррентно.
$\cos (\omega+\varphi)=\cos \omega\cos \varphi - \sin \omega\sin \varphi$
Один раз вычислить для омеги и фи синус и косинус, а потом рекуррентно.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение14.04.2013, 21:19 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Dimqin в сообщении #710104 писал(а):
да и то ценой быстрого отклонения амплитуды колебаний
К сожалению - да. Тоже попробовал изменять параметр рекурсивной формулы.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 11:21 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Если вам действительно очень важно реализовывать рекурсивное формирование сигналов, то можно использовать точно такой же практический подход как и в теории адаптивной фильтрации или нейронных сетей:

1. Задаём в общем виде искомое рекуррентное выражение: $$y_n=\sum\limits_{k=0}^{N}a_kx_{n-k}+\sum\limits_{k=0}^{N}b_ky_{n-k}$$ с начальными условиями $y_{-N},...,y_{-1}$, воздействующую последовательность $x_n$.
2. Вычисляем эталонный набор отсчётов формируемого сигнала $Y_n,n=0,...,M-1$.
3. Вводим показатель качества $$\varepsilon(y_{-N},...,y_{-1};a_0,...,a_N;b_0,...,b_N)=\sum\limits_{n=0}^{M-1}(Y_n-y_n)^2.$$
4. Выбранным заранее численным методом оптимизации находим такой набор параметров $y_{-N},...,y_{-1};a_0,...,a_N;b_0,...,b_N$, который минимизирует показатель качества.
5. Если получен неудовлетворительный результат, то увеличиваем порядок рекурсии $N$ и возвращаемся к п3.

В данном подходе важно, чтобы при вычислениях не было выхода за номер $M-1$. В противном случае синтезу рекуррентного выражения должно последовать исследование устойчивости и тп.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 11:45 


11/04/13
14
Кстати, о показателе качества...
Заинтересовал меня вопрос отклонения значений рекурсивной синусоиды и табличной. Посчитал поточечную разность. Получил синусоиду с линейно увеличивающейся амплитудой(задал 5000 колебаний) от 0 до 10 в -11 степени. Подозреваю, что на деле там половина разности частот промодулированная полусуммой.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 12:14 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Dimqin в сообщении #710411 писал(а):
Получил синусоиду с линейно увеличивающейся амплитудой(задал 5000 колебаний)
видели мы это в сообщении #484213
Достаточно одного периода.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 12:38 


11/04/13
14
profrotter
Нет. Тенденцию на увеличение размаха отклонений не увидел бы по одному периоду.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 13:20 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Для генерирования периодического сигнала достаточно иметь рекуррентное выражение, описывающее его на одном периоде. Потом сбросили и начали заново.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 13:37 


11/04/13
14
Это ,конечно, выход. Только тогда немногим сложнее просто пересчитывать $\sin({\omega(t)})$.
Я хочу избежать вычислений синусов-косинусов по ходу генерации.

По сути, $\omega (t)=\omega t+kt^2$. - для линейного изменения частоты
$\omega (t)=\omega t+e^{kt}$. - для экспоненциального.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 14:47 
Заслуженный участник
Аватара пользователя


11/03/08
9490
Москва
Только вот период не обязан укладываться в целое число отсчётов.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 15:11 


11/04/13
14
Да. Более того, это противоречило бы плавности изменения частоты.

 Профиль  
                  
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 19:23 
Заслуженный участник
Аватара пользователя


11/03/08
9490
Москва
Я бы лично воспользовался бы тождеством
$\cos \varphi + i\sin \varphi=e^{i\varphi} $
и получал бы следующие отсчёты, умножая на комплексный множитель поворота, равный е в степени мнимая единица на частоту. Причём этот множитель сам переменный, умножаемый на каждом шаге на множитель, соответствующий сдвигу частоты. Синусы и косинусы нужны первый раз, для вычисления комплексных экспонент для начальной фазы, начальной частоты и дрейфа частоты. А потом по три комплексных умножения (т.е. 6 умножений и 3 сложения) на шаг. Выдаётся, естественно, действительная часть (косинусная), мнимая для расчёта на следующем шаге.
Примечание:
Когда частота $\omega/2$будет близка к частоте оцифровки (и даже когда в разы меньше), будет кажущееся падение амплитуды (поскольку визуально мы её оцениваем по максимумам, а при малом числе отсчётов на период максимумы могут на отсчёты не попадать).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 95 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Модераторы: Модераторы Математики, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group