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

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


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

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



Что-то мы скатились на обсуждение ерунды.

Ситуация с ф-й генератора вот какая.
Когда мы описываем те или иные методы, надо всегода смотреть на то, как данная ф-я будет использоваться.
Вот у меня задача достаточно общая:
есть приложение в котором используется DDC. Для этого DDC мне нужен генератор квадратуры с постоянной частотойк. Значение частоты может меняться, но не в реальном времени.
Т.е. получаем вот что. То что считается постоянно в реал-тайме критично ко времени. То что относится к расчету параметров - не критично. В итоге получается, что расчитать один раз sin/cos/step и т.д. это не проблема, но зато потом просто умножать нару раз и выбирать значения из таблицы.
В общем метод Blackfinа самое то. Сам генератор там состоит из вдух сложений и четырех умножений. А инициализация приращения и шаг таблицы расчитываются неспеша как угодно. Причем это "именно то" при условии что значения генератора реинициализируются через фиксированные промежутки (в моем случае 128 отсчетов).

Методы генерирования на основе расчета синуса и косинуса "налету" с помощью полиномов и т.д. имеют свое применение. Например когда у меня частота меняется в реальном времени и я ее должен постоянно подстраивать на основе ФАПЧ или что-то такое. В этом случае конечно надо делать генератор на основе прямого расчета синуса и косинуса.
То-же самое относится когда генератор должен работать на "бесконечном интервале времени". Тут шумы никуда не уйдут, и генератор просто "зазвенит". sm.gif

В общем, побеждает как всегда компромис. sm.gif
Go to the top of the page
 
+Quote Post
_pv
сообщение Dec 16 2014, 11:25
Сообщение #3


Гуру
******

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



Цитата(Russky @ Dec 16 2014, 17:08) *
В общем метод Blackfinа самое то. Сам генератор там состоит из вдух сложений и четырех умножений. А инициализация приращения и шаг таблицы расчитываются неспеша как угодно. Причем это "именно то" при условии что значения генератора реинициализируются через фиксированные промежутки (в моем случае 128 отсчетов).

генератор путём умножениея на матрицу поворота нестабилен, а если реинициализировать его каждые 128 шагов, то синус/косинус всё равно придётся честно вычислять для текущего значения фазы при реинициализации.
Go to the top of the page
 
+Quote Post
Russky
сообщение Dec 16 2014, 12:22
Сообщение #4


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

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



Цитата(_pv @ Dec 16 2014, 15:25) *
генератор путём умножениея на матрицу поворота нестабилен, а если реинициализировать его каждые 128 шагов, то синус/косинус всё равно придётся честно вычислять для текущего значения фазы при реинициализации.


Нет. Не придется вычислять каждый раз.
Вы немного не поняли принцып.

У нас есть таблица косинуса на 1024 отсчета. Это значит что я могу начальные значения для каждых 128 отсчетов брать из этой таблицы, а приращение считается только один раз.

Т.е. я считаю приращение по таблице для каждых 128 отсчетов, и матрицу поворота для каждого отсчета.
В итоге все работает вот как:
Когда я запускаю обработку 128 отсчетов, я загружаю начальные значения из таблицы (это константа), загружаю приращения синуса и косинуса (то-же константы расчитанные один раз при задании частоты) и потом считаю 128 раз поворот. После этого я делаю щаг по таблице, и сохраняю состояние указателя таблицы. В следующий раз повторяется все то-же самое.
В итоге, для таблицы в 1024 отсчета, и пакета 128 отсчетов, я могу генерировать синус с частотой кратной 128*1024 ( = 131072). Если нужно, то я могу переинициализировать не каждые 128 отсчетов, а каждые 1024, и получим мы кратность частоты 1024*1024, что в общем афигенно! sm.gif
Соотношением сигнал/шум мы конечно жертвуем в некоторой степени, но "за все надо платить". sm.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
- - 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
- - 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
|- - 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 Текстовая версия Сейчас: 3rd August 2025 - 17:40
Рейтинг@Mail.ru


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