public void BbSignalsTestMethod2()
        {
            const int length     = 1000;
            const int expandSize = 100;
            var       input      = new byte[length];
            var       output     = new byte[length];
            var       gamma      = new byte[length * expandSize];
            var       buffer     = new double[length * BitsPerByte * expandSize];

            Rng.GetBytes(input);
            Rng.GetBytes(gamma);

            double alpha = 1;
            double betta = 1;

            using (var bbSignals = new BbSignals(expandSize, true))
            {
                // Вычисление количества единиц в исходных данных и псевдослучайной последовательности
                double trueData  = BitCounter.Count(input);
                double trueGamma = BitCounter.Count(gamma);

                // Вычисление количества нулей в исходных данных и псевдослучайной последовательности
                var falseData  = (long)input.Length * BitsPerByte - trueData;
                var falseGamma = (long)gamma.Length * BitsPerByte - trueGamma;

                // Вычисление оценки количества единиц и нулей при смешивании исходных данных и псевдослучайной последовательности
                var trueCount  = trueGamma * falseData + falseGamma * trueData;
                var falseCount = trueGamma * trueData + falseGamma * falseData;
                Console.WriteLine("p0 = {0} p1 = {1}", trueCount / (trueCount + falseCount),
                                  falseCount / (trueCount + falseCount));

                betta = ((falseCount - trueCount) * alpha / (trueCount + falseCount));
                Console.WriteLine("alpha = {0} betta = {1}", alpha, betta);

                bbSignals.Combine(buffer, input, gamma, alpha, betta);
                //////////////////////////////////////////////////
                buffer = buffer.Select(x => x + 1).ToArray();

                var e1 = buffer.Average();
                var e2 = buffer.Average(x => x * x);
                betta = e1;
                alpha = Math.Sqrt(e2 - e1 * e1);
                Console.WriteLine("alpha = {0} betta = {1}", alpha, betta);

                bbSignals.Extract(buffer, output, gamma, alpha, betta);
                /////////////////////////////////////////////////////////
            }

            Assert.IsTrue(input.SequenceEqual(output));
        }
        public void BbSignalsTestMethod1()
        {
            const int length     = 1000;
            const int expandSize = 100;
            var       input      = new byte[length];
            var       output     = new byte[length];
            var       gamma      = new byte[length * expandSize];
            var       buffer     = new double[length * BitsPerByte * expandSize];

            Rng.GetBytes(input);
            Rng.GetBytes(gamma);

            double alpha = 1;
            double betta = 1;

            using (var bbSignals = new BbSignals(expandSize, true))
            {
                bbSignals.Combine(buffer, input, gamma, alpha, betta);
                bbSignals.Extract(buffer, output, gamma, alpha, betta);
            }

            Assert.IsTrue(input.SequenceEqual(output));
        }