summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authordufour2010-06-11 09:51:21 +0000
committerdufour2010-06-11 09:51:21 +0000
commit7c9b654b5773ba2c25cbcc7b12a8d8c79e2fc34e (patch)
tree2d45a65256a1a05cd564d0e254b913f0becd429f /cesar
parentd055235a353673155127e99d55d4e1107dd77e56 (diff)
cesar/ce/rx/bl: add new polynomial formats in import script, closes #1648
There are two new formats: - there can be multiple polynomials for the same rate and modulations, - there are two polynomials for BER target depending of project (EoC, AV). git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7193 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar')
-rw-r--r--cesar/ce/rx/bitloading/src/import_poly_coeff.pl99
1 files changed, 68 insertions, 31 deletions
diff --git a/cesar/ce/rx/bitloading/src/import_poly_coeff.pl b/cesar/ce/rx/bitloading/src/import_poly_coeff.pl
index 729ac6660b..2a3e872fd9 100644
--- a/cesar/ce/rx/bitloading/src/import_poly_coeff.pl
+++ b/cesar/ce/rx/bitloading/src/import_poly_coeff.pl
@@ -16,16 +16,24 @@ my $prev;
# Polynomials values.
my @values = ({}, {});
my %fec_rate = ( "1/2" => 0, "16/21" => 1);
+# A leaf: a set of coefficients (old format).
+my $leaf_re = qr/{[^}]+}/;
+# A set: a set of many some polynomials with their coefficients.
+my $set_re = qr/(?:$leaf_re\s*,\s*)*$leaf_re/;
# Decode input data.
sub process
{
my ($name, $value) = @_;
- die "bad format" unless $value =~ /^{\s*({[^}]+})\s*,\s*({[^}]+})\s*}$/;
+ # Support both formats.
+ die "bad format" unless
+ $value =~ /^{\s*{\s*($set_re)\s*}\s*,\s*{\s*($set_re)\s*}\s*}$/
+ || $value =~ /^{\s*($leaf_re)\s*,\s*($leaf_re)\s*}$/;
# File from the TNS team are organised in the following way: firsts
# coefficients are FEC rate 16/21, second ones are for FEC rate 1/2.
- $values[$fec_rate{"16/21"}]->{$name} = $1;
- $values[$fec_rate{"1/2"}]->{$name} = $2;
+ my ($fec1621, $fec12) = ($1, $2);
+ $values[$fec_rate{"16/21"}]->{$name} = [ $fec1621 =~ /$leaf_re/g ];
+ $values[$fec_rate{"1/2"}]->{$name} = [ $fec12 =~ /$leaf_re/g ];
}
# Render in C decoded data.
@@ -42,21 +50,43 @@ sub render
# For each modulation.
for my $i (1, 2, 3, 4, 6, 8, 10)
{
+ # Get arrays.
+ my @polys = @{$values[$rate]->{'poly' . $i}};
+ my @enss = @{$values[$rate]->{'ens' . $i}};
+ # Count number of polynomials.
+ my $poly_count = @polys;
# Add "ll" at end of each number and count number of occurence.
- my $count = ($values[$rate]->{'poly' . $i} =~ s/(-?\d+)/ $1ll/g);
+ my @counts;
+ push @counts, (s/(-?\d+)/ $1ll/g - 1) for @polys;
+ # Convert ens (to remove continuous values).
+ my $enss = join ', ', @enss;
+ $enss =~ y/{}//d;
+ @enss = split /\s*,\s*/, $enss;
+ my @ens = shift @enss;
+ my $ff = 1;
+ for (@enss)
+ {
+ if ($ff)
+ {
+ push @ens, $_;
+ }
+ else
+ {
+ die "non consecutive ensemble" unless $_ == $ens[-1] + 1;
+ }
+ $ff = !$ff;
+ }
# Cosmetic changes.
- $values[$rate]->{'poly' . $i} =~ s/(\})/ $1/;
- $values[$rate]->{'ens' . $i} =~ s/(\})/ $1/;
- $values[$rate]->{'ens' . $i} =~ s/(\d+)/ $1/g;
- $count--;
+ s/(\})/ $1/ for @polys;
# Render.
+ local $" = ', ';
print " {
- 1,
- { " . $count . " },
+ $poly_count,
+ { @counts },
{
- " . $values[$rate]->{'poly' . $i} . ",
+ @polys,
},
- " . $values[$rate]->{'ens' . $i} . ",
+ { @ens },
},
"
}
@@ -65,27 +95,34 @@ sub render
print "};\n";
# BER consign coefficients.
- print "\nstatic const s64\n";
- print "ce_rx_bl_ber_consign_coefs[PHY_FEC_RATE_NB]";
- print "[CE_RX_BL_BER_POLY_MAX_DEGREE] = {\n";
- # For each rate.
- for my $rate (sort values %fec_rate)
- {
- # Add "ll" at end of each number and count number of occurence.
- my $count = ($values[$rate]->{"poly_BER_vs_NbBits"} =~ s/(-?\d+)/ $1ll/g);
- $count--;
- # Cosmetic changes.
- $values[$rate]->{"poly_BER_vs_NbBits"} =~ s/(\})/ $1/;
- $values[$rate]->{"poly_BER_vs_NbBits_degree"} = $count;
- print " " . $values[$rate]->{"poly_BER_vs_NbBits"} . ",\n";
- }
- print "};\n";
- print "static const u8 ce_rx_bl_ber_consign_degrees[PHY_FEC_RATE_NB] = { ";
- for my $rate (sort values %fec_rate)
+ # For each project (AV, EoC).
+ for my $p ("AV", "EOC")
{
- print $values[$rate]->{"poly_BER_vs_NbBits_degree"} . ", ";
+ # lower case p.
+ my $lp = lc $p;
+ local $" = ', ';
+ print "\nstatic const s64\n";
+ print "ce_rx_bl_ber_consign_coefs_" . $lp . "[PHY_FEC_RATE_NB]";
+ print "[CE_RX_BL_BER_POLY_MAX_DEGREE] = {\n";
+ my @count;
+ # For each rate.
+ for my $rate (sort values %fec_rate)
+ {
+ # Get poly.
+ my @poly = @{$values[$rate]->{"poly_BER_vs_NbBits_" . $p}};
+ # Add "ll" at end of each number and count number of occurence.
+ push @count, (s/(-?\d+)/ $1ll/g - 1) for @poly;
+ # Cosmetic changes.
+ s/(\})/ $1/ for @poly;
+ # Render.
+ print " @poly,\n";
+ }
+ print "};\n";
+ print "static const u8 ce_rx_bl_ber_consign_degrees_";
+ print $lp . "[PHY_FEC_RATE_NB] = { ";
+ print "@count, ";
+ print "};\n";
}
- print "};\n";
}
while (<>)