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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Целочисленные алгоритмы ЦОС, надо сформулировать правила
Zelepuk
сообщение Mar 6 2011, 07:22
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Существует рабочий алгоритм(несколько фильтров и БПФ). Код работает на плавучке на обычном десктопе.
Стоит задача портировать алгоритм на процессор с фиксированой точкой.
Отсчёты, над которыми производятся преобразования, поступают в формате 1.15.
Понимаю что тупое преобразование float в int ни к чему хорошему не приведёт.
Тогда стоит вопрос: какие требования к оперрациям нужно предъявить?

Коэффиценты фильтров и БПФ должны быть тоже в 1.15?
Как производить умножение, деление, суммирование и вычитание, чтобы избегать переполнений?

(лучше если примеры коротенькие на С будут)

Используется 32-битный процессор на ARM9E ядре

Заранее спасибо.



Сообщение отредактировал Zelepuk - Mar 6 2011, 07:48
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Mar 6 2011, 08:35
Сообщение #2


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Zelepuk @ Mar 6 2011, 09:22) *


Это из модели симулинка?Посмотрите здесь,очень подробно всё расказано.
видео
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 7 2011, 06:30
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Познавательное видео.

Но хотелось бы писать всё самуму руками. А тут получается вставил блок, нажал кнопочку и всё....
Причём код получается не очень читаемый...

Интересуют принципы.

Иными словами нужно перевести все float в программе в int (в крайнем случае long).
Какие могут быть общие рекомендации для таких задач? Как обезопасить код от переполнений при переходе на "фиксированую точку"?

Данные, над которыми осущесвляются операции поступают в дополнительном коде формата 1.15. Значит ли это что коэффиценты всех преобразований должны быть в таком же формате?

Микроконтроллер 32 битный.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 7 2011, 10:07
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Zelepuk @ Mar 7 2011, 09:30) *
Познавательное видео.

Но хотелось бы писать всё самуму руками. А тут получается вставил блок, нажал кнопочку и всё....
Причём код получается не очень читаемый...

Интересуют принципы.

Иными словами нужно перевести все float в программе в int (в крайнем случае long).
Какие могут быть общие рекомендации для таких задач? Как обезопасить код от переполнений при переходе на "фиксированую точку"?

Данные, над которыми осущесвляются операции поступают в дополнительном коде формата 1.15. Значит ли это что коэффиценты всех преобразований должны быть в таком же формате?

Микроконтроллер 32 битный.


Переполнение по-моему при такой задаче только аналитически оценить. Ну или попроще: сделать модель в матлабе, подать туда реальные даннные, посмотреть значения, умножить их на 4 (для запаса) и исходя из этого выбрать разрядность.
То что отсчеты в 1,15 раз больше по-моему не должно влиять на коэффициенты. Просто выход будет увеличен в 1,15 раз. У фильтра например коэффициенты на форму АЧХ/ФЧХ влияют.
А вот с дробной частью сложнее - надо Вам оценить какая точность фурье (фильтров) требуется. Например если требуется с точностью до 1 вычислять - забыть про дробную часть, просто перевести на фиксированную точку и все. А например если нужна точность 0,01 - то это одна сотая, ближайшее меньшее значение получается 1/2^7 = 1/128 = 0,0078125. Это означает, что под дробну часть нужно отвести 7 бит. Но это на выходе, а внутреняя арифметика будет зависеть от реализации, и надо исходить из выходной точности.
Да, и дробные коэффициенты также реализуются - оцениваете требуемую точность коэффициента, умножаете число на коэффициент и на выходе результат сдвагаете на кол-во знаков дробной части. Например нужно умножить число а= 239 на коэффициент 0,71 с точностью не хуже 0,01 (имеется ввиду в данном случае точность коэффициента а не результата). Получаем что при 7 битах дробной части (точность 0,007) 0,71 в таком формате будет 0,71/0,0078125 =90,7 = 91. Умножаем а*90 = 239*90=21749 результат сдвигаем на 7 бит (делим на 128) получаем 21749/128=169,91... Дробную часть отбрасываем получаем 169. Проверяем: 239*0,71 = 169,69.
Оценить влияние квантования коэффициентов фильтров можно в матлабе, специально для этого там есть fdatool. Там можно указать сколько бить под дробную часть, сколько под целую и много чего еще.

Сообщение отредактировал alexPec - Mar 7 2011, 10:24
Go to the top of the page
 
+Quote Post
diwil
сообщение Mar 7 2011, 11:58
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(Zelepuk @ Mar 7 2011, 09:30) *
Иными словами нужно перевести все float в программе в int (в крайнем случае long).
Какие могут быть общие рекомендации для таких задач? Как обезопасить код от переполнений при переходе на "фиксированую точку"?

Данные, над которыми осущесвляются операции поступают в дополнительном коде формата 1.15. Значит ли это что коэффиценты всех преобразований должны быть в таком же формате?

Микроконтроллер 32 битный.


1. float->int:
q_1_15 = (int)(flt * 32767);
код не обезопасить - или насыщение делать, или увеличивать разрядность.

2. и да и нет. Зависит от реализации умножения и формата всего остального.

я где-то постил здесь реализацию БПФ. кстати, написанную специально оптимально для АРМа (на Це. ассемблерная - за пиво sm.gif) и, кстати, данные с коэффициентами в формате 1.15 sm.gif Все целочисленное. Поиск должен помочь.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 7 2011, 13:38
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(alexPec @ Mar 7 2011, 13:07) *
Переполнение по-моему при такой задаче только аналитически оценить. Ну или попроще: сделать модель в матлабе, подать туда реальные даннные, посмотреть значения, умножить их на 4 (для запаса) и исходя из этого выбрать разрядность.
То что отсчеты в 1,15 раз больше по-моему не должно влиять на коэффициенты. Просто выход будет увеличен в 1,15 раз. У фильтра например коэффициенты на форму АЧХ/ФЧХ влияют.
А вот с дробной частью сложнее - надо Вам оценить какая точность фурье (фильтров) требуется. Например если требуется с точностью до 1 вычислять - забыть про дробную часть, просто перевести на фиксированную точку и все. А например если нужна точность 0,01 - то это одна сотая, ближайшее меньшее значение получается 1/2^7 = 1/128 = 0,0078125. Это означает, что под дробну часть нужно отвести 7 бит. Но это на выходе, а внутреняя арифметика будет зависеть от реализации, и надо исходить из выходной точности.
Да, и дробные коэффициенты также реализуются - оцениваете требуемую точность коэффициента, умножаете число на коэффициент и на выходе результат сдвагаете на кол-во знаков дробной части. Например нужно умножить число а= 239 на коэффициент 0,71 с точностью не хуже 0,01 (имеется ввиду в данном случае точность коэффициента а не результата). Получаем что при 7 битах дробной части (точность 0,007) 0,71 в таком формате будет 0,71/0,0078125 =90,7 = 91. Умножаем а*90 = 239*90=21749 результат сдвигаем на 7 бит (делим на 128) получаем 21749/128=169,91... Дробную часть отбрасываем получаем 169. Проверяем: 239*0,71 = 169,69.
Оценить влияние квантования коэффициентов фильтров можно в матлабе, специально для этого там есть fdatool. Там можно указать сколько бить под дробную часть, сколько под целую и много чего еще.


какие ещё 1.15 раза? 1-количество бит целой части, 15 - количество бит дробной части...
это так, для справки.
______________________________________________________________________________

когда мы перемножаем например два числа в формате 1.15, то получаем число в формате 2.30. Что с ним надо сделать чтобы в дальнейшем переполниий избежать.
Иначе гвооря интересуют "трюки целочисленных вычислений на С"

На ассемблере у меня реализация БПФ есть для моего проца.
Хлчется вкуритсь "трюки" на С чтобы всё что угодно писать... (КИХ, БИХ фильтрацию...)

Сообщение отредактировал Zelepuk - Mar 7 2011, 13:41
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 7 2011, 14:47
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Zelepuk @ Mar 7 2011, 16:38) *
когда мы перемножаем например два числа в формате 1.15, то получаем число в формате 2.30. Что с ним надо сделать чтобы в дальнейшем переполниий избежать.

А что с обычными числами делают, то и этими. Если вы уверены, что после умножения не будет переполнения - отбрасываете старший бит, если не уверены - наращивать разрядность; если вам не нужна точность 30 бит после умножения - отбрасываете младшие 15 (или округляете). Т.е если не будет переполнения и нужна точность 15 бит - отбрасываете старший и 15 младших бит и получаете результат в таком же формате.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 7 2011, 21:12
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(diwil @ Mar 7 2011, 14:58) *
1. float->int:
q_1_15 = (int)(flt * 32767);
код не обезопасить - или насыщение делать, или увеличивать разрядность.

2. и да и нет. Зависит от реализации умножения и формата всего остального.

я где-то постил здесь реализацию БПФ. кстати, написанную специально оптимально для АРМа (на Це. ассемблерная - за пиво sm.gif) и, кстати, данные с коэффициентами в формате 1.15 sm.gif Все целочисленное. Поиск должен помочь.


Никак не могу найти вашу реализацию. Может дадите ссылку... интересует именно реализация на Си. Посмотреть принципы хочу... rolleyes.gif
Go to the top of the page
 
+Quote Post
PetrovichKR
сообщение Mar 8 2011, 04:31
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 20-03-10
Пользователь №: 56 092



Цитата
Хлчется вкуритсь "трюки" на С чтобы всё что угодно писать... (КИХ, БИХ фильтрацию...)

Реализация КИХ-фильтрации на архитектуре AVR. Числа в формате 1.1.14
Код
//Порядок НЦФ
#define N 22

//Сдвиг умножителей НЦФ
#define SHIFT 14

//Весовые коэффициенты НЦФ
#define FIR_COEFFS \
{\
    (int)(-0.02144952651096*16384),\
    (int)(-0.05675564761031*16384),\
    (int)(-0.00722412687546*16384),\
    (int)(-0.01824005662087*16384),\
    (int)( 0.00295576469554*16384),\
    (int)( 0.02091815981809*16384),\
    (int)( 0.04723483351816*16384),\
    (int)( 0.07439211184117*16384),\
    (int)( 0.10087221829014*16384),\
    (int)( 0.12272427450964*16384),\
    (int)( 0.13727372353230*16384),\
    (int)( 0.14230086051190*16384),\
    (int)( 0.13727372353230*16384),\
    (int)( 0.12272427450964*16384),\
    (int)( 0.10087221829014*16384),\
    (int)( 0.07439211184117*16384),\
    (int)( 0.04723483351816*16384),\
    (int)( 0.02091815981809*16384),\
    (int)( 0.00295576469554*16384),\
    (int)(-0.01824005662087*16384),\
    (int)(-0.00722412687546*16384),\
    (int)(-0.05675564761031*16384),\
}

typedef struct            //Сигнальная память с указателем
{
    int X[N];
    unsigned char offset;
}
memory;

//НЦФ без сдвига сигнальной памяти
int fir(int x, memory *mem)
{
    static const int h[N] PROGMEM = FIR_COEFFS;                        //Весовые коэффициенты
    int out = 0;                                                        //Выходная переменная
    int *X = mem->X;                                                    //Указатель на сигнальную память
    unsigned char offset = mem->offset;                                        //Смещение сигнальной памяти
    X[offset] = x;                                                        //Загрузка текущего отсчета в сигнальную память
    for(unsigned char i = 0, j = offset; i < N; i++, j++)                     //Цикл ДВС
    {
        out += (int) pgm_read_word(&h[i]) * ((long) X[j]) >> SHIFT;    //Операция умножения с накоплением
        if(j == N - 1) j = -1;                                            //Закольцовывание сигнальной памяти
    }
    mem->offset = offset? offset - 1: N - 1;                        //Сдвиг смещения сигнальной памяти
    return out;
}


Конкретно в цифровой фильтрации, исключение переполнений достигается путем масштабирования. Насчет БПФ не знаю.

Сообщение отредактировал PetrovichKR - Mar 8 2011, 04:32
Go to the top of the page
 
+Quote Post
diwil
сообщение Mar 9 2011, 08:05
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(Zelepuk @ Mar 8 2011, 00:12) *
Никак не могу найти вашу реализацию. Может дадите ссылку... интересует именно реализация на Си. Посмотреть принципы хочу... rolleyes.gif



да, тоже не могу найти... странно... ну ладно, вот код -

Код
#ifndef __FFT_TWIDDLES_H__
#define __FFT_TWIDDLES_H__

#define FR2(x) (x*32767)

