public void TestExample(Func <IEnumerable <bool>, IEnumerable <double>, double> calcScore, ScoreMethod scoreMethod, double falseValue = 0.0)
        {
            var input = "11 10 00 01 01 11 00"
                        .ParseBools()
                        .Select(b => b?1.0: falseValue);

            var expected = "1 0 1 1 0 0 0";

            var config  = CodeConfig.Size3_7_5;
            var decoder = new Viterbi <double>(config.EnumerateTransitions(), calcScore, new ViterbiConfig()
            {
                InitialState = State.Zero(config.NoOfStateRegisters), ScoreMethod = scoreMethod
            });
            var res = decoder.Solve(input);

            res.Message.ShouldBe(expected.ParseBools());
        }
Example #2
0
        private static void DemoContinuousSymmetricScore()
        {
            var config = CodeConfig.Size7_6d_4f;

            var input = 15003.GetBools(14)
                        .Concat(Enumerable.Repeat(false, 6));

            var encoder     = new Encoder(config, terminateCode: false);
            var encoded     = encoder.Encode(input);
            var transmitted =
                encoded
                .Select(e => e ? 255.0 : 0);

            var decoder = new Viterbi <double>(
                config.EnumerateTransitions(),
                SymmetricScore.Range_0_255.CalculateScore,
                new ViterbiConfig()
            {
                InitialState     = State.Zero(config.NoOfStateRegisters),
                ScoreMethod      = ScoreMethod.Maximize,
                TerminationState = State.Zero(config.NoOfStateRegisters)
            });
            var restored = decoder.Solve(transmitted);


            Console.WriteLine("Configuration: " + config);
            Console.WriteLine();
            Console.WriteLine("Input:    " + input.Format());
            Console.WriteLine("Encoded:  " + encoded.Format());
            Console.WriteLine("Restored: " + restored.Message.Format());
            Console.Write($"Score:    {restored.BestEndScore:F2}");
            //if (restored.TerminationStateScore.HasValue)
            Console.Write($" / {restored.TerminationStateScore:F2}");
            Console.WriteLine();
            Console.WriteLine();
        }
Example #3
0
 public void Decode()
 {
     var restored = viterbi.Solve(encoded);
 }