Files
mpsk_rx_gui/Source/Transmitter.hpp
T
2022-06-26 16:53:29 +00:00

87 lines
2.2 KiB
C++

#ifndef _TRANSMITTER_HPP_
#define _TRANSMITTER_HPP_
#include <cstdint>
#include <radio/symbol.h>
#include <radio/interpolation.h>
#include "JuceHeader.h"
#include "LogComponent.h"
#include <cpp/radio/Vector.hpp>
#include <cpp/radio/Nco.hpp>
#include <cpp/radio/Formatter.hpp>
#include <cpp/radio/Symbolizer.hpp>
#include <cpp/radio/interpolation/UpSampler.hpp>
#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<uint8_t> m_buffer_data_in;
Processor::Buffer<uint8_t> m_buffer_symbol_in;
Processor::Buffer<uint32_t> 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_