mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-21 04:58:38 -05:00
M17: Util code cleanup
This commit is contained in:
parent
8e1d5a3bbd
commit
ca24d1bc57
@ -154,7 +154,7 @@ struct M17FrameDecoder
|
|||||||
DecodeResult decode_lsf(input_buffer_t& buffer, int& viterbi_cost)
|
DecodeResult decode_lsf(input_buffer_t& buffer, int& viterbi_cost)
|
||||||
{
|
{
|
||||||
depunctured_buffer_t depuncture_buffer;
|
depunctured_buffer_t depuncture_buffer;
|
||||||
depuncture(buffer, depuncture_buffer.lsf, P1);
|
depuncture<368, 488, 61>(buffer, depuncture_buffer.lsf, P1);
|
||||||
viterbi_cost = viterbi_.decode(depuncture_buffer.lsf, decode_buffer.lsf);
|
viterbi_cost = viterbi_.decode(depuncture_buffer.lsf, decode_buffer.lsf);
|
||||||
to_byte_array(decode_buffer.lsf, output_buffer.lsf);
|
to_byte_array(decode_buffer.lsf, output_buffer.lsf);
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ struct M17FrameDecoder
|
|||||||
DecodeResult decode_bert(input_buffer_t& buffer, int& viterbi_cost)
|
DecodeResult decode_bert(input_buffer_t& buffer, int& viterbi_cost)
|
||||||
{
|
{
|
||||||
depunctured_buffer_t depuncture_buffer;
|
depunctured_buffer_t depuncture_buffer;
|
||||||
depuncture(buffer, depuncture_buffer.bert, P2);
|
depuncture<368, 402, 12>(buffer, depuncture_buffer.bert, P2);
|
||||||
viterbi_cost = viterbi_.decode(depuncture_buffer.bert, decode_buffer.bert);
|
viterbi_cost = viterbi_.decode(depuncture_buffer.bert, decode_buffer.bert);
|
||||||
to_byte_array(decode_buffer.bert, output_buffer.bert);
|
to_byte_array(decode_buffer.bert, output_buffer.bert);
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ struct M17FrameDecoder
|
|||||||
std::copy(buffer.begin() + 96, buffer.end(), tmp.begin());
|
std::copy(buffer.begin() + 96, buffer.end(), tmp.begin());
|
||||||
depunctured_buffer_t depuncture_buffer;
|
depunctured_buffer_t depuncture_buffer;
|
||||||
|
|
||||||
depuncture(tmp, depuncture_buffer.stream, P2);
|
depuncture<272, 296, 12>(tmp, depuncture_buffer.stream, P2);
|
||||||
viterbi_cost = viterbi_.decode(depuncture_buffer.stream, decode_buffer.stream);
|
viterbi_cost = viterbi_.decode(depuncture_buffer.stream, decode_buffer.stream);
|
||||||
to_byte_array(decode_buffer.stream, output_buffer.stream);
|
to_byte_array(decode_buffer.stream, output_buffer.stream);
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ struct M17FrameDecoder
|
|||||||
DecodeResult decode_packet(input_buffer_t& buffer, int& viterbi_cost, FrameType type)
|
DecodeResult decode_packet(input_buffer_t& buffer, int& viterbi_cost, FrameType type)
|
||||||
{
|
{
|
||||||
depunctured_buffer_t depuncture_buffer;
|
depunctured_buffer_t depuncture_buffer;
|
||||||
depuncture(buffer, depuncture_buffer.packet, P3);
|
depuncture<368, 420, 8>(buffer, depuncture_buffer.packet, P3);
|
||||||
viterbi_cost = viterbi_.decode(depuncture_buffer.packet, decode_buffer.packet);
|
viterbi_cost = viterbi_.decode(depuncture_buffer.packet, decode_buffer.packet);
|
||||||
to_byte_array(decode_buffer.packet, output_buffer.packet);
|
to_byte_array(decode_buffer.packet, output_buffer.packet);
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::array<int8_t, 368> punctured;
|
std::array<int8_t, 368> punctured;
|
||||||
auto size = puncture(encoded, punctured, P1);
|
auto size = puncture<488, 368, 61>(encoded, punctured, P1);
|
||||||
|
|
||||||
if (size != 368) {
|
if (size != 368) {
|
||||||
qWarning() << "modemm17::M17Modulator::make_lsf: incorrect size (not 368)" << size;
|
qWarning() << "modemm17::M17Modulator::make_lsf: incorrect size (not 368)" << size;
|
||||||
@ -273,7 +273,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::array<int8_t, 272> punctured;
|
std::array<int8_t, 272> punctured;
|
||||||
auto size = modemm17::puncture(encoded, punctured, modemm17::P2);
|
auto size = modemm17::puncture<296, 272, 12>(encoded, punctured, modemm17::P2);
|
||||||
|
|
||||||
if (size != 272) {
|
if (size != 272) {
|
||||||
qWarning() << "modemm17::M17Modulator::make_stream_data_frame: incorrect size (not 272)" << size;
|
qWarning() << "modemm17::M17Modulator::make_stream_data_frame: incorrect size (not 272)" << size;
|
||||||
@ -354,7 +354,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::array<int8_t, 368> punctured;
|
std::array<int8_t, 368> punctured;
|
||||||
auto size = puncture(encoded, punctured, P3);
|
auto size = puncture<420, 368, 8>(encoded, punctured, P3);
|
||||||
|
|
||||||
if (size != 368) {
|
if (size != 368) {
|
||||||
qWarning() << "modemm17::M17Modulator::make_packet_frame: incorrect size (not 368)" << size;
|
qWarning() << "modemm17::M17Modulator::make_packet_frame: incorrect size (not 368)" << size;
|
||||||
@ -435,7 +435,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::array<int8_t, 368> punctured;
|
std::array<int8_t, 368> punctured;
|
||||||
auto size = puncture(encoded, punctured, P2);
|
auto size = puncture<402, 368, 12>(encoded, punctured, P2);
|
||||||
|
|
||||||
if (size != 368) {
|
if (size != 368) {
|
||||||
qWarning() << "modemm17::M17Modulator::make_bert_frame: incorrect size (not 368)" << size;
|
qWarning() << "modemm17::M17Modulator::make_bert_frame: incorrect size (not 368)" << size;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <cstdint>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
@ -170,7 +171,7 @@ std::array<U, M> depunctured(
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <size_t IN, size_t OUT, size_t P>
|
template <size_t IN, size_t OUT, size_t P>
|
||||||
size_t depuncture(
|
size_t depuncture( // FIXME: MSVC
|
||||||
const std::array<int8_t, IN>& in,
|
const std::array<int8_t, IN>& in,
|
||||||
std::array<int8_t, OUT>& out,
|
std::array<int8_t, OUT>& out,
|
||||||
const std::array<int8_t, P>& p
|
const std::array<int8_t, P>& p
|
||||||
@ -190,16 +191,18 @@ size_t depuncture(
|
|||||||
{
|
{
|
||||||
out[i] = in[index++];
|
out[i] = in[index++];
|
||||||
}
|
}
|
||||||
if (pindex == P) pindex = 0;
|
if (pindex == P) {
|
||||||
|
pindex = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return bit_count;
|
return bit_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T, size_t IN, typename U, size_t OUT, size_t P>
|
template <size_t IN, size_t OUT, size_t P>
|
||||||
size_t puncture(
|
size_t puncture( // FIXME: MSVC
|
||||||
const std::array<T, IN>& in,
|
const std::array<uint8_t, IN>& in,
|
||||||
std::array<U, OUT>& out,
|
std::array<int8_t, OUT>& out,
|
||||||
const std::array<int8_t, P>& p
|
const std::array<int8_t, P>& p
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -267,30 +270,6 @@ void assign_bit_index(
|
|||||||
else reset_bit_index(input, index);
|
else reset_bit_index(input, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <size_t IN, size_t OUT, size_t P>
|
|
||||||
size_t puncture_bytes(
|
|
||||||
const std::array<uint8_t, IN>& in,
|
|
||||||
std::array<uint8_t, OUT>& out,
|
|
||||||
const std::array<int8_t, P>& p
|
|
||||||
)
|
|
||||||
{
|
|
||||||
size_t index = 0;
|
|
||||||
size_t pindex = 0;
|
|
||||||
size_t bit_count = 0;
|
|
||||||
for (size_t i = 0; i != IN * 8 && index != OUT * 8; ++i)
|
|
||||||
{
|
|
||||||
if (p[pindex++])
|
|
||||||
{
|
|
||||||
assign_bit_index(out, index++, get_bit_index(in, i));
|
|
||||||
bit_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pindex == P) pindex = 0;
|
|
||||||
}
|
|
||||||
return bit_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sign-extend an n-bit value to a specific signed integer type.
|
* Sign-extend an n-bit value to a specific signed integer type.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user