From 882fbbef3182973be53e06107580478c7f7e4df3 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 17 Sep 2015 17:27:37 -0700 Subject: [PATCH] Add more fft_swap bit reversal functions. --- firmware/common/dsp_fft.hpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/firmware/common/dsp_fft.hpp b/firmware/common/dsp_fft.hpp index 5fbf08428..3f88b6a3d 100644 --- a/firmware/common/dsp_fft.hpp +++ b/firmware/common/dsp_fft.hpp @@ -29,6 +29,7 @@ #include #include +#include "dsp_types.hpp" #include "complex.hpp" #include "hal.h" @@ -54,6 +55,20 @@ constexpr size_t log_2(const size_t n, const size_t p = 0) { return (n <= 1) ? p : log_2(n / 2, p + 1); } +template +void fft_swap(const buffer_c16_t src, std::array& dst) { + static_assert(power_of_two(N), "only defined for N == power of two"); + + for(size_t i=0; i> (32 - log_2(N)); + const auto s = src.p[i]; + dst[i_rev] = { + static_cast(s.real()), + static_cast(s.imag()) + }; + } +} + template void fft_swap(const std::array& src, std::array& dst) { static_assert(power_of_two(N), "only defined for N == power of two"); @@ -69,10 +84,20 @@ void fft_swap(const std::array& src, std::array& dst) { } template -void fft_swap_in_place(std::array& data) { +void fft_swap(const std::array& src, std::array& dst) { static_assert(power_of_two(N), "only defined for N == power of two"); for(size_t i=0; i> (32 - log_2(N)); + dst[i_rev] = src[i]; + } +} + +template +void fft_swap_in_place(std::array& data) { + static_assert(power_of_two(N), "only defined for N == power of two"); + + for(size_t i=0; i> (32 - log_2(N)); std::swap(data[i], data[i_rev]); }