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()); }
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(); }
public void Decode() { var restored = viterbi.Solve(encoded); }