#ifndef _TRANSMITTER_HPP_ #define _TRANSMITTER_HPP_ #include #include #include #include #include "JuceHeader.h" #include "LogComponent.h" #include #include #include #include "TransmitterInterface.hpp" #include "TransmitterBuffer.hpp" using namespace Radio; #define TRANSMITTER_RCF_OVERSAMPLING ((uint32_t)32) #define TRANSMITTER_RCF_ROLLOFF ((radio_float_t)0.35) // --------------------------------------------------- class Transmitter : public TransmitterInterface, public juce::Thread { const size_t BUFFERSIZE_DATA = 256; const size_t BUFFERSIZE_SYMBOL = 8*256; public: Transmitter(void); ~Transmitter(void); void bufferResize(uint32_t size); private: CriticalSection m_lock; Formatter m_formatter; Symbolizer m_symbolizer; sym_map_t m_symbolMapper; Interpolation::UpSampler m_firUp; uint32_t m_bufferSize; RVec m_bufferRF; CVec m_bufferSym; CVec m_bufferSymRcf; radio_float_t m_samplerate; radio_float_t m_ddcFrequency; radio_float_t m_symbolrate; uint32_t m_numBitPerSymbol; radio_float_t *m_pCoeffRCF; radio_float_t m_kRcf; radio_float_t m_carrierFreq; Nco m_duc; TransmitterBuffer m_txBuf; uint32_t m_symCount; uint32_t m_upsampleFactor; // Processor Buffers Processor::Buffer m_buffer_data_in; Processor::Buffer m_buffer_symbol_in; Processor::Buffer m_buffer_symbol_out; // Thread void run() override; // Transmit symbols void transmit(); void paramChanged(); // TransmitterInterface void reset() override; void setBuffersize(uint32_t size) override; void setSamplerate(radio_float_t samplerate_hz) override; void setCarrierFrequency(radio_float_t frequency_hz) override; radio_float_t getCarrierFrequency() override; void setSymbolRate(radio_float_t symbolrate_bit_per_sec) override; radio_float_t getSymbolRate() override; void setNumBitPerSymbol(uint32_t numBitPerSymbol) override; void getData(float *pRF, uint32_t len) override; }; #endif // _TRANSMITTER_HPP_