Голос изменен

Racemaniac
Пт 10 июня 2016 г., 18:09
Как я уже сказал в проекте 10 $ -O-Scope, я позаимствовал часть его кода, чтобы сделать забавный небольшой проект

Я читаю, что вы можете изменить высоту голоса, отбирая звук в круговой буфер, а затем читать из этого буфера с другой скоростью, поэтому нет необходимости в преобразовании Фурье и сложной математике.
Поэтому я позаимствовал код DMA ADC из проекта Scope (немного изменил его для этой цели) и подключил ЦАП MP4725 к Maple Mini, и провел несколько забавных тестирования этого маленького трюка :)

Как его подключить (на Maple Mini):
I2C Port 1 получает DAC MP4725
Пестонал 3: аналоговый вход для микрофона
Священник 4: аналоговый вход для потенциометра, который изменит шаг

Как это работает:
Я изменил код DMA этого проекта на
- образец медленнее (около 35 кГц)
- Образец 2 контакты одновременно iso 1 PIN
- запустить в круговом режиме
- Вставьте только данные о выборочном выводе звука в память (поэтому я отбираю 16 бит через DMA, даже если 2 канала вместе пишут все 32 бита регистра данных). Я читаю другую булавку прямо из DataRegister, когда мне это нужно.

Воспроизведение
- Использует I2C ClockStretching для переменной скорости отбора проб
- пытается сгладить клики (экспериментируйте с ним, кажется, работает довольно хорошо)

Не стесняйтесь экспериментировать с этим забавным маленьким проектом :)
И дайте мне знать, если вы найдете лучшие настройки для размера буфера & Нажмите на удаление

Первое, что можно попробовать, - это более высокая скорость отбора проб, вы сможете подтолкнуть ЦАП до 60 кГц с помощью этого кода, и скорость отбора проб для микрофона может, естественно, также может быть намного быстрее :).
Также лучше использовать таймер для отправки образцов :), Но я просто быстро написал это с задержкой :).

Также весело попробовать, запрограммируйте некоторые специальные эффекты на это:
- Может быть, какое -то эхо?
- Я прочитал, что вокал далека создается путем умножения звукового сигнала на синусоидаю (я думаю, 100 Гц или что -то в этом роде)
- Не стесняйтесь добавлять идеи
#include #include #include #include #define ADC_CR1_SIMULTANEOUS 0x60000 // simultaneous mode DUAL MODE bits 19-16 #define BufferSize 2048 uint16_t bufferPos = 0; const int8_t analogInPin = PB0; const int8_t analogInPin2 = PA7; uint16_t dataBuffer[BufferSize]; const uint16_t clickTreshold = 100; uint16_t lastSample = 2048; uint16_t* analog2 = (uint16_t*)&(ADC1->regs->DR) + 1; int modulationDelay = 40; int wait = 0; void i2c_str_InitPort(i2c_dev *device, uint8_t divider); void i2c_str_StartSending(i2c_dev *device, uint8_t address); void i2c_str_sendBytes(i2c_dev *device, uint8_t data, uint8_t data2); void i2c_str_ReleasePort(i2c_dev *device); void i2c_str_StopSending(i2c_dev *device); #define I2C_STRETCH_SB_TIMEOUT 10000 //how many times we will check the status registers to see if the device is starting #define I2C_STRETCH_DIV_400KHZ 30 #define I2C_STRETCH_DIV_600KHZ 20 #define I2C_STRETCH_DIV_800KHZ 15 #define I2C_STRETCH_DIV_1200KHZ 10 void setup() { Serial.begin(); pinMode(4, INPUT_ANALOG); setADC(); startSampling (); i2c_str_InitPort(I2C1, I2C_STRETCH_DIV_600KHZ); i2c_str_StartSending(I2C1, 0x60); } void loop() { uint16_t sample = dataBuffer[bufferPos]; if((uint16_t)(sample - lastSample) > clickTreshold && (uint16_t)(lastSample - sample) > clickTreshold) { if(sample > lastSample) sample = lastSample + clickTreshold; else sample = lastSample - clickTreshold; } i2c_str_sendBytes(I2C1, (uint8_t)(sample>>8), sample & 255); bufferPos = (++bufferPos)%BufferSize; lastSample = sample; delayMicroseconds(20 + (*analog2>>7)); } void startSampling () { dma_init(DMA1); adc_dma_enable(ADC1); dma_setup_transfer(DMA1, DMA_CH1, &ADC1->regs->DR, DMA_SIZE_16BITS, dataBuffer, DMA_SIZE_16BITS, (DMA_MINC_MODE | DMA_CIRC_MODE));// Receive buffer DMA dma_set_num_transfers(DMA1, DMA_CH1, BufferSize); dma_enable(DMA1, DMA_CH1); } void setADC () { // const adc_dev *dev = PIN_MAP[analogInPin].adc_device; int pinMapADCin = PIN_MAP[analogInPin].adc_channel; int pinMapADCin2 = PIN_MAP[analogInPin2].adc_channel; adc_set_prescaler(ADC_PRE_PCLK2_DIV_8); adc_set_sample_rate(ADC1, ADC_SMPR_239_5); adc_set_sample_rate(ADC2, ADC_SMPR_239_5); // adc_reg_map *regs = dev->regs; adc_set_reg_seqlen(ADC1, 1); ADC1->regs->SQR3 = pinMapADCin; ADC1->regs->CR2 |= ADC_CR2_CONT; // | ADC_CR2_DMA; // Set continuous mode and DMA ADC1->regs->CR1 |= ADC_CR1_SIMULTANEOUS; ADC1->regs->CR2 |= ADC_CR2_SWSTART; ADC2->regs->CR2 |= ADC_CR2_CONT; // ADC 2 continuos ADC2->regs->SQR3 = pinMapADCin2; } void adc_dma_enable(const adc_dev * dev) { bb_peri_set_bit(&dev->regs->CR2, ADC_CR2_DMA_BIT, 1); } void adc_dma_disable(const adc_dev * dev) { bb_peri_set_bit(&dev->regs->CR2, ADC_CR2_DMA_BIT, 0); } static void (*i2c_str_old_error_handler)(i2c_dev *dev); void i2c_str_InitPort(i2c_dev *device, uint8_t divider) { i2c_peripheral_disable(device); i2c_bus_reset(device); i2c_init(device);//initialize it i2c_config_gpios(device);//configure the gpios device->regs->CR2 = I2C_CR2_ITERREN | 36; //dma enabled, peripheral frequency is 36Mhz device->regs->CCR = I2C_CCR_FS | divider; //default 30 device->regs->TRISE = 11; } void i2c_str_ReleasePort(i2c_dev *device) { i2c_str_StopSending(device); } void i2c_str_StartSending(i2c_dev *device, uint8_t address) { i2c_peripheral_enable(device);//enable the port i2c_start_condition(device);//set the start condition uint32_t sr1 = device->regs->SR1; uint32_t sr2 = device->regs->SR2; uint16_t wait = 0; while(!(sr1&I2C_SR1_SB)) { if(wait++ > I2C_STRETCH_SB_TIMEOUT) { i2c_peripheral_disable(device); return; } sr1 = device->regs->SR1; sr2 = device->regs->SR2; } i2c_write(device, address<<1);//write the address of the device you want to contact (shifted 1 to the left) } void i2c_str_StopSending(i2c_dev *device) { i2c_stop_condition(device); i2c_peripheral_disable(device); } bool i2c_str_IsSending(i2c_dev *device) { return !(device->regs->SR1 & I2C_SR1_TXE); } bool i2c_str_IsError(i2c_dev *device) { return device->regs->SR1 & (I2C_SR1_BERR | I2C_SR1_ARLO | I2C_SR1_AF | I2C_SR1_PECERR | I2C_SR1_TIMEOUT); } bool i2c_str_PortEnabled(i2c_dev *device) { return device->regs->CR1 & I2C_CR1_PE; } void i2c_str_sendByte(i2c_dev *device, uint8_t data) { uint32_t sr1 = device->regs->SR1; uint32_t sr2 = device->regs->SR2; if(sr1&(I2C_SR1_BTF | I2C_SR1_TXE | I2C_SR1_ADDR)) { i2c_write(device, data); } } void i2c_str_sendBytes(i2c_dev *device, uint8_t data, uint8_t data2) { uint32_t sr1 = device->regs->SR1; uint32_t sr2 = device->regs->SR2; if(sr1&(I2C_SR1_BTF | I2C_SR1_ADDR)) { i2c_write(device, data); i2c_write(device, data2); } }

Ахулл
SAT 11 июня 2016 г. 2:08
Мне нужно играть. Я могу адаптироваться к одной из плат STM32F103, которые у меня есть с встроенным ЦАП, или найти свою существующую плату ЦАП (в зависимости от того, что выходит из беспорядка) сначала). STM32 как Вокадер Похоже на веселый проект. Уничтожить.. уничтожить... Или, может быть, прикосновение цилонового голоса от Battle Star Galactica. Принести бессердечных роботов.



Вы можете получить трещину на цифровом кольцевая модуляция тоже, я думаю, именно так синтезируются далеки.

Rogerclark
SAT 11 июня 2016 г., 7:51
У меня есть несколько досок с F103R и F103V, которые встроены в ЦАП. Таким образом, должно быть возможно непосредственно, без использования внешнего оборудования

Я подозреваю, что большое ограничение - RAM, как 20 тыс. На F103C (и даже 64K на F103V и т. Д.), Не даст вам очень долгого буфера задержки для реализации таких вещей, как эхо.

Проект FFT в другом потоке может создать некоторые интересные выходные аудио, если звук был реконструирован из FFT. Однако я думаю, что скорость БПФ будет медленной, чтобы сделать его пригодным для изменения голоса и т. Д., Хотя я полагаю, что это может создать некоторые интересные эффекты

(Хотя я точно не уверен, как вы реконструируете форму волны на основе БПФ)

Racemaniac
SAT 11 июня 2016 г., 9:52
Rogerclark написал:У меня есть несколько досок с F103R и F103V, которые встроены в ЦАП. Таким образом, должно быть возможно непосредственно, без использования внешнего оборудования

Я подозреваю, что большое ограничение - RAM, как 20 тыс. На F103C (и даже 64K на F103V и т. Д.), Не даст вам очень долгого буфера задержки для реализации таких вещей, как эхо.

Проект FFT в другом потоке может создать некоторые интересные выходные аудио, если звук был реконструирован из FFT. Однако я думаю, что скорость БПФ будет медленной, чтобы сделать его пригодным для изменения голоса и т. Д., Хотя я полагаю, что это может создать некоторые интересные эффекты

(Хотя я точно не уверен, как вы реконструируете форму волны на основе БПФ)

Racemaniac
SAT 11 июня 2016 г., 8:25 вечера
Теперь я подключил его к порту микрофона моего ПК и начал проводить еще несколько экспериментов с ним :)
Теперь согласился на размер буфера 512 образцов, что, кажется, работает лучше всего :).
И я добавил в него кольцевую модуляцию, и она также работает хорошо :)

Rogerclark
SAT 11 июня 2016 г. 22:00
Вы используете предварительно сгенерированный буфер модулятора кольца или генерируете его на лету?


Re: FFT

Я нашел это

https: // www.DSPLELATED.com/showarticle/800.PHP

Похоже, что прямой БПФ можно использовать для создания обратного БПФ, слишком много дополнительной обработки.

Тем не менее, скорость БПФ будет слишком медленной, чтобы можно было использовать для аудио.

Я думал, что, возможно, интересным результатом БПФ является синусоидальные частоты и амплитуды всех точек на анализе спектра, и суммируйте их вместе (используя амплитуды из анализа спектра))

Но, возможно, даже это займет слишком много времени, чтобы обработать.

Rogerclark
SAT 11 июня 2016 г. 22:39
На связанной примечании...

Я помню «спецификацию» для компьютера Sinclair ZX Spectrum.

https: // www.DSPLELATED.com/showarticle/800.PHP

Я помню, в детстве высказывал, что это просто использовала резисторную лестницу.
Итак, каким -то образом я получил программное обеспечение и построил свой собственный простой ЦАП, практически без затрат.

(Я понятия не имею, откуда я получил бы программное обеспечение, так как это было до Internet и даже до модема;, возможно, у кого-то, кого я знал, имел реальное оборудование и т. Д., И позволил мне «одолжить» программу)

Rogerclark
Солнце 12 июня 2016 г. 1:06
@racemaniac

Я посмотрел на ваш код, но я не понимаю 2 вещей

У кода I2C есть комментарии о DMA
устройство->регс->Cr2 = i2c_cr2_iterren | 36; // DMA включен, периферическая частота составляет 36 МГц Но, насколько я могу судить, вы не используете DMA для вывода до i2c, вы называете i2c_write () из loop ()?

Похоже, вы поднимаете входной буфер в выходной буфер, используя задержку-микросекунды

Я правильно читаю код?

Racemaniac
Солнце 12 июня 2016 г., 3:27 утра
Rogerclark написал:Вы используете предварительно сгенерированный буфер модулятора кольца или генерируете его на лету?


Re: FFT

Я нашел это

https: // www.DSPLELATED.com/showarticle/800.PHP

Похоже, что прямой БПФ можно использовать для создания обратного БПФ, слишком много дополнительной обработки.

Тем не менее, скорость БПФ будет слишком медленной, чтобы можно было использовать для аудио.

Я думал, что, возможно, интересным результатом БПФ является синусоидальные частоты и амплитуды всех точек на анализе спектра, и суммируйте их вместе (используя амплитуды из анализа спектра))

Но, возможно, даже это займет слишком много времени, чтобы обработать.

Rogerclark
Солнце 12 июня 2016 г., 4:22
Спасибо

Я должен быть в состоянии легко изменить код для использования DAC на F103V

Racemaniac
Солнце 12 июня 2016 г., 7:20 утра
Rogerclark написал:Спасибо

Я должен быть в состоянии легко изменить код для использования DAC на F103V

