public static async Task RunBenchmark(int deltaN, int max) { int currentSize = deltaN; var encoder = new ConvolutionalEncoder(); var decoder = new ConvolutionalDecoder(); var noisyChannel = new NoisyChannel(0.01); while (currentSize <= max) { var bmp = new Bitmap(currentSize, currentSize); var bytes = BitmapHelper.GetColorBytes(bmp); var watch = System.Diagnostics.Stopwatch.StartNew(); var resultWithEncoding = await MessageController.SendBytes( bytes, noisyChannel, encoder, decoder); watch.Stop(); Console.WriteLine($"{currentSize},{watch.Elapsed}"); currentSize += deltaN; } }
private void AssertBits(Bit[] bitsToDecode, Bit[] expectedValues) { var bitStream = new BitStream(bitsToDecode); var decoder = new ConvolutionalDecoder(); var result = decoder.Decode(bitStream); var expectedStream = new BitStream(expectedValues); Assert.True((BitStream)result == expectedStream); }
/// <summary> /// Decodes a given encoded vector /// </summary> /// <param name="encodedVector">Encoded vector to decode</param> /// <param name="decoder">Decoder to decode a vector</param> /// <returns>A <see cref="StringResult"/> that contains a decoded vector as Result property</returns> public static async Task <StringResult> DecodeVector(string encodedVector, ConvolutionalDecoder decoder) { var bitStream = vectorConverter.ToBitStream(encodedVector); var result = await Task.FromResult(decoder.Decode(bitStream)); var decodedVector = vectorConverter.FromBitStream(result); return(new StringResult { Errors = 0, Result = decodedVector }); }
public static async Task RunBenchmark(double errorDelta, double expectedErrorCorrectionRate) { var bmp = new Bitmap(100, 100); var bytes = BitmapHelper.GetColorBytes(bmp); double averageErrorCorrectionPercentage = 100; double currentErrorChance = 0; var encoder = new ConvolutionalEncoder(); var decoder = new ConvolutionalDecoder(); do { var noisyChannel = new NoisyChannel(currentErrorChance); double sum = 0; for (int i = 0; i < 10; i++) { var resultWithoutEncoding = await MessageController.SendBytes( bytes, noisyChannel ); var resultWithEncoding = await MessageController.SendBytes( bytes, new NoisyChannel(currentErrorChance), encoder, decoder); var Percentage = MathHelper.CalculatePercentageWithPrecision( resultWithEncoding.Errors, resultWithoutEncoding.Errors, 2); sum += Percentage; } averageErrorCorrectionPercentage = sum / 10; Console.WriteLine($"{currentErrorChance},{averageErrorCorrectionPercentage:F2}"); currentErrorChance += errorDelta; } while(averageErrorCorrectionPercentage >= expectedErrorCorrectionRate); }