Add all Pulse Count ICDFs

From https://datatracker.ietf.org/doc/html/rfc6716#section-4.2.7.8.3
This commit is contained in:
Sean DuBois 2022-08-07 14:46:21 -04:00
parent a7a80f67e8
commit 65e49e6622
2 changed files with 252 additions and 0 deletions

View file

@ -579,6 +579,17 @@ func (d *Decoder) decodeExcitation(nanoseconds int, bandwidth Bandwidth, voiceAc
}
}
}
// The locations of the pulses in each shell block follow the pulse
// counts. As with the pulse counts, these locations are coded for all the shell blocks
// before any of the remaining information for each block. Unlike many
// other codecs, SILK places no restriction on the distribution of
// pulses within a shell block. All of the pulses may be placed in a
// single location, or each one in a unique location, or anything in
// between.
//
// https://datatracker.ietf.org/doc/html/rfc6716#section-4.2.7.8.3
}
// Decode decodes many SILK subframes

View file

@ -252,4 +252,245 @@ var (
{256, 1, 2, 3, 9, 36, 94, 150, 189, 214, 228, 238, 244, 247, 250, 252, 253, 254, 256},
{256, 2, 3, 9, 36, 94, 150, 189, 214, 228, 238, 244, 247, 250, 252, 253, 254, 256, 256},
}
// +------------+------------------------------------------------------+
// | Pulse | PDF |
// | Count | |
// +------------+------------------------------------------------------+
// | 1 | {126, 130}/256 |
// | | |
// | 2 | {56, 142, 58}/256 |
// | | |
// | 3 | {25, 101, 104, 26}/256 |
// | | |
// | 4 | {12, 60, 108, 64, 12}/256 |
// | | |
// | 5 | {7, 35, 84, 87, 37, 6}/256 |
// | | |
// | 6 | {4, 20, 59, 86, 63, 21, 3}/256 |
// | | |
// | 7 | {3, 12, 38, 72, 75, 42, 12, 2}/256 |
// | | |
// | 8 | {2, 8, 25, 54, 73, 59, 27, 7, 1}/256 |
// | | |
// | 9 | {2, 5, 17, 39, 63, 65, 42, 18, 4, 1}/256 |
// | | |
// | 10 | {1, 4, 12, 28, 49, 63, 54, 30, 11, 3, 1}/256 |
// | | |
// | 11 | {1, 4, 8, 20, 37, 55, 57, 41, 22, 8, 2, 1}/256 |
// | | |
// | 12 | {1, 3, 7, 15, 28, 44, 53, 48, 33, 16, 6, 1, 1}/256 |
// | | |
// | 13 | {1, 2, 6, 12, 21, 35, 47, 48, 40, 25, 12, 5, 1, |
// | | 1}/256 |
// | | |
// | 14 | {1, 1, 4, 10, 17, 27, 37, 47, 43, 33, 21, 9, 4, 1, |
// | | 1}/256 |
// | | |
// | 15 | {1, 1, 1, 8, 14, 22, 33, 40, 43, 38, 28, 16, 8, 1, |
// | | 1, 1}/256 |
// | | |
// | 16 | {1, 1, 1, 1, 13, 18, 27, 36, 41, 41, 34, 24, 14, 1, |
// | | 1, 1, 1}/256 |
// +------------+------------------------------------------------------+
//
// Table 47: PDFs for Pulse Count Split, 16 Sample Partitions
icdfPulseCountSplit16SamplePartitions = [][]uint{
{256, 126, 256},
{256, 56, 198, 256},
{256, 25, 126, 230, 256},
{256, 12, 72, 180, 244, 256},
{256, 7, 42, 126, 213, 250, 256},
{256, 4, 24, 83, 169, 232, 253, 256},
{256, 3, 15, 53, 125, 200, 242, 254, 256},
{256, 2, 10, 35, 89, 162, 221, 248, 255, 256},
{256, 2, 7, 24, 63, 126, 191, 233, 251, 255, 256},
{256, 1, 5, 17, 45, 94, 157, 211, 241, 252, 255, 256},
{256, 1, 5, 13, 33, 70, 125, 182, 223, 245, 253, 255, 256},
{256, 1, 4, 11, 26, 54, 98, 151, 199, 232, 248, 254, 255, 256},
{256, 1, 3, 9, 21, 42, 77, 124, 172, 212, 237, 249, 254, 255, 256},
{256, 1, 2, 6, 16, 33, 60, 97, 144, 187, 220, 241, 250, 254, 255, 256},
{256, 1, 2, 3, 11, 25, 47, 80, 120, 163, 201, 229, 245, 253, 254, 255, 256},
{256, 1, 2, 3, 4, 17, 35, 62, 98, 139, 180, 214, 238, 252, 253, 254, 255, 256},
}
// +------------+------------------------------------------------------+
// | Pulse | PDF |
// | Count | |
// +------------+------------------------------------------------------+
// | 1 | {127, 129}/256 |
// | | |
// | 2 | {53, 149, 54}/256 |
// | | |
// | 3 | {22, 105, 106, 23}/256 |
// | | |
// | 4 | {11, 61, 111, 63, 10}/256 |
// | | |
// | 5 | {6, 35, 86, 88, 36, 5}/256 |
// | | |
// | 6 | {4, 20, 59, 87, 62, 21, 3}/256 |
// | | |
// | 7 | {3, 13, 40, 71, 73, 41, 13, 2}/256 |
// | | |
// | 8 | {3, 9, 27, 53, 70, 56, 28, 9, 1}/256 |
// | | |
// | 9 | {3, 8, 19, 37, 57, 61, 44, 20, 6, 1}/256 |
// | | |
// | 10 | {3, 7, 15, 28, 44, 54, 49, 33, 17, 5, 1}/256 |
// | | |
// | 11 | {1, 7, 13, 22, 34, 46, 48, 38, 28, 14, 4, 1}/256 |
// | | |
// | 12 | {1, 1, 11, 22, 27, 35, 42, 47, 33, 25, 10, 1, 1}/256 |
// | | |
// | 13 | {1, 1, 6, 14, 26, 37, 43, 43, 37, 26, 14, 6, 1, |
// | | 1}/256 |
// | | |
// | 14 | {1, 1, 4, 10, 20, 31, 40, 42, 40, 31, 20, 10, 4, 1, |
// | | 1}/256 |
// | | |
// | 15 | {1, 1, 3, 8, 16, 26, 35, 38, 38, 35, 26, 16, 8, 3, |
// | | 1, 1}/256 |
// | | |
// | 16 | {1, 1, 2, 6, 12, 21, 30, 36, 38, 36, 30, 21, 12, 6, |
// | | 2, 1, 1}/256 |
// +------------+------------------------------------------------------+
// Table 48: PDFs for Pulse Count Split, 8 Sample Partitions
icdfPulseCountSplit8SamplePartitions = [][]uint{
{256, 127, 256},
{256, 53, 202, 256},
{256, 22, 127, 233, 256},
{256, 11, 72, 183, 246, 256},
{256, 6, 41, 127, 215, 251, 256},
{256, 4, 24, 83, 170, 232, 253, 256},
{256, 3, 16, 56, 127, 200, 241, 254, 256},
{256, 3, 12, 39, 92, 162, 218, 246, 255, 256},
{256, 3, 11, 30, 67, 124, 185, 229, 249, 255, 256},
{256, 3, 10, 25, 53, 97, 151, 200, 233, 250, 255, 256},
{256, 1, 8, 21, 43, 77, 123, 171, 209, 237, 251, 255, 256},
{256, 1, 2, 13, 35, 62, 97, 139, 186, 219, 244, 254, 255, 256},
{256, 1, 2, 8, 22, 48, 85, 128, 171, 208, 234, 248, 254, 255, 256},
{256, 1, 2, 6, 16, 36, 67, 107, 149, 189, 220, 240, 250, 254, 255, 256},
{256, 1, 2, 5, 13, 29, 55, 90, 128, 166, 201, 227, 243, 251, 254, 255, 256},
{256, 1, 2, 4, 10, 22, 43, 73, 109, 147, 183, 213, 234, 246, 252, 254, 255, 256},
}
// +------------+------------------------------------------------------+
// | Pulse | PDF |
// | Count | |
// +------------+------------------------------------------------------+
// | 1 | {127, 129}/256 |
// | | |
// | 2 | {49, 157, 50}/256 |
// | | |
// | 3 | {20, 107, 109, 20}/256 |
// | | |
// | 4 | {11, 60, 113, 62, 10}/256 |
// | | |
// | 5 | {7, 36, 84, 87, 36, 6}/256 |
// | | |
// | 6 | {6, 24, 57, 82, 60, 23, 4}/256 |
// | | |
// | 7 | {5, 18, 39, 64, 68, 42, 16, 4}/256 |
// | | |
// | 8 | {6, 14, 29, 47, 61, 52, 30, 14, 3}/256 |
// | | |
// | 9 | {1, 15, 23, 35, 51, 50, 40, 30, 10, 1}/256 |
// | | |
// | 10 | {1, 1, 21, 32, 42, 52, 46, 41, 18, 1, 1}/256 |
// | | |
// | 11 | {1, 6, 16, 27, 36, 42, 42, 36, 27, 16, 6, 1}/256 |
// | | |
// | 12 | {1, 5, 12, 21, 31, 38, 40, 38, 31, 21, 12, 5, 1}/256 |
// | | |
// | 13 | {1, 3, 9, 17, 26, 34, 38, 38, 34, 26, 17, 9, 3, |
// | | 1}/256 |
// | | |
// | 14 | {1, 3, 7, 14, 22, 29, 34, 36, 34, 29, 22, 14, 7, 3, |
// | | 1}/256 |
// | | |
// | 15 | {1, 2, 5, 11, 18, 25, 31, 35, 35, 31, 25, 18, 11, 5, |
// | | 2, 1}/256 |
// | | |
// | 16 | {1, 1, 4, 9, 15, 21, 28, 32, 34, 32, 28, 21, 15, 9, |
// | | 4, 1, 1}/256 |
// +------------+------------------------------------------------------+
// Table 49: PDFs for Pulse Count Split, 4 Sample Partitions
icdfPulseCountSplit4SamplePartitions = [][]uint{
{256, 127, 256},
{256, 49, 206, 256},
{256, 20, 127, 236, 256},
{256, 11, 71, 184, 246, 256},
{256, 7, 43, 127, 214, 250, 256},
{256, 6, 30, 87, 169, 229, 252, 256},
{256, 5, 23, 62, 126, 194, 236, 252, 256},
{256, 6, 20, 49, 96, 157, 209, 239, 253, 256},
{256, 1, 16, 39, 74, 125, 175, 215, 245, 255, 256},
{256, 1, 2, 23, 55, 97, 149, 195, 236, 254, 255, 256},
{256, 1, 7, 23, 50, 86, 128, 170, 206, 233, 249, 255, 256},
{256, 1, 6, 18, 39, 70, 108, 148, 186, 217, 238, 250, 255, 256},
{256, 1, 4, 13, 30, 56, 90, 128, 166, 200, 226, 243, 252, 255, 256},
{256, 1, 4, 11, 25, 47, 76, 110, 146, 180, 209, 231, 245, 252, 255, 256},
{256, 1, 3, 8, 19, 37, 62, 93, 128, 163, 194, 219, 237, 248, 253, 255, 256},
{256, 1, 2, 6, 15, 30, 51, 79, 111, 145, 177, 205, 226, 241, 250, 254, 255, 256},
}
// +------------+------------------------------------------------------+
// | Pulse | PDF |
// | Count | |
// +------------+------------------------------------------------------+
// | 1 | {128, 128}/256 |
// | | |
// | 2 | {42, 172, 42}/256 |
// | | |
// | 3 | {21, 107, 107, 21}/256 |
// | | |
// | 4 | {12, 60, 112, 61, 11}/256 |
// | | |
// | 5 | {8, 34, 86, 86, 35, 7}/256 |
// | | |
// | 6 | {8, 23, 55, 90, 55, 20, 5}/256 |
// | | |
// | 7 | {5, 15, 38, 72, 72, 36, 15, 3}/256 |
// | | |
// | 8 | {6, 12, 27, 52, 77, 47, 20, 10, 5}/256 |
// | | |
// | 9 | {6, 19, 28, 35, 40, 40, 35, 28, 19, 6}/256 |
// | | |
// | 10 | {4, 14, 22, 31, 37, 40, 37, 31, 22, 14, 4}/256 |
// | | |
// | 11 | {3, 10, 18, 26, 33, 38, 38, 33, 26, 18, 10, 3}/256 |
// | | |
// | 12 | {2, 8, 13, 21, 29, 36, 38, 36, 29, 21, 13, 8, 2}/256 |
// | | |
// | 13 | {1, 5, 10, 17, 25, 32, 38, 38, 32, 25, 17, 10, 5, |
// | | 1}/256 |
// | | |
// | 14 | {1, 4, 7, 13, 21, 29, 35, 36, 35, 29, 21, 13, 7, 4, |
// | | 1}/256 |
// | | |
// | 15 | {1, 2, 5, 10, 17, 25, 32, 36, 36, 32, 25, 17, 10, 5, |
// | | 2, 1}/256 |
// | | |
// | 16 | {1, 2, 4, 7, 13, 21, 28, 34, 36, 34, 28, 21, 13, 7, |
// | | 4, 2, 1}/256 |
// +------------+------------------------------------------------------+
// Table 50: PDFs for Pulse Count Split, 2 Sample Partitions
icdfPulseCountSplit2SamplePartitions = [][]uint{
{256, 128, 256},
{256, 42, 214, 256},
{256, 21, 128, 235, 256},
{256, 12, 72, 184, 245, 256},
{256, 8, 42, 128, 214, 249, 256},
{256, 8, 31, 86, 176, 231, 251, 256},
{256, 5, 20, 58, 130, 202, 238, 253, 256},
{256, 6, 18, 45, 97, 174, 221, 241, 251, 256},
{256, 6, 25, 53, 88, 128, 168, 203, 231, 250, 256},
{256, 4, 18, 40, 71, 108, 148, 185, 216, 238, 252, 256},
{256, 3, 13, 31, 57, 90, 128, 166, 199, 225, 243, 253, 256},
{256, 2, 10, 23, 44, 73, 109, 147, 183, 212, 233, 246, 254, 256},
{256, 1, 6, 16, 33, 58, 90, 128, 166, 198, 223, 240, 250, 255, 256},
{256, 1, 5, 12, 25, 46, 75, 110, 146, 181, 210, 231, 244, 251, 255, 256},
{256, 1, 3, 8, 18, 35, 60, 92, 128, 164, 196, 221, 238, 248, 253, 255, 256},
{256, 1, 3, 7, 14, 27, 48, 76, 110, 146, 180, 208, 229, 242, 249, 253, 255, 256},
}
)