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

 
 
> Как реализовать генератор квадратуры, Надо генерировать cos/sin одинаковой чатоты в DSP
Russky
сообщение Dec 10 2014, 15:43
Сообщение #1


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

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



Всем привет!
Вот есть задача - генерировать квадратурный сигнал для DDC. DDC сам реализован внутри DSP, поэтому надо алгоритм чтобы его можно было-бы реализвать потом на аасемблере.
Используется плавующая точка.
В идеальном случае ф-я должна выглядеть так:
result = GenSinCos(float freq); где result это структура содержащая Cos и Sin, т.е. сигналы сдвинуты на 90 градусов.
freq - 0...1.
Ф-я вызывается для каждого отсчета. Начальная фаза в общем не очень важна. Главное чтобы 90 градусов было. По идее это даже не ф-я а макрос.
Как-то так.
Может кто уже встречал подобное? Или может уже есть готовые решения?

Особенность в том, что наверняка есть решение которое не вызывает ф-ю sin и cos каждый раз. sm.gif

Спасибо!

PS. Табличный метод не предлагать! sm.gif


Сообщение отредактировал Russky - Dec 10 2014, 15:56
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amaora
сообщение Dec 15 2014, 16:42
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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
_pv
сообщение Dec 15 2014, 22:31
Сообщение #5


Гуру
******

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



Цитата(thermit @ Dec 16 2014, 03:45) *

чукча - не читатель, чукча - писатель.
Цитата(thermit @ Dec 16 2014, 03:45) *
ну и конечно, все расползается.

школьно-тригонометрический - да, а вот осциллятор второго порядка вроде как абсолютно стабильный должен быть с целочисленной арифметикой.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Dec 15 2014, 22:53
Сообщение #6


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

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



Вы сами себе противоречите: Чтобы генератор был "абсолютно стабилен", полюсы его передаточной функции должны находиться точно на единичной окружности. А для любой частоты при арифметике с конечной разрядностью это, увы, не выполняется.

