2323#include " overlay.hpp"
2424#include " windows.hpp"
2525
26+ #include < bit>
2627#include < composite/component.hpp>
2728#include < complex>
2829#include < fftw3.h>
@@ -36,26 +37,32 @@ class fft : public composite::component {
3637 using window_t = aligned::aligned_mem<T>;
3738 using input_port_t = composite::input_port<std::unique_ptr<fft_t >>;
3839 using output_port_t = composite::output_port<std::unique_ptr<fft_t >>;
40+ using enum composite::config_type;
3941public:
4042 fft () : composite::component(" fft" ) {
4143 add_port (m_in_port.get ());
4244 add_port (m_out_port.get ());
43- add_property (" window" , &m_window_type);
44- add_property (" fft_size" , &m_fft_size);
45+ add_property (" window" , &m_window_type).change_listener ([this ]() {
46+ if ((m_window_type == " BLACKMAN_HARRIS" ) || (m_window_type == " HAMMING" )) {
47+ return true ;
48+ }
49+ return false ;
50+ });
51+ add_property (" fft_size" , &m_fft_size).configurability (RUNTIME).change_listener ([this ]() {
52+ return std::has_single_bit (m_fft_size);
53+ });
4554 add_property (" fftw_threads" , &m_fftw_threads);
46- add_property (" shift" , &m_shift);
55+ add_property (" shift" , &m_shift). configurability (RUNTIME) ;
4756 }
4857
4958 ~fft () override = default ;
5059
51- auto initialize () -> void override {
52- // Init window
60+ auto property_change_handler () -> void override {
5361 if (m_window_type == " BLACKMAN_HARRIS" ) {
5462 m_window = windows::blackman_harris<T>(m_fft_size);
5563 } else if (m_window_type == " HAMMING" ) {
5664 m_window = windows::hamming<T>(m_fft_size);
5765 }
58- // Init fftw
5966 m_fft_plan = std::make_unique<plan_t >(m_fft_size, m_fftw_threads, m_shift);
6067 }
6168
0 commit comments