diff --git a/firmware/baseband/dsp_demodulate.cpp b/firmware/baseband/dsp_demodulate.cpp index b6cbc45ef..6645f424b 100644 --- a/firmware/baseband/dsp_demodulate.cpp +++ b/firmware/baseband/dsp_demodulate.cpp @@ -55,6 +55,23 @@ buffer_f32_t AM::execute( return { dst.p, src.count, src.sampling_rate }; } + +buffer_f32_t SSB::execute( + const buffer_c16_t& src, + const buffer_f32_t& dst +) { + const complex16_t* src_p = src.p; + const auto src_end = &src.p[src.count]; + auto dst_p = dst.p; + while(src_p < src_end) { + *(dst_p++) = (src_p++)->real(); + *(dst_p++) = (src_p++)->real(); + *(dst_p++) = (src_p++)->real(); + *(dst_p++) = (src_p++)->real(); + } + + return { dst.p, src.count, src.sampling_rate }; +} /* static inline float angle_approx_4deg0(const complex32_t t) { const auto x = static_cast(t.imag()) / static_cast(t.real()); diff --git a/firmware/baseband/dsp_demodulate.hpp b/firmware/baseband/dsp_demodulate.hpp index c93d3b196..d7117b9d9 100644 --- a/firmware/baseband/dsp_demodulate.hpp +++ b/firmware/baseband/dsp_demodulate.hpp @@ -35,6 +35,14 @@ public: ); }; +class SSB { +public: + buffer_f32_t execute( + const buffer_c16_t& src, + const buffer_f32_t& dst + ); +}; + class FM { public: buffer_f32_t execute(