Zelepuk 0 6 марта, 2011 Опубликовано 6 марта, 2011 (изменено) · Жалоба Существует рабочий алгоритм(несколько фильтров и БПФ). Код работает на плавучке на обычном десктопе. Стоит задача портировать алгоритм на процессор с фиксированой точкой. Отсчёты, над которыми производятся преобразования, поступают в формате 1.15. Понимаю что тупое преобразование float в int ни к чему хорошему не приведёт. Тогда стоит вопрос: какие требования к оперрациям нужно предъявить? Коэффиценты фильтров и БПФ должны быть тоже в 1.15? Как производить умножение, деление, суммирование и вычитание, чтобы избегать переполнений? (лучше если примеры коротенькие на С будут) Используется 32-битный процессор на ARM9E ядре Заранее спасибо. Изменено 6 марта, 2011 пользователем Zelepuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 6 марта, 2011 Опубликовано 6 марта, 2011 · Жалоба Это из модели симулинка?Посмотрите здесь,очень подробно всё расказано. видео Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба Познавательное видео. Но хотелось бы писать всё самуму руками. А тут получается вставил блок, нажал кнопочку и всё.... Причём код получается не очень читаемый... Интересуют принципы. Иными словами нужно перевести все float в программе в int (в крайнем случае long). Какие могут быть общие рекомендации для таких задач? Как обезопасить код от переполнений при переходе на "фиксированую точку"? Данные, над которыми осущесвляются операции поступают в дополнительном коде формата 1.15. Значит ли это что коэффиценты всех преобразований должны быть в таком же формате? Микроконтроллер 32 битный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 марта, 2011 Опубликовано 7 марта, 2011 (изменено) · Жалоба Познавательное видео. Но хотелось бы писать всё самуму руками. А тут получается вставил блок, нажал кнопочку и всё.... Причём код получается не очень читаемый... Интересуют принципы. Иными словами нужно перевести все 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. Там можно указать сколько бить под дробную часть, сколько под целую и много чего еще. Изменено 7 марта, 2011 пользователем alexPec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба Иными словами нужно перевести все float в программе в int (в крайнем случае long). Какие могут быть общие рекомендации для таких задач? Как обезопасить код от переполнений при переходе на "фиксированую точку"? Данные, над которыми осущесвляются операции поступают в дополнительном коде формата 1.15. Значит ли это что коэффиценты всех преобразований должны быть в таком же формате? Микроконтроллер 32 битный. 1. float->int: q_1_15 = (int)(flt * 32767); код не обезопасить - или насыщение делать, или увеличивать разрядность. 2. и да и нет. Зависит от реализации умножения и формата всего остального. я где-то постил здесь реализацию БПФ. кстати, написанную специально оптимально для АРМа (на Це. ассемблерная - за пиво :)) и, кстати, данные с коэффициентами в формате 1.15 :) Все целочисленное. Поиск должен помочь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 7 марта, 2011 Опубликовано 7 марта, 2011 (изменено) · Жалоба Переполнение по-моему при такой задаче только аналитически оценить. Ну или попроще: сделать модель в матлабе, подать туда реальные даннные, посмотреть значения, умножить их на 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. Что с ним надо сделать чтобы в дальнейшем переполниий избежать. Иначе гвооря интересуют "трюки целочисленных вычислений на С" На ассемблере у меня реализация БПФ есть для моего проца. Хлчется вкуритсь "трюки" на С чтобы всё что угодно писать... (КИХ, БИХ фильтрацию...) Изменено 7 марта, 2011 пользователем Zelepuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба когда мы перемножаем например два числа в формате 1.15, то получаем число в формате 2.30. Что с ним надо сделать чтобы в дальнейшем переполниий избежать. А что с обычными числами делают, то и этими. Если вы уверены, что после умножения не будет переполнения - отбрасываете старший бит, если не уверены - наращивать разрядность; если вам не нужна точность 30 бит после умножения - отбрасываете младшие 15 (или округляете). Т.е если не будет переполнения и нужна точность 15 бит - отбрасываете старший и 15 младших бит и получаете результат в таком же формате. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба 1. float->int: q_1_15 = (int)(flt * 32767); код не обезопасить - или насыщение делать, или увеличивать разрядность. 2. и да и нет. Зависит от реализации умножения и формата всего остального. я где-то постил здесь реализацию БПФ. кстати, написанную специально оптимально для АРМа (на Це. ассемблерная - за пиво :)) и, кстати, данные с коэффициентами в формате 1.15 :) Все целочисленное. Поиск должен помочь. Никак не могу найти вашу реализацию. Может дадите ссылку... интересует именно реализация на Си. Посмотреть принципы хочу... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PetrovichKR 0 8 марта, 2011 Опубликовано 8 марта, 2011 (изменено) · Жалоба Хлчется вкуритсь "трюки" на С чтобы всё что угодно писать... (КИХ, БИХ фильтрацию...) Реализация КИХ-фильтрации на архитектуре 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; } Конкретно в цифровой фильтрации, исключение переполнений достигается путем масштабирования. Насчет БПФ не знаю. Изменено 8 марта, 2011 пользователем PetrovichKR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба Никак не могу найти вашу реализацию. Может дадите ссылку... интересует именно реализация на Си. Посмотреть принципы хочу... :rolleyes: да, тоже не могу найти... странно... ну ладно, вот код - #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); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 18 марта, 2011 Опубликовано 18 марта, 2011 · Жалоба еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это Вроде нареканий не было и чистый си, хоть куда лепится :) И очень экономно подходит к используемой памяти, как RAM так и ROM. Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 18 марта, 2011 Опубликовано 18 марта, 2011 · Жалоба еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это Вроде нареканий не было и чистый си, хоть куда лепится :) И очень экономно подходит к используемой памяти, как RAM так и ROM. Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты. А вот за это бальшуууууущее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MSP430F 0 22 августа, 2013 Опубликовано 22 августа, 2013 · Жалоба еще может интересно будет, насчет целочисленной реализации БПФ посмотрите вот это Вроде нареканий не было и чистый си, хоть куда лепится :) И очень экономно подходит к используемой памяти, как RAM так и ROM. Используются 16-битные знаковые числа. Очень удобно напрямую данные с АЦП подсовывать, ну или после нормирования, чтобы максимально использовать все биты. Скажите, а можно этот код переделать на 4096 точек (там сейчас 1024) ? Ответьте, пожалуйста. Очень надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 22 августа, 2013 Опубликовано 22 августа, 2013 · Жалоба На ПЛИС БПФ 8192 точки 18 бит знаковое сносно дает около 100 дБ. Для обработки сигналов с большим динамическим диапазоном уже придется использовать большую разрядность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zelepuk 0 23 августа, 2013 Опубликовано 23 августа, 2013 (изменено) · Жалоба Скажите, а можно этот код переделать на 4096 точек (там сейчас 1024) ? Ответьте, пожалуйста. Очень надо. конечно можно! За отдельную плату готов предоставить готовую реализацию на 4096 точек B) P.S. Протестировано на MSP430F47197 в проекте счётчика электроэнергии. Изменено 23 августа, 2013 пользователем Zelepuk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться