реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Как реализовать генератор квадратуры, Надо генерировать cos/sin одинаковой чатоты в DSP
thermit
сообщение Dec 11 2014, 20:59
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Russky @ Dec 11 2014, 21:34) *
Спасибо. Надо попробовать.
Как попробую - напишу.
Пока все выглядет очень даже ничего! sm.gif



кто/что мешает генерить синус-косинус двумя параллельными биквадратными звеньями?
начальная фаза целиком и прлностью определяется начальными условиями звеньев.
умножений в 2 раза меньше чем в школьнотригонометрическом методе.
Go to the top of the page
 
+Quote Post
stealth-coder
сообщение Dec 11 2014, 21:09
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 27-12-08
Пользователь №: 42 786



Цитата(Fat Robot @ Dec 12 2014, 00:53) *
Тут всё на веру, конечно. Не ставя под сомнение квалификацию. Но вот здесь http://www.opensource.apple.com/source/Lib...ce/Intel/atan.c
за где-то 15 умножений и 15 сложений получается точность double для atan.


Там есть страшная вещь - зависимость по данным, которая рушит конвейер, от нее не уйти и сходу просаживается производительность (в случае TigerSHARC) минимум в 2 раза, возможности SIMD при использовании плавающей точки ограничены, использование фиксированной точки для реализации приведенного алгоритма сомнительно, т.к., скорее всего, очень быстро накопится достаточно большая ошибка. Ну и в приведенной реализации нет операции деления Im / Re, что в случае DSP, как правило, делается каким-нибудь Ньютоном-Рафсоном, CORDIC же позволяет не выполнять деление.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Dec 12 2014, 02:22
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(thermit @ Dec 11 2014, 23:59) *
кто/что мешает генерить синус-косинус двумя параллельными биквадратными звеньями?
умножений в 2 раза меньше чем в школьнотригонометрическом методе.

А во сколько раз больше сложений? wink.gif
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 12 2014, 06:32
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(blackfin @ Dec 12 2014, 05:22) *
А во сколько раз больше сложений? wink.gif



в 1.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Dec 12 2014, 10:35
Сообщение #20


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Как вы оцениваете, при таком подходе через сколько сгенерированных отсчетов существенно изменятся амплитуды квадратур (+/- 10% разность или каждая) и/или разность их фаз (pi/20)? За счет округлений.

Все операции, например, соответствуют 754 float.

Я полагаю, что за пару часов при 10 MSPS и при 1 MHz на выходе от квадратур в таком генераторе уже ничего не останется.

Цитата(thermit @ Dec 11 2014, 21:59) *
кто/что мешает генерить синус-косинус двумя параллельными биквадратными звеньями?
начальная фаза целиком и прлностью определяется начальными условиями звеньев.
умножений в 2 раза меньше чем в школьнотригонометрическом методе.
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 12 2014, 11:11
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Fat Robot @ Dec 12 2014, 14:35) *
Как вы оцениваете, при таком подходе через сколько сгенерированных отсчетов существенно изменятся амплитуды квадратур (+/- 10% разность или каждая) и/или разность фаз (pi/20)? За счет округлений.

Все операции, например, соответствуют 754 float.

Я полагаю, что за пару часов при 10 MSPS и при 1 MHz на выходе от квадратур в таком генераторе уже ничего не останется.


Никак не оцениваю, ибо оценка качества таких генераторов и необходимость периодического сброса сводит все их прелести почти к 0.
Это тс фанатеет рекурсиями, которые на конечной разрядности дают рост ошибок.
А для меня полиномы/кордики рулят.
Go to the top of the page
 
+Quote Post
andyp
сообщение Dec 12 2014, 11:39
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(thermit @ Dec 12 2014, 14:11) *
А для меня полиномы/кордики рулят.


LUT с линейной интерполяцией - наше все wink.gif Ну и всякие навороты типа noise shaping или phase dithering, если охота шибко умным побыть.
Go to the top of the page
 
+Quote Post
Russky
сообщение Dec 15 2014, 14:07
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Цитата(thermit @ Dec 12 2014, 15:11) *
Никак не оцениваю, ибо оценка качества таких генераторов и необходимость периодического сброса сводит все их прелести почти к 0.
Это тс фанатеет рекурсиями, которые на конечной разрядности дают рост ошибок.
А для меня полиномы/кордики рулят.

Тогда у-ж лучще табличным методом генерить. Там вообще никаких ни шумов, ни ошибок, и выполняется за 1 такт. sm.gif

PS. Кстати, а вот и ответ: генератор делается на основе формулы предложенной Blackfinом и таблицей. Т.е. если у меня в потоке обрабатывается по 128 отсчетов, то все что мне нужно это каждый раз инициализировать значение синуса и косинуса, значениями из таблицы, а потом считать рекурсию на 128 отсчетов. И так далее. sm.gif

