2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 
 Re: Рекуррентная формула для синуса
Сообщение12.04.2013, 11:06 
Аватара пользователя
Запишите несколько более формально, что Вы понимаете под "линейно меняющейся" или "экспоненциально меняющейся" частотой. И хорошо бы - для чего. Реализация для сигнального процессора или для ЭВМ с полной системой команд будет разная, и наличная память влияет. Ну и на каком отрезке и какие ошибки допустимы.

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

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение13.04.2013, 15:11 
Аватара пользователя
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 
profrotter
Спасибо за идею, но мне надо уйти от непрерывного вычисления косинуса, ибо вычислять надо с большой точностью. Кстати, я и подмену такую делал в маткаде. Получалось, формула верна лишь в небольших пределах, да и то ценой быстрого отклонения амплитуды колебаний. Короче, no pacaran!

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение14.04.2013, 18:59 
Аватара пользователя
Косинус тоже можно считать рекуррентно.
$\cos (\omega+\varphi)=\cos \omega\cos \varphi - \sin \omega\sin \varphi$
Один раз вычислить для омеги и фи синус и косинус, а потом рекуррентно.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение14.04.2013, 21:19 
Аватара пользователя
Dimqin в сообщении #710104 писал(а):
да и то ценой быстрого отклонения амплитуды колебаний
К сожалению - да. Тоже попробовал изменять параметр рекурсивной формулы.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 11:21 
Аватара пользователя
Если вам действительно очень важно реализовывать рекурсивное формирование сигналов, то можно использовать точно такой же практический подход как и в теории адаптивной фильтрации или нейронных сетей:

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 
Кстати, о показателе качества...
Заинтересовал меня вопрос отклонения значений рекурсивной синусоиды и табличной. Посчитал поточечную разность. Получил синусоиду с линейно увеличивающейся амплитудой(задал 5000 колебаний) от 0 до 10 в -11 степени. Подозреваю, что на деле там половина разности частот промодулированная полусуммой.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 12:14 
Аватара пользователя
Dimqin в сообщении #710411 писал(а):
Получил синусоиду с линейно увеличивающейся амплитудой(задал 5000 колебаний)
видели мы это в сообщении #484213
Достаточно одного периода.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 12:38 
profrotter
Нет. Тенденцию на увеличение размаха отклонений не увидел бы по одному периоду.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 13:20 
Аватара пользователя
Для генерирования периодического сигнала достаточно иметь рекуррентное выражение, описывающее его на одном периоде. Потом сбросили и начали заново.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 13:37 
Это ,конечно, выход. Только тогда немногим сложнее просто пересчитывать $\sin({\omega(t)})$.
Я хочу избежать вычислений синусов-косинусов по ходу генерации.

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

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

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 15:11 
Да. Более того, это противоречило бы плавности изменения частоты.

 
 
 
 Re: Рекуррентная формула для синуса
Сообщение15.04.2013, 19:23 
Аватара пользователя
Я бы лично воспользовался бы тождеством
$\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