private static double[] CreateTestSamples()
        {
            var rnd       = WhiteGaussianNoiseGenerator.CreateDefaultRandomGenerator();
            var generator = new WhiteGaussianNoiseGenerator(rnd);

            return(generator.Next(SamplingRate * SampleLengthInSeconds));
        }
        public void ResultsAreReal()
        {
            Random rnd       = new Random();
            var    generator = new WhiteGaussianNoiseGenerator(() => rnd.NextDouble());

            generator.Range = new Range <double>(-1, 1);

            Assert.IsFalse(generator.Next(1000).Any(x => Double.IsNaN(x) || Double.IsInfinity(x)));
        }
        public void MeanSignalPowerIsOne()
        {
            // We're working with random numbers then our test is little bit aleatory,
            // it's better to repeat it few times to be sure it didn't pass "by case".
            // Also the number of samples MUST be high enough to have a reliable distribution.
            const int numberOfSamples = 100000;
            const int repetitions     = 5;

            Random rnd = new Random();

            for (int repetition = 0; repetition < repetitions; ++repetition)
            {
                var generator = new WhiteGaussianNoiseGenerator(() => rnd.NextDouble());
                generator.Range = new Range <double>(-1, 1);

                double power = Enumerable.Range(0, numberOfSamples)
                               .Sum(x => Math.Pow(Magnitude(generator.Next()), 2.0)) / numberOfSamples;

                Assert.AreEqual(1.0, power, 0.1);
            }
        }