It's starting to sound right

This commit is contained in:
2024-10-10 01:48:59 -04:00
parent 172a731ea5
commit 628a25dc24
2 changed files with 101 additions and 47 deletions
+3 -27
View File
@@ -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();