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
9970
Москва
Запишите несколько более формально, что Вы понимаете под "линейно меняющейся" или "экспоненциально меняющейся" частотой. И хорошо бы - для чего. Реализация для сигнального процессора или для ЭВМ с полной системой команд будет разная, и наличная память влияет. Ну и на каком отрезке и какие ошибки допустимы.

 Профиль  
                  
 
 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
9970
Москва
Косинус тоже можно считать рекуррентно.
$\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
9970
Москва
Только вот период не обязан укладываться в целое число отсчётов.

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


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

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


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

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

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



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

Сейчас этот форум просматривают: Dmitriy40


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

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