const int16_t
fft_twiddles_1024[] = {
/*N:1024,i: 0 */ FR2(+1.0000000000000000), FR2(+0.0000000000000000),
/*N:1024,i: 0 */ FR2(+1.0000000000000000), FR2(+0.0000000000000000),
/*N:1024,i: 0 */ FR2(+1.0000000000000000), FR2(+0.0000000000000000),
/*N:1024,i: 1 */ FR2(+0.9999247018391445), FR2(+0.0122715382857199),
/*N:1024,i: 1 */ FR2(+0.9999811752826011), FR2(+0.0061358846491545),
/*N:1024,i: 1 */ FR2(+0.9998305817958234), FR2(+0.0184067299058048),
/*N:1024,i: 2 */ FR2(+0.9996988186962043), FR2(+0.0245412285229123),
/*N:1024,i: 2 */ FR2(+0.9999247018391445), FR2(+0.0122715382857199),
/*N:1024,i: 2 */ FR2(+0.9993223845883495), FR2(+0.0368072229413588),
/*N:1024,i: 3 */ FR2(+0.9993223845883495), FR2(+0.0368072229413588),
/*N:1024,i: 3 */ FR2(+0.9998305817958234), FR2(+0.0184067299058048),
/*N:1024,i: 3 */ FR2(+0.9984755805732948), FR2(+0.0551952443496899),
/*N:1024,i: 4 */ FR2(+0.9987954562051724), FR2(+0.0490676743274180),
/*N:1024,i: 4 */ FR2(+0.9996988186962043), FR2(+0.0245412285229123),
/*N:1024,i: 4 */ FR2(+0.9972904566786902), FR2(+0.0735645635996674),
/*N:1024,i: 5 */ FR2(+0.9981181129001492), FR2(+0.0613207363022086),
/*N:1024,i: 5 */ FR2(+0.9995294175010931), FR2(+0.0306748031766366),
/*N:1024,i: 5 */ FR2(+0.9957674144676598), FR2(+0.0919089564971327),
/*N:1024,i: 6 */ FR2(+0.9972904566786902), FR2(+0.0735645635996674),
/*N:1024,i: 6 */ FR2(+0.9993223845883495), FR2(+0.0368072229413588),
/*N:1024,i: 6 */ FR2(+0.9939069700023561), FR2(+0.1102222072938831),
/*N:1024,i: 7 */ FR2(+0.9963126121827780), FR2(+0.0857973123444399),
/*N:1024,i: 7 */ FR2(+0.9990777277526454), FR2(+0.0429382569349408),
/*N:1024,i: 7 */ FR2(+0.9917097536690995), FR2(+0.1284981107937932),
/*N:1024,i: 8 */ FR2(+0.9951847266721969), FR2(+0.0980171403295606),
/*N:1024,i: 8 */ FR2(+0.9987954562051724), FR2(+0.0490676743274180),
/*N:1024,i: 8 */ FR2(+0.9891765099647810), FR2(+0.1467304744553618),
/*N:1024,i: 9 */ FR2(+0.9939069700023561), FR2(+0.1102222072938831),
/*N:1024,i: 9 */ FR2(+0.9984755805732948), FR2(+0.0551952443496899),
/*N:1024,i: 9 */ FR2(+0.9863080972445987), FR2(+0.1649131204899699),
/*N:1024,i:10 */ FR2(+0.9924795345987100), FR2(+0.1224106751992162),
/*N:1024,i:10 */ FR2(+0.9981181129001492), FR2(+0.0613207363022086),
/*N:1024,i:10 */ FR2(+0.9831054874312163), FR2(+0.1830398879551410),
/*N:1024,i:11 */ FR2(+0.9909026354277800), FR2(+0.1345807085071262),
/*N:1024,i:11 */ FR2(+0.9977230666441916), FR2(+0.0674439195636641),
/*N:1024,i:11 */ FR2(+0.9795697656854405), FR2(+0.2011046348420919),
/*N:1024,i:12 */ FR2(+0.9891765099647810), FR2(+0.1467304744553618),
/*N:1024,i:12 */ FR2(+0.9972904566786902), FR2(+0.0735645635996674),
/*N:1024,i:12 */ FR2(+0.9757021300385286), FR2(+0.2191012401568698),
/*N:1024,i:13 */ FR2(+0.9873014181578584), FR2(+0.1588581433338615),
/*N:1024,i:13 */ FR2(+0.9968202992911657), FR2(+0.0796824379714301),
/*N:1024,i:13 */ FR2(+0.9715038909862518), FR2(+0.2370236059943672),
/*N:1024,i:14 */ FR2(+0.9852776423889412), FR2(+0.1709618887603012),
/*N:1024,i:14 */ FR2(+0.9963126121827780), FR2(+0.0857973123444399),
/*N:1024,i:14 */ FR2(+0.9669764710448521), FR2(+0.2548656596045146),
/*N:1024,i:15 */ FR2(+0.9831054874312163), FR2(+0.1830398879551410),
/*N:1024,i:15 */ FR2(+0.9957674144676598), FR2(+0.0919089564971327),
/*N:1024,i:15 */ FR2(+0.9621214042690416), FR2(+0.2726213554499490),
/*N:1024,i:16 */ FR2(+0.9807852804032304), FR2(+0.1950903220161283),
/*N:1024,i:16 */ FR2(+0.9951847266721969), FR2(+0.0980171403295606),
/*N:1024,i:16 */ FR2(+0.9569403357322088), FR2(+0.2902846772544623),
/*N:1024,i:17 */ FR2(+0.9783173707196277), FR2(+0.2071113761922186),
/*N:1024,i:17 */ FR2(+0.9945645707342554), FR2(+0.1041216338720546),
/*N:1024,i:17 */ FR2(+0.9514350209690083), FR2(+0.3078496400415349),
/*N:1024,i:18 */ FR2(+0.9757021300385286), FR2(+0.2191012401568698),
/*N:1024,i:18 */ FR2(+0.9939069700023561), FR2(+0.1102222072938831),
/*N:1024,i:18 */ FR2(+0.9456073253805213), FR2(+0.3253102921622629),
/*N:1024,i:19 */ FR2(+0.9729399522055602), FR2(+0.2310581082806711),
/*N:1024,i:19 */ FR2(+0.9932119492347945), FR2(+0.1163186309119048),
/*N:1024,i:19 */ FR2(+0.9394592236021899), FR2(+0.3426607173119944),
/*N:1024,i:20 */ FR2(+0.9700312531945440), FR2(+0.2429801799032639),
/*N:1024,i:20 */ FR2(+0.9924795345987100), FR2(+0.1224106751992162),
/*N:1024,i:20 */ FR2(+0.9329927988347390), FR2(+0.3598950365349881),
/*N:1024,i:21 */ FR2(+0.9669764710448521), FR2(+0.2548656596045146),
/*N:1024,i:21 */ FR2(+0.9917097536690995), FR2(+0.1284981107937932),
/*N:1024,i:21 */ FR2(+0.9262102421383114), FR2(+0.3770074102164183),
/*N:1024,i:22 */ FR2(+0.9637760657954398), FR2(+0.2667127574748984),
/*N:1024,i:22 */ FR2(+0.9909026354277800), FR2(+0.1345807085071262),
/*N:1024,i:22 */ FR2(+0.9191138516900578), FR2(+0.3939920400610481),
/*N:1024,i:23 */ FR2(+0.9604305194155658), FR2(+0.2785196893850531),
/*N:1024,i:23 */ FR2(+0.9900582102622971), FR2(+0.1406582393328492),
/*N:1024,i:23 */ FR2(+0.9117060320054299), FR2(+0.4108431710579039),
/*N:1024,i:24 */ FR2(+0.9569403357322088), FR2(+0.2902846772544623),
/*N:1024,i:24 */ FR2(+0.9891765099647810), FR2(+0.1467304744553618),
/*N:1024,i:24 */ FR2(+0.9039892931234433), FR2(+0.4275550934302821),
/*N:1024,i:25 */ FR2(+0.9533060403541939), FR2(+0.3020059493192281),
/*N:1024,i:25 */ FR2(+0.9882575677307495), FR2(+0.1527971852584434),
/*N:1024,i:25 */ FR2(+0.8959662497561852), FR2(+0.4441221445704292),
/*N:1024,i:26 */ FR2(+0.9495281805930367), FR2(+0.3136817403988915),
/*N:1024,i:26 */ FR2(+0.9873014181578584), FR2(+0.1588581433338615),
/*N:1024,i:26 */ FR2(+0.8876396204028539), FR2(+0.4605387109582400),
/*N:1024,i:27 */ FR2(+0.9456073253805213), FR2(+0.3253102921622629),
/*N:1024,i:27 */ FR2(+0.9863080972445987), FR2(+0.1649131204899699),
/*N:1024,i:27 */ FR2(+0.8790122264286335), FR2(+0.4767992300633221),
/*N:1024,i:28 */ FR2(+0.9415440651830208), FR2(+0.3368898533922201),
/*N:1024,i:28 */ FR2(+0.9852776423889412), FR2(+0.1709618887603012),
/*N:1024,i:28 */ FR2(+0.8700869911087115), FR2(+0.4928981922297840),
/*N:1024,i:29 */ FR2(+0.9373390119125750), FR2(+0.3484186802494346),
/*N:1024,i:29 */ FR2(+0.9842100923869290), FR2(+0.1770042204121488),
/*N:1024,i:29 */ FR2(+0.8608669386377673), FR2(+0.5088301425431070),
/*N:1024,i:30 */ FR2(+0.9329927988347390), FR2(+0.3598950365349881),
/*N:1024,i:30 */ FR2(+0.9831054874312163), FR2(+0.1830398879551410),
/*N:1024,i:30 */ FR2(+0.8513551931052652), FR2(+0.5245896826784690),
/*N:1024,i:31 */ FR2(+0.9285060804732156), FR2(+0.3713171939518375),
/*N:1024,i:31 */ FR2(+0.9819638691095552), FR2(+0.1890686641498062),
/*N:1024,i:31 */ FR2(+0.8415549774368984), FR2(+0.5401714727298929),
/*N:1024,i:32 */ FR2(+0.9238795325112867), FR2(+0.3826834323650898),
/*N:1024,i:32 */ FR2(+0.9807852804032304), FR2(+0.1950903220161283),
/*N:1024,i:32 */ FR2(+0.8314696123025452), FR2(+0.5555702330196022),
/*N:1024,i:33 */ FR2(+0.9191138516900578), FR2(+0.3939920400610481),
/*N:1024,i:33 */ FR2(+0.9795697656854405), FR2(+0.2011046348420919),
/*N:1024,i:33 */ FR2(+0.8211025149911047), FR2(+0.5707807458869673),
/*N:1024,i:34 */ FR2(+0.9142097557035307), FR2(+0.4052413140049899),
/*N:1024,i:34 */ FR2(+0.9783173707196277), FR2(+0.2071113761922186),
/*N:1024,i:34 */ FR2(+0.8104571982525948), FR2(+0.5857978574564389),
/*N:1024,i:35 */ FR2(+0.9091679830905224), FR2(+0.4164295600976372),
/*N:1024,i:35 */ FR2(+0.9770281426577544), FR2(+0.2131103199160914),
/*N:1024,i:35 */ FR2(+0.7995372691079050), FR2(+0.6006164793838690),
/*N:1024,i:36 */ FR2(+0.9039892931234433), FR2(+0.4275550934302821),
/*N:1024,i:36 */ FR2(+0.9757021300385286), FR2(+0.2191012401568698),
/*N:1024,i:36 */ FR2(+0.7883464276266063), FR2(+0.6152315905806268),
/*N:1024,i:37 */ FR2(+0.8986744656939538), FR2(+0.4386162385385277),
/*N:1024,i:37 */ FR2(+0.9743393827855759), FR2(+0.2250839113597928),
/*N:1024,i:37 */ FR2(+0.7768884656732324), FR2(+0.6296382389149270),
/*N:1024,i:38 */ FR2(+0.8932243011955153), FR2(+0.4496113296546065),
/*N:1024,i:38 */ FR2(+0.9729399522055602), FR2(+0.2310581082806711),
/*N:1024,i:38 */ FR2(+0.7651672656224590), FR2(+0.6438315428897914),
/*N:1024,i:39 */ FR2(+0.8876396204028539), FR2(+0.4605387109582400),
/*N:1024,i:39 */ FR2(+0.9715038909862518), FR2(+0.2370236059943672),
/*N:1024,i:39 */ FR2(+0.7531867990436125), FR2(+0.6578066932970786),
/*N:1024,i:40 */ FR2(+0.8819212643483551), FR2(+0.4713967368259976),
/*N:1024,i:40 */ FR2(+0.9700312531945440), FR2(+0.2429801799032639),
/*N:1024,i:40 */ FR2(+0.7409511253549591), FR2(+0.6715589548470183),
/*N:1024,i:41 */ FR2(+0.8760700941954066), FR2(+0.4821837720791227),
/*N:1024,i:41 */ FR2(+0.9685220942744174), FR2(+0.2489276057457202),
/*N:1024,i:41 */ FR2(+0.7284643904482252), FR2(+0.6850836677727004),
/*N:1024,i:42 */ FR2(+0.8700869911087115), FR2(+0.4928981922297840),
/*N:1024,i:42 */ FR2(+0.9669764710448521), FR2(+0.2548656596045146),
/*N:1024,i:42 */ FR2(+0.7157308252838186), FR2(+0.6983762494089729),
/*N:1024,i:43 */ FR2(+0.8639728561215868), FR2(+0.5035383837257176),
/*N:1024,i:43 */ FR2(+0.9653944416976894), FR2(+0.2607941179152755),
/*N:1024,i:43 */ FR2(+0.7027547444572253), FR2(+0.7114321957452164),
/*N:1024,i:44 */ FR2(+0.8577286100002721), FR2(+0.5141027441932217),
/*N:1024,i:44 */ FR2(+0.9637760657954398), FR2(+0.2667127574748984),
/*N:1024,i:44 */ FR2(+0.6895405447370669), FR2(+0.7242470829514669),
/*N:1024,i:45 */ FR2(+0.8513551931052652), FR2(+0.5245896826784690),
/*N:1024,i:45 */ FR2(+0.9621214042690416), FR2(+0.2726213554499490),
/*N:1024,i:45 */ FR2(+0.6760927035753160), FR2(+0.7368165688773698),
/*N:1024,i:46 */ FR2(+0.8448535652497071), FR2(+0.5349976198870972),
/*N:1024,i:46 */ FR2(+0.9604305194155658), FR2(+0.2785196893850531),
/*N:1024,i:46 */ FR2(+0.6624157775901718), FR2(+0.7491363945234593),
/*N:1024,i:47 */ FR2(+0.8382247055548381), FR2(+0.5453249884220465),
/*N:1024,i:47 */ FR2(+0.9587034748958716), FR2(+0.2844075372112719),
/*N:1024,i:47 */ FR2(+0.6485144010221126), FR2(+0.7612023854842618),
/*N:1024,i:48 */ FR2(+0.8314696123025452), FR2(+0.5555702330196022),
/*N:1024,i:48 */ FR2(+0.9569403357322088), FR2(+0.2902846772544623),
/*N:1024,i:48 */ FR2(+0.6343932841636455), FR2(+0.7730104533627370),
/*N:1024,i:49 */ FR2(+0.8245893027850253), FR2(+0.5657318107836131),
/*N:1024,i:49 */ FR2(+0.9551411683057708), FR2(+0.2961508882436238),
/*N:1024,i:49 */ FR2(+0.6200572117632892), FR2(+0.7845565971555752),
/*N:1024,i:50 */ FR2(+0.8175848131515837), FR2(+0.5758081914178453),
/*N:1024,i:50 */ FR2(+0.9533060403541939), FR2(+0.3020059493192281),
/*N:1024,i:50 */ FR2(+0.6055110414043256), FR2(+0.7958369046088835),
/*N:1024,i:51 */ FR2(+0.8104571982525948), FR2(+0.5857978574564389),
/*N:1024,i:51 */ FR2(+0.9514350209690083), FR2(+0.3078496400415349),
/*N:1024,i:51 */ FR2(+0.5907597018588743), FR2(+0.8068475535437992),
/*N:1024,i:52 */ FR2(+0.8032075314806449), FR2(+0.5956993044924334),
/*N:1024,i:52 */ FR2(+0.9495281805930367), FR2(+0.3136817403988915),
/*N:1024,i:52 */ FR2(+0.5758081914178453), FR2(+0.8175848131515837),
/*N:1024,i:53 */ FR2(+0.7958369046088836), FR2(+0.6055110414043256),
/*N:1024,i:53 */ FR2(+0.9475855910177411), FR2(+0.3195020308160157),
/*N:1024,i:53 */ FR2(+0.5606615761973360), FR2(+0.8280450452577558),
/*N:1024,i:54 */ FR2(+0.7883464276266063), FR2(+0.6152315905806268),
/*N:1024,i:54 */ FR2(+0.9456073253805213), FR2(+0.3253102921622629),
/*N:1024,i:54 */ FR2(+0.5453249884220465), FR2(+0.8382247055548380),
/*N:1024,i:55 */ FR2(+0.7807372285720945), FR2(+0.6248594881423863),
/*N:1024,i:55 */ FR2(+0.9435934581619604), FR2(+0.3311063057598764),
/*N:1024,i:55 */ FR2(+0.5298036246862948), FR2(+0.8481203448032971),
/*N:1024,i:56 */ FR2(+0.7730104533627370), FR2(+0.6343932841636455),
/*N:1024,i:56 */ FR2(+0.9415440651830208), FR2(+0.3368898533922201),
/*N:1024,i:56 */ FR2(+0.5141027441932217), FR2(+0.8577286100002721),
/*N:1024,i:57 */ FR2(+0.7651672656224590), FR2(+0.6438315428897914),
/*N:1024,i:57 */ FR2(+0.9394592236021899), FR2(+0.3426607173119944),
/*N:1024,i:57 */ FR2(+0.4982276669727819), FR2(+0.8670462455156927),
/*N:1024,i:58 */ FR2(+0.7572088465064846), FR2(+0.6531728429537768),
/*N:1024,i:58 */ FR2(+0.9373390119125750), FR2(+0.3484186802494346),
/*N:1024,i:58 */ FR2(+0.4821837720791228), FR2(+0.8760700941954066),
/*N:1024,i:59 */ FR2(+0.7491363945234594), FR2(+0.6624157775901718),
/*N:1024,i:59 */ FR2(+0.9351835099389476), FR2(+0.3541635254204903),
/*N:1024,i:59 */ FR2(+0.4659764957679661), FR2(+0.8847970984309378),
/*N:1024,i:60 */ FR2(+0.7409511253549591), FR2(+0.6715589548470183),
/*N:1024,i:60 */ FR2(+0.9329927988347390), FR2(+0.3598950365349881),
/*N:1024,i:60 */ FR2(+0.4496113296546066), FR2(+0.8932243011955153),
/*N:1024,i:61 */ FR2(+0.7326542716724128), FR2(+0.6806009977954530),
/*N:1024,i:61 */ FR2(+0.9307669610789837), FR2(+0.3656129978047739),
/*N:1024,i:61 */ FR2(+0.4330938188531520), FR2(+0.9013488470460220),
/*N:1024,i:62 */ FR2(+0.7242470829514670), FR2(+0.6895405447370668),
/*N:1024,i:62 */ FR2(+0.9285060804732156), FR2(+0.3713171939518375),
/*N:1024,i:62 */ FR2(+0.4164295600976373), FR2(+0.9091679830905223),
/*N:1024,i:63 */ FR2(+0.7157308252838186), FR2(+0.6983762494089729),
/*N:1024,i:63 */ FR2(+0.9262102421383114), FR2(+0.3770074102164183),
/*N:1024,i:63 */ FR2(+0.3996241998456468), FR2(+0.9166790599210427),
/*N:1024,i:64 */ FR2(+0.7071067811865476), FR2(+0.7071067811865475),
/*N:1024,i:64 */ FR2(+0.9238795325112867), FR2(+0.3826834323650898),
/*N:1024,i:64 */ FR2(+0.3826834323650898), FR2(+0.9238795325112867),
/*N:1024,i:65 */ FR2(+0.6983762494089729), FR2(+0.7157308252838186),
/*N:1024,i:65 */ FR2(+0.9215140393420420), FR2(+0.3883450466988263),
/*N:1024,i:65 */ FR2(+0.3656129978047740), FR2(+0.9307669610789837),
/*N:1024,i:66 */ FR2(+0.6895405447370669), FR2(+0.7242470829514669),
/*N:1024,i:66 */ FR2(+0.9191138516900578), FR2(+0.3939920400610481),
/*N:1024,i:66 */ FR2(+0.3484186802494345), FR2(+0.9373390119125750),
/*N:1024,i:67 */ FR2(+0.6806009977954531), FR2(+0.7326542716724128),
/*N:1024,i:67 */ FR2(+0.9166790599210427), FR2(+0.3996241998456468),
/*N:1024,i:67 */ FR2(+0.3311063057598764), FR2(+0.9435934581619604),
/*N:1024,i:68 */ FR2(+0.6715589548470183), FR2(+0.7409511253549591),
/*N:1024,i:68 */ FR2(+0.9142097557035307), FR2(+0.4052413140049899),
/*N:1024,i:68 */ FR2(+0.3136817403988916), FR2(+0.9495281805930367),
/*N:1024,i:69 */ FR2(+0.6624157775901718), FR2(+0.7491363945234593),
/*N:1024,i:69 */ FR2(+0.9117060320054299), FR2(+0.4108431710579039),
/*N:1024,i:69 */ FR2(+0.2961508882436240), FR2(+0.9551411683057707),
/*N:1024,i:70 */ FR2(+0.6531728429537768), FR2(+0.7572088465064845),
/*N:1024,i:70 */ FR2(+0.9091679830905224), FR2(+0.4164295600976372),
/*N:1024,i:70 */ FR2(+0.2785196893850531), FR2(+0.9604305194155658),
/*N:1024,i:71 */ FR2(+0.6438315428897915), FR2(+0.7651672656224590),
/*N:1024,i:71 */ FR2(+0.9065957045149153), FR2(+0.4220002707997997),
/*N:1024,i:71 */ FR2(+0.2607941179152756), FR2(+0.9653944416976894),
/*N:1024,i:72 */ FR2(+0.6343932841636455), FR2(+0.7730104533627370),
/*N:1024,i:72 */ FR2(+0.9039892931234433), FR2(+0.4275550934302821),
/*N:1024,i:72 */ FR2(+0.2429801799032640), FR2(+0.9700312531945440),
/*N:1024,i:73 */ FR2(+0.6248594881423865), FR2(+0.7807372285720944),
/*N:1024,i:73 */ FR2(+0.9013488470460220), FR2(+0.4330938188531520),
/*N:1024,i:73 */ FR2(+0.2250839113597928), FR2(+0.9743393827855759),
/*N:1024,i:74 */ FR2(+0.6152315905806268), FR2(+0.7883464276266062),
/*N:1024,i:74 */ FR2(+0.8986744656939538), FR2(+0.4386162385385277),
/*N:1024,i:74 */ FR2(+0.2071113761922186), FR2(+0.9783173707196277),
/*N:1024,i:75 */ FR2(+0.6055110414043256), FR2(+0.7958369046088835),
/*N:1024,i:75 */ FR2(+0.8959662497561852), FR2(+0.4441221445704292),
/*N:1024,i:75 */ FR2(+0.1890686641498063), FR2(+0.9819638691095552),
/*N:1024,i:76 */ FR2(+0.5956993044924335), FR2(+0.8032075314806448),
/*N:1024,i:76 */ FR2(+0.8932243011955153), FR2(+0.4496113296546065),
/*N:1024,i:76 */ FR2(+0.1709618887603014), FR2(+0.9852776423889412),
/*N:1024,i:77 */ FR2(+0.5857978574564389), FR2(+0.8104571982525948),
/*N:1024,i:77 */ FR2(+0.8904487232447579), FR2(+0.4550835871263438),
/*N:1024,i:77 */ FR2(+0.1527971852584434), FR2(+0.9882575677307495),
/*N:1024,i:78 */ FR2(+0.5758081914178453), FR2(+0.8175848131515837),
/*N:1024,i:78 */ FR2(+0.8876396204028539), FR2(+0.4605387109582400),
/*N:1024,i:78 */ FR2(+0.1345807085071262), FR2(+0.9909026354277800),
/*N:1024,i:79 */ FR2(+0.5657318107836132), FR2(+0.8245893027850253),
/*N:1024,i:79 */ FR2(+0.8847970984309378), FR2(+0.4659764957679662),
/*N:1024,i:79 */ FR2(+0.1163186309119049), FR2(+0.9932119492347945),
/*N:1024,i:80 */ FR2(+0.5555702330196023), FR2(+0.8314696123025452),
/*N:1024,i:80 */ FR2(+0.8819212643483551), FR2(+0.4713967368259976),
/*N:1024,i:80 */ FR2(+0.0980171403295608), FR2(+0.9951847266721968),
/*N:1024,i:81 */ FR2(+0.5453249884220465), FR2(+0.8382247055548380),
/*N:1024,i:81 */ FR2(+0.8790122264286335), FR2(+0.4767992300633221),
/*N:1024,i:81 */ FR2(+0.0796824379714301), FR2(+0.9968202992911657),
/*N:1024,i:82 */ FR2(+0.5349976198870973), FR2(+0.8448535652497070),
/*N:1024,i:82 */ FR2(+0.8760700941954066), FR2(+0.4821837720791227),
/*N:1024,i:82 */ FR2(+0.0613207363022086), FR2(+0.9981181129001492),
/*N:1024,i:83 */ FR2(+0.5245896826784688), FR2(+0.8513551931052652),
/*N:1024,i:83 */ FR2(+0.8730949784182901), FR2(+0.4875501601484360),
/*N:1024,i:83 */ FR2(+0.0429382569349410), FR2(+0.9990777277526454),
/*N:1024,i:84 */ FR2(+0.5141027441932217), FR2(+0.8577286100002721),
/*N:1024,i:84 */ FR2(+0.8700869911087115), FR2(+0.4928981922297840),
/*N:1024,i:84 */ FR2(+0.0245412285229123), FR2(+0.9996988186962043),
/*N:1024,i:85 */ FR2(+0.5035383837257176), FR2(+0.8639728561215867),
/*N:1024,i:85 */ FR2(+0.8670462455156927), FR2(+0.4982276669727819),
/*N:1024,i:85 */ FR2(+0.0061358846491545), FR2(+0.9999811752826011),
/*N:1024,i:86 */ FR2(+0.4928981922297841), FR2(+0.8700869911087114),
/*N:1024,i:86 */ FR2(+0.8639728561215868), FR2(+0.5035383837257176),
/*N:1024,i:86 */ FR2(-0.0122715382857198), FR2(+0.9999247018391445),
/*N:1024,i:87 */ FR2(+0.4821837720791228), FR2(+0.8760700941954066),
/*N:1024,i:87 */ FR2(+0.8608669386377673), FR2(+0.5088301425431070),
/*N:1024,i:87 */ FR2(-0.0306748031766365), FR2(+0.9995294175010931),
/*N:1024,i:88 */ FR2(+0.4713967368259978), FR2(+0.8819212643483549),
/*N:1024,i:88 */ FR2(+0.8577286100002721), FR2(+0.5141027441932217),
/*N:1024,i:88 */ FR2(-0.0490676743274180), FR2(+0.9987954562051724),
/*N:1024,i:89 */ FR2(+0.4605387109582400), FR2(+0.8876396204028539),
/*N:1024,i:89 */ FR2(+0.8545579883654005), FR2(+0.5193559901655896),
/*N:1024,i:89 */ FR2(-0.0674439195636640), FR2(+0.9977230666441916),
/*N:1024,i:90 */ FR2(+0.4496113296546066), FR2(+0.8932243011955153),
/*N:1024,i:90 */ FR2(+0.8513551931052652), FR2(+0.5245896826784690),
/*N:1024,i:90 */ FR2(-0.0857973123444398), FR2(+0.9963126121827780),
/*N:1024,i:91 */ FR2(+0.4386162385385277), FR2(+0.8986744656939538),
/*N:1024,i:91 */ FR2(+0.8481203448032972), FR2(+0.5298036246862946),
/*N:1024,i:91 */ FR2(-0.1041216338720546), FR2(+0.9945645707342554),
/*N:1024,i:92 */ FR2(+0.4275550934302822), FR2(+0.9039892931234433),
/*N:1024,i:92 */ FR2(+0.8448535652497071), FR2(+0.5349976198870972),
/*N:1024,i:92 */ FR2(-0.1224106751992162), FR2(+0.9924795345987100),
/*N:1024,i:93 */ FR2(+0.4164295600976373), FR2(+0.9091679830905223),
/*N:1024,i:93 */ FR2(+0.8415549774368984), FR2(+0.5401714727298929),
/*N:1024,i:93 */ FR2(-0.1406582393328491), FR2(+0.9900582102622971),
/*N:1024,i:94 */ FR2(+0.4052413140049899), FR2(+0.9142097557035307),
/*N:1024,i:94 */ FR2(+0.8382247055548381), FR2(+0.5453249884220465),
/*N:1024,i:94 */ FR2(-0.1588581433338613), FR2(+0.9873014181578584),
/*N:1024,i:95 */ FR2(+0.3939920400610481), FR2(+0.9191138516900578),
/*N:1024,i:95 */ FR2(+0.8348628749863800), FR2(+0.5504579729366048),
/*N:1024,i:95 */ FR2(-0.1770042204121488), FR2(+0.9842100923869290),
/*N:1024,i:96 */ FR2(+0.3826834323650898), FR2(+0.9238795325112867),
/*N:1024,i:96 */ FR2(+0.8314696123025452), FR2(+0.5555702330196022),
/*N:1024,i:96 */ FR2(-0.1950903220161282), FR2(+0.9807852804032304),
/*N:1024,i:97 */ FR2(+0.3713171939518376), FR2(+0.9285060804732155),
/*N:1024,i:97 */ FR2(+0.8280450452577558), FR2(+0.5606615761973360),
/*N:1024,i:97 */ FR2(-0.2131103199160913), FR2(+0.9770281426577544),
/*N:1024,i:98 */ FR2(+0.3598950365349883), FR2(+0.9329927988347389),
/*N:1024,i:98 */ FR2(+0.8245893027850253), FR2(+0.5657318107836131),
/*N:1024,i:98 */ FR2(-0.2310581082806711), FR2(+0.9729399522055602),
/*N:1024,i:99 */ FR2(+0.3484186802494345), FR2(+0.9373390119125750),
/*N:1024,i:99 */ FR2(+0.8211025149911047), FR2(+0.5707807458869673),
/*N:1024,i:99 */ FR2(-0.2489276057457201), FR2(+0.9685220942744174),
/*N:1024,i:100 */ FR2(+0.3368898533922201), FR2(+0.9415440651830208),
/*N:1024,i:100 */ FR2(+0.8175848131515837), FR2(+0.5758081914178453),
/*N:1024,i:100 */ FR2(-0.2667127574748983), FR2(+0.9637760657954398),
/*N:1024,i:101 */ FR2(+0.3253102921622630), FR2(+0.9456073253805213),
/*N:1024,i:101 */ FR2(+0.8140363297059484), FR2(+0.5808139580957645),
/*N:1024,i:101 */ FR2(-0.2844075372112717), FR2(+0.9587034748958716),
/*N:1024,i:102 */ FR2(+0.3136817403988916), FR2(+0.9495281805930367),
/*N:1024,i:102 */ FR2(+0.8104571982525948), FR2(+0.5857978574564389),
/*N:1024,i:102 */ FR2(-0.3020059493192281), FR2(+0.9533060403541939),
/*N:1024,i:103 */ FR2(+0.3020059493192282), FR2(+0.9533060403541938),
/*N:1024,i:103 */ FR2(+0.8068475535437993), FR2(+0.5907597018588742),
/*N:1024,i:103 */ FR2(-0.3195020308160156), FR2(+0.9475855910177412),
/*N:1024,i:104 */ FR2(+0.2902846772544623), FR2(+0.9569403357322089),
/*N:1024,i:104 */ FR2(+0.8032075314806449), FR2(+0.5956993044924334),
/*N:1024,i:104 */ FR2(-0.3368898533922199), FR2(+0.9415440651830208),
/*N:1024,i:105 */ FR2(+0.2785196893850531), FR2(+0.9604305194155658),
/*N:1024,i:105 */ FR2(+0.7995372691079050), FR2(+0.6006164793838690),
/*N:1024,i:105 */ FR2(-0.3541635254204904), FR2(+0.9351835099389476),
/*N:1024,i:106 */ FR2(+0.2667127574748984), FR2(+0.9637760657954398),
/*N:1024,i:106 */ FR2(+0.7958369046088836), FR2(+0.6055110414043256),
/*N:1024,i:106 */ FR2(-0.3713171939518375), FR2(+0.9285060804732156),
/*N:1024,i:107 */ FR2(+0.2548656596045146), FR2(+0.9669764710448521),
/*N:1024,i:107 */ FR2(+0.7921065773002124), FR2(+0.6103828062763095),
/*N:1024,i:107 */ FR2(-0.3883450466988262), FR2(+0.9215140393420420),
/*N:1024,i:108 */ FR2(+0.2429801799032640), FR2(+0.9700312531945440),
/*N:1024,i:108 */ FR2(+0.7883464276266063), FR2(+0.6152315905806268),
/*N:1024,i:108 */ FR2(-0.4052413140049898), FR2(+0.9142097557035307),
/*N:1024,i:109 */ FR2(+0.2310581082806713), FR2(+0.9729399522055601),
/*N:1024,i:109 */ FR2(+0.7845565971555752), FR2(+0.6200572117632891),
/*N:1024,i:109 */ FR2(-0.4220002707997997), FR2(+0.9065957045149153),
/*N:1024,i:110 */ FR2(+0.2191012401568698), FR2(+0.9757021300385286),
/*N:1024,i:110 */ FR2(+0.7807372285720945), FR2(+0.6248594881423863),
/*N:1024,i:110 */ FR2(-0.4386162385385274), FR2(+0.8986744656939539),
/*N:1024,i:111 */ FR2(+0.2071113761922186), FR2(+0.9783173707196277),
/*N:1024,i:111 */ FR2(+0.7768884656732324), FR2(+0.6296382389149270),
/*N:1024,i:111 */ FR2(-0.4550835871263437), FR2(+0.8904487232447580),
/*N:1024,i:112 */ FR2(+0.1950903220161283), FR2(+0.9807852804032304),
/*N:1024,i:112 */ FR2(+0.7730104533627370), FR2(+0.6343932841636455),
/*N:1024,i:112 */ FR2(-0.4713967368259977), FR2(+0.8819212643483551),
/*N:1024,i:113 */ FR2(+0.1830398879551411), FR2(+0.9831054874312163),
/*N:1024,i:113 */ FR2(+0.7691033376455797), FR2(+0.6391244448637757),
/*N:1024,i:113 */ FR2(-0.4875501601484357), FR2(+0.8730949784182902),
/*N:1024,i:114 */ FR2(+0.1709618887603014), FR2(+0.9852776423889412),
/*N:1024,i:114 */ FR2(+0.7651672656224590), FR2(+0.6438315428897914),
/*N:1024,i:114 */ FR2(-0.5035383837257175), FR2(+0.8639728561215868),
/*N:1024,i:115 */ FR2(+0.1588581433338614), FR2(+0.9873014181578584),
/*N:1024,i:115 */ FR2(+0.7612023854842618), FR2(+0.6485144010221124),
/*N:1024,i:115 */ FR2(-0.5193559901655896), FR2(+0.8545579883654005),
/*N:1024,i:116 */ FR2(+0.1467304744553618), FR2(+0.9891765099647810),
/*N:1024,i:116 */ FR2(+0.7572088465064846), FR2(+0.6531728429537768),
/*N:1024,i:116 */ FR2(-0.5349976198870970), FR2(+0.8448535652497072),
/*N:1024,i:117 */ FR2(+0.1345807085071262), FR2(+0.9909026354277800),
/*N:1024,i:117 */ FR2(+0.7531867990436125), FR2(+0.6578066932970786),
/*N:1024,i:117 */ FR2(-0.5504579729366047), FR2(+0.8348628749863801),
/*N:1024,i:118 */ FR2(+0.1224106751992163), FR2(+0.9924795345987100),
/*N:1024,i:118 */ FR2(+0.7491363945234594), FR2(+0.6624157775901718),
/*N:1024,i:118 */ FR2(-0.5657318107836132), FR2(+0.8245893027850252),
/*N:1024,i:119 */ FR2(+0.1102222072938832), FR2(+0.9939069700023561),
/*N:1024,i:119 */ FR2(+0.7450577854414661), FR2(+0.6669999223036375),
/*N:1024,i:119 */ FR2(-0.5808139580957644), FR2(+0.8140363297059485),
/*N:1024,i:120 */ FR2(+0.0980171403295608), FR2(+0.9951847266721968),
/*N:1024,i:120 */ FR2(+0.7409511253549591), FR2(+0.6715589548470183),
/*N:1024,i:120 */ FR2(-0.5956993044924334), FR2(+0.8032075314806449),
/*N:1024,i:121 */ FR2(+0.0857973123444399), FR2(+0.9963126121827780),
/*N:1024,i:121 */ FR2(+0.7368165688773699), FR2(+0.6760927035753159),
/*N:1024,i:121 */ FR2(-0.6103828062763096), FR2(+0.7921065773002123),
/*N:1024,i:122 */ FR2(+0.0735645635996675), FR2(+0.9972904566786902),
/*N:1024,i:122 */ FR2(+0.7326542716724128), FR2(+0.6806009977954530),
/*N:1024,i:122 */ FR2(-0.6248594881423862), FR2(+0.7807372285720946),
/*N:1024,i:123 */ FR2(+0.0613207363022086), FR2(+0.9981181129001492),
/*N:1024,i:123 */ FR2(+0.7284643904482252), FR2(+0.6850836677727004),
/*N:1024,i:123 */ FR2(-0.6391244448637757), FR2(+0.7691033376455796),
/*N:1024,i:124 */ FR2(+0.0490676743274181), FR2(+0.9987954562051724),
/*N:1024,i:124 */ FR2(+0.7242470829514670), FR2(+0.6895405447370668),
/*N:1024,i:124 */ FR2(-0.6531728429537765), FR2(+0.7572088465064847),
/*N:1024,i:125 */ FR2(+0.0368072229413590), FR2(+0.9993223845883495),
/*N:1024,i:125 */ FR2(+0.7200025079613817), FR2(+0.6939714608896540),
/*N:1024,i:125 */ FR2(-0.6669999223036374), FR2(+0.7450577854414661),
/*N:1024,i:126 */ FR2(+0.0245412285229123), FR2(+0.9996988186962043),
/*N:1024,i:126 */ FR2(+0.7157308252838186), FR2(+0.6983762494089729),
/*N:1024,i:126 */ FR2(-0.6806009977954530), FR2(+0.7326542716724128),
/*N:1024,i:127 */ FR2(+0.0122715382857199), FR2(+0.9999247018391445),
/*N:1024,i:127 */ FR2(+0.7114321957452164), FR2(+0.7027547444572253),
/*N:1024,i:127 */ FR2(-0.6939714608896538), FR2(+0.7200025079613818),
/*N:1024,i:128 */ FR2(+0.0000000000000001), FR2(+1.0000000000000000),
/*N:1024,i:128 */ FR2(+0.7071067811865476), FR2(+0.7071067811865475),
/*N:1024,i:128 */ FR2(-0.7071067811865475), FR2(+0.7071067811865476),
/*N:1024,i:129 */ FR2(-0.0122715382857198), FR2(+0.9999247018391445),
/*N:1024,i:129 */ FR2(+0.7027547444572253), FR2(+0.7114321957452164),
/*N:1024,i:129 */ FR2(-0.7200025079613817), FR2(+0.6939714608896540),
/*N:1024,i:130 */ FR2(-0.0245412285229121), FR2(+0.9996988186962043),
/*N:1024,i:130 */ FR2(+0.6983762494089729), FR2(+0.7157308252838186),
/*N:1024,i:130 */ FR2(-0.7326542716724127), FR2(+0.6806009977954532),
/*N:1024,i:131 */ FR2(-0.0368072229413589), FR2(+0.9993223845883495),
/*N:1024,i:131 */ FR2(+0.6939714608896540), FR2(+0.7200025079613817),
/*N:1024,i:131 */ FR2(-0.7450577854414660), FR2(+0.6669999223036376),
/*N:1024,i:132 */ FR2(-0.0490676743274180), FR2(+0.9987954562051724),
/*N:1024,i:132 */ FR2(+0.6895405447370669), FR2(+0.7242470829514669),
/*N:1024,i:132 */ FR2(-0.7572088465064846), FR2(+0.6531728429537766),
/*N:1024,i:133 */ FR2(-0.0613207363022085), FR2(+0.9981181129001492),
/*N:1024,i:133 */ FR2(+0.6850836677727004), FR2(+0.7284643904482252),
/*N:1024,i:133 */ FR2(-0.7691033376455795), FR2(+0.6391244448637758),
/*N:1024,i:134 */ FR2(-0.0735645635996673), FR2(+0.9972904566786902),
/*N:1024,i:134 */ FR2(+0.6806009977954531), FR2(+0.7326542716724128),
/*N:1024,i:134 */ FR2(-0.7807372285720945), FR2(+0.6248594881423863),
/*N:1024,i:135 */ FR2(-0.0857973123444398), FR2(+0.9963126121827780),
/*N:1024,i:135 */ FR2(+0.6760927035753160), FR2(+0.7368165688773698),
/*N:1024,i:135 */ FR2(-0.7921065773002122), FR2(+0.6103828062763097),
/*N:1024,i:136 */ FR2(-0.0980171403295606), FR2(+0.9951847266721969),
/*N:1024,i:136 */ FR2(+0.6715589548470183), FR2(+0.7409511253549591),
/*N:1024,i:136 */ FR2(-0.8032075314806448), FR2(+0.5956993044924335),
/*N:1024,i:137 */ FR2(-0.1102222072938831), FR2(+0.9939069700023561),
/*N:1024,i:137 */ FR2(+0.6669999223036375), FR2(+0.7450577854414660),
/*N:1024,i:137 */ FR2(-0.8140363297059484), FR2(+0.5808139580957645),
/*N:1024,i:138 */ FR2(-0.1224106751992162), FR2(+0.9924795345987100),
/*N:1024,i:138 */ FR2(+0.6624157775901718), FR2(+0.7491363945234593),
/*N:1024,i:138 */ FR2(-0.8245893027850251), FR2(+0.5657318107836135),
/*N:1024,i:139 */ FR2(-0.1345807085071261), FR2(+0.9909026354277800),
/*N:1024,i:139 */ FR2(+0.6578066932970786), FR2(+0.7531867990436124),
/*N:1024,i:139 */ FR2(-0.8348628749863800), FR2(+0.5504579729366049),
/*N:1024,i:140 */ FR2(-0.1467304744553616), FR2(+0.9891765099647810),
/*N:1024,i:140 */ FR2(+0.6531728429537768), FR2(+0.7572088465064845),
/*N:1024,i:140 */ FR2(-0.8448535652497071), FR2(+0.5349976198870972),
/*N:1024,i:141 */ FR2(-0.1588581433338613), FR2(+0.9873014181578584),
/*N:1024,i:141 */ FR2(+0.6485144010221126), FR2(+0.7612023854842618),
/*N:1024,i:141 */ FR2(-0.8545579883654004), FR2(+0.5193559901655898),
/*N:1024,i:142 */ FR2(-0.1709618887603012), FR2(+0.9852776423889412),
/*N:1024,i:142 */ FR2(+0.6438315428897915), FR2(+0.7651672656224590),
/*N:1024,i:142 */ FR2(-0.8639728561215867), FR2(+0.5035383837257177),
/*N:1024,i:143 */ FR2(-0.1830398879551409), FR2(+0.9831054874312163),
/*N:1024,i:143 */ FR2(+0.6391244448637757), FR2(+0.7691033376455796),
/*N:1024,i:143 */ FR2(-0.8730949784182901), FR2(+0.4875501601484359),
/*N:1024,i:144 */ FR2(-0.1950903220161282), FR2(+0.9807852804032304),
/*N:1024,i:144 */ FR2(+0.6343932841636455), FR2(+0.7730104533627370),
/*N:1024,i:144 */ FR2(-0.8819212643483549), FR2(+0.4713967368259979),
/*N:1024,i:145 */ FR2(-0.2071113761922185), FR2(+0.9783173707196277),
/*N:1024,i:145 */ FR2(+0.6296382389149271), FR2(+0.7768884656732324),
/*N:1024,i:145 */ FR2(-0.8904487232447579), FR2(+0.4550835871263439),
/*N:1024,i:146 */ FR2(-0.2191012401568697), FR2(+0.9757021300385286),
/*N:1024,i:146 */ FR2(+0.6248594881423865), FR2(+0.7807372285720944),
/*N:1024,i:146 */ FR2(-0.8986744656939539), FR2(+0.4386162385385276),
/*N:1024,i:147 */ FR2(-0.2310581082806711), FR2(+0.9729399522055602),
/*N:1024,i:147 */ FR2(+0.6200572117632892), FR2(+0.7845565971555752),
/*N:1024,i:147 */ FR2(-0.9065957045149153), FR2(+0.4220002707997999),
/*N:1024,i:148 */ FR2(-0.2429801799032639), FR2(+0.9700312531945440),
/*N:1024,i:148 */ FR2(+0.6152315905806268), FR2(+0.7883464276266062),
/*N:1024,i:148 */ FR2(-0.9142097557035307), FR2(+0.4052413140049899),
/*N:1024,i:149 */ FR2(-0.2548656596045145), FR2(+0.9669764710448521),
/*N:1024,i:149 */ FR2(+0.6103828062763095), FR2(+0.7921065773002124),
/*N:1024,i:149 */ FR2(-0.9215140393420418), FR2(+0.3883450466988266),
/*N:1024,i:150 */ FR2(-0.2667127574748983), FR2(+0.9637760657954398),
/*N:1024,i:150 */ FR2(+0.6055110414043256), FR2(+0.7958369046088835),
/*N:1024,i:150 */ FR2(-0.9285060804732155), FR2(+0.3713171939518377),
/*N:1024,i:151 */ FR2(-0.2785196893850530), FR2(+0.9604305194155659),
/*N:1024,i:151 */ FR2(+0.6006164793838690), FR2(+0.7995372691079050),
/*N:1024,i:151 */ FR2(-0.9351835099389476), FR2(+0.3541635254204904),
/*N:1024,i:152 */ FR2(-0.2902846772544622), FR2(+0.9569403357322089),
/*N:1024,i:152 */ FR2(+0.5956993044924335), FR2(+0.8032075314806448),
/*N:1024,i:152 */ FR2(-0.9415440651830207), FR2(+0.3368898533922203),
/*N:1024,i:153 */ FR2(-0.3020059493192281), FR2(+0.9533060403541939),
/*N:1024,i:153 */ FR2(+0.5907597018588743), FR2(+0.8068475535437992),
/*N:1024,i:153 */ FR2(-0.9475855910177411), FR2(+0.3195020308160158),
/*N:1024,i:154 */ FR2(-0.3136817403988914), FR2(+0.9495281805930367),
/*N:1024,i:154 */ FR2(+0.5857978574564389), FR2(+0.8104571982525948),
/*N:1024,i:154 */ FR2(-0.9533060403541939), FR2(+0.3020059493192280),
/*N:1024,i:155 */ FR2(-0.3253102921622629), FR2(+0.9456073253805214),
/*N:1024,i:155 */ FR2(+0.5808139580957645), FR2(+0.8140363297059483),
/*N:1024,i:155 */ FR2(-0.9587034748958715), FR2(+0.2844075372112721),
/*N:1024,i:156 */ FR2(-0.3368898533922199), FR2(+0.9415440651830208),
/*N:1024,i:156 */ FR2(+0.5758081914178453), FR2(+0.8175848131515837),
/*N:1024,i:156 */ FR2(-0.9637760657954398), FR2(+0.2667127574748985),
/*N:1024,i:157 */ FR2(-0.3484186802494344), FR2(+0.9373390119125750),
/*N:1024,i:157 */ FR2(+0.5707807458869674), FR2(+0.8211025149911047),
/*N:1024,i:157 */ FR2(-0.9685220942744174), FR2(+0.2489276057457201),
/*N:1024,i:158 */ FR2(-0.3598950365349882), FR2(+0.9329927988347389),
/*N:1024,i:158 */ FR2(+0.5657318107836132), FR2(+0.8245893027850253),
/*N:1024,i:158 */ FR2(-0.9729399522055601), FR2(+0.2310581082806713),
/*N:1024,i:159 */ FR2(-0.3713171939518375), FR2(+0.9285060804732156),
/*N:1024,i:159 */ FR2(+0.5606615761973360), FR2(+0.8280450452577558),
/*N:1024,i:159 */ FR2(-0.9770281426577544), FR2(+0.2131103199160914),
/*N:1024,i:160 */ FR2(-0.3826834323650897), FR2(+0.9238795325112867),
/*N:1024,i:160 */ FR2(+0.5555702330196023), FR2(+0.8314696123025452),
/*N:1024,i:160 */ FR2(-0.9807852804032304), FR2(+0.1950903220161286),
/*N:1024,i:161 */ FR2(-0.3939920400610480), FR2(+0.9191138516900578),
/*N:1024,i:161 */ FR2(+0.5504579729366048), FR2(+0.8348628749863800),
/*N:1024,i:161 */ FR2(-0.9842100923869290), FR2(+0.1770042204121489),
/*N:1024,i:162 */ FR2(-0.4052413140049898), FR2(+0.9142097557035307),
/*N:1024,i:162 */ FR2(+0.5453249884220465), FR2(+0.8382247055548380),
/*N:1024,i:162 */ FR2(-0.9873014181578584), FR2(+0.1588581433338615),
/*N:1024,i:163 */ FR2(-0.4164295600976370), FR2(+0.9091679830905225),
/*N:1024,i:163 */ FR2(+0.5401714727298930), FR2(+0.8415549774368983),
/*N:1024,i:163 */ FR2(-0.9900582102622970), FR2(+0.1406582393328495),
/*N:1024,i:164 */ FR2(-0.4275550934302819), FR2(+0.9039892931234435),
/*N:1024,i:164 */ FR2(+0.5349976198870973), FR2(+0.8448535652497070),
/*N:1024,i:164 */ FR2(-0.9924795345987100), FR2(+0.1224106751992164),
/*N:1024,i:165 */ FR2(-0.4386162385385274), FR2(+0.8986744656939539),
/*N:1024,i:165 */ FR2(+0.5298036246862948), FR2(+0.8481203448032971),
/*N:1024,i:165 */ FR2(-0.9945645707342554), FR2(+0.1041216338720546),
/*N:1024,i:166 */ FR2(-0.4496113296546067), FR2(+0.8932243011955152),
/*N:1024,i:166 */ FR2(+0.5245896826784688), FR2(+0.8513551931052652),
/*N:1024,i:166 */ FR2(-0.9963126121827780), FR2(+0.0857973123444402),
/*N:1024,i:167 */ FR2(-0.4605387109582401), FR2(+0.8876396204028539),
/*N:1024,i:167 */ FR2(+0.5193559901655895), FR2(+0.8545579883654005),
/*N:1024,i:167 */ FR2(-0.9977230666441916), FR2(+0.0674439195636642),
/*N:1024,i:168 */ FR2(-0.4713967368259977), FR2(+0.8819212643483551),
/*N:1024,i:168 */ FR2(+0.5141027441932217), FR2(+0.8577286100002721),
/*N:1024,i:168 */ FR2(-0.9987954562051724), FR2(+0.0490676743274180),
/*N:1024,i:169 */ FR2(-0.4821837720791227), FR2(+0.8760700941954066),
/*N:1024,i:169 */ FR2(+0.5088301425431070), FR2(+0.8608669386377673),
/*N:1024,i:169 */ FR2(-0.9995294175010931), FR2(+0.0306748031766369),
/*N:1024,i:170 */ FR2(-0.4928981922297840), FR2(+0.8700869911087115),
/*N:1024,i:170 */ FR2(+0.5035383837257176), FR2(+0.8639728561215867),
/*N:1024,i:170 */ FR2(-0.9999247018391445), FR2(+0.0122715382857200),
/*N:1024,i:171 */ FR2(-0.5035383837257175), FR2(+0.8639728561215868),
/*N:1024,i:171 */ FR2(+0.4982276669727819), FR2(+0.8670462455156927),
/*N:1024,i:171 */ FR2(-0.9999811752826011), FR2(-0.0061358846491546),
/*N:1024,i:172 */ FR2(-0.5141027441932217), FR2(+0.8577286100002721),
/*N:1024,i:172 */ FR2(+0.4928981922297841), FR2(+0.8700869911087114),
/*N:1024,i:172 */ FR2(-0.9996988186962043), FR2(-0.0245412285229121),
/*N:1024,i:173 */ FR2(-0.5245896826784687), FR2(+0.8513551931052652),
/*N:1024,i:173 */ FR2(+0.4875501601484361), FR2(+0.8730949784182901),
/*N:1024,i:173 */ FR2(-0.9990777277526454), FR2(-0.0429382569349408),
/*N:1024,i:174 */ FR2(-0.5349976198870970), FR2(+0.8448535652497072),
/*N:1024,i:174 */ FR2(+0.4821837720791228), FR2(+0.8760700941954066),
/*N:1024,i:174 */ FR2(-0.9981181129001492), FR2(-0.0613207363022082),
/*N:1024,i:175 */ FR2(-0.5453249884220462), FR2(+0.8382247055548382),
/*N:1024,i:175 */ FR2(+0.4767992300633223), FR2(+0.8790122264286334),
/*N:1024,i:175 */ FR2(-0.9968202992911658), FR2(-0.0796824379714299),
/*N:1024,i:176 */ FR2(-0.5555702330196020), FR2(+0.8314696123025455),
/*N:1024,i:176 */ FR2(+0.4713967368259978), FR2(+0.8819212643483549),
/*N:1024,i:176 */ FR2(-0.9951847266721969), FR2(-0.0980171403295606),
/*N:1024,i:177 */ FR2(-0.5657318107836132), FR2(+0.8245893027850252),
/*N:1024,i:177 */ FR2(+0.4659764957679661), FR2(+0.8847970984309378),
/*N:1024,i:177 */ FR2(-0.9932119492347946), FR2(-0.1163186309119045),
/*N:1024,i:178 */ FR2(-0.5758081914178453), FR2(+0.8175848131515837),
/*N:1024,i:178 */ FR2(+0.4605387109582400), FR2(+0.8876396204028539),
/*N:1024,i:178 */ FR2(-0.9909026354277800), FR2(-0.1345807085071261),
/*N:1024,i:179 */ FR2(-0.5857978574564389), FR2(+0.8104571982525948),
/*N:1024,i:179 */ FR2(+0.4550835871263438), FR2(+0.8904487232447579),
/*N:1024,i:179 */ FR2(-0.9882575677307495), FR2(-0.1527971852584434),
/*N:1024,i:180 */ FR2(-0.5956993044924334), FR2(+0.8032075314806449),
/*N:1024,i:180 */ FR2(+0.4496113296546066), FR2(+0.8932243011955153),
/*N:1024,i:180 */ FR2(-0.9852776423889413), FR2(-0.1709618887603010),
/*N:1024,i:181 */ FR2(-0.6055110414043254), FR2(+0.7958369046088836),
/*N:1024,i:181 */ FR2(+0.4441221445704293), FR2(+0.8959662497561851),
/*N:1024,i:181 */ FR2(-0.9819638691095552), FR2(-0.1890686641498061),
/*N:1024,i:182 */ FR2(-0.6152315905806267), FR2(+0.7883464276266063),
/*N:1024,i:182 */ FR2(+0.4386162385385277), FR2(+0.8986744656939538),
/*N:1024,i:182 */ FR2(-0.9783173707196277), FR2(-0.2071113761922186),
/*N:1024,i:183 */ FR2(-0.6248594881423862), FR2(+0.7807372285720946),
/*N:1024,i:183 */ FR2(+0.4330938188531520), FR2(+0.9013488470460220),
/*N:1024,i:183 */ FR2(-0.9743393827855759), FR2(-0.2250839113597926),
/*N:1024,i:184 */ FR2(-0.6343932841636454), FR2(+0.7730104533627371),
/*N:1024,i:184 */ FR2(+0.4275550934302822), FR2(+0.9039892931234433),
/*N:1024,i:184 */ FR2(-0.9700312531945440), FR2(-0.2429801799032638),
/*N:1024,i:185 */ FR2(-0.6438315428897913), FR2(+0.7651672656224591),
/*N:1024,i:185 */ FR2(+0.4220002707997998), FR2(+0.9065957045149153),
/*N:1024,i:185 */ FR2(-0.9653944416976894), FR2(-0.2607941179152756),
/*N:1024,i:186 */ FR2(-0.6531728429537765), FR2(+0.7572088465064847),
/*N:1024,i:186 */ FR2(+0.4164295600976373), FR2(+0.9091679830905223),
/*N:1024,i:186 */ FR2(-0.9604305194155659), FR2(-0.2785196893850529),
/*N:1024,i:187 */ FR2(-0.6624157775901719), FR2(+0.7491363945234593),
/*N:1024,i:187 */ FR2(+0.4108431710579039), FR2(+0.9117060320054299),
/*N:1024,i:187 */ FR2(-0.9551411683057708), FR2(-0.2961508882436238),
/*N:1024,i:188 */ FR2(-0.6715589548470184), FR2(+0.7409511253549590),
/*N:1024,i:188 */ FR2(+0.4052413140049899), FR2(+0.9142097557035307),
/*N:1024,i:188 */ FR2(-0.9495281805930368), FR2(-0.3136817403988912),
/*N:1024,i:189 */ FR2(-0.6806009977954530), FR2(+0.7326542716724128),
/*N:1024,i:189 */ FR2(+0.3996241998456468), FR2(+0.9166790599210427),
/*N:1024,i:189 */ FR2(-0.9435934581619604), FR2(-0.3311063057598763),
/*N:1024,i:190 */ FR2(-0.6895405447370669), FR2(+0.7242470829514669),
/*N:1024,i:190 */ FR2(+0.3939920400610481), FR2(+0.9191138516900578),
/*N:1024,i:190 */ FR2(-0.9373390119125750), FR2(-0.3484186802494346),
/*N:1024,i:191 */ FR2(-0.6983762494089728), FR2(+0.7157308252838187),
/*N:1024,i:191 */ FR2(+0.3883450466988263), FR2(+0.9215140393420419),
/*N:1024,i:191 */ FR2(-0.9307669610789838), FR2(-0.3656129978047736),
/*N:1024,i:192 */ FR2(-0.7071067811865475), FR2(+0.7071067811865476),
/*N:1024,i:192 */ FR2(+0.3826834323650898), FR2(+0.9238795325112867),
/*N:1024,i:192 */ FR2(-0.9238795325112869), FR2(-0.3826834323650897),
/*N:1024,i:193 */ FR2(-0.7157308252838186), FR2(+0.6983762494089729),
/*N:1024,i:193 */ FR2(+0.3770074102164183), FR2(+0.9262102421383113),
/*N:1024,i:193 */ FR2(-0.9166790599210427), FR2(-0.3996241998456468),
/*N:1024,i:194 */ FR2(-0.7242470829514668), FR2(+0.6895405447370671),
/*N:1024,i:194 */ FR2(+0.3713171939518376), FR2(+0.9285060804732155),
/*N:1024,i:194 */ FR2(-0.9091679830905225), FR2(-0.4164295600976369),
/*N:1024,i:195 */ FR2(-0.7326542716724127), FR2(+0.6806009977954532),
/*N:1024,i:195 */ FR2(+0.3656129978047740), FR2(+0.9307669610789837),
/*N:1024,i:195 */ FR2(-0.9013488470460220), FR2(-0.4330938188531519),
/*N:1024,i:196 */ FR2(-0.7409511253549589), FR2(+0.6715589548470186),
/*N:1024,i:196 */ FR2(+0.3598950365349883), FR2(+0.9329927988347389),
/*N:1024,i:196 */ FR2(-0.8932243011955153), FR2(-0.4496113296546067),
/*N:1024,i:197 */ FR2(-0.7491363945234592), FR2(+0.6624157775901720),
/*N:1024,i:197 */ FR2(+0.3541635254204905), FR2(+0.9351835099389475),
/*N:1024,i:197 */ FR2(-0.8847970984309379), FR2(-0.4659764957679660),
/*N:1024,i:198 */ FR2(-0.7572088465064846), FR2(+0.6531728429537766),
/*N:1024,i:198 */ FR2(+0.3484186802494345), FR2(+0.9373390119125750),
/*N:1024,i:198 */ FR2(-0.8760700941954066), FR2(-0.4821837720791227),
/*N:1024,i:199 */ FR2(-0.7651672656224590), FR2(+0.6438315428897914),
/*N:1024,i:199 */ FR2(+0.3426607173119944), FR2(+0.9394592236021899),
/*N:1024,i:199 */ FR2(-0.8670462455156929), FR2(-0.4982276669727815),
/*N:1024,i:200 */ FR2(-0.7730104533627370), FR2(+0.6343932841636455),
/*N:1024,i:200 */ FR2(+0.3368898533922201), FR2(+0.9415440651830208),
/*N:1024,i:200 */ FR2(-0.8577286100002721), FR2(-0.5141027441932216),
/*N:1024,i:201 */ FR2(-0.7807372285720945), FR2(+0.6248594881423863),
/*N:1024,i:201 */ FR2(+0.3311063057598764), FR2(+0.9435934581619604),
/*N:1024,i:201 */ FR2(-0.8481203448032972), FR2(-0.5298036246862946),
/*N:1024,i:202 */ FR2(-0.7883464276266062), FR2(+0.6152315905806269),
/*N:1024,i:202 */ FR2(+0.3253102921622630), FR2(+0.9456073253805213),
/*N:1024,i:202 */ FR2(-0.8382247055548382), FR2(-0.5453249884220461),
/*N:1024,i:203 */ FR2(-0.7958369046088835), FR2(+0.6055110414043257),
/*N:1024,i:203 */ FR2(+0.3195020308160158), FR2(+0.9475855910177411),
/*N:1024,i:203 */ FR2(-0.8280450452577558), FR2(-0.5606615761973359),
/*N:1024,i:204 */ FR2(-0.8032075314806448), FR2(+0.5956993044924335),
/*N:1024,i:204 */ FR2(+0.3136817403988916), FR2(+0.9495281805930367),
/*N:1024,i:204 */ FR2(-0.8175848131515837), FR2(-0.5758081914178453),
/*N:1024,i:205 */ FR2(-0.8104571982525947), FR2(+0.5857978574564390),
/*N:1024,i:205 */ FR2(+0.3078496400415350), FR2(+0.9514350209690083),
/*N:1024,i:205 */ FR2(-0.8068475535437995), FR2(-0.5907597018588739),
/*N:1024,i:206 */ FR2(-0.8175848131515836), FR2(+0.5758081914178455),
/*N:1024,i:206 */ FR2(+0.3020059493192282), FR2(+0.9533060403541938),
/*N:1024,i:206 */ FR2(-0.7958369046088836), FR2(-0.6055110414043254),
/*N:1024,i:207 */ FR2(-0.8245893027850251), FR2(+0.5657318107836135),
/*N:1024,i:207 */ FR2(+0.2961508882436240), FR2(+0.9551411683057707),
/*N:1024,i:207 */ FR2(-0.7845565971555752), FR2(-0.6200572117632892),
/*N:1024,i:208 */ FR2(-0.8314696123025454), FR2(+0.5555702330196022),
/*N:1024,i:208 */ FR2(+0.2902846772544623), FR2(+0.9569403357322089),
/*N:1024,i:208 */ FR2(-0.7730104533627371), FR2(-0.6343932841636453),
/*N:1024,i:209 */ FR2(-0.8382247055548381), FR2(+0.5453249884220464),
/*N:1024,i:209 */ FR2(+0.2844075372112718), FR2(+0.9587034748958716),
/*N:1024,i:209 */ FR2(-0.7612023854842619), FR2(-0.6485144010221123),
/*N:1024,i:210 */ FR2(-0.8448535652497071), FR2(+0.5349976198870972),
/*N:1024,i:210 */ FR2(+0.2785196893850531), FR2(+0.9604305194155658),
/*N:1024,i:210 */ FR2(-0.7491363945234593), FR2(-0.6624157775901718),
/*N:1024,i:211 */ FR2(-0.8513551931052652), FR2(+0.5245896826784690),
/*N:1024,i:211 */ FR2(+0.2726213554499490), FR2(+0.9621214042690416),
/*N:1024,i:211 */ FR2(-0.7368165688773700), FR2(-0.6760927035753158),
/*N:1024,i:212 */ FR2(-0.8577286100002720), FR2(+0.5141027441932218),
/*N:1024,i:212 */ FR2(+0.2667127574748984), FR2(+0.9637760657954398),
/*N:1024,i:212 */ FR2(-0.7242470829514670), FR2(-0.6895405447370668),
/*N:1024,i:213 */ FR2(-0.8639728561215867), FR2(+0.5035383837257177),
/*N:1024,i:213 */ FR2(+0.2607941179152756), FR2(+0.9653944416976894),
/*N:1024,i:213 */ FR2(-0.7114321957452167), FR2(-0.7027547444572251),
/*N:1024,i:214 */ FR2(-0.8700869911087114), FR2(+0.4928981922297842),
/*N:1024,i:214 */ FR2(+0.2548656596045146), FR2(+0.9669764710448521),
/*N:1024,i:214 */ FR2(-0.6983762494089730), FR2(-0.7157308252838185),
/*N:1024,i:215 */ FR2(-0.8760700941954065), FR2(+0.4821837720791229),
/*N:1024,i:215 */ FR2(+0.2489276057457203), FR2(+0.9685220942744173),
/*N:1024,i:215 */ FR2(-0.6850836677727004), FR2(-0.7284643904482252),
/*N:1024,i:216 */ FR2(-0.8819212643483549), FR2(+0.4713967368259979),
/*N:1024,i:216 */ FR2(+0.2429801799032640), FR2(+0.9700312531945440),
/*N:1024,i:216 */ FR2(-0.6715589548470187), FR2(-0.7409511253549589),
/*N:1024,i:217 */ FR2(-0.8876396204028538), FR2(+0.4605387109582402),
/*N:1024,i:217 */ FR2(+0.2370236059943673), FR2(+0.9715038909862518),
/*N:1024,i:217 */ FR2(-0.6578066932970788), FR2(-0.7531867990436124),
/*N:1024,i:218 */ FR2(-0.8932243011955152), FR2(+0.4496113296546069),
/*N:1024,i:218 */ FR2(+0.2310581082806713), FR2(+0.9729399522055601),
/*N:1024,i:218 */ FR2(-0.6438315428897915), FR2(-0.7651672656224590),
/*N:1024,i:219 */ FR2(-0.8986744656939539), FR2(+0.4386162385385276),
/*N:1024,i:219 */ FR2(+0.2250839113597928), FR2(+0.9743393827855759),
/*N:1024,i:219 */ FR2(-0.6296382389149269), FR2(-0.7768884656732326),
/*N:1024,i:220 */ FR2(-0.9039892931234433), FR2(+0.4275550934302820),
/*N:1024,i:220 */ FR2(+0.2191012401568698), FR2(+0.9757021300385286),
/*N:1024,i:220 */ FR2(-0.6152315905806273), FR2(-0.7883464276266059),
/*N:1024,i:221 */ FR2(-0.9091679830905224), FR2(+0.4164295600976372),
/*N:1024,i:221 */ FR2(+0.2131103199160914), FR2(+0.9770281426577544),
/*N:1024,i:221 */ FR2(-0.6006164793838693), FR2(-0.7995372691079048),
/*N:1024,i:222 */ FR2(-0.9142097557035307), FR2(+0.4052413140049899),
/*N:1024,i:222 */ FR2(+0.2071113761922186), FR2(+0.9783173707196277),
/*N:1024,i:222 */ FR2(-0.5857978574564391), FR2(-0.8104571982525947),
/*N:1024,i:223 */ FR2(-0.9191138516900578), FR2(+0.3939920400610482),
/*N:1024,i:223 */ FR2(+0.2011046348420920), FR2(+0.9795697656854405),
/*N:1024,i:223 */ FR2(-0.5707807458869674), FR2(-0.8211025149911047),
/*N:1024,i:224 */ FR2(-0.9238795325112867), FR2(+0.3826834323650899),
/*N:1024,i:224 */ FR2(+0.1950903220161283), FR2(+0.9807852804032304),
/*N:1024,i:224 */ FR2(-0.5555702330196022), FR2(-0.8314696123025452),
/*N:1024,i:225 */ FR2(-0.9285060804732155), FR2(+0.3713171939518377),
/*N:1024,i:225 */ FR2(+0.1890686641498063), FR2(+0.9819638691095552),
/*N:1024,i:225 */ FR2(-0.5401714727298927), FR2(-0.8415549774368986),
/*N:1024,i:226 */ FR2(-0.9329927988347389), FR2(+0.3598950365349883),
/*N:1024,i:226 */ FR2(+0.1830398879551411), FR2(+0.9831054874312163),
/*N:1024,i:226 */ FR2(-0.5245896826784694), FR2(-0.8513551931052649),
/*N:1024,i:227 */ FR2(-0.9373390119125749), FR2(+0.3484186802494348),
/*N:1024,i:227 */ FR2(+0.1770042204121489), FR2(+0.9842100923869290),
/*N:1024,i:227 */ FR2(-0.5088301425431073), FR2(-0.8608669386377671),
/*N:1024,i:228 */ FR2(-0.9415440651830207), FR2(+0.3368898533922203),
/*N:1024,i:228 */ FR2(+0.1709618887603014), FR2(+0.9852776423889412),
/*N:1024,i:228 */ FR2(-0.4928981922297842), FR2(-0.8700869911087114),
/*N:1024,i:229 */ FR2(-0.9456073253805212), FR2(+0.3253102921622633),
/*N:1024,i:229 */ FR2(+0.1649131204899701), FR2(+0.9863080972445987),
/*N:1024,i:229 */ FR2(-0.4767992300633221), FR2(-0.8790122264286334),
/*N:1024,i:230 */ FR2(-0.9495281805930367), FR2(+0.3136817403988914),
/*N:1024,i:230 */ FR2(+0.1588581433338614), FR2(+0.9873014181578584),
/*N:1024,i:230 */ FR2(-0.4605387109582399), FR2(-0.8876396204028541),
/*N:1024,i:231 */ FR2(-0.9533060403541939), FR2(+0.3020059493192280),
/*N:1024,i:231 */ FR2(+0.1527971852584434), FR2(+0.9882575677307495),
/*N:1024,i:231 */ FR2(-0.4441221445704298), FR2(-0.8959662497561849),
/*N:1024,i:232 */ FR2(-0.9569403357322088), FR2(+0.2902846772544624),
/*N:1024,i:232 */ FR2(+0.1467304744553618), FR2(+0.9891765099647810),
/*N:1024,i:232 */ FR2(-0.4275550934302825), FR2(-0.9039892931234431),
/*N:1024,i:233 */ FR2(-0.9604305194155658), FR2(+0.2785196893850532),
/*N:1024,i:233 */ FR2(+0.1406582393328492), FR2(+0.9900582102622971),
/*N:1024,i:233 */ FR2(-0.4108431710579042), FR2(-0.9117060320054298),
/*N:1024,i:234 */ FR2(-0.9637760657954398), FR2(+0.2667127574748985),
/*N:1024,i:234 */ FR2(+0.1345807085071262), FR2(+0.9909026354277800),
/*N:1024,i:234 */ FR2(-0.3939920400610482), FR2(-0.9191138516900577),
/*N:1024,i:235 */ FR2(-0.9669764710448521), FR2(+0.2548656596045147),
/*N:1024,i:235 */ FR2(+0.1284981107937932), FR2(+0.9917097536690995),
/*N:1024,i:235 */ FR2(-0.3770074102164182), FR2(-0.9262102421383114),
/*N:1024,i:236 */ FR2(-0.9700312531945440), FR2(+0.2429801799032641),
/*N:1024,i:236 */ FR2(+0.1224106751992163), FR2(+0.9924795345987100),
/*N:1024,i:236 */ FR2(-0.3598950365349879), FR2(-0.9329927988347390),
/*N:1024,i:237 */ FR2(-0.9729399522055601), FR2(+0.2310581082806713),
/*N:1024,i:237 */ FR2(+0.1163186309119049), FR2(+0.9932119492347945),
/*N:1024,i:237 */ FR2(-0.3426607173119949), FR2(-0.9394592236021897),
/*N:1024,i:238 */ FR2(-0.9757021300385285), FR2(+0.2191012401568701),
/*N:1024,i:238 */ FR2(+0.1102222072938832), FR2(+0.9939069700023561),
/*N:1024,i:238 */ FR2(-0.3253102921622633), FR2(-0.9456073253805212),
/*N:1024,i:239 */ FR2(-0.9783173707196275), FR2(+0.2071113761922188),
/*N:1024,i:239 */ FR2(+0.1041216338720547), FR2(+0.9945645707342554),
/*N:1024,i:239 */ FR2(-0.3078496400415351), FR2(-0.9514350209690083),
/*N:1024,i:240 */ FR2(-0.9807852804032304), FR2(+0.1950903220161286),
/*N:1024,i:240 */ FR2(+0.0980171403295608), FR2(+0.9951847266721968),
/*N:1024,i:240 */ FR2(-0.2902846772544624), FR2(-0.9569403357322088),
/*N:1024,i:241 */ FR2(-0.9831054874312163), FR2(+0.1830398879551409),
/*N:1024,i:241 */ FR2(+0.0919089564971327), FR2(+0.9957674144676598),
/*N:1024,i:241 */ FR2(-0.2726213554499489), FR2(-0.9621214042690416),
/*N:1024,i:242 */ FR2(-0.9852776423889412), FR2(+0.1709618887603012),
/*N:1024,i:242 */ FR2(+0.0857973123444399), FR2(+0.9963126121827780),
/*N:1024,i:242 */ FR2(-0.2548656596045144), FR2(-0.9669764710448522),
/*N:1024,i:243 */ FR2(-0.9873014181578584), FR2(+0.1588581433338615),
/*N:1024,i:243 */ FR2(+0.0796824379714301), FR2(+0.9968202992911657),
/*N:1024,i:243 */ FR2(-0.2370236059943677), FR2(-0.9715038909862517),
/*N:1024,i:244 */ FR2(-0.9891765099647810), FR2(+0.1467304744553618),
/*N:1024,i:244 */ FR2(+0.0735645635996675), FR2(+0.9972904566786902),
/*N:1024,i:244 */ FR2(-0.2191012401568701), FR2(-0.9757021300385285),
/*N:1024,i:245 */ FR2(-0.9909026354277800), FR2(+0.1345807085071263),
/*N:1024,i:245 */ FR2(+0.0674439195636641), FR2(+0.9977230666441916),
/*N:1024,i:245 */ FR2(-0.2011046348420921), FR2(-0.9795697656854405),
/*N:1024,i:246 */ FR2(-0.9924795345987100), FR2(+0.1224106751992164),
/*N:1024,i:246 */ FR2(+0.0613207363022086), FR2(+0.9981181129001492),
/*N:1024,i:246 */ FR2(-0.1830398879551410), FR2(-0.9831054874312163),
/*N:1024,i:247 */ FR2(-0.9939069700023561), FR2(+0.1102222072938832),
/*N:1024,i:247 */ FR2(+0.0551952443496900), FR2(+0.9984755805732948),
/*N:1024,i:247 */ FR2(-0.1649131204899698), FR2(-0.9863080972445987),
/*N:1024,i:248 */ FR2(-0.9951847266721968), FR2(+0.0980171403295608),
/*N:1024,i:248 */ FR2(+0.0490676743274181), FR2(+0.9987954562051724),
/*N:1024,i:248 */ FR2(-0.1467304744553623), FR2(-0.9891765099647809),
/*N:1024,i:249 */ FR2(-0.9963126121827780), FR2(+0.0857973123444402),
/*N:1024,i:249 */ FR2(+0.0429382569349410), FR2(+0.9990777277526454),
/*N:1024,i:249 */ FR2(-0.1284981107937936), FR2(-0.9917097536690995),
/*N:1024,i:250 */ FR2(-0.9972904566786902), FR2(+0.0735645635996677),
/*N:1024,i:250 */ FR2(+0.0368072229413590), FR2(+0.9993223845883495),
/*N:1024,i:250 */ FR2(-0.1102222072938833), FR2(-0.9939069700023561),
/*N:1024,i:251 */ FR2(-0.9981181129001492), FR2(+0.0613207363022085),
/*N:1024,i:251 */ FR2(+0.0306748031766366), FR2(+0.9995294175010931),
/*N:1024,i:251 */ FR2(-0.0919089564971328), FR2(-0.9957674144676598),
/*N:1024,i:252 */ FR2(-0.9987954562051724), FR2(+0.0490676743274180),
/*N:1024,i:252 */ FR2(+0.0245412285229123), FR2(+0.9996988186962043),
/*N:1024,i:252 */ FR2(-0.0735645635996674), FR2(-0.9972904566786902),
/*N:1024,i:253 */ FR2(-0.9993223845883495), FR2(+0.0368072229413588),
/*N:1024,i:253 */ FR2(+0.0184067299058048), FR2(+0.9998305817958234),
/*N:1024,i:253 */ FR2(-0.0551952443496897), FR2(-0.9984755805732948),
/*N:1024,i:254 */ FR2(-0.9996988186962043), FR2(+0.0245412285229123),
/*N:1024,i:254 */ FR2(+0.0122715382857199), FR2(+0.9999247018391445),
/*N:1024,i:254 */ FR2(-0.0368072229413593), FR2(-0.9993223845883494),
/*N:1024,i:255 */ FR2(-0.9999247018391445), FR2(+0.0122715382857200),
/*N:1024,i:255 */ FR2(+0.0061358846491545), FR2(+0.9999811752826011),
/*N:1024,i:255 */ FR2(-0.0184067299058052), FR2(-0.9998305817958234)
};

