It's starting to sound right
This commit is contained in:
@@ -51,7 +51,7 @@ public:
|
||||
interleaver(baud_rate, interleave_setting, is_frequency_hopping),
|
||||
input_data(std::move(_data)),
|
||||
mgd_decoder(baud_rate, is_frequency_hopping),
|
||||
modulator(48000) {}
|
||||
modulator(baud_rate, 48000, 0.5, is_frequency_hopping) {}
|
||||
|
||||
/**
|
||||
* @brief Transmits the input data by processing it through different phases like FEC encoding, interleaving, symbol formation, scrambling, and modulation.
|
||||
@@ -80,10 +80,7 @@ public:
|
||||
|
||||
std::vector<int16_t> modulated_signal = modulator.modulate(symbol_stream);
|
||||
|
||||
// Step 7: Apply Sqrt Half Cosine Filter with a rolloff factor of 0.3 (30%)
|
||||
std::vector<int16_t> filtered_signal = SqrtHalfCosine(modulated_signal, 0.3);
|
||||
|
||||
return filtered_signal;
|
||||
return modulated_signal;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -92,6 +89,7 @@ private:
|
||||
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;
|
||||
|
||||
SymbolFormation symbol_formation; ///< Symbol formation instance to form symbols from data.
|
||||
Scrambler scrambler; ///< Scrambler instance for scrambling the data.
|
||||
@@ -128,28 +126,6 @@ private:
|
||||
return eom_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Applies a square-root raised cosine filter to the input signal.
|
||||
* @param input_signal The input modulated signal.
|
||||
* @param rolloff_factor The rolloff factor of the filter.
|
||||
* @return The filtered signal.
|
||||
*/
|
||||
[[nodiscard]] std::vector<int16_t> SqrtHalfCosine(const std::vector<int16_t>& input_signal, double rolloff_factor) const {
|
||||
std::vector<int16_t> filtered_signal(input_signal.size());
|
||||
const double pi = M_PI;
|
||||
const double normalization_factor = 1.0 / (1.0 + rolloff_factor);
|
||||
|
||||
for (size_t i = 0; i < input_signal.size(); ++i) {
|
||||
double t = static_cast<double>(i) / input_signal.size();
|
||||
double cosine_term = std::cos(pi * t * rolloff_factor);
|
||||
double filtered_value = input_signal[i] * normalization_factor * (0.5 + 0.5 * cosine_term);
|
||||
|
||||
filtered_signal[i] = clamp(static_cast<int16_t>(filtered_value));
|
||||
}
|
||||
|
||||
return filtered_signal;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> splitTribitSymbols(const BitStream& input_data) {
|
||||
std::vector<uint8_t> return_vector;
|
||||
size_t max_index = input_data.getMaxBitIndex();
|
||||
|
||||
Reference in New Issue
Block a user