|
Как реализовать генератор квадратуры, Надо генерировать cos/sin одинаковой чатоты в DSP |
|
|
|
Dec 10 2014, 15:43
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371

|
Всем привет! Вот есть задача - генерировать квадратурный сигнал для DDC. DDC сам реализован внутри DSP, поэтому надо алгоритм чтобы его можно было-бы реализвать потом на аасемблере. Используется плавующая точка. В идеальном случае ф-я должна выглядеть так: result = GenSinCos(float freq); где result это структура содержащая Cos и Sin, т.е. сигналы сдвинуты на 90 градусов. freq - 0...1. Ф-я вызывается для каждого отсчета. Начальная фаза в общем не очень важна. Главное чтобы 90 градусов было. По идее это даже не ф-я а макрос. Как-то так. Может кто уже встречал подобное? Или может уже есть готовые решения? Особенность в том, что наверняка есть решение которое не вызывает ф-ю sin и cos каждый раз.  Спасибо! PS. Табличный метод не предлагать!
Сообщение отредактировал Russky - Dec 10 2014, 15:56
|
|
|
|
|
 |
Ответов
|
Dec 11 2014, 12:48
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Russky @ Dec 11 2014, 14:53)  Но в общем это должно быть рекурсивное вычисление, где каждый следующий отсчет зависит от предыдущих. Это не синус и косинус в чистом виде.
Нужен именно генератор (так как он более экономичен к вычислениям). Школьная тригонометрия рулит.. 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, находим формулы рекурсии: sin n+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] == sin n * cos[2*pi*f*Δt] + cos n * sin[2*pi*f*Δt]; cos n+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] == cos n * cos[2*pi*f*Δt] - sin n * sin[2*pi*f*Δt]; Понятно, что sin[2*pi*f*Δt] и cos[2*pi*f*Δt] это константы, зависящие от f и Δt и выбираются так, чтобы 1/(f*Δt) = 2 N == n max+1. Начальные значения: sin 0 = 0; cos 0 = 1; Значения после переполнения счетчика n = (n max+1)%2 N == 0, полагаем равными: sin 2N = 0; cos 2N = 1; Это предотвратит накопление ошибок..
|
|
|
|
|
Dec 11 2014, 18:34
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 17-11-11
Пользователь №: 68 371

|
Цитата(blackfin @ Dec 11 2014, 16:48)  Школьная тригонометрия рулит.. ... Это предотвратит накопление ошибок.. Спасибо. Надо попробовать. Как попробую - напишу. Пока все выглядет очень даже ничего!
|
|
|
|
|
Dec 11 2014, 20:59
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата(Russky @ Dec 11 2014, 21:34)  Спасибо. Надо попробовать. Как попробую - напишу. Пока все выглядет очень даже ничего!  кто/что мешает генерить синус-косинус двумя параллельными биквадратными звеньями? начальная фаза целиком и прлностью определяется начальными условиями звеньев. умножений в 2 раза меньше чем в школьнотригонометрическом методе.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|