Modified Costas loop; descramble sync data before unmapping
This commit is contained in:
@@ -40,7 +40,7 @@ public:
|
||||
* @param data The input data stream to be transmitted. The `is_voice` parameter controls whether the modem treats it as binary file data,
|
||||
* or a binary stream from the MELPe (or other) voice codec.
|
||||
*/
|
||||
ModemController(const size_t _baud_rate, const bool _is_voice, const bool _is_frequency_hopping, const size_t _interleave_setting, BitStream _data)
|
||||
ModemController(const size_t _baud_rate, const bool _is_voice, const bool _is_frequency_hopping, const size_t _interleave_setting)
|
||||
: baud_rate(_baud_rate),
|
||||
is_voice(_is_voice),
|
||||
is_frequency_hopping(_is_frequency_hopping),
|
||||
@@ -49,7 +49,6 @@ public:
|
||||
scrambler(),
|
||||
fec_encoder(_baud_rate, _is_frequency_hopping),
|
||||
interleaver(_baud_rate, _interleave_setting, _is_frequency_hopping),
|
||||
input_data(std::move(_data)),
|
||||
mgd_decoder(_baud_rate, _is_frequency_hopping),
|
||||
modulator(48000, _is_frequency_hopping, 48) {}
|
||||
|
||||
@@ -58,7 +57,7 @@ public:
|
||||
* @return The scrambled data ready for modulation.
|
||||
* @note The modulated signal is generated internally but is intended to be handled externally.
|
||||
*/
|
||||
std::vector<int16_t> transmit() {
|
||||
std::vector<int16_t> transmit(BitStream input_data) {
|
||||
// Step 1: Append EOM Symbols
|
||||
BitStream eom_appended_data = appendEOMSymbols(input_data);
|
||||
|
||||
@@ -84,11 +83,17 @@ public:
|
||||
return modulated_signal;
|
||||
}
|
||||
|
||||
BitStream receive(const std::vector<int16_t>& passband_signal) {
|
||||
// Step one: Demodulate the passband signal and retrieve decoded symbols
|
||||
std::vector<uint8_t> demodulated_symbols = modulator.demodulate(passband_signal, baud_rate, interleave_setting, is_voice);
|
||||
|
||||
return BitStream();
|
||||
}
|
||||
|
||||
private:
|
||||
size_t baud_rate; ///< The baud rate for the modem.
|
||||
bool is_voice; ///< Indicates if the data being transmitted is voice.
|
||||
bool is_frequency_hopping; ///< Indicates if frequency hopping is used.
|
||||
BitStream input_data; ///< The input data stream.
|
||||
size_t interleave_setting; ///< The interleave setting to be used.
|
||||
size_t sample_rate;
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@ public:
|
||||
/**
|
||||
* @brief Constructor initializes the scrambler with a predefined register value.
|
||||
*/
|
||||
Scrambler() : data_sequence_register(0x0BAD), symbol_count(0) {}
|
||||
Scrambler() : data_sequence_register(0x0BAD), symbol_count(0), preamble_table_index(0) {}
|
||||
|
||||
/**
|
||||
* @brief Scrambles a synchronization preamble using a fixed randomizer sequence.
|
||||
* @param preamble The synchronization preamble to scramble.
|
||||
* @return The scrambled synchronization preamble.
|
||||
*/
|
||||
std::vector<uint8_t> scrambleSyncPreamble(const std::vector<uint8_t>& preamble) const {
|
||||
std::vector<uint8_t> scrambleSyncPreamble(const std::vector<uint8_t>& preamble) {
|
||||
static const std::array<uint8_t, 32> sync_randomizer_sequence = {
|
||||
7, 4, 3, 0, 5, 1, 5, 0, 2, 2, 1, 1,
|
||||
5, 7, 4, 3, 5, 0, 2, 6, 2, 1, 6, 2,
|
||||
@@ -33,8 +33,9 @@ public:
|
||||
scrambled_preamble.reserve(preamble.size()); // Preallocate to improve efficiency
|
||||
|
||||
for (size_t i = 0; i < preamble.size(); ++i) {
|
||||
uint8_t scrambled_value = (preamble[i] + sync_randomizer_sequence[i % sync_randomizer_sequence.size()]) % 8;
|
||||
uint8_t scrambled_value = (preamble[i] + sync_randomizer_sequence[preamble_table_index]) % 8;
|
||||
scrambled_preamble.push_back(scrambled_value);
|
||||
preamble_table_index = (preamble_table_index + 1) % sync_randomizer_sequence.size();
|
||||
}
|
||||
|
||||
return scrambled_preamble;
|
||||
@@ -61,6 +62,7 @@ public:
|
||||
private:
|
||||
uint16_t data_sequence_register;
|
||||
size_t symbol_count;
|
||||
size_t preamble_table_index;
|
||||
|
||||
/**
|
||||
* @brief Generates the next value from the data sequence randomizing generator.
|
||||
|
||||
Reference in New Issue
Block a user