mirror of
https://github.com/cberner/raptorq.git
synced 2024-06-29 18:21:43 +00:00
Implement calculation of L, P, and P1
This commit is contained in:
parent
12ac0988d9
commit
0f12cf6182
@ -6,10 +6,10 @@ version = "0.0.0"
|
||||
authors = ["Christopher Berner <christopherberner@gmail.com>"]
|
||||
|
||||
[dependencies]
|
||||
primal = "0.2"
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.2"
|
||||
primal = "0.2"
|
||||
rand = "0.6"
|
||||
|
||||
[[bench]]
|
||||
|
@ -1,6 +1,7 @@
|
||||
use base::EncodingPacket;
|
||||
use PayloadId;
|
||||
use systematic_constants::extended_source_block_symbols;
|
||||
use systematic_constants::num_pi_symbols;
|
||||
|
||||
pub struct SourceBlockEncoder {
|
||||
source_block_id: u8,
|
||||
@ -29,6 +30,7 @@ impl SourceBlockEncoder {
|
||||
for i in 0..((extended_source_symbols - self.num_source_symbols())*self.symbol_size as u32) {
|
||||
extended_data.push(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub fn all_source_packets(&self) -> Vec<EncodingPacket> {
|
||||
|
@ -541,6 +541,34 @@ pub fn num_lt_symbols(source_block_symbols: u32) -> u32 {
|
||||
panic!(); // unreachable
|
||||
}
|
||||
|
||||
// Calculates, L, the number of intermediate symbols, for a given number of source block symbols
|
||||
// See section 5.3.3.3
|
||||
pub fn num_intermediate_symbols(source_block_symbols: u32) -> u32 {
|
||||
extended_source_block_symbols(source_block_symbols) +
|
||||
num_ldpc_symbols(source_block_symbols) +
|
||||
num_hdpc_symbols(source_block_symbols)
|
||||
}
|
||||
|
||||
// Calculates, P, the number of PI symbols, for a given number of source block symbols
|
||||
// See section 5.3.3.3
|
||||
pub fn num_pi_symbols(source_block_symbols: u32) -> u32 {
|
||||
num_intermediate_symbols(source_block_symbols) - num_lt_symbols(source_block_symbols)
|
||||
}
|
||||
|
||||
// Calculates P1, smallest prime greater than P. See 5.3.3.3
|
||||
pub fn calculate_p1(source_block_symbols: u32) -> u32 {
|
||||
let mut p1 = num_pi_symbols(source_block_symbols);
|
||||
while !primal::is_prime(p1 as u64) {
|
||||
if p1 % 2 == 0 {
|
||||
p1 += 1;
|
||||
}
|
||||
else {
|
||||
p1 += 2;
|
||||
}
|
||||
}
|
||||
p1
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use systematic_constants::MAX_SOURCE_SYMBOLS_PER_BLOCK;
|
||||
|
Loading…
Reference in New Issue
Block a user