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

 
 
> Как реализовать генератор квадратуры, Надо генерировать 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
Ответов
Russky
сообщение Dec 11 2014, 11:53
Сообщение #2


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

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



Поясню. Есть методы генерирования синусоидально сигнала на основе биквада. Т.е. там просто рекурсивно вычисляется каждое следуюшее значение. Генератор в чистом виде.
Там меняя коэффициенты биквада, можно менять частоту. Там фаза не важна, важна только частота.
Я думаю, что должны быть методы, которые позволяют генерировать синус и косинус вместе, подобным образом. Дополнительным условием для данной ф-и есть разница фаз в 90 градусов.
Т.е либо начальные условия для генератора задавать, либо еще что-то. Но в общем это должно быть рекурсивное вычисление, где каждый следующий отсчет зависит от предыдущих. Это не синус и косинус в чистом виде. Нужен именно генератор (так как он более экономичен к вычислениям).



Go to the top of the page
 
+Quote Post
blackfin
сообщение Dec 11 2014, 12:48
Сообщение #3


Гуру
******

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



Цитата(Russky @ Dec 11 2014, 14:53) *
Но в общем это должно быть рекурсивное вычисление, где каждый следующий отсчет зависит от предыдущих. Это не синус и косинус в чистом виде.

Нужен именно генератор (так как он более экономичен к вычислениям).

Школьная тригонометрия рулит.. rolleyes.gif

sin[2*pi*f*(t+Δt)] = sin[2*pi*f*t] * cos[2*pi*f*Δt] + cos[2*pi*f*t] * sin[2*pi*f*Δt];
cos[2*pi*f*(t+Δt)] = cos[2*pi*f*t] * cos[2*pi*f*Δt] - sin[2*pi*f*t] * sin[2*pi*f*Δt];

Полагая, что t+Δt == (n+1)*Δt, находим формулы рекурсии:

sinn+1 == sin[2*pi*f*(n+1)*Δt] = sin[2*pi*f*n*Δt] * cos[2*pi*f*Δt] + cos[2*pi*f*n*Δt] * sin[2*pi*f*Δt] == sinn * cos[2*pi*f*Δt] + cosn * sin[2*pi*f*Δt];
cosn+1 == cos[2*pi*f*(n+1)*Δt] = cos[2*pi*f*n*Δt] * cos[2*pi*f*Δt] - sin[2*pi*f*n*Δt] * sin[2*pi*f*Δt] == cosn * cos[2*pi*f*Δt] - sinn * sin[2*pi*f*Δt];

Понятно, что sin[2*pi*f*Δt] и cos[2*pi*f*Δt] это константы, зависящие от f и Δt и выбираются так, чтобы 1/(f*Δt) = 2N == nmax+1.

Начальные значения:

sin0 = 0;
cos0 = 1;

Значения после переполнения счетчика n = (nmax+1)%2N == 0, полагаем равными:

sin2N = 0;
cos2N = 1;

Это предотвратит накопление ошибок..
Go to the top of the page
 
+Quote Post
Russky
сообщение Dec 11 2014, 18:34
Сообщение #4


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

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



Цитата(blackfin @ Dec 11 2014, 16:48) *
Школьная тригонометрия рулит.. rolleyes.gif
...
Это предотвратит накопление ошибок..

Спасибо. Надо попробовать.
Как попробую - напишу.
Пока все выглядет очень даже ничего! sm.gif
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 11 2014, 20:59
Сообщение #5


Знающий
****

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



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



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


Гуру
******

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

Сообщений в этой теме
- 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
||- - 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
- - amaora   Умножать на матрицу поворота и нормировать на кажд...   Dec 15 2014, 16:42
|- - _pv   Цитата(amaora @ Dec 15 2014, 22:42) Умнож...   Dec 15 2014, 17:57
|- - thermit   Цитата(_pv @ Dec 15 2014, 20:57) так ошиб...   Dec 15 2014, 21:45
|- - _pv   Цитата(thermit @ Dec 16 2014, 03:45) гы, ...   Dec 15 2014, 22:31
|- - thermit   Цитата(_pv @ Dec 16 2014, 01:31) чукча - ...   Dec 15 2014, 22:50
|- - Fat Robot   Вы сами себе противоречите: Чтобы генератор был ...   Dec 15 2014, 22:53
|- - 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 Текстовая версия Сейчас: 19th June 2025 - 10:25
Рейтинг@Mail.ru


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