Цитата(_pv @ Dec 15 2014, 23:31) *
вроде как
должен быть
с целочисленной арифметикой
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Russky   Как реализовать генератор квадратуры   Dec 10 2014, 15:43
- - Lmx2315   QUOTE (Russky @ Dec 10 2014, 18:43) Особе...   Dec 10 2014, 17:00
- - des00   Цитата(Russky @ Dec 10 2014, 22:43) Особе...   Dec 10 2014, 17:43
|- - Fat Robot   Это прекрасно!! хороший синус. будет всегд...   Dec 10 2014, 17:54
|- - des00   Цитата(Fat Robot @ Dec 11 2014, 01:54) Эт...   Dec 10 2014, 18:53
|- - andyp   Цитата(Fat Robot @ Dec 10 2014, 20:54) Чт...   Dec 11 2014, 14:06
- - thermit   c(n)=cos(2*pi*f0/sf*n) s(n)=k*c(n)+c(n-1)-k*s(n-1...   Dec 10 2014, 18:17
- - blackfin   Цитата(Fat Robot @ Dec 10 2014, 21:54) Эт...   Dec 10 2014, 18:29
- - ViKo   Ну, конечно, CORDIC. Какие могут быть сомнения?...   Dec 10 2014, 19:33
|- - Fat Robot   На вычислительных платформах, на которых цена унож...   Dec 10 2014, 20:35
- - Russky   Поясню. Есть методы генерирования синусоидально си...   Dec 11 2014, 11:53
|- - blackfin   Цитата(Russky @ Dec 11 2014, 14:53) Но в ...   Dec 11 2014, 12:48
|- - Russky   Цитата(blackfin @ Dec 11 2014, 16:48) Шко...   Dec 11 2014, 18:34
|- - thermit   Цитата(Russky @ Dec 11 2014, 21:34) Спаси...   Dec 11 2014, 20:59
|- - blackfin   Цитата(thermit @ Dec 11 2014, 23:59) кто/...   Dec 12 2014, 02:22
||- - thermit   Цитата(blackfin @ Dec 12 2014, 05:22) А в...   Dec 12 2014, 06:32
|- - Fat Robot   Как вы оцениваете, при таком подходе через сколько...   Dec 12 2014, 10:35
|- - thermit   Цитата(Fat Robot @ Dec 12 2014, 14:35) Ка...   Dec 12 2014, 11:11
|- - andyp   Цитата(thermit @ Dec 12 2014, 14:11) А дл...   Dec 12 2014, 11:39
|- - Russky   Цитата(thermit @ Dec 12 2014, 15:11) Ника...   Dec 15 2014, 14:07
|- - Fat Robot   грустный смайлик.. Цитата(Russky @ Dec 15 20...   Dec 15 2014, 14:51
|- - thermit   Цитата(Russky @ Dec 15 2014, 18:07) Тогда...   Dec 15 2014, 14:59
|- - blackfin   Цитата(Russky @ Dec 15 2014, 18:07) Т.е. ...   Dec 15 2014, 15:12
|- - Russky   Цитата(blackfin @ Dec 15 2014, 19:12) И н...   Dec 15 2014, 16:31
- - stealth-coder   Цитата(Fat Robot @ Dec 11 2014, 00:35) На...   Dec 11 2014, 20:30
|- - Fat Robot   Тут всё на веру, конечно. Не ставя под сомнение кв...   Dec 11 2014, 20:53
- - stealth-coder   Цитата(Fat Robot @ Dec 12 2014, 00:53) Ту...   Dec 11 2014, 21:09
|- - thermit   Цитата(_pv @ Dec 16 2014, 01:31) чукча - ...   Dec 15 2014, 22:50
|- - thermit   Цитата(Fat Robot @ Dec 16 2014, 01:53) Вы...   Dec 15 2014, 23:46
||- - Fat Robot   Я посчитал. Устойчивость действительного генератор...   Dec 16 2014, 08:31
||- - _pv   Цитата(Fat Robot @ Dec 16 2014, 14:31) Хо...   Dec 16 2014, 08:56
||- - Fat Robot   .   Dec 16 2014, 09:30
||- - _pv   Цитата(Fat Robot @ Dec 16 2014, 15:30) Ва...   Dec 16 2014, 09:49
||- - Fat Robot   Конечно. Даже в вашем простом примере в диапазоне ...   Dec 16 2014, 11:55
||- - _pv   Цитата(Fat Robot @ Dec 16 2014, 17:55) Ко...   Dec 16 2014, 12:13
|- - _pv   Цитата(Fat Robot @ Dec 16 2014, 04:53) Вы...   Dec 16 2014, 08:11
|- - thermit   Цитата(_pv @ Dec 16 2014, 12:11) с целочи...   Dec 16 2014, 11:36
|- - _pv   Цитата(thermit @ Dec 16 2014, 17:36) а он...   Dec 16 2014, 11:55
|- - thermit   Цитата(_pv @ Dec 16 2014, 15:55) а что же...   Dec 16 2014, 13:05
|- - _pv   Цитата(thermit @ Dec 16 2014, 19:05) Да. ...   Dec 16 2014, 13:20
- - amaora   Если элементы матрицы поворота посчитать как насто...   Dec 16 2014, 10:58
|- - _pv   Цитата(amaora @ Dec 16 2014, 16:58) Если ...   Dec 16 2014, 11:05
|- - amaora   Цитата(_pv @ Dec 16 2014, 14:05) расползё...   Dec 16 2014, 11:33
- - Russky   Что-то мы скатились на обсуждение ерунды. Ситуаци...   Dec 16 2014, 11:08
|- - _pv   Цитата(Russky @ Dec 16 2014, 17:08) В общ...   Dec 16 2014, 11:25
|- - Russky   Цитата(_pv @ Dec 16 2014, 15:25) генерато...   Dec 16 2014, 12:22
|- - andyp   Цитата(Russky @ Dec 16 2014, 15:22) Нет. ...   Dec 16 2014, 16:12
- - mihalevski   Цитата(Russky @ Dec 10 2014, 22:43) Всем ...   Jan 6 2015, 14:18


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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 11:10
Рейтинг@Mail.ru


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