Сообщение отредактировал Russky - Dec 15 2014, 14:11
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Dec 15 2014, 14:51
Сообщение #24


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



грустный смайлик..

Цитата(Russky @ Dec 15 2014, 15:07) *
Тогда у-ж лучще табличным методом генерить. Там вообще никаких ни шумов, ни ошибок... sm.gif

Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 15 2014, 14:59
Сообщение #25


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Russky @ Dec 15 2014, 18:07) *
Тогда у-ж лучще табличным методом генерить. Там вообще никаких ни шумов, ни ошибок, и выполняется за 1 такт. sm.gif

PS. Кстати, а вот и ответ: генератор делается на основе формулы предложенной Blackfinом и таблицей. Т.е. если у меня в потоке обрабатывается по 128 отсчетов, то все что мне нужно это каждый раз инициализировать значение синуса и косинуса, значениями из таблицы, а потом считать рекурсию на 128 отсчетов. И так далее. sm.gif


Ну, вам виднее.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Dec 15 2014, 15:12
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Russky @ Dec 15 2014, 18:07) *
Т.е. если у меня в потоке обрабатывается по 128 отсчетов, то все что мне нужно это каждый раз инициализировать значение синуса и косинуса, значениями из таблицы, а потом считать рекурсию на 128 отсчетов. И так далее. sm.gif

И нужно помнить, что ошибки амплитуды и фазы будут расти примерно как:

sqrt(N)*0.5 [LSB] = sqrt(128)*0.5 [LSB] ~= 5.7 [LSB].

Так что на последних отсчетах три младших разряда в амплитуде и фазе могут быть неверными. wink.gif
Go to the top of the page
 
+Quote Post
Russky
сообщение Dec 15 2014, 16:31
Сообщение #27


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371



Цитата(blackfin @ Dec 15 2014, 19:12) *
И нужно помнить, что ошибки амплитуды и фазы будут расти примерно как:

sqrt(N)*0.5 [LSB] = sqrt(128)*0.5 [LSB] ~= 5.7 [LSB].

Так что на последних отсчетах три младших разряда в амплитуде и фазе могут быть неверными. wink.gif


У меня плавучка.
Там немного подругому. Но в любом случае 128 отсчетов это не так много даже для 24 бит фиксированной точки. Но при этом есть возможность увеличить разрешающую способность генератора в 128 раз, или 128*K, где K - может быть и больше. В итоге мы получим разрешающую способность - N*M, где N - длина таблицы, а M - количество отсчетов генератора. Круто короче.
В общем надо пробовать реализвать. sm.gif
В любом случае - спасибо! Я как-то сразу сам не додумался до этого.
Это тот редкий случай когда обсуждение на форуме приводит к рождению нового эффективного алгоритма. sm.gif
Go to the top of the page
 
+Quote Post
amaora
сообщение Dec 15 2014, 16:42
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Умножать на матрицу поворота и нормировать на каждом такте. Для низких частот можно упростить считая, что sin(x) ~ x, cos(x) ~ 1. Можно не упрощать, если частота фиксированная то sin/cos считаются один раз.

Код
pm->tA.re += -pm->tA.im * pm->tD.im;
pm->tA.im += pm->tA.re * pm->tD.im;

L = (3.f - pm->tA.re * pm->tA.re - pm->tA.im * pm->tA.im) * .5f;
pm->tA.re *= L;
pm->tA.im *= L;


Сообщение отредактировал amaora - Dec 15 2014, 16:43
Go to the top of the page
 
+Quote Post
_pv
сообщение Dec 15 2014, 17:57
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(amaora @ Dec 15 2014, 22:42) *
Умножать на матрицу поворота и нормировать на каждом такте.

так ошибка будет накапливаться.
по сравнению с вариантом от blackfin, можно еще одно умножение сэкономить если Sin[n+1] выразить через Sin[n] и Sin[n-1].
Sin[n+1] = Sin[n]*K - Sin[n-1];
да и со стабильностью вроде будет получше, не?
в целых числах если считать, то вообще ничего никуда не расползается, а с ошибками округления floatов - не знаю.

http://web.archive.org/web/20120308235958/...ors.html#Second Order Oscillator
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 15 2014, 21:45
Сообщение #30


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(_pv @ Dec 15 2014, 20:57) *
так ошибка будет накапливаться.
по сравнению с вариантом от blackfin, можно еще одно умножение сэкономить если Sin[n+1] выразить через Sin[n] и Sin[n-1].
Sin[n+1] = Sin[n]*K - Sin[n-1];
да и со стабильностью вроде будет получше, не?
в целых числах если считать, то вообще ничего никуда не расползается, а с ошибками округления floatов - не знаю.

http://web.archive.org/web/20120308235958/...ors.html#Second Order Oscillator


гы, да ладно...
http://electronix.ru/forum/index.php?s=&am...t&p=1298367

ну и конечно, все расползается.

Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.02273 секунд с 7
ELECTRONIX ©2004-2016