#endif /* __FFT_TWIDDLES_H__ */


#define MULT0(a,b)   ((long)(a)*(b))

#define COMPLEX_MUL(a,b,c,d)\
    do{ vcp_extend x,y; x = MULT0(a,c)-MULT0(b,d); y = MULT0(c,b)+MULT0(a,d); a = (x + (1<<14))>>15; b = (y+(1<<14))>>15; }while(0)


#define FROUND 0
#define SHIFT_AMOUNT    

void
fft_radix_42(struct complex_s *data, int size, int scale)
{
    struct complex_s *x = data;
    unsigned int i, ap, N;
    struct complex_s32 x0,x1,x2, t1,t2,t3,t4,t;
    vcp_inter wre,wim;
    vcp_inter *tw1;


    if(scale)
        scale = 2;

    ap = 1024/size;
    N = size;
    tw1 = fft_twiddles_1024;

    do                // over N
    {
        //N >>= 2;
        i = 0;
        do            // over i
        {
                x0.re = x->re;                // x[0]
                x0.im = x->im;
                x += N / 2 * 1;
                x2.re = x->re;                // x[N/2]
                x2.im = x->im;
                x -= N / 4 * 1;

                t1.re = x0.re + x2.re;
                t1.im = x0.im + x2.im;
                t2.re = x0.re - x2.re;
                t2.im = x0.im - x2.im;

                x0.re = x->re;                // x[N/4]
                x0.im = x->im;
                x += N / 2 * 1;
                x2.re = x->re;                // x[3N/4]
                x2.im = x->im;
                x -= 3 * N / 4 * 1;

                t3.re = x0.re + x2.re;
                t3.im = x0.im + x2.im;
                t4.re = x0.re - x2.re;
                t4.im = x0.im - x2.im;

                // update x_{0+i}
                t.re = (t1.re + t3.re + FROUND) >> scale;
                t.im = (t1.im + t3.im + FROUND) >> scale;
                x->re = t.re;
                x->im = t.im;
                x += N / 4 * 1;
                // x_{0+i} updated

                // update x_{N/4+i}
                wre = *tw1++;
                wim = *tw1++;

                t.re = (t1.re - t3.re + FROUND) >> scale;
                t.im = (t1.im - t3.im + FROUND) >> scale;
                
                COMPLEX_MUL(t.re,t.im, wre, wim);
                x->re = t.re;
                x->im = t.im;
                x += N / 4 * 1;
                //  x_{N/4+i} updated

                // update x_{N/2+i}
                wre = *tw1++;
                wim = *tw1++;

                t.re = (t2.re - t4.im + FROUND) >> scale;
                t.im = (t2.im + t4.re + FROUND) >> scale;
                
                COMPLEX_MUL(t.re,t.im, wre, wim);
                x->re = t.re;
                x->im = t.im;
                x += N / 4 * 1;
                // x_{N/2+i} updated

                // update x_{3N/4+i}
                wre = *tw1++;
                wim = *tw1++;

                t.re = (t2.re + t4.im + FROUND) >> scale;
                t.im = (t2.im - t4.re + FROUND) >> scale;
                
                COMPLEX_MUL(t.re,t.im, wre, wim);
                x->re = t.re;
                x->im = t.im;
                x += N / 4 * 1;
                // x_{3N/4+i} updated
                
                x -= N * 1 - 1;
                tw1 += (ap - 1) * 4 + (ap - 1) * 2;

                i++;
                if( (i & (N / 4 * 1 - 1)) == 0)
                {
                    x += 3 * N / 4 * 1;        // next quadruple of input data
                    tw1 -= 256 * 2 * 3;    // length of table * 2 * 3 (len * {sin, cos} * {3 twiddles per butterfly})
                }
        } while (i < size/4);

        x -= size;    // to the beginning                                                        
        ap <<= 2;    // modify stride

        N >>= 2;
    } while (N > 4);


    if ( N == 4 )    // FIXME: N == 4
    {
        for (i = 0; i < size; i+= 4)
        {
            x0.re = x[0].re;
            x0.im = x[0].im;
            x2.re = x[2].re;
            x2.im = x[2].im;

            t1.re = x0.re + x2.re;
            t1.im = x0.im + x2.im;
            t2.re = x0.re - x2.re;
            t2.im = x0.im - x2.im;

            x0.re = x[1].re;
            x0.im = x[1].im;
            x2.re = x[3].re;
            x2.im = x[3].im;

            t3.re = x0.re + x2.re;
            t3.im = x0.im + x2.im;
            t4.re = x0.re - x2.re;
            t4.im = x0.im - x2.im;

            // update x_{0+i}
            t.re = t1.re + t3.re;
            t.im = t1.im + t3.im;
            x[0].re = (t.re+FROUND)>>scale;
            x[0].im = (t.im+FROUND)>>scale;
            // x_{0+i} updated

            // update x_{N/4+i}
            t.re = t1.re - t3.re;
            t.im = t1.im - t3.im;
            x[1].re = (t.re+FROUND)>>scale;
            x[1].im = (t.im+FROUND)>>scale;
            //  x_{N/4+i} updated

            // update x_{N/2}
            t.re = t2.re - t4.im;
            t.im = t2.im + t4.re;
            x[2].re = (t.re+FROUND)>>scale;
            x[2].im = (t.im+FROUND)>>scale;
            // x_{N/2} updated

            // update x_{3N/4+i}
            t.re = t2.re + t4.im;
            t.im = t2.im - t4.re;
            x[3].re = (t.re+FROUND)>>scale;
            x[3].im = (t.im+FROUND)>>scale;
            // x_{3N/4+i} updated
            x += 4;
        }
    }
    else
    {
        if(scale)
            scale = 1;
        // trivial butts at the end
        for (i = 0; i<size; i+= 2)
        {
            x0.re = x[0].re;
            x0.im = x[0].im;
            x1.re = x[1].re;
            x1.im = x[1].im;

            t.re = x0.re + x1.re;
            t.im = x0.im + x1.im;
            x[0].re = t.re>>scale;
            x[0].im = t.im>>scale;

            t.re = x0.re - x1.re;
            t.im = x0.im - x1.im;
            x[1].re = t.re>>scale;
            x[1].im = t.im>>scale;
            x += 2;
        }
    }

    x -= size;

    data_swap(x,size);
}
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 18 2011, 16:48
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это

