enabled FFT. But somehow it makes random-looking result. My next step -- flush twiddles to the PC and check them

This commit is contained in:
2025-10-09 18:40:56 +03:00
parent eafa833ed6
commit 2f6f7d9793
14 changed files with 8294 additions and 8259 deletions

View File

@ -32,8 +32,11 @@
#define FFT_FP_EXTERNAL_TWIDDLES
#define DATA_L (1<<10)
#define TWIDDLE_L (DATA_L / 2)
#include "FFT_FP_realisation.h"
volatile int64_t twiddle_re[TWIDDLE_L] __attribute__((section(".sdram_noinit")));
volatile int64_t twiddle_im[TWIDDLE_L] __attribute__((section(".sdram_noinit")));

View File

@ -150,9 +150,17 @@ uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint64_t* FF
FFT_buff[FFT_buff_I++] = AVG_buff[i++];
}
}else if (mode == FFT){
uint32_t i = 0;
//uint32_t i = 0;
//void FFT_fp(int64_t* inp, uint32_t inp_L, int64_t* buf)
FFT_fp(AVG_buff, FFT_INP_DATA_L, FFT_buff);
/* }else if (mode == FLUSH_TWIDDLES){
uint32_t i = 0;
while ((FFT_buff_I < FFT_BUFF_SIZE) && (i < TWIDDLE_L)){
FFT_buff[FFT_buff_I++] = twiddle_re[i++];
}
*/
}
return FFT_buff_I;
@ -268,7 +276,8 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
FFT_buff[i] = 0;
}
uint32_t FFT_res_size = dataprocessor(AVG_buff, Proc_state.AVG_buff_I_last, FFT_buff, TRANSPARENT);
uint32_t FFT_res_size = dataprocessor(AVG_buff, Proc_state.AVG_buff_I_last, FFT_buff, FFT);
// uint32_t FFT_res_size = dataprocessor(AVG_buff, Proc_state.AVG_buff_I_last, FFT_buff, TRANSPARENT);
@ -333,7 +342,7 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
}
}
}else{
AVG_buff[Proc_state.AVG_buff_I] = 0xC1000000;
//AVG_buff[Proc_state.AVG_buff_I] = 0xC1000000;
Proc_state.AVG_buff_I_last = Proc_state.AVG_buff_I;
Proc_state.AVG_buff_I++;
if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){

View File

@ -12,6 +12,10 @@
#define FFT_INP_DATA_L (1<<10)
//#define FFT_FP_EXTERNAL_TWIDDLES
//#define DATA_L (1<<10)
//#define TWIDDLE_L (DATA_L / 2)
//#define TX_BUFF_SIZE 100000
#define RAW_DATA_BUFF_SIZE 1000
#define AVG_BUFF_SIZE FFT_INP_DATA_L
@ -68,6 +72,7 @@ enum dataprocessor_state {
FFT,
FFT_DONE,
WORK,
FLUSH_TWIDDLES,
};
/*

View File

@ -14,15 +14,21 @@ void stream_proc(void);
* Для расположения в начало банка A данных используем специальную секцию */
SECTION("board_state", volatile t_l502_board_state g_state);
uint8_t twiddles_generated = 0;
int main(void) {
/* Инициализация интерфейсов */
l502_init();
fft_twiddle_gen(twiddle_re, twiddle_im);
for (;;) {
/* проверяем наличие команды от ПК и начинаяем
обработку, если она есть */
l502_cmd_check_req();
if (! twiddles_generated){
fft_twiddle_gen(twiddle_re, twiddle_im);
twiddles_generated = 1;
}
/* обработка потоков данных */
stream_proc();
}