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;
            }
        }
예제 #2
0
        private async void VectorSubmit_Click(object sender, EventArgs e)
        {
            var vectorText = VectorInput.Text;

            string channelNoiseText = ChannelNoiseInput.Text;

            if (!double.TryParse(channelNoiseText.Replace(',', '.'), out var noise) || noise < 0 || noise > 1)
            {
                MessageBox.Show("Noise must be a number between 0 and 1.");
                return;
            }

            var channel = new NoisyChannel(errorChance: noise);

            var encodedResult = await MessageController.EncodeAndSendVector(vectorText, new ConvolutionalEncoder(), channel);

            DisplayEncodedVector(encodedResult);
        }
예제 #3
0
        private async void uploadImageButton_Click(object sender, EventArgs e)
        {
            encodingResultPanel.Controls.Clear();
            encodingResultPanel.Controls.Add(UIHelper.CreateLabelWithText("Loading images... Please wait."));
            var dialog = new OpenFileDialog
            {
                ShowHelp = true,
                Filter   = "Image Files(*.jpeg;*.bmp;*.png;*.jpg)|*.jpeg;*.bmp;*.png;*.jpg"
            };

            var Response = dialog.ShowDialog();

            if (Response != DialogResult.OK)
            {
                return;
            }

            var channelNoiseText = ChannelNoiseInput.Text;

            if (!double.TryParse(channelNoiseText.Replace(',', '.'), out var noise) || noise < 0 || noise > 1)
            {
                MessageBox.Show("Noise must be a number between 0 and 1.");
                return;
            }

            var channel = new NoisyChannel(noise);

            var originalImage = new Bitmap(dialog.FileName);
            var scaledImage   = BitmapHelper.ScaleBitmap(originalImage, desiredWidth: 200);

            var imageBytes = BitmapHelper.GetColorBytes(scaledImage);



            var unencodedResult = await MessageController.SendBytes(imageBytes, channel);

            var encodedResult = await MessageController.SendBytes(
                imageBytes,
                channel,
                new ConvolutionalEncoder(),
                new ConvolutionalDecoder());

            DisplayImageResult(scaledImage, unencodedResult, encodedResult);
        }
예제 #4
0
        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);
        }
예제 #5
0
        private async void TextSubmit_Click(object sender, EventArgs e)
        {
            var initialText = TextInput.Text;

            string channelNoiseText = ChannelNoiseInput.Text;

            if (!double.TryParse(channelNoiseText.Replace(',', '.'), out var noise) || noise < 0 || noise > 1)
            {
                MessageBox.Show("Noise must be a number between 0 and 1.");
                return;
            }

            var channel = new NoisyChannel(errorChance: noise);

            var unencodedResult = await MessageController.SendText(initialText, channel);

            var encodedResult = await MessageController.SendText(
                initialText,
                channel,
                new ConvolutionalEncoder(),
                new ConvolutionalDecoder());

            DisplayTextResult(initialText, unencodedResult, encodedResult);
        }