Вроде нареканий не было и чистый си, хоть куда лепится sm.gif И очень экономно подходит к используемой памяти, как RAM так и ROM.
Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 18 2011, 17:36
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Ruslan1 @ Mar 18 2011, 19:48) *
еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это

Вроде нареканий не было и чистый си, хоть куда лепится sm.gif И очень экономно подходит к используемой памяти, как RAM так и ROM.
Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты.


А вот за это бальшуууууущее спасибо!
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Aug 22 2013, 14:14
Сообщение #13


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

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Цитата(Ruslan1 @ Mar 18 2011, 20:48) *
еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это

Вроде нареканий не было и чистый си, хоть куда лепится sm.gif И очень экономно подходит к используемой памяти, как RAM так и ROM.
Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты.


Скажите, а можно этот код переделать на 4096 точек (там сейчас 1024) ? Ответьте, пожалуйста. Очень надо.
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 22 2013, 14:35
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



На ПЛИС БПФ 8192 точки 18 бит знаковое сносно дает около 100 дБ. Для обработки сигналов с большим динамическим диапазоном уже придется использовать большую разрядность.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Aug 23 2013, 07:55
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(MSP430F @ Aug 22 2013, 18:14) *
Скажите, а можно этот код переделать на 4096 точек (там сейчас 1024) ? Ответьте, пожалуйста. Очень надо.

конечно можно! За отдельную плату готов предоставить готовую реализацию на 4096 точек cool.gif

P.S. Протестировано на MSP430F47197 в проекте счётчика электроэнергии.

Сообщение отредактировал Zelepuk - Aug 23 2013, 07:57
Go to the top of the page
 
+Quote Post

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

 


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


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