diff --git a/Makefile b/Makefile index 899f3e6..87e719f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ EXE = fastsa -SOURCES = main.cpp +SOURCES = fft.cpp main.cpp SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) diff --git a/fft.cpp b/fft.cpp new file mode 100644 index 0000000..e4ca68e --- /dev/null +++ b/fft.cpp @@ -0,0 +1,23 @@ +#include +#include + +#define POCKETFFT_CACHE_SIZE (16*1024*1024) +#define POCKETFFT_NO_MULTITHREADING // MT doesn't seem to help at small sizes +#include + +void fft_mag(std::complex* in, float* out, size_t len) +{ + pocketfft::shape_t shape{len}; + pocketfft::stride_t stride(1); + stride[0] = sizeof(std::complex); + pocketfft::shape_t axes; + axes.push_back(0); + std::vector> out_rev(len); + + pocketfft::c2c(shape, stride, stride, axes, pocketfft::FORWARD, in, out_rev.data(), 1.0f); + // negative frequencies first + for(size_t i=0;i -#define POCKETFFT_CACHE_SIZE (16*1024*1024) -#define POCKETFFT_NO_MULTITHREADING // MT doesn't seem to help at small sizes -#include - namespace net = std::experimental::net; + +void fft_mag(std::complex* in, float* out, size_t len); + + static std::atomic terminate_dsp; struct bladerf* bladerf_dev; @@ -51,12 +51,6 @@ static void dsp_thread() { size_t len = 16384; std::vector> frames(len); std::vector> frames_f(len); - pocketfft::shape_t shape{len}; - pocketfft::stride_t stride(1); - stride[0] = sizeof(std::complex); - pocketfft::shape_t axes; - axes.push_back(0); - std::vector> frames_ft_rev(len); std::vector frames_mag(len); int iterations = 0; @@ -69,15 +63,7 @@ static void dsp_thread() { break; } - // FFT - for(size_t i=0;i