Пито
Солнце 12 июня 2016 г., 11:20 утра
Есть FFT и IFFT.
1. У вас должен быть фильтр антиалиазии перед АЦП, а также некоторая фильтрация на выходе ЦАП
2. Мяга с спектрами для этих целей обычно работает:
а) У вас есть буферы пинга/понга
б) Вы делаете АЦП в Ping One (через DMA), в то время как параллельно вы связываетесь с FFT и т. Д. В Pong One
c) Когда Ping заполнено, DMA автоматически переключает поток ADC на Pong One
г) тогда вы делаете FFT и т. Д. в Ping One
д) и наоборот в цикле.
Это только способ создания постоянной работы АЦП на плату->ФФТ->что -то_до_with_spectra->Взимание->Цем
Вот как это работает с DSPIC33F.. Микроконтроллеры. Я сомневаюсь, что это возможно с F103.. Но, может быть, есть хитрость, как это сделать..
С скоростью отбора 5000 Гц для «речи» вы получаете 0.2 секунды, чтобы сделать FFT->что -то_до_with_spectra->IFFT-DAC.
Довольно много времени ;)

Rogerclark
Солнце 12 июня 2016 г., 11:28 утра
@pito

Я согласен.

Я сомневаюсь, что F103 достаточно быстр, чтобы использовать FFT для обработки звука в реальном времени.

Вроде как связан...
Я провел немного исследования и обнаружил, что у STM есть примечание к примечанию о вокадере, использующем F103, однако я не уверен.
Примечание применения, обсуждает запись и сжатие голоса с использованием STM32

http: // www.ул.com/content/ccc/resource/ ... 204907.PDF

И в конце концов я нашел пример кода, но он не будет работать с ядром Libmaple (или я подозреваю, что HAL MX Core), поскольку он использует стандартную периферийную либерацию STM32

В любом случае, только для записи здесь страница загрузки

http: // www.STMCU.org/document/download/index/id-203822

Пито
Солнце 12 июня 2016 г., 11:38
Speex - кажется, только сжатие.

Но вернемся к голосу изменяющего>
Как я упоминал выше, вы получаете 0.2 секунды для игры с FFT-IFFT (1024point FFT, 5000 Гц.Пропускная способность речи 5 кГц, качество радиопередачи).
Это много времени.
Вы делаете 1024fft в 3 мс.
Итак, есть 0.194Secs для игры со спектрами (фильтрация, реверсирование и т. Д..).
Если вы овладеете методом Ping/Pong с F103, вы можете сделать это..
Если ОЗУ будет недостаточно с 1024FFT, сделайте это с 512 или 256, никакой большой разницы в качестве.

Rogerclark
Солнце 12 июня 2016 г., 11:47
@Pito

Я думал, что FFT 1024 PT вычисляется за 2 мс

Таким образом, FFT + IFFT будет 4 мс для 1024 (я обведу это до 5 мс, но я знаю, что это оптимистично)

Если бы это было сокращено до, возможно, на 32 баллов, и имело соответствующее уменьшение времени, это дало бы, возможно, 32/1024 x 5ms = 164us
Возможно....

Или я ошибся математику ?

Пито
Солнце 12 июня 2016 г. 11:56 утра
Снова:
Когда вы попробовали ADC в пинг -буфер, вам нужно 204.8 мс, чтобы заполнить его (скорость отбора проб 5 кГц, 1024samples).
Это время, когда вы получили в целом ФФТ->Messingwithspectra->Взимание->Процесс ЦАП Внутри буфера.
(Потому что вы попробовали ADC через DMA в Ping и Ping с FFT в PONG параллельно).
Много времени..
Затем вы обратите внимание (когда буфер Ping заполнен - ​​который сигнализируется флагом DMA или прерыванием) - вы запускаете образец ADC в буфере Pong и делаете FFT -IFFT в Ping - снова: у вас есть 204.8 мс для игры с ФФТ->Messingwithspectra->Взимание->Процесс ЦАП В рамках пингового буфера.
Не теряя ни одного образца..
Поэтому это называется пинг-понг.

Время, доступное для ФФТ->Messingwithspectra->Взимание->Процесс ЦАП С методом пинг-понг есть:
(1/adc_sampling_rate) * number_of_fft_points
Пример:
1/5000*1024 = 204.8 мс

Rogerclark
Солнце 12 июня 2016 12:29
ХОРОШО

Итак, мы уже запускаем АЦП на DMA и можем использовать DMA для вывода в DAC I2C или внутренний ЦАП (на F103RC и более крупных MCU в семействе)

И использовать 2 буфера, я.e Один наполнение и один из них обрабатывают вывод.

Да... 200 мс - это много времени.


Было бы интересно, просто запустить такую ​​систему E.глин. 1024 баллов FFT при выборке 5 кГц и послушайте, как звучит реконструированное звук нормального Speach.


Чтобы накопить изменение шага, я предполагаю, что вы могли бы просто переместить данные так, чтобы то, что было в Bin [n], перемещалось в Bin [n+ pitch_shift]
хотя это гранулировано.

Пито
Солнце 12 июня 2016 12:38
Я могу гарантировать, что это будет работать :)
Вы можете делать со спектральными линиями, что вы хотите (с некоторыми ограничениями, в зависимости от ракетостроения :) ).
Вы можете сделать фильтры (отключив линии - низкий, высокий, выемка) или перемещая линии вверх/вниз (чтобы изменить шаг] или обратить вспять спектры (для шифрования) или шума/дениза, смешивания и т. Д. Есть множество книг, написанных по этому вопросу :)

Rogerclark
Солнце 12 июня 2016 12:43
@pito

Спасибо

Racemaniac
Солнце 12 июня 2016 г. 18:48
Пито написал:Снова:
Когда вы попробовали ADC в пинг -буфер, вам нужно 204.8 мс, чтобы заполнить его (скорость отбора проб 5 кГц, 1024samples).

Rogerclark
Солнце 12 июня 2016 г. 22:25
Я не понял, что 35 кГц была минимальной скоростью дискретизации.

Но я думаю, что все должно быть в порядке, это просто дает гораздо меньше времени для обработки звука, когда в домене Фурье. Так что вместо 200 мс, будет всего около 30 мс

Входной БПФ занимает 2 мс за 1024 балла. Выходная БПФ займет примерно такое же.

Так что оставляет около 25 мс для обработки 1024 баллов (512 пары)

Что звучит так, как будто этого должно быть достаточно, чтобы сделать какую -то обработку.

Но всегда есть шанс, что я пропустил что -то, что убивает всю идею

Ddrown
Солнце 12 июня 2016 г., 22:33
Реданьяк написал:Пито написал:Снова:
Когда вы попробовали ADC в пинг -буфер, вам нужно 204.8 мс, чтобы заполнить его (скорость отбора проб 5 кГц, 1024samples).

Rogerclark
Солнце 12 июня 2016 г. 22:46
ОК, о убийстве.

Я думаю, что может быть лучше, чтобы попытаться фильтровать смене, e.глин. Просто используйте нормальный фильтр R C, возможно, на 5 кГц, чтобы любые сигналы в 17 кГц были бы такими маленькими, что они были бы неразборчивы

Rogerclark
Пн 13 июня 2016 г., 5:48 утра
Реданьяк написал:Пито написал:Снова:
Когда вы попробовали ADC в пинг -буфер, вам нужно 204.8 мс, чтобы заполнить его (скорость отбора проб 5 кГц, 1024samples).

Racemaniac
Пн 13 июня 2016 г., 6:09
Rogerclark написал:Реданьяк написал:Пито написал:Снова:
Когда вы попробовали ADC в пинг -буфер, вам нужно 204.8 мс, чтобы заполнить его (скорость отбора проб 5 кГц, 1024samples).

Пито
Пн 13 июня 2016 г., 7:05
Я не эксперт для ADC и DMA с STM32, но я очень удивлен, что вы не можете установить скорость отбора проб, сказать, 5 кГц (или 100 Гц или 0.5 Гц).
Обычно вы не устанавливаете скорость отбора проб АЦП с помощью делителей часов ADC, но с помощью триггера преобразования ADC, который, например, может быть обусловлен выходным импульсом таймера/Edge/Perio/Pwm и т. Д..

Пример> Установите часы ADC на 13 тактовых циклов (как можно быстрее, насколько это возможно для точности ADC), установите Timerx, чтобы запустить преобразование ADC каждые 200 USEC (скорость выборки 5 кГц) и направить выход АЦП через DMA на буфер, называемый Buffer_ping [1024]. Приятно иметь, если DMA может сигнализировать о том, что Buffer_ping заполнен (чтобы переключиться на Pong).
Та же история с DAC (данные съемки из Buffer_pong Out через ЦАП через DMA, выборка дается временем, установленным в IE 200USECS).

Типичная установка, которую я где -то нашел:
Adc_initstructure.Adc_externaltrigconv = adc_externaltrigconv_t1_cc1; <<< Здесь вы устанавливаете скорость выборки АЦП по своему желанию :) (или лучше сказать, как Timer1 «позволяет») :)
/* TIM1 configuration ------------------------------------------------------*/ /* Time Base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0xFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x4; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* TIM1 channel1 configuration in PWM mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0x7F; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1Init(TIM1, &TIM_OCInitStructure); /* DMA1 Channel1 Configuration ----------------------------------------------*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); /* Enable DMA1 channel1 */ DMA_Cmd(DMA1_Channel1, ENABLE); /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channel14 configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);

Racemaniac
Пн 13 июня 2016 г., 7:28 утра
Пито написал:Я не эксперт для ADC и DMA с STM32, но я очень удивлен, что вы не можете установить скорость отбора проб, сказать, 5 кГц (или 100 Гц или 0.5 Гц).
Обычно вы не устанавливаете скорость отбора проб АЦП с помощью делителей часов ADC, но с помощью триггера преобразования ADC, который, например, может быть обусловлен выходным импульсом таймера/Edge/Perio/Pwm и т. Д..
Пример> Установите часы ADC на 10 МГц, установите Timerx, чтобы запустить преобразование ADC каждые 200 USEC (5 кГц), и выполните направление вывода ADC через DMA в буфер, называемый Buffer_ping [1024]. Приятно иметь, если DMA может сигнализировать о том, что Buffer_ping заполнен (чтобы переключиться на Pong).
Та же история с DAC (данные съемки из Buffer_pong Out через ЦАП через DMA, выборка дается временем, установленным в IE 200USECS).
Типичная установка, которую я где -то нашел:
Adc_initstructure.Adc_externaltrigconv = adc_externaltrigconv_t1_cc1; <<< Здесь вы устанавливаете скорость выборки АЦП по своему желанию :) (или лучше, как позволяет таймер1) :)
/* TIM1 configuration ------------------------------------------------------*/ /* Time Base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 0xFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x4; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* TIM1 channel1 configuration in PWM mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0x7F; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1Init(TIM1, &TIM_OCInitStructure); /* DMA1 Channel1 Configuration ----------------------------------------------*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); /* Enable DMA1 channel1 */ DMA_Cmd(DMA1_Channel1, ENABLE); /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channel14 configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_13Cycles5);

Пито
Пн 13 июня 2016 г., 7:35 утра
Да, точно так же, как вы написали.
«Скорость/скорость отбора проб AD.
Они не связаны (до некоторых пределов).
Поэтому я установил ADC на полную скорость преобразования (т. Е. 15 МГц для 12 -битного, это зависит от MCU) и скорость отбора проб, которую я установил через Timerx Pwm, к любому значению, которое я хочу.
То же самое с ЦАП (должен быть способ это сделать).

Например, у вас может быть ADC (установлена ​​на скорость преобразования 15 МГц), работающая со скоростью отбора проб 4 кГц, выполнении DSP и выводе сигнала через DAC с скоростью отбора проб (скорость отбора проб ЦАП) 6 кГц (это может звучать как Микки Маус) : P

Rogerclark
Пн 13 июня 2016 г., 7:41
@racemaniac

Должно быть возможно контролировать скорость, с которой данные DMA отправляются в DAC,

У STM есть примечание к ЦАП, но на самом деле это просто обзор, показывающий возможности DAC

http: // www.ул.com/content/ccc/resource/ ... 259245.PDF

Я подозреваю, что контроллер DMA должен быть вызван таймером, и, следовательно, Timer FREQ устанавливает скорость дискретизации.

Или в этом случае, если возможно, возможно, лучший метод - использовать АЦП (конверсию полного) для запуска DAC DMA; Как предполагается, оба входа вывод будет работать с той же скоростью дискретизации

Или, возможно, запустите как АЦП, так и ЦАП на одном таймере

Редактировать. Я нашел код OpenLibcm3, который использует таймер для управления DMA для DAC

https: // github.com/libopencm3/libopencm ... /DAC-DMA.в

Racemaniac
Пн 13 июня 2016 г., 7:46 утра
Rogerclark написал:@racemaniac

Должно быть возможно контролировать скорость, с которой данные DMA отправляются в DAC,

У STM есть примечание к ЦАП, но на самом деле это просто обзор, показывающий возможности DAC

http: // www.ул.com/content/ccc/resource/ ... 259245.PDF

Я подозреваю, что контроллер DMA должен быть вызван таймером, и, следовательно, Timer FREQ устанавливает скорость дискретизации.

Или в этом случае, если возможно, возможно, лучший метод - использовать АЦП (конверсию полного) для запуска DAC DMA; Как предполагается, оба входа вывод будет работать с той же скоростью дискретизации

Или, возможно, запустите как АЦП, так и ЦАП на одном таймере

Редактировать. Я нашел код OpenLibcm3, который использует таймер для управления DMA для DAC

https: // github.com/libopencm3/libopencm ... /DAC-DMA.в

Пито
Пн 13 июня 2016 г., 7:47
Вот несколько примеров для ADC и DAC (через DMA) для экспертов (я взял пример Code ADC/TIM1 оттуда):

http: // elk.Informatik.FH-Augsburg.de/pu ... мпл.HTML

