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:
@ -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")));
|
||||
|
||||
@ -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){
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user