Racemaniac
Пн 13 июня 2016 г., 7:55 утра
Пито написал:Вот несколько примеров для ADC и DAC (через DMA) для экспертов (я взял пример Code ADC/TIM1 оттуда):

http: // elk.Informatik.FH-Augsburg.de/pu ... мпл.HTML

Rogerclark
Вт 14 июня 2016 г. 22:31
Ребята

На данный момент похоже на правила голоса на основе FFT мертв в воде, потому что мне нужно было бы написать обратный БПК в ассемблере сам. Что нецелесообразно, так как я не знаю о FFTS или Arm Assembler.

Однако технически кажется возможным, что это будет работать на F103.

Это просто позор, что ни один из старых обратных кодов БПК, который нашел @pito, не будет компилировать современные версии GCC.
я.E Существует версия FFT и IFFT, которая датируется 2008 год, которая выглядит так, как будто она будет выполнять работу, но она не будет компилироваться (собирать) с GCC 4.4, как ни странно, есть проблемы с инструкциями Ассемблера отсутствуют.

Интересно, есть ли где -нибудь форум пользователей ARM, на который я мог бы опубликовать код, и попытаться узнать, как его обновить.
Но на данный момент я в тупике...

Rogerclark
Вт 14 июня 2016 г. 22:59
Просто для справочных целей

Вот FFT, который нашел @pito, но не компилируется :-(

FFTCM3.С /* Complex 16 bit Radix 4 FFT and Inverse FFT for Cortex-M3 version 1.0 -------------------------------------------------------------------------- (c) 2008 Ivan Mellen -------------------------------------------------------------------------- Free Personal, Non-Commercial Use License. The Software is licensed to you for your personal, NON-COMMERCIAL USE. If you have questions about this license or would like a different license please email : imellen(at)embeddedsignals(dot)com - Radix 4 FFT - supported sizes: N=4,16,64,256,1024,4096 - N>4096 possible with custom coefficients - 16 bit complex arithmetic, 1Q15 coefficients - input data remains unmodified - decimation-in-time with auto scale after each stage - no overflow - GCC version (Code Sourcery G++ Lite 2007q3-53), requires C preprocessor - hand optimized THUMB2 assembly for Cortex-M3 (e.g. STM32) - code optimized with 64 bit flash prefetch and branch speculation in mind - single function for multiple FFT sizes - functions are both "C" and assembly callable Modifications in version 2.0: - Constant size FFT (faster execution, but N is constant) - purely real input (almost 2x faster) - radix 2 stage (for N= 8, 32, 128, 512, 2048, 8192...) - RAM based coefficients with size optimized generator (for high flash latency) - speed optimized windowing function(Bartlett,Blackman, Hamming, Hanning, Kaiser) STM32 FFT benchmarks in CPU cycles based on real hardware measurements: N - FFT size L - Flash latency F,R - coefficients in Flash or RAM N L=0 F/R L=1 F L=1 r* L=2 F* L=2 r* ARM7TDMI ARM9E dsPIC 64 3575 3797 3636 4588 4007 - 2701 3739 256 19425 20685 19743 25144 21685 38461-43920 13740 19055 1024 98541 105113 100074 128070 109634 - 68534 N/A Notes:ARM9E - DSP enhanced arm9 core, based on STR910 @96 MHz, RAM coefficients dsPIC - dsPIC30x / dsPIC33x - results based on Microchip's DSP library ARM7TDMI - 3rd party, web based benchmark results *STM32 results for latency L=2 or - source compiled with LATENCY2 defined IFFT benchmarks (calculated and verified by measurement): add 6+N/4 to FFT benchmark {22,70,262} for N={64,256,1024} Code size: FFT only: 480 bytes FFT+IFFT: 682 bytes Coefficient size (Flash or RAM): N: 16 64 256 1024 4096 size: 48 240 1008 4080 16368 bytes ------------------------------------------------------------------------------ Usage example: add this file to your project. In C code: //declare functions void fftR4(short *y, short *x, int N); void ifftR4(short *y, short *x, int N); // prepare test input data short x[512]; // input data 16 bit, 4 byte aligned x0r,x0i,x1r,x1i,.... short y[512]; // output data 16 bit,4 byte aligned y0r,y0i,y1r,y1i,.... short z[512]; // same format... for (i=0;i for (i=0;i { x[i+0]=16384; x[i+2]=16384; x[i+4]=-16384; x[i+6]=-16384;} // x = [ 16384,16384,-16384,-16384,16384,...] 1/4 Fsampling //call functions fftR4(y, x, 256); // y is in frequency domain y[128]= ifftR4(z, y, 256); // z should be x/N + noise introduced by 16 bit truncating // expected results: //y[128]is 8191; y[129] is -8190 y[384]is 8191; y[385]is 8191 rest 0 + noise //z[2n] is 64 64 -64 -64 .. z[2n+1] is 0 all +- 1 (noise) ------------------------------------------------------------------------------ */ // This file contains two functions : // void fftR4(short *y, short *x, int N); // radix 4 FFT // void ifftR4(short *y, short *x, int N); // radix 4 inverse FFT .syntax unified .thumb .global fftR4 .global ifftR4 //#define LATENCY2 //comment this line if flash latency #define y R0 // short *y -output complex array #define x R1 // short *x -input complex array #define N R2 // int N - number of samples 4,16,64,256,1024,4096 #define c R0 // short *c - coefficient array #define Bl R2 // the number of blocks #define R R3 // the number of samples in each block #define x0r R4 #define x0i R5 #define x1r R6 #define x1i R7 #define x2r R8 #define x2i R9 #define x3r R10 #define x3i R11 #define y3r x3i #define y3i x3r #define tmp0 R12 // temporary0 #define tmp1 R14 // temporary1 // complex load, x=[a], a+=offset in register data from RAM (0 wait states) .macro LOADC dr,di, a, offset //5 cycles ldrsh di, [a, #2] ldrsh dr, [a] //ldrsh $x._r, [$a], $offset adds a, offset .endm // cofficient complex load, c=[a], a=a+ 4 ;Wk from FLASH (1-4 wait states) .macro LOADCF xr,xi, a //4 cycles ldr xr, [a], #4 //read 2 shorts as 32 bits asr xi, xr,#16 //im extract sxth xr,xr //re extract .endm // coefficient complex load, c=[a], a=a+ 4 ; Wk from RAM (0 wait states) // .macro LOADCF xr,xi, a //4 (or 3?) cycles // ldrsh xi, [$a, #2] // ldrsh xr, [$a],#4 //ldrsh not pipelined in STM32, macro not used // .endm // complex load, xc=[a], a=a-register offset .macro LOADCMi xr,xi, a, offset //5 cycles ldrsh xi, [a, #2] ldrsh xr, [a] subs a, offset //ldrsh xr, [$a], offset .endm // complex store, [a]=x,c a=a+ immediate offset .macro STRC xr,xi, a, offset //2 cycles strh xi, [a, #2] strh xr, [a], offset .endm // complex store, [a]=x, a+=offset in register .macro STRCR xr,xi, a, offset //3 cycles strh xi, [a, #2] strh xr, [a] adds a, offset .endm // Multiply Complex Conjugate a=(xr+i*xi)*(cr-i*ci) // x = xr + i*xi // c = cr + i*ci ;6 cycles .macro MULCC ar,ai, xr,xi,cr,ci mul tmp0, xi, cr // tmp0=xi*cr mul tmp1, xi, ci // tmp1=xi*ci mls ai, xr, ci,tmp0 // ai=tmp0-xr*ci = xi*cr - xr*ci mla ar, xr, cr,tmp1 // ar=tmp1+xr*cr = xr*cr + xi*ci .endm // complex Fast Fourier Transform - Four point; scale with shift s .macro BFFT4 s add x2r, x2r, x3r // (x2,x3) = (x2+x3, x2-x3) add x2i, x2i, x3i sub x3r, x2r, x3r, lsl#1 sub x3i, x2i, x3i, lsl#1 mov x0r, x0r, asr#2 // (x0,x1) = (x0+(x1>>s), x0-(x1>>s))/4 mov x0i, x0i, asr#2 add x0r, x0r, x1r, asr#(2+s) add x0i, x0i, x1i, asr#(2+s) sub x1r, x0r, x1r, asr#(1+s) sub x1i, x0i, x1i, asr#(1+s) add x0r, x0r, x2r, asr#(2+s) // (x0,x2) = (x0+(x2>>s)/4, x0-(x2>>s)/4) add x0i, x0i, x2i, asr#(2+s) sub x2r, x0r, x2r, asr#(1+s) sub x2i, x0i, x2i, asr#(1+s) add x1r, x1r, x3i, asr#(2+s) // (x1,y3)=(x1-i*(x3>>s)/4, x1+i*(x3>>s)/4) sub x1i, x1i, x3r, asr#(2+s) sub y3r, x1r, x3i, asr#(1+s) add y3i, x1i, x3r, asr#(1+s) .endm //---------------------------------------------------------------------------- // inverse FFT // void ifftR4(short *y, short *x, int N) // custom first stage reorders input data: x(n)=x(N-n) n=0:N-1 x(N)=x(0) // extra cost to fft: 6+N/4 cycles .thumb_func .align 3 //speed optimization in STM32 nop.n //alignment optimization ifftR4: stmfd sp!, {r4-r11, lr} mov tmp0, #0 // bit reversed counter movs tmp1,N //; first tmp1=N .word 0xF3A2FA92 //RBIT R3,R2 //RBIT R,N lsl R,#3 adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1==N] ldrsh x0i, [x, #2] // replaces C_LDRmi x[N] by _LDRmi x[0] ldrsh x0r, [x] subs tmp1,N //tmp1 still needs to be decremented for 2nd C_LDRmi b L2 // continue with second load ifirstStage: // first stage load and bit reverse adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1] LOADCMi x0r,x0i, tmp1, N L2: LOADCMi x2r,x2i, tmp1, N LOADCMi x1r,x1i, tmp1, N LOADCMi x3r,x3i, tmp1, N BFFT4 0 STRC x0r,x0i, y, #4 STRC x1r,x1i, y, #4 STRC x2r,x2i, y, #4 STRC y3r,y3i, y, #4 adds tmp0,R .word 0xFEACFA9C // rbit r14,r12//rbit tmp1,tmp0 sub tmp1,N,tmp1 //tmp1=N-tmp1 bne ifirstStage // loop if count non zero b firstStageFinished // rest same as normal fft //---------------------------------------------------------------------------- // void fftR4(short *y, short *x, int N) .thumb_func fftR4: stmfd sp!, {r4-r11, lr} mov tmp0, #0 // bit reversed counter mov tmp1, #0 .word 0xF3A2FA92 //rbit R3,R2 //RBIT R,N lsl R,#3 firstStage: // first stage load and bit reverse adds tmp1, x, tmp1, lsl#2 // tmp1=&x[tmp1] and clear carry LOADC x0r, x0i, tmp1, N LOADC x2r,x2i, tmp1, N LOADC x1r,x1i, tmp1, N LOADC x3r,x3i, tmp1, N BFFT4 0 STRC x0r,x0i, y, #4 STRC x1r,x1i, y, #4 STRC x2r,x2i, y, #4 STRC y3r,y3i, y, #4 adds tmp0,R .word 0xFEACFA9C // rbit r14,r12//rbit tmp1,tmp0 bne firstStage // loop if count non zero firstStageFinished: // finished the first stage sub x, y, N, lsl #2 // x = working buffer mov R, #16 lsrs Bl,N,4 it eq ldmeq sp!, {r4-r11, pc} // for N==4 return from function adr c, coef_table //change if table in RAM nextStage: // Bl = the number of blocks // R = the number of samples in each block #ifdef LATENCY2 // narrow/wide versions to optimize flash pre-fetch stm sp!, {x, Bl} add tmp0, R, R, lsl#1 add.n x, x, tmp0 #else stmfd sp!, {x, Bl} add tmp0, R, R, lsl#1 add.w x, x, tmp0 #endif sub Bl, Bl, #1< nextBlock: add Bl, Bl, R, lsl#(16-2) nextButterfly: // Bl=((number butterflies left-1)< LOADCMi x0r,x0i, x, R LOADCF x3r,x3i, c MULCC x3r,x3i, x0r,x0i, x3r,x3i LOADCMi x0r,x0i, x, R LOADCF x2r,x2i, c MULCC x2r,x2i, x0r,x0i, x2r,x2i LOADCMi x0r,x0i, x, R LOADCF x1r,x1i, c MULCC x1r,x1i, x0r,x0i, x1r,x1i LOADC x0r,x0i, x, #0 BFFT4 15 // coefficients are 1Q15 STRCR x0r,x0i, x, R STRCR x1r,x1i, x, R STRCR x2r,x2i, x, R STRC y3r,y3i, x, #4 subs Bl, Bl, #1< bge nextButterfly add tmp0, R, R, lsl#1 add x, x, tmp0 sub Bl, Bl, #1 movs tmp1, Bl, lsl#16 it ne subne c, c, tmp0 bne nextBlock pop {r1-r2} //LDM sp!, {x, Bl} mov R, R, lsl#2 // block size *=4 lsrs Bl,Bl,2 //# of blocks /=4 bne nextStage ldmfd sp!, {r4-r11, pc} //return .align 2 //32 bit access acceleration // Note: unused portion of coef_table can be commented to reduce size coef_table: // FFT twiddle table of triplets E(3t), E(t), E(2t) // Where E(t)=cos(t)+i*sin(t) at 1Q15 // N=16 t=2*PI*k/N for k=0,1,2,..,N/4-1 .hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000 .hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82 .hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff .hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82 // N=64 t=2*PI*k/N for k=0,1,2,..,N/4-1 .hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000 .hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9 .hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc .hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d .hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82 .hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e .hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642 .hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a .hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff .hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a .hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642 .hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e .hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82 .hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d .hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc .hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9 // N=256 t=2*PI*k/N for k=0,1,2,..,N/4-1 .hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000 .hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648 .hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c .hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8 .hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9 .hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a .hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528 .hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f .hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc .hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba .hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57 .hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce .hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d .hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40 .hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134 .hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6 .hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82 .hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7 .hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2 .hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0 .hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e .hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca .hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3 .hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6 .hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642 .hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885 .hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d .hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a .hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a .hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d .hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62 .hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9 .hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff .hword 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9 .hword 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62 .hword 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d .hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a .hword 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a .hword 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d .hword 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885 .hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642 .hword 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6 .hword 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3 .hword 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca .hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e .hword 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0 .hword 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2 .hword 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7 .hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82 .hword 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6 .hword 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134 .hword 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40 .hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d .hword 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce .hword 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57 .hword 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba .hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc .hword 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f .hword 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528 .hword 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a .hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9 .hword 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8 .hword 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c .hword 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648 // N=1024 t=2*PI*k/N for k=0,1,2,..,N/4-1 .hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000 .hword 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192 .hword 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324 .hword 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6 .hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648 .hword 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9 .hword 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b .hword 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb .hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c .hword 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c .hword 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab .hword 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a .hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8 .hword 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455 .hword 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2 .hword 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e .hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9 .hword 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83 .hword 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c .hword 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93 .hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a .hword 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f .hword 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224 .hword 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7 .hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528 .hword 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8 .hword 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827 .hword 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4 .hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f .hword 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99 .hword 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11 .hword 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87 .hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc .hword 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e .hword 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df .hword 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e .hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba .hword 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825 .hword 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d .hword 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3 .hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57 .hword 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8 .hword 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17 .hword 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074 .hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce .hword 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326 .hword 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b .hword 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd .hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d .hword 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a .hword 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4 .hword 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb .hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40 .hword 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81 .hword 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0 .hword 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb .hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134 .hword 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269 .hword 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b .hword 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca .hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6 .hword 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e .hword 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843 .hword 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964 .hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82 .hword 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d .hword 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4 .hword 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8 .hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7 .hword 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4 .hword 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec .hword 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1 .hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2 .hword 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef .hword 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9 .hword 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de .hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0 .hword 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd .hword 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7 .hword 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c .hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e .hword 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b .hword 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24 .hword 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9 .hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca .hword 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97 .hword 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f .hword 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023 .hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3 .hword 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e .hword 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255 .hword 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308 .hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6 .hword 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460 .hword 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505 .hword 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6 .hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642 .hword 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9 .hword 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c .hword 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb .hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885 .hword 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a .hword 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a .hword 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06 .hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d .hword 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef .hword 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d .hword 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6 .hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a .hword 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89 .hword 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4 .hword 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a .hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a .hword 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6 .hword 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e .hword 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60 .hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d .hword 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6 .hword 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a .hword 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38 .hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62 .hword 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87 .hword 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7 .hword 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2 .hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9 .hword 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea .hword 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6 .hword 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe .hword 0xa57e,0x5a82, 0x5a82,0x5a82, 0x0000,0x7fff .hword 0xa3d7,0x58d4, 0x59f4,0x5b10, 0xfe6e,0x7ffe .hword 0xa238,0x571e, 0x5964,0x5b9d, 0xfcdc,0x7ff6 .hword 0xa0a2,0x5560, 0x58d4,0x5c29, 0xfb4a,0x7fea .hword 0x9f14,0x539b, 0x5843,0x5cb4, 0xf9b8,0x7fd9 .hword 0x9d8e,0x51cf, 0x57b1,0x5d3e, 0xf827,0x7fc2 .hword 0x9c11,0x4ffb, 0x571e,0x5dc8, 0xf695,0x7fa7 .hword 0x9a9c,0x4e21, 0x568a,0x5e50, 0xf505,0x7f87 .hword 0x9930,0x4c40, 0x55f6,0x5ed7, 0xf374,0x7f62 .hword 0x97ce,0x4a58, 0x5560,0x5f5e, 0xf1e4,0x7f38 .hword 0x9674,0x486a, 0x54ca,0x5fe4, 0xf055,0x7f0a .hword 0x9523,0x4675, 0x5433,0x6068, 0xeec6,0x7ed6 .hword 0x93dc,0x447b, 0x539b,0x60ec, 0xed38,0x7e9d .hword 0x929e,0x427a, 0x5303,0x616f, 0xebab,0x7e60 .hword 0x9169,0x4074, 0x5269,0x61f1, 0xea1e,0x7e1e .hword 0x903e,0x3e68, 0x51cf,0x6272, 0xe892,0x7dd6 .hword 0x8f1d,0x3c57, 0x5134,0x62f2, 0xe707,0x7d8a .hword 0x8e06,0x3a40, 0x5098,0x6371, 0xe57d,0x7d3a .hword 0x8cf8,0x3825, 0x4ffb,0x63ef, 0xe3f4,0x7ce4 .hword 0x8bf5,0x3604, 0x4f5e,0x646c, 0xe26d,0x7c89 .hword 0x8afb,0x33df, 0x4ec0,0x64e9, 0xe0e6,0x7c2a .hword 0x8a0c,0x31b5, 0x4e21,0x6564, 0xdf61,0x7bc6 .hword 0x8927,0x2f87, 0x4d81,0x65de, 0xdddc,0x7b5d .hword 0x884c,0x2d55, 0x4ce1,0x6657, 0xdc59,0x7aef .hword 0x877b,0x2b1f, 0x4c40,0x66d0, 0xdad8,0x7a7d .hword 0x86b6,0x28e5, 0x4b9e,0x6747, 0xd958,0x7a06 .hword 0x85fa,0x26a8, 0x4afb,0x67bd, 0xd7d9,0x798a .hword 0x8549,0x2467, 0x4a58,0x6832, 0xd65c,0x790a .hword 0x84a3,0x2224, 0x49b4,0x68a7, 0xd4e1,0x7885 .hword 0x8407,0x1fdd, 0x490f,0x691a, 0xd367,0x77fb .hword 0x8377,0x1d93, 0x486a,0x698c, 0xd1ef,0x776c .hword 0x82f1,0x1b47, 0x47c4,0x69fd, 0xd079,0x76d9 .hword 0x8276,0x18f9, 0x471d,0x6a6e, 0xcf04,0x7642 .hword 0x8205,0x16a8, 0x4675,0x6add, 0xcd92,0x75a6 .hword 0x81a0,0x1455, 0x45cd,0x6b4b, 0xcc21,0x7505 .hword 0x8146,0x1201, 0x4524,0x6bb8, 0xcab2,0x7460 .hword 0x80f6,0x0fab, 0x447b,0x6c24, 0xc946,0x73b6 .hword 0x80b2,0x0d54, 0x43d1,0x6c8f, 0xc7db,0x7308 .hword 0x8079,0x0afb, 0x4326,0x6cf9, 0xc673,0x7255 .hword 0x804b,0x08a2, 0x427a,0x6d62, 0xc50d,0x719e .hword 0x8027,0x0648, 0x41ce,0x6dca, 0xc3a9,0x70e3 .hword 0x800f,0x03ed, 0x4121,0x6e31, 0xc248,0x7023 .hword 0x8002,0x0192, 0x4074,0x6e97, 0xc0e9,0x6f5f .hword 0x8001,0xff37, 0x3fc6,0x6efb, 0xbf8c,0x6e97 .hword 0x800a,0xfcdc, 0x3f17,0x6f5f, 0xbe32,0x6dca .hword 0x801e,0xfa81, 0x3e68,0x6fc2, 0xbcda,0x6cf9 .hword 0x803e,0xf827, 0x3db8,0x7023, 0xbb85,0x6c24 .hword 0x8068,0xf5cd, 0x3d08,0x7083, 0xba33,0x6b4b .hword 0x809e,0xf374, 0x3c57,0x70e3, 0xb8e3,0x6a6e .hword 0x80de,0xf11c, 0x3ba5,0x7141, 0xb796,0x698c .hword 0x812a,0xeec6, 0x3af3,0x719e, 0xb64c,0x68a7 .hword 0x8181,0xec71, 0x3a40,0x71fa, 0xb505,0x67bd .hword 0x81e2,0xea1e, 0x398d,0x7255, 0xb3c0,0x66d0 .hword 0x824f,0xe7cd, 0x38d9,0x72af, 0xb27f,0x65de .hword 0x82c6,0xe57d, 0x3825,0x7308, 0xb140,0x64e9 .hword 0x8349,0xe330, 0x3770,0x735f, 0xb005,0x63ef .hword 0x83d6,0xe0e6, 0x36ba,0x73b6, 0xaecc,0x62f2 .hword 0x846e,0xde9e, 0x3604,0x740b, 0xad97,0x61f1 .hword 0x8511,0xdc59, 0x354e,0x7460, 0xac65,0x60ec .hword 0x85be,0xda18, 0x3497,0x74b3, 0xab36,0x5fe4 .hword 0x8676,0xd7d9, 0x33df,0x7505, 0xaa0a,0x5ed7 .hword 0x8738,0xd59e, 0x3327,0x7556, 0xa8e2,0x5dc8 .hword 0x8805,0xd367, 0x326e,0x75a6, 0xa7bd,0x5cb4 .hword 0x88dd,0xd134, 0x31b5,0x75f4, 0xa69c,0x5b9d .hword 0x89be,0xcf04, 0x30fc,0x7642, 0xa57e,0x5a82 .hword 0x8aaa,0xccd9, 0x3042,0x768e, 0xa463,0x5964 .hword 0x8ba0,0xcab2, 0x2f87,0x76d9, 0xa34c,0x5843 .hword 0x8ca1,0xc890, 0x2ecc,0x7723, 0xa238,0x571e .hword 0x8dab,0xc673, 0x2e11,0x776c, 0xa129,0x55f6 .hword 0x8ebf,0xc45b, 0x2d55,0x77b4, 0xa01c,0x54ca .hword 0x8fdd,0xc248, 0x2c99,0x77fb, 0x9f14,0x539b .hword 0x9105,0xc03a, 0x2bdc,0x7840, 0x9e0f,0x5269 .hword 0x9236,0xbe32, 0x2b1f,0x7885, 0x9d0e,0x5134 .hword 0x9371,0xbc2f, 0x2a62,0x78c8, 0x9c11,0x4ffb .hword 0x94b5,0xba33, 0x29a4,0x790a, 0x9b17,0x4ec0 .hword 0x9603,0xb83c, 0x28e5,0x794a, 0x9a22,0x4d81 .hword 0x9759,0xb64c, 0x2827,0x798a, 0x9930,0x4c40 .hword 0x98b9,0xb462, 0x2768,0x79c9, 0x9843,0x4afb .hword 0x9a22,0xb27f, 0x26a8,0x7a06, 0x9759,0x49b4 .hword 0x9b94,0xb0a2, 0x25e8,0x7a42, 0x9674,0x486a .hword 0x9d0e,0xaecc, 0x2528,0x7a7d, 0x9592,0x471d .hword 0x9e91,0xacfd, 0x2467,0x7ab7, 0x94b5,0x45cd .hword 0xa01c,0xab36, 0x23a7,0x7aef, 0x93dc,0x447b .hword 0xa1b0,0xa976, 0x22e5,0x7b27, 0x9307,0x4326 .hword 0xa34c,0xa7bd, 0x2224,0x7b5d, 0x9236,0x41ce .hword 0xa4f0,0xa60c, 0x2162,0x7b92, 0x9169,0x4074 .hword 0xa69c,0xa463, 0x209f,0x7bc6, 0x90a1,0x3f17 .hword 0xa84f,0xa2c2, 0x1fdd,0x7bf9, 0x8fdd,0x3db8 .hword 0xaa0a,0xa129, 0x1f1a,0x7c2a, 0x8f1d,0x3c57 .hword 0xabcd,0x9f98, 0x1e57,0x7c5a, 0x8e62,0x3af3 .hword 0xad97,0x9e0f, 0x1d93,0x7c89, 0x8dab,0x398d .hword 0xaf68,0x9c8f, 0x1cd0,0x7cb7, 0x8cf8,0x3825 .hword 0xb140,0x9b17, 0x1c0c,0x7ce4, 0x8c4a,0x36ba .hword 0xb31f,0x99a9, 0x1b47,0x7d0f, 0x8ba0,0x354e .hword 0xb505,0x9843, 0x1a83,0x7d3a, 0x8afb,0x33df .hword 0xb6f1,0x96e6, 0x19be,0x7d63, 0x8a5a,0x326e .hword 0xb8e3,0x9592, 0x18f9,0x7d8a, 0x89be,0x30fc .hword 0xbadc,0x9448, 0x1833,0x7db1, 0x8927,0x2f87 .hword 0xbcda,0x9307, 0x176e,0x7dd6, 0x8894,0x2e11 .hword 0xbedf,0x91cf, 0x16a8,0x7dfb, 0x8805,0x2c99 .hword 0xc0e9,0x90a1, 0x15e2,0x7e1e, 0x877b,0x2b1f .hword 0xc2f8,0x8f7d, 0x151c,0x7e3f, 0x86f6,0x29a4 .hword 0xc50d,0x8e62, 0x1455,0x7e60, 0x8676,0x2827 .hword 0xc727,0x8d51, 0x138f,0x7e7f, 0x85fa,0x26a8 .hword 0xc946,0x8c4a, 0x12c8,0x7e9d, 0x8583,0x2528 .hword 0xcb69,0x8b4d, 0x1201,0x7eba, 0x8511,0x23a7 .hword 0xcd92,0x8a5a, 0x113a,0x7ed6, 0x84a3,0x2224 .hword 0xcfbe,0x8972, 0x1073,0x7ef0, 0x843a,0x209f .hword 0xd1ef,0x8894, 0x0fab,0x7f0a, 0x83d6,0x1f1a .hword 0xd424,0x87c0, 0x0ee4,0x7f22, 0x8377,0x1d93 .hword 0xd65c,0x86f6, 0x0e1c,0x7f38, 0x831c,0x1c0c .hword 0xd898,0x8637, 0x0d54,0x7f4e, 0x82c6,0x1a83 .hword 0xdad8,0x8583, 0x0c8c,0x7f62, 0x8276,0x18f9 .hword 0xdd1b,0x84d9, 0x0bc4,0x7f75, 0x822a,0x176e .hword 0xdf61,0x843a, 0x0afb,0x7f87, 0x81e2,0x15e2 .hword 0xe1a9,0x83a6, 0x0a33,0x7f98, 0x81a0,0x1455 .hword 0xe3f4,0x831c, 0x096b,0x7fa7, 0x8163,0x12c8 .hword 0xe642,0x829d, 0x08a2,0x7fb5, 0x812a,0x113a .hword 0xe892,0x822a, 0x07d9,0x7fc2, 0x80f6,0x0fab .hword 0xeae4,0x81c1, 0x0711,0x7fce, 0x80c8,0x0e1c .hword 0xed38,0x8163, 0x0648,0x7fd9, 0x809e,0x0c8c .hword 0xef8d,0x8110, 0x057f,0x7fe2, 0x8079,0x0afb .hword 0xf1e4,0x80c8, 0x04b6,0x7fea, 0x8059,0x096b .hword 0xf43c,0x808b, 0x03ed,0x7ff1, 0x803e,0x07d9 .hword 0xf695,0x8059, 0x0324,0x7ff6, 0x8027,0x0648 .hword 0xf8ef,0x8032, 0x025b,0x7ffa, 0x8016,0x04b6 .hword 0xfb4a,0x8016, 0x0192,0x7ffe, 0x800a,0x0324 .hword 0xfda5,0x8006, 0x00c9,0x7fff, 0x8002,0x0192 // N=4096 t=2*PI*k/N for k=0,1,2,..,N/4-1 .hword 0x7fff,0x0000, 0x7fff,0x0000, 0x7fff,0x0000 .hword 0x7fff,0x0097, 0x7fff,0x0032, 0x7fff,0x0065 .hword 0x7fff,0x012e, 0x7fff,0x0065, 0x7fff,0x00c9 .hword 0x7ffd,0x01c4, 0x7fff,0x0097, 0x7fff,0x012e .hword 0x7ffa,0x025b, 0x7fff,0x00c9, 0x7ffe,0x0192 .hword 0x7ff7,0x02f2, 0x7fff,0x00fb, 0x7ffc,0x01f7 .hword 0x7ff4,0x0389, 0x7fff,0x012e, 0x7ffa,0x025b .hword 0x7fef,0x041f, 0x7ffe,0x0160, 0x7ff8,0x02c0 .hword 0x7fea,0x04b6, 0x7ffe,0x0192, 0x7ff6,0x0324 .hword 0x7fe4,0x054d, 0x7ffd,0x01c4, 0x7ff4,0x0389 .hword 0x7fdd,0x05e3, 0x7ffc,0x01f7, 0x7ff1,0x03ed .hword 0x7fd6,0x067a, 0x7ffb,0x0229, 0x7fed,0x0452 .hword 0x7fce,0x0711, 0x7ffa,0x025b, 0x7fea,0x04b6 .hword 0x7fc5,0x07a7, 0x7ff9,0x028d, 0x7fe6,0x051b .hword 0x7fbc,0x083e, 0x7ff8,0x02c0, 0x7fe2,0x057f .hword 0x7fb2,0x08d4, 0x7ff7,0x02f2, 0x7fdd,0x05e3 .hword 0x7fa7,0x096b, 0x7ff6,0x0324, 0x7fd9,0x0648 .hword 0x7f9c,0x0a01, 0x7ff5,0x0356, 0x7fd3,0x06ac .hword 0x7f90,0x0a97, 0x7ff4,0x0389, 0x7fce,0x0711 .hword 0x7f83,0x0b2d, 0x7ff2,0x03bb, 0x7fc8,0x0775 .hword 0x7f75,0x0bc4, 0x7ff1,0x03ed, 0x7fc2,0x07d9 .hword 0x7f67,0x0c5a, 0x7fef,0x041f, 0x7fbc,0x083e .hword 0x7f58,0x0cf0, 0x7fed,0x0452, 0x7fb5,0x08a2 .hword 0x7f49,0x0d86, 0x7fec,0x0484, 0x7fae,0x0906 .hword 0x7f38,0x0e1c, 0x7fea,0x04b6, 0x7fa7,0x096b .hword 0x7f27,0x0eb2, 0x7fe8,0x04e8, 0x7fa0,0x09cf .hword 0x7f16,0x0f47, 0x7fe6,0x051b, 0x7f98,0x0a33 .hword 0x7f03,0x0fdd, 0x7fe4,0x054d, 0x7f90,0x0a97 .hword 0x7ef0,0x1073, 0x7fe2,0x057f, 0x7f87,0x0afb .hword 0x7edd,0x1108, 0x7fe0,0x05b1, 0x7f7e,0x0b60 .hword 0x7ec8,0x119e, 0x7fdd,0x05e3, 0x7f75,0x0bc4 .hword 0x7eb3,0x1233, 0x7fdb,0x0616, 0x7f6c,0x0c28 .hword 0x7e9d,0x12c8, 0x7fd9,0x0648, 0x7f62,0x0c8c .hword 0x7e87,0x135d, 0x7fd6,0x067a, 0x7f58,0x0cf0 .hword 0x7e70,0x13f2, 0x7fd3,0x06ac, 0x7f4e,0x0d54 .hword 0x7e58,0x1487, 0x7fd1,0x06de, 0x7f43,0x0db8 .hword 0x7e3f,0x151c, 0x7fce,0x0711, 0x7f38,0x0e1c .hword 0x7e26,0x15b1, 0x7fcb,0x0743, 0x7f2d,0x0e80 .hword 0x7e0c,0x1645, 0x7fc8,0x0775, 0x7f22,0x0ee4 .hword 0x7df2,0x16da, 0x7fc5,0x07a7, 0x7f16,0x0f47 .hword 0x7dd6,0x176e, 0x7fc2,0x07d9, 0x7f0a,0x0fab .hword 0x7dba,0x1802, 0x7fbf,0x080c, 0x7efd,0x100f .hword 0x7d9e,0x1896, 0x7fbc,0x083e, 0x7ef0,0x1073 .hword 0x7d81,0x192a, 0x7fb9,0x0870, 0x7ee3,0x10d6 .hword 0x7d63,0x19be, 0x7fb5,0x08a2, 0x7ed6,0x113a .hword 0x7d44,0x1a51, 0x7fb2,0x08d4, 0x7ec8,0x119e .hword 0x7d25,0x1ae5, 0x7fae,0x0906, 0x7eba,0x1201 .hword 0x7d05,0x1b78, 0x7fab,0x0938, 0x7eac,0x1265 .hword 0x7ce4,0x1c0c, 0x7fa7,0x096b, 0x7e9d,0x12c8 .hword 0x7cc2,0x1c9f, 0x7fa3,0x099d, 0x7e8e,0x132b .hword 0x7ca0,0x1d31, 0x7fa0,0x09cf, 0x7e7f,0x138f .hword 0x7c7e,0x1dc4, 0x7f9c,0x0a01, 0x7e70,0x13f2 .hword 0x7c5a,0x1e57, 0x7f98,0x0a33, 0x7e60,0x1455 .hword 0x7c36,0x1ee9, 0x7f94,0x0a65, 0x7e50,0x14b9 .hword 0x7c11,0x1f7b, 0x7f90,0x0a97, 0x7e3f,0x151c .hword 0x7bec,0x200e, 0x7f8b,0x0ac9, 0x7e2f,0x157f .hword 0x7bc6,0x209f, 0x7f87,0x0afb, 0x7e1e,0x15e2 .hword 0x7b9f,0x2131, 0x7f83,0x0b2d, 0x7e0c,0x1645 .hword 0x7b78,0x21c3, 0x7f7e,0x0b60, 0x7dfb,0x16a8 .hword 0x7b50,0x2254, 0x7f7a,0x0b92, 0x7de9,0x170b .hword 0x7b27,0x22e5, 0x7f75,0x0bc4, 0x7dd6,0x176e .hword 0x7afd,0x2376, 0x7f71,0x0bf6, 0x7dc4,0x17d1 .hword 0x7ad3,0x2407, 0x7f6c,0x0c28, 0x7db1,0x1833 .hword 0x7aa8,0x2498, 0x7f67,0x0c5a, 0x7d9e,0x1896 .hword 0x7a7d,0x2528, 0x7f62,0x0c8c, 0x7d8a,0x18f9 .hword 0x7a51,0x25b8, 0x7f5d,0x0cbe, 0x7d77,0x195b .hword 0x7a24,0x2648, 0x7f58,0x0cf0, 0x7d63,0x19be .hword 0x79f7,0x26d8, 0x7f53,0x0d22, 0x7d4e,0x1a20 .hword 0x79c9,0x2768, 0x7f4e,0x0d54, 0x7d3a,0x1a83 .hword 0x799a,0x27f7, 0x7f49,0x0d86, 0x7d25,0x1ae5 .hword 0x796a,0x2886, 0x7f43,0x0db8, 0x7d0f,0x1b47 .hword 0x793a,0x2915, 0x7f3e,0x0dea, 0x7cfa,0x1ba9 .hword 0x790a,0x29a4, 0x7f38,0x0e1c, 0x7ce4,0x1c0c .hword 0x78d8,0x2a32, 0x7f33,0x0e4e, 0x7cce,0x1c6e .hword 0x78a6,0x2ac1, 0x7f2d,0x0e80, 0x7cb7,0x1cd0 .hword 0x7874,0x2b4f, 0x7f27,0x0eb2, 0x7ca0,0x1d31 .hword 0x7840,0x2bdc, 0x7f22,0x0ee4, 0x7c89,0x1d93 .hword 0x780c,0x2c6a, 0x7f1c,0x0f15, 0x7c72,0x1df5 .hword 0x77d8,0x2cf7, 0x7f16,0x0f47, 0x7c5a,0x1e57 .hword 0x77a2,0x2d84, 0x7f10,0x0f79, 0x7c42,0x1eb8 .hword 0x776c,0x2e11, 0x7f0a,0x0fab, 0x7c2a,0x1f1a .hword 0x7736,0x2e9e, 0x7f03,0x0fdd, 0x7c11,0x1f7b .hword 0x76fe,0x2f2a, 0x7efd,0x100f, 0x7bf9,0x1fdd .hword 0x76c7,0x2fb6, 0x7ef7,0x1041, 0x7bdf,0x203e .hword 0x768e,0x3042, 0x7ef0,0x1073, 0x7bc6,0x209f .hword 0x7655,0x30cd, 0x7eea,0x10a4, 0x7bac,0x2101 .hword 0x761b,0x3159, 0x7ee3,0x10d6, 0x7b92,0x2162 .hword 0x75e1,0x31e4, 0x7edd,0x1108, 0x7b78,0x21c3 .hword 0x75a6,0x326e, 0x7ed6,0x113a, 0x7b5d,0x2224 .hword 0x756a,0x32f9, 0x7ecf,0x116c, 0x7b42,0x2284 .hword 0x752d,0x3383, 0x7ec8,0x119e, 0x7b27,0x22e5 .hword 0x74f0,0x340d, 0x7ec1,0x11cf, 0x7b0b,0x2346 .hword 0x74b3,0x3497, 0x7eba,0x1201, 0x7aef,0x23a7 .hword 0x7475,0x3520, 0x7eb3,0x1233, 0x7ad3,0x2407 .hword 0x7436,0x35a9, 0x7eac,0x1265, 0x7ab7,0x2467 .hword 0x73f6,0x3632, 0x7ea5,0x1296, 0x7a9a,0x24c8 .hword 0x73b6,0x36ba, 0x7e9d,0x12c8, 0x7a7d,0x2528 .hword 0x7375,0x3742, 0x7e96,0x12fa, 0x7a60,0x2588 .hword 0x7334,0x37ca, 0x7e8e,0x132b, 0x7a42,0x25e8 .hword 0x72f2,0x3852, 0x7e87,0x135d, 0x7a24,0x2648 .hword 0x72af,0x38d9, 0x7e7f,0x138f, 0x7a06,0x26a8 .hword 0x726c,0x3960, 0x7e78,0x13c1, 0x79e7,0x2708 .hword 0x7228,0x39e7, 0x7e70,0x13f2, 0x79c9,0x2768 .hword 0x71e3,0x3a6d, 0x7e68,0x1424, 0x79aa,0x27c7 .hword 0x719e,0x3af3, 0x7e60,0x1455, 0x798a,0x2827 .hword 0x7158,0x3b79, 0x7e58,0x1487, 0x796a,0x2886 .hword 0x7112,0x3bfe, 0x7e50,0x14b9, 0x794a,0x28e5 .hword 0x70cb,0x3c83, 0x7e48,0x14ea, 0x792a,0x2945 .hword 0x7083,0x3d08, 0x7e3f,0x151c, 0x790a,0x29a4 .hword 0x703b,0x3d8c, 0x7e37,0x154d, 0x78e9,0x2a03 .hword 0x6ff2,0x3e10, 0x7e2f,0x157f, 0x78c8,0x2a62 .hword 0x6fa9,0x3e94, 0x7e26,0x15b1, 0x78a6,0x2ac1 .hword 0x6f5f,0x3f17, 0x7e1e,0x15e2, 0x7885,0x2b1f .hword 0x6f14,0x3f9a, 0x7e15,0x1614, 0x7863,0x2b7e .hword 0x6ec9,0x401d, 0x7e0c,0x1645, 0x7840,0x2bdc .hword 0x6e7d,0x409f, 0x7e03,0x1677, 0x781e,0x2c3b .hword 0x6e31,0x4121, 0x7dfb,0x16a8, 0x77fb,0x2c99 .hword 0x6de4,0x41a3, 0x7df2,0x16da, 0x77d8,0x2cf7 .hword 0x6d96,0x4224, 0x7de9,0x170b, 0x77b4,0x2d55 .hword 0x6d48,0x42a5, 0x7de0,0x173c, 0x7790,0x2db3 .hword 0x6cf9,0x4326, 0x7dd6,0x176e, 0x776c,0x2e11 .hword 0x6caa,0x43a6, 0x7dcd,0x179f, 0x7748,0x2e6f .hword 0x6c5a,0x4426, 0x7dc4,0x17d1, 0x7723,0x2ecc .hword 0x6c09,0x44a5, 0x7dba,0x1802, 0x76fe,0x2f2a .hword 0x6bb8,0x4524, 0x7db1,0x1833, 0x76d9,0x2f87 .hword 0x6b66,0x45a3, 0x7da7,0x1865, 0x76b4,0x2fe5 .hword 0x6b14,0x4621, 0x7d9e,0x1896, 0x768e,0x3042 .hword 0x6ac1,0x469f, 0x7d94,0x18c7, 0x7668,0x309f .hword 0x6a6e,0x471d, 0x7d8a,0x18f9, 0x7642,0x30fc .hword 0x6a1a,0x479a, 0x7d81,0x192a, 0x761b,0x3159 .hword 0x69c5,0x4817, 0x7d77,0x195b, 0x75f4,0x31b5 .hword 0x6970,0x4893, 0x7d6d,0x198d, 0x75cd,0x3212 .hword 0x691a,0x490f, 0x7d63,0x19be, 0x75a6,0x326e .hword 0x68c4,0x498b, 0x7d58,0x19ef, 0x757e,0x32cb .hword 0x686d,0x4a06, 0x7d4e,0x1a20, 0x7556,0x3327 .hword 0x6815,0x4a81, 0x7d44,0x1a51, 0x752d,0x3383 .hword 0x67bd,0x4afb, 0x7d3a,0x1a83, 0x7505,0x33df .hword 0x6764,0x4b75, 0x7d2f,0x1ab4, 0x74dc,0x343b .hword 0x670b,0x4bef, 0x7d25,0x1ae5, 0x74b3,0x3497 .hword 0x66b2,0x4c68, 0x7d1a,0x1b16, 0x7489,0x34f2 .hword 0x6657,0x4ce1, 0x7d0f,0x1b47, 0x7460,0x354e .hword 0x65fc,0x4d59, 0x7d05,0x1b78, 0x7436,0x35a9 .hword 0x65a1,0x4dd1, 0x7cfa,0x1ba9, 0x740b,0x3604 .hword 0x6545,0x4e49, 0x7cef,0x1bda, 0x73e1,0x365f .hword 0x64e9,0x4ec0, 0x7ce4,0x1c0c, 0x73b6,0x36ba .hword 0x648b,0x4f37, 0x7cd9,0x1c3d, 0x738b,0x3715 .hword 0x642e,0x4fad, 0x7cce,0x1c6e, 0x735f,0x3770 .hword 0x63d0,0x5023, 0x7cc2,0x1c9f, 0x7334,0x37ca .hword 0x6371,0x5098, 0x7cb7,0x1cd0, 0x7308,0x3825 .hword 0x6312,0x510d, 0x7cac,0x1d01, 0x72dc,0x387f .hword 0x62b2,0x5181, 0x7ca0,0x1d31, 0x72af,0x38d9 .hword 0x6252,0x51f5, 0x7c95,0x1d62, 0x7282,0x3933 .hword 0x61f1,0x5269, 0x7c89,0x1d93, 0x7255,0x398d .hword 0x6190,0x52dc, 0x7c7e,0x1dc4, 0x7228,0x39e7 .hword 0x612e,0x534f, 0x7c72,0x1df5, 0x71fa,0x3a40 .hword 0x60cb,0x53c1, 0x7c66,0x1e26, 0x71cc,0x3a9a .hword 0x6068,0x5433, 0x7c5a,0x1e57, 0x719e,0x3af3 .hword 0x6005,0x54a4, 0x7c4e,0x1e88, 0x7170,0x3b4c .hword 0x5fa1,0x5515, 0x7c42,0x1eb8, 0x7141,0x3ba5 .hword 0x5f3c,0x5586, 0x7c36,0x1ee9, 0x7112,0x3bfe .hword 0x5ed7,0x55f6, 0x7c2a,0x1f1a, 0x70e3,0x3c57 .hword 0x5e72,0x5665, 0x7c1e,0x1f4b, 0x70b3,0x3caf .hword 0x5e0c,0x56d4, 0x7c11,0x1f7b, 0x7083,0x3d08 .hword 0x5da5,0x5743, 0x7c05,0x1fac, 0x7053,0x3d60 .hword 0x5d3e,0x57b1, 0x7bf9,0x1fdd, 0x7023,0x3db8 .hword 0x5cd7,0x581e, 0x7bec,0x200e, 0x6ff2,0x3e10 .hword 0x5c6f,0x588c, 0x7bdf,0x203e, 0x6fc2,0x3e68 .hword 0x5c06,0x58f8, 0x7bd3,0x206f, 0x6f90,0x3ec0 .hword 0x5b9d,0x5964, 0x7bc6,0x209f, 0x6f5f,0x3f17 .hword 0x5b34,0x59d0, 0x7bb9,0x20d0, 0x6f2d,0x3f6f .hword 0x5ac9,0x5a3b, 0x7bac,0x2101, 0x6efb,0x3fc6 .hword 0x5a5f,0x5aa6, 0x7b9f,0x2131, 0x6ec9,0x401d .hword 0x59f4,0x5b10, 0x7b92,0x2162, 0x6e97,0x4074 .hword 0x5988,0x5b7a, 0x7b85,0x2192, 0x6e64,0x40cb .hword 0x591c,0x5be3, 0x7b78,0x21c3, 0x6e31,0x4121 .hword 0x58b0,0x5c4c, 0x7b6a,0x21f3, 0x6dfe,0x4178 .hword 0x5843,0x5cb4, 0x7b5d,0x2224, 0x6dca,0x41ce .hword 0x57d5,0x5d1c, 0x7b50,0x2254, 0x6d96,0x4224 .hword 0x5767,0x5d83, 0x7b42,0x2284, 0x6d62,0x427a .hword 0x56f9,0x5dea, 0x7b34,0x22b5, 0x6d2e,0x42d0 .hword 0x568a,0x5e50, 0x7b27,0x22e5, 0x6cf9,0x4326 .hword 0x561b,0x5eb6, 0x7b19,0x2316, 0x6cc4,0x437b .hword 0x55ab,0x5f1b, 0x7b0b,0x2346, 0x6c8f,0x43d1 .hword 0x553b,0x5f80, 0x7afd,0x2376, 0x6c5a,0x4426 .hword 0x54ca,0x5fe4, 0x7aef,0x23a7, 0x6c24,0x447b .hword 0x5459,0x6047, 0x7ae1,0x23d7, 0x6bee,0x44d0 .hword 0x53e7,0x60aa, 0x7ad3,0x2407, 0x6bb8,0x4524 .hword 0x5375,0x610d, 0x7ac5,0x2437, 0x6b82,0x4579 .hword 0x5303,0x616f, 0x7ab7,0x2467, 0x6b4b,0x45cd .hword 0x5290,0x61d1, 0x7aa8,0x2498, 0x6b14,0x4621 .hword 0x521c,0x6232, 0x7a9a,0x24c8, 0x6add,0x4675 .hword 0x51a8,0x6292, 0x7a8c,0x24f8, 0x6aa5,0x46c9 .hword 0x5134,0x62f2, 0x7a7d,0x2528, 0x6a6e,0x471d .hword 0x50bf,0x6351, 0x7a6e,0x2558, 0x6a36,0x4770 .hword 0x504a,0x63b0, 0x7a60,0x2588, 0x69fd,0x47c4 .hword 0x4fd4,0x640f, 0x7a51,0x25b8, 0x69c5,0x4817 .hword 0x4f5e,0x646c, 0x7a42,0x25e8, 0x698c,0x486a .hword 0x4ee8,0x64ca, 0x7a33,0x2618, 0x6953,0x48bd .hword 0x4e71,0x6526, 0x7a24,0x2648, 0x691a,0x490f .hword 0x4df9,0x6582, 0x7a15,0x2678, 0x68e0,0x4962 .hword 0x4d81,0x65de, 0x7a06,0x26a8, 0x68a7,0x49b4 .hword 0x4d09,0x6639, 0x79f7,0x26d8, 0x686d,0x4a06 .hword 0x4c91,0x6693, 0x79e7,0x2708, 0x6832,0x4a58 .hword 0x4c17,0x66ed, 0x79d8,0x2738, 0x67f8,0x4aaa .hword 0x4b9e,0x6747, 0x79c9,0x2768, 0x67bd,0x4afb .hword 0x4b24,0x67a0, 0x79b9,0x2797, 0x6782,0x4b4d .hword 0x4aaa,0x67f8, 0x79aa,0x27c7, 0x6747,0x4b9e .hword 0x4a2f,0x6850, 0x799a,0x27f7, 0x670b,0x4bef .hword 0x49b4,0x68a7, 0x798a,0x2827, 0x66d0,0x4c40 .hword 0x4939,0x68fd, 0x797a,0x2856, 0x6693,0x4c91 .hword 0x48bd,0x6953, 0x796a,0x2886, 0x6657,0x4ce1 .hword 0x4840,0x69a9, 0x795b,0x28b6, 0x661b,0x4d31 .hword 0x47c4,0x69fd, 0x794a,0x28e5, 0x65de,0x4d81 .hword 0x4747,0x6a52, 0x793a,0x2915, 0x65a1,0x4dd1 .hword 0x46c9,0x6aa5, 0x792a,0x2945, 0x6564,0x4e21 .hword 0x464b,0x6af8, 0x791a,0x2974, 0x6526,0x4e71 .hword 0x45cd,0x6b4b, 0x790a,0x29a4, 0x64e9,0x4ec0 .hword 0x454f,0x6b9d, 0x78f9,0x29d3, 0x64ab,0x4f0f .hword 0x44d0,0x6bee, 0x78e9,0x2a03, 0x646c,0x4f5e .hword 0x4450,0x6c3f, 0x78d8,0x2a32, 0x642e,0x4fad .hword 0x43d1,0x6c8f, 0x78c8,0x2a62, 0x63ef,0x4ffb .hword 0x4351,0x6cdf, 0x78b7,0x2a91, 0x63b0,0x504a .hword 0x42d0,0x6d2e, 0x78a6,0x2ac1, 0x6371,0x5098 .hword 0x424f,0x6d7c, 0x7895,0x2af0, 0x6332,0x50e6 .hword 0x41ce,0x6dca, 0x7885,0x2b1f, 0x62f2,0x5134 .hword 0x414d,0x6e17, 0x7874,0x2b4f, 0x62b2,0x5181 .hword 0x40cb,0x6e64, 0x7863,0x2b7e, 0x6272,0x51cf .hword 0x4048,0x6eb0, 0x7851,0x2bad, 0x6232,0x521c .hword 0x3fc6,0x6efb, 0x7840,0x2bdc, 0x61f1,0x5269 .hword 0x3f43,0x6f46, 0x782f,0x2c0c, 0x61b0,0x52b6 .hword 0x3ec0,0x6f90, 0x781e,0x2c3b, 0x616f,0x5303 .hword 0x3e3c,0x6fda, 0x780c,0x2c6a, 0x612e,0x534f .hword 0x3db8,0x7023, 0x77fb,0x2c99, 0x60ec,0x539b .hword 0x3d34,0x706b, 0x77e9,0x2cc8, 0x60aa,0x53e7 .hword 0x3caf,0x70b3, 0x77d8,0x2cf7, 0x6068,0x5433 .hword 0x3c2a,0x70fa, 0x77c6,0x2d26, 0x6026,0x547f .hword 0x3ba5,0x7141, 0x77b4,0x2d55, 0x5fe4,0x54ca .hword 0x3b20,0x7187, 0x77a2,0x2d84, 0x5fa1,0x5515 .hword 0x3a9a,0x71cc, 0x7790,0x2db3, 0x5f5e,0x5560 .hword 0x3a13,0x7211, 0x777e,0x2de2, 0x5f1b,0x55ab .hword 0x398d,0x7255, 0x776c,0x2e11, 0x5ed7,0x55f6 .hword 0x3906,0x7299, 0x775a,0x2e40, 0x5e94,0x5640 .hword 0x387f,0x72dc, 0x7748,0x2e6f, 0x5e50,0x568a .hword 0x37f7,0x731e, 0x7736,0x2e9e, 0x5e0c,0x56d4 .hword 0x3770,0x735f, 0x7723,0x2ecc, 0x5dc8,0x571e .hword 0x36e8,0x73a0, 0x7711,0x2efb, 0x5d83,0x5767 .hword 0x365f,0x73e1, 0x76fe,0x2f2a, 0x5d3e,0x57b1 .hword 0x35d7,0x7421, 0x76ec,0x2f59, 0x5cf9,0x57fa .hword 0x354e,0x7460, 0x76d9,0x2f87, 0x5cb4,0x5843 .hword 0x34c4,0x749e, 0x76c7,0x2fb6, 0x5c6f,0x588c .hword 0x343b,0x74dc, 0x76b4,0x2fe5, 0x5c29,0x58d4 .hword 0x33b1,0x7519, 0x76a1,0x3013, 0x5be3,0x591c .hword 0x3327,0x7556, 0x768e,0x3042, 0x5b9d,0x5964 .hword 0x329d,0x7592, 0x767b,0x3070, 0x5b57,0x59ac .hword 0x3212,0x75cd, 0x7668,0x309f, 0x5b10,0x59f4 .hword 0x3187,0x7608, 0x7655,0x30cd, 0x5ac9,0x5a3b .hword 0x30fc,0x7642, 0x7642,0x30fc, 0x5a82,0x5a82 .hword 0x3070,0x767b, 0x762e,0x312a, 0x5a3b,0x5ac9 .hword 0x2fe5,0x76b4, 0x761b,0x3159, 0x59f4,0x5b10 .hword 0x2f59,0x76ec, 0x7608,0x3187, 0x59ac,0x5b57 .hword 0x2ecc,0x7723, 0x75f4,0x31b5, 0x5964,0x5b9d .hword 0x2e40,0x775a, 0x75e1,0x31e4, 0x591c,0x5be3 .hword 0x2db3,0x7790, 0x75cd,0x3212, 0x58d4,0x5c29 .hword 0x2d26,0x77c6, 0x75b9,0x3240, 0x588c,0x5c6f .hword 0x2c99,0x77fb, 0x75a6,0x326e, 0x5843,0x5cb4 .hword 0x2c0c,0x782f, 0x7592,0x329d, 0x57fa,0x5cf9 .hword 0x2b7e,0x7863, 0x757e,0x32cb, 0x57b1,0x5d3e .hword 0x2af0,0x7895, 0x756a,0x32f9, 0x5767,0x5d83 .hword 0x2a62,0x78c8, 0x7556,0x3327, 0x571e,0x5dc8 .hword 0x29d3,0x78f9, 0x7542,0x3355, 0x56d4,0x5e0c .hword 0x2945,0x792a, 0x752d,0x3383, 0x568a,0x5e50 .hword 0x28b6,0x795b, 0x7519,0x33b1, 0x5640,0x5e94 .hword 0x2827,0x798a, 0x7505,0x33df, 0x55f6,0x5ed7 .hword 0x2797,0x79b9, 0x74f0,0x340d, 0x55ab,0x5f1b .hword 0x2708,0x79e7, 0x74dc,0x343b, 0x5560,0x5f5e .hword 0x2678,0x7a15, 0x74c7,0x3469, 0x5515,0x5fa1 .hword 0x25e8,0x7a42, 0x74b3,0x3497, 0x54ca,0x5fe4 .hword 0x2558,0x7a6e, 0x749e,0x34c4, 0x547f,0x6026 .hword 0x24c8,0x7a9a, 0x7489,0x34f2, 0x5433,0x6068 .hword 0x2437,0x7ac5, 0x7475,0x3520, 0x53e7,0x60aa .hword 0x23a7,0x7aef, 0x7460,0x354e, 0x539b,0x60ec .hword 0x2316,0x7b19, 0x744b,0x357b, 0x534f,0x612e .hword 0x2284,0x7b42, 0x7436,0x35a9, 0x5303,0x616f .hword 0x21f3,0x7b6a, 0x7421,0x35d7, 0x52b6,0x61b0 .hword 0x2162,0x7b92, 0x740b,0x3604, 0x5269,0x61f1 .hword 0x20d0,0x7bb9, 0x73f6,0x3632, 0x521c,0x6232 .hword 0x203e,0x7bdf, 0x73e1,0x365f, 0x51cf,0x6272 .hword 0x1fac,0x7c05, 0x73cb,0x368d, 0x5181,0x62b2 .hword 0x1f1a,0x7c2a, 0x73b6,0x36ba, 0x5134,0x62f2 .hword 0x1e88,0x7c4e, 0x73a0,0x36e8, 0x50e6,0x6332 .hword 0x1df5,0x7c72, 0x738b,0x3715, 0x5098,0x6371 .hword 0x1d62,0x7c95, 0x7375,0x3742, 0x504a,0x63b0 .hword 0x1cd0,0x7cb7, 0x735f,0x3770, 0x4ffb,0x63ef .hword 0x1c3d,0x7cd9, 0x734a,0x379d, 0x4fad,0x642e .hword 0x1ba9,0x7cfa, 0x7334,0x37ca, 0x4f5e,0x646c .hword 0x1b16,0x7d1a, 0x731e,0x37f7, 0x4f0f,0x64ab .hword 0x1a83,0x7d3a, 0x7308,0x3825, 0x4ec0,0x64e9 .hword 0x19ef,0x7d58, 0x72f2,0x3852, 0x4e71,0x6526 .hword 0x195b,0x7d77, 0x72dc,0x387f, 0x4e21,0x6564 .hword 0x18c7,0x7d94, 0x72c5,0x38ac, 0x4dd1,0x65a1 .hword 0x1833,0x7db1, 0x72af,0x38d9, 0x4d81,0x65de .hword 0x179f,0x7dcd, 0x7299,0x3906, 0x4d31,0x661b .hword 0x170b,0x7de9, 0x7282,0x3933, 0x4ce1,0x6657 .hword 0x1677,0x7e03, 0x726c,0x3960, 0x4c91,0x6693 .hword 0x15e2,0x7e1e, 0x7255,0x398d, 0x4c40,0x66d0 .hword 0x154d,0x7e37, 0x723f,0x39ba, 0x4bef,0x670b .hword 0x14b9,0x7e50, 0x7228,0x39e7, 0x4b9e,0x6747 .hword 0x1424,0x7e68, 0x7211,0x3a13, 0x4b4d,0x6782 .hword 0x138f,0x7e7f, 0x71fa,0x3a40, 0x4afb,0x67bd .hword 0x12fa,0x7e96, 0x71e3,0x3a6d, 0x4aaa,0x67f8 .hword 0x1265,0x7eac, 0x71cc,0x3a9a, 0x4a58,0x6832 .hword 0x11cf,0x7ec1, 0x71b5,0x3ac6, 0x4a06,0x686d .hword 0x113a,0x7ed6, 0x719e,0x3af3, 0x49b4,0x68a7 .hword 0x10a4,0x7eea, 0x7187,0x3b20, 0x4962,0x68e0 .hword 0x100f,0x7efd, 0x7170,0x3b4c, 0x490f,0x691a .hword 0x0f79,0x7f10, 0x7158,0x3b79, 0x48bd,0x6953 .hword 0x0ee4,0x7f22, 0x7141,0x3ba5, 0x486a,0x698c .hword 0x0e4e,0x7f33, 0x712a,0x3bd2, 0x4817,0x69c5 .hword 0x0db8,0x7f43, 0x7112,0x3bfe, 0x47c4,0x69fd .hword 0x0d22,0x7f53, 0x70fa,0x3c2a, 0x4770,0x6a36 .hword 0x0c8c,0x7f62, 0x70e3,0x3c57, 0x471d,0x6a6e .hword 0x0bf6,0x7f71, 0x70cb,0x3c83, 0x46c9,0x6aa5 .hword 0x0b60,0x7f7e, 0x70b3,0x3caf, 0x4675,0x6add .hword 0x0ac9,0x7f8b, 0x709b,0x3cdc, 0x4621,0x6b14 .hword 0x0a33,0x7f98, 0x7083,0x3d08, 0x45cd,0x6b4b .hword 0x099d,0x7fa3, 0x706b,0x3d34, 0x4579,0x6b82 .hword 0x0906,0x7fae, 0x7053,0x3d60, 0x4524,0x6bb8 .hword 0x0870,0x7fb9, 0x703b,0x3d8c, 0x44d0,0x6bee .hword 0x07d9,0x7fc2, 0x7023,0x3db8, 0x447b,0x6c24 .hword 0x0743,0x7fcb, 0x700b,0x3de4, 0x4426,0x6c5a .hword 0x06ac,0x7fd3, 0x6ff2,0x3e10, 0x43d1,0x6c8f .hword 0x0616,0x7fdb, 0x6fda,0x3e3c, 0x437b,0x6cc4 .hword 0x057f,0x7fe2, 0x6fc2,0x3e68, 0x4326,0x6cf9 .hword 0x04e8,0x7fe8, 0x6fa9,0x3e94, 0x42d0,0x6d2e .hword 0x0452,0x7fed, 0x6f90,0x3ec0, 0x427a,0x6d62 .hword 0x03bb,0x7ff2, 0x6f78,0x3eec, 0x4224,0x6d96 .hword 0x0324,0x7ff6, 0x6f5f,0x3f17, 0x41ce,0x6dca .hword 0x028d,0x7ff9, 0x6f46,0x3f43, 0x4178,0x6dfe .hword 0x01f7,0x7ffc, 0x6f2d,0x3f6f, 0x4121,0x6e31 .hword 0x0160,0x7ffe, 0x6f14,0x3f9a, 0x40cb,0x6e64 .hword 0x00c9,0x7fff, 0x6efb,0x3fc6, 0x4074,0x6e97 .hword 0x0032,0x7fff, 0x6ee2,0x3ff1, 0x401d,0x6ec9 .hword 0xff9b,0x7fff, 0x6ec9,0x401d, 0x3fc6,0x6efb .hword 0xff05,0x7fff, 0x6eb0,0x4048, 0x3f6f,0x6f2d .hword 0xfe6e,0x7ffe, 0x6e97,0x4074, 0x3f17,0x6f5f .hword 0xfdd7,0x7ffb, 0x6e7d,0x409f, 0x3ec0,0x6f90 .hword 0xfd40,0x7ff8, 0x6e64,0x40cb, 0x3e68,0x6fc2 .hword 0xfcaa,0x7ff5, 0x6e4a,0x40f6, 0x3e10,0x6ff2 .hword 0xfc13,0x7ff1, 0x6e31,0x4121, 0x3db8,0x7023 .hword 0xfb7c,0x7fec, 0x6e17,0x414d, 0x3d60,0x7053 .hword 0xfae5,0x7fe6, 0x6dfe,0x4178, 0x3d08,0x7083 .hword 0xfa4f,0x7fe0, 0x6de4,0x41a3, 0x3caf,0x70b3 .hword 0xf9b8,0x7fd9, 0x6dca,0x41ce, 0x3c57,0x70e3 .hword 0xf922,0x7fd1, 0x6db0,0x41f9, 0x3bfe,0x7112 .hword 0xf88b,0x7fc8, 0x6d96,0x4224, 0x3ba5,0x7141 .hword 0xf7f4,0x7fbf, 0x6d7c,0x424f, 0x3b4c,0x7170 .hword 0xf75e,0x7fb5, 0x6d62,0x427a, 0x3af3,0x719e .hword 0xf6c8,0x7fab, 0x6d48,0x42a5, 0x3a9a,0x71cc .hword 0xf631,0x7fa0, 0x6d2e,0x42d0, 0x3a40,0x71fa .hword 0xf59b,0x7f94, 0x6d14,0x42fb, 0x39e7,0x7228 .hword 0xf505,0x7f87, 0x6cf9,0x4326, 0x398d,0x7255 .hword 0xf46e,0x7f7a, 0x6cdf,0x4351, 0x3933,0x7282 .hword 0xf3d8,0x7f6c, 0x6cc4,0x437b, 0x38d9,0x72af .hword 0xf342,0x7f5d, 0x6caa,0x43a6, 0x387f,0x72dc .hword 0xf2ac,0x7f4e, 0x6c8f,0x43d1, 0x3825,0x7308 .hword 0xf216,0x7f3e, 0x6c75,0x43fb, 0x37ca,0x7334 .hword 0xf180,0x7f2d, 0x6c5a,0x4426, 0x3770,0x735f .hword 0xf0eb,0x7f1c, 0x6c3f,0x4450, 0x3715,0x738b .hword 0xf055,0x7f0a, 0x6c24,0x447b, 0x36ba,0x73b6 .hword 0xefbf,0x7ef7, 0x6c09,0x44a5, 0x365f,0x73e1 .hword 0xef2a,0x7ee3, 0x6bee,0x44d0, 0x3604,0x740b .hword 0xee94,0x7ecf, 0x6bd3,0x44fa, 0x35a9,0x7436 .hword 0xedff,0x7eba, 0x6bb8,0x4524, 0x354e,0x7460 .hword 0xed6a,0x7ea5, 0x6b9d,0x454f, 0x34f2,0x7489 .hword 0xecd5,0x7e8e, 0x6b82,0x4579, 0x3497,0x74b3 .hword 0xec3f,0x7e78, 0x6b66,0x45a3, 0x343b,0x74dc .hword 0xebab,0x7e60, 0x6b4b,0x45cd, 0x33df,0x7505 .hword 0xeb16,0x7e48, 0x6b30,0x45f7, 0x3383,0x752d .hword 0xea81,0x7e2f, 0x6b14,0x4621, 0x3327,0x7556 .hword 0xe9ec,0x7e15, 0x6af8,0x464b, 0x32cb,0x757e .hword 0xe958,0x7dfb, 0x6add,0x4675, 0x326e,0x75a6 .hword 0xe8c4,0x7de0, 0x6ac1,0x469f, 0x3212,0x75cd .hword 0xe82f,0x7dc4, 0x6aa5,0x46c9, 0x31b5,0x75f4 .hword 0xe79b,0x7da7, 0x6a89,0x46f3, 0x3159,0x761b .hword 0xe707,0x7d8a, 0x6a6e,0x471d, 0x30fc,0x7642 .hword 0xe673,0x7d6d, 0x6a52,0x4747, 0x309f,0x7668 .hword 0xe5e0,0x7d4e, 0x6a36,0x4770, 0x3042,0x768e .hword 0xe54c,0x7d2f, 0x6a1a,0x479a, 0x2fe5,0x76b4 .hword 0xe4b9,0x7d0f, 0x69fd,0x47c4, 0x2f87,0x76d9 .hword 0xe426,0x7cef, 0x69e1,0x47ed, 0x2f2a,0x76fe .hword 0xe392,0x7cce, 0x69c5,0x4817, 0x2ecc,0x7723 .hword 0xe2ff,0x7cac, 0x69a9,0x4840, 0x2e6f,0x7748 .hword 0xe26d,0x7c89, 0x698c,0x486a, 0x2e11,0x776c .hword 0xe1da,0x7c66, 0x6970,0x4893, 0x2db3,0x7790 .hword 0xe148,0x7c42, 0x6953,0x48bd, 0x2d55,0x77b4 .hword 0xe0b5,0x7c1e, 0x6937,0x48e6, 0x2cf7,0x77d8 .hword 0xe023,0x7bf9, 0x691a,0x490f, 0x2c99,0x77fb .hword 0xdf91,0x7bd3, 0x68fd,0x4939, 0x2c3b,0x781e .hword 0xdeff,0x7bac, 0x68e0,0x4962, 0x2bdc,0x7840 .hword 0xde6e,0x7b85, 0x68c4,0x498b, 0x2b7e,0x7863 .hword 0xdddc,0x7b5d, 0x68a7,0x49b4, 0x2b1f,0x7885 .hword 0xdd4b,0x7b34, 0x688a,0x49dd, 0x2ac1,0x78a6 .hword 0xdcba,0x7b0b, 0x686d,0x4a06, 0x2a62,0x78c8 .hword 0xdc29,0x7ae1, 0x6850,0x4a2f, 0x2a03,0x78e9 .hword 0xdb99,0x7ab7, 0x6832,0x4a58, 0x29a4,0x790a .hword 0xdb08,0x7a8c, 0x6815,0x4a81, 0x2945,0x792a .hword 0xda78,0x7a60, 0x67f8,0x4aaa, 0x28e5,0x794a .hword 0xd9e8,0x7a33, 0x67da,0x4ad3, 0x2886,0x796a .hword 0xd958,0x7a06, 0x67bd,0x4afb, 0x2827,0x798a .hword 0xd8c8,0x79d8, 0x67a0,0x4b24, 0x27c7,0x79aa .hword 0xd839,0x79aa, 0x6782,0x4b4d, 0x2768,0x79c9 .hword 0xd7aa,0x797a, 0x6764,0x4b75, 0x2708,0x79e7 .hword 0xd71b,0x794a, 0x6747,0x4b9e, 0x26a8,0x7a06 .hword 0xd68c,0x791a, 0x6729,0x4bc7, 0x2648,0x7a24 .hword 0xd5fd,0x78e9, 0x670b,0x4bef, 0x25e8,0x7a42 .hword 0xd56f,0x78b7, 0x66ed,0x4c17, 0x2588,0x7a60 .hword 0xd4e1,0x7885, 0x66d0,0x4c40, 0x2528,0x7a7d .hword 0xd453,0x7851, 0x66b2,0x4c68, 0x24c8,0x7a9a .hword 0xd3c5,0x781e, 0x6693,0x4c91, 0x2467,0x7ab7 .hword 0xd338,0x77e9, 0x6675,0x4cb9, 0x2407,0x7ad3 .hword 0xd2ab,0x77b4, 0x6657,0x4ce1, 0x23a7,0x7aef .hword 0xd21e,0x777e, 0x6639,0x4d09, 0x2346,0x7b0b .hword 0xd191,0x7748, 0x661b,0x4d31, 0x22e5,0x7b27 .hword 0xd105,0x7711, 0x65fc,0x4d59, 0x2284,0x7b42 .hword 0xd079,0x76d9, 0x65de,0x4d81, 0x2224,0x7b5d .hword 0xcfed,0x76a1, 0x65c0,0x4da9, 0x21c3,0x7b78 .hword 0xcf61,0x7668, 0x65a1,0x4dd1, 0x2162,0x7b92 .hword 0xced6,0x762e, 0x6582,0x4df9, 0x2101,0x7bac .hword 0xce4b,0x75f4, 0x6564,0x4e21, 0x209f,0x7bc6 .hword 0xcdc0,0x75b9, 0x6545,0x4e49, 0x203e,0x7bdf .hword 0xcd35,0x757e, 0x6526,0x4e71, 0x1fdd,0x7bf9 .hword 0xccab,0x7542, 0x6507,0x4e98, 0x1f7b,0x7c11 .hword 0xcc21,0x7505, 0x64e9,0x4ec0, 0x1f1a,0x7c2a .hword 0xcb97,0x74c7, 0x64ca,0x4ee8, 0x1eb8,0x7c42 .hword 0xcb0e,0x7489, 0x64ab,0x4f0f, 0x1e57,0x7c5a .hword 0xca85,0x744b, 0x648b,0x4f37, 0x1df5,0x7c72 .hword 0xc9fc,0x740b, 0x646c,0x4f5e, 0x1d93,0x7c89 .hword 0xc973,0x73cb, 0x644d,0x4f85, 0x1d31,0x7ca0 .hword 0xc8eb,0x738b, 0x642e,0x4fad, 0x1cd0,0x7cb7 .hword 0xc863,0x734a, 0x640f,0x4fd4, 0x1c6e,0x7cce .hword 0xc7db,0x7308, 0x63ef,0x4ffb, 0x1c0c,0x7ce4 .hword 0xc754,0x72c5, 0x63d0,0x5023, 0x1ba9,0x7cfa .hword 0xc6cd,0x7282, 0x63b0,0x504a, 0x1b47,0x7d0f .hword 0xc646,0x723f, 0x6391,0x5071, 0x1ae5,0x7d25 .hword 0xc5c0,0x71fa, 0x6371,0x5098, 0x1a83,0x7d3a .hword 0xc53a,0x71b5, 0x6351,0x50bf, 0x1a20,0x7d4e .hword 0xc4b4,0x7170, 0x6332,0x50e6, 0x19be,0x7d63 .hword 0xc42e,0x712a, 0x6312,0x510d, 0x195b,0x7d77 .hword 0xc3a9,0x70e3, 0x62f2,0x5134, 0x18f9,0x7d8a .hword 0xc324,0x709b, 0x62d2,0x515b, 0x1896,0x7d9e .hword 0xc2a0,0x7053, 0x62b2,0x5181, 0x1833,0x7db1 .hword 0xc21c,0x700b, 0x6292,0x51a8, 0x17d1,0x7dc4 .hword 0xc198,0x6fc2, 0x6272,0x51cf, 0x176e,0x7dd6 .hword 0xc114,0x6f78, 0x6252,0x51f5, 0x170b,0x7de9 .hword 0xc091,0x6f2d, 0x6232,0x521c, 0x16a8,0x7dfb .hword 0xc00f,0x6ee2, 0x6211,0x5243, 0x1645,0x7e0c .hword 0xbf8c,0x6e97, 0x61f1,0x5269, 0x15e2,0x7e1e .hword 0xbf0a,0x6e4a, 0x61d1,0x5290, 0x157f,0x7e2f .hword 0xbe88,0x6dfe, 0x61b0,0x52b6, 0x151c,0x7e3f .hword 0xbe07,0x6db0, 0x6190,0x52dc, 0x14b9,0x7e50 .hword 0xbd86,0x6d62, 0x616f,0x5303, 0x1455,0x7e60 .hword 0xbd05,0x6d14, 0x614e,0x5329, 0x13f2,0x7e70 .hword 0xbc85,0x6cc4, 0x612e,0x534f, 0x138f,0x7e7f .hword 0xbc05,0x6c75, 0x610d,0x5375, 0x132b,0x7e8e .hword 0xbb85,0x6c24, 0x60ec,0x539b, 0x12c8,0x7e9d .hword 0xbb06,0x6bd3, 0x60cb,0x53c1, 0x1265,0x7eac .hword 0xba87,0x6b82, 0x60aa,0x53e7, 0x1201,0x7eba .hword 0xba09,0x6b30, 0x6089,0x540d, 0x119e,0x7ec8 .hword 0xb98b,0x6add, 0x6068,0x5433, 0x113a,0x7ed6 .hword 0xb90d,0x6a89, 0x6047,0x5459, 0x10d6,0x7ee3 .hword 0xb890,0x6a36, 0x6026,0x547f, 0x1073,0x7ef0 .hword 0xb813,0x69e1, 0x6005,0x54a4, 0x100f,0x7efd .hword 0xb796,0x698c, 0x5fe4,0x54ca, 0x0fab,0x7f0a .hword 0xb71a,0x6937, 0x5fc2,0x54f0, 0x0f47,0x7f16 .hword 0xb69e,0x68e0, 0x5fa1,0x5515, 0x0ee4,0x7f22 .hword 0xb623,0x688a, 0x5f80,0x553b, 0x0e80,0x7f2d .hword 0xb5a8,0x6832, 0x5f5e,0x5560, 0x0e1c,0x7f38 .hword 0xb52d,0x67da, 0x5f3c,0x5586, 0x0db8,0x7f43 .hword 0xb4b3,0x6782, 0x5f1b,0x55ab, 0x0d54,0x7f4e .hword 0xb439,0x6729, 0x5ef9,0x55d0, 0x0cf0,0x7f58 .hword 0xb3c0,0x66d0, 0x5ed7,0x55f6, 0x0c8c,0x7f62 .hword 0xb347,0x6675, 0x5eb6,0x561b, 0x0c28,0x7f6c .hword 0xb2cf,0x661b, 0x5e94,0x5640, 0x0bc4,0x7f75 .hword 0xb257,0x65c0, 0x5e72,0x5665, 0x0b60,0x7f7e .hword 0xb1df,0x6564, 0x5e50,0x568a, 0x0afb,0x7f87 .hword 0xb168,0x6507, 0x5e2e,0x56af, 0x0a97,0x7f90 .hword 0xb0f1,0x64ab, 0x5e0c,0x56d4, 0x0a33,0x7f98 .hword 0xb07b,0x644d, 0x5dea,0x56f9, 0x09cf,0x7fa0 .hword 0xb005,0x63ef, 0x5dc8,0x571e, 0x096b,0x7fa7 .hword 0xaf8f,0x6391, 0x5da5,0x5743, 0x0906,0x7fae .hword 0xaf1a,0x6332, 0x5d83,0x5767, 0x08a2,0x7fb5 .hword 0xaea5,0x62d2, 0x5d61,0x578c, 0x083e,0x7fbc .hword 0xae31,0x6272, 0x5d3e,0x57b1, 0x07d9,0x7fc2 .hword 0xadbd,0x6211, 0x5d1c,0x57d5, 0x0775,0x7fc8 .hword 0xad4a,0x61b0, 0x5cf9,0x57fa, 0x0711,0x7fce .hword 0xacd7,0x614e, 0x5cd7,0x581e, 0x06ac,0x7fd3 .hword 0xac65,0x60ec, 0x5cb4,0x5843, 0x0648,0x7fd9 .hword 0xabf3,0x6089, 0x5c91,0x5867, 0x05e3,0x7fdd .hword 0xab81,0x6026, 0x5c6f,0x588c, 0x057f,0x7fe2 .hword 0xab10,0x5fc2, 0x5c4c,0x58b0, 0x051b,0x7fe6 .hword 0xaaa0,0x5f5e, 0x5c29,0x58d4, 0x04b6,0x7fea .hword 0xaa30,0x5ef9, 0x5c06,0x58f8, 0x0452,0x7fed .hword 0xa9c0,0x5e94, 0x5be3,0x591c, 0x03ed,0x7ff1 .hword 0xa951,0x5e2e, 0x5bc0,0x5940, 0x0389,0x7ff4 .hword 0xa8e2,0x5dc8, 0x5b9d,0x5964, 0x0324,0x7ff6 .hword 0xa874,0x5d61, 0x5b7a,0x5988, 0x02c0,0x7ff8 .hword 0xa806,0x5cf9, 0x5b57,0x59ac, 0x025b,0x7ffa .hword 0xa799,0x5c91, 0x5b34,0x59d0, 0x01f7,0x7ffc .hword 0xa72c,0x5c29, 0x5b10,0x59f4, 0x0192,0x7ffe .hword 0xa6c0,0x5bc0, 0x5aed,0x5a18, 0x012e,0x7fff

Пито
Ср 15 июня 2016 г., 6:48
Например, CMSIS Cortex Cortex M3 DSP
CMSIS-DSP: коллекция библиотеки DSP с более чем 60 функциями для различных типов данных: точка фиксации (дробная Q7, Q15, Q31) и единственная точность с плавающей точкой (32-битная). Библиотека доступна для Cortex-M0, Cortex-M3 и Cortex-M4. Реализация Cortex-M4 оптимизирована для набора инструкций SIMD. Вам нужно подать заявку на FFT/IFFT Q15.

Здесь он работает с Teensy, так что он должен работать с STM32Duino тоже

https: // форум.PJRC.com/threads/24228-te ... -вопросы

Rogerclark
Ср 15 июня 2016 г., 6:53
Где эти либера ?

Я выполнил поиск на "Arm CMSIS Cortex M3 DSP LIB", но не могу найти никакого загружаемого кода.

Пито
Ср 15 июня 2016 г., 6:54
Teensy_duino работает с ним, так что просто возьмите его оттуда

https: // форум.PJRC.com/threads/24228-te ... -вопросы

Rogerclark
Ср 15 июня 2016 г., 6:55
Спасибо

Я также нашел здесь какой -нибудь код

https: // github.com/arm-software/cmsis/t ... IS/DSP_LIB

Пито
Ср 15 июня 2016 г., 7:00 утра
вот

https: // github.com/arm-software/cmsis/tree/master/cmsis

и десятки функций IFFT FFT

https: // github.com/arm-software/cmsis/t ... mfunctions

Используйте Q15 один..

Rogerclark
Ср 15 июня 2016 г., 21:32
@pitp

Я могу получить CMSIS FFT Q15 для компиляции, но в настоящее время код никогда не возвращается из функции FFT.

Я не думаю, что это разбито, так как доска все еще сбрасывается через USB.

Мне нужно найти пример использования этой функции Q15, так как я не уверен, необходимы ли какие -либо функции «init» перед тем, как ее вызовать. Как я знаю, некоторые другие функции ARM FFT требуют, чтобы функции инициализации были называться первыми.

Я нашел то, что выглядело как Q15 Enit Func, но это просто сбоя MCU, поэтому я думаю, что у меня есть проблема с типами данных.

На самом деле, я нахожу более интересным, так это то, как легко втянуть в эти библиотеки кодов CMSIS ARM CMSIS.

Мне нужно было быть только в 7 заголовках и 2 c -файлах.

Так что, как у либеров CMSIS есть множество других функций, я думаю, что есть разумная вероятность, что кто -то другой может найти их под рукой.

Не только FFT, есть множество других функций (как я уверен, вы хорошо знаете)