Esempio n. 1
0
        public static void GenerateSignal(FunctionData data)
        {
            data.Points.Clear();

            var interval = data.Duration.Value / (data.Samples.Value - 1);

            for (var i = 0; i < data.Samples.Value; i++)
            {
                var x = i * interval;
                try
                {
                    var y = data.Function(data, x);

                    if (Math.Abs(y) < 10E-10)
                    {
                        y = 0d;
                    }

                    data.Points.Add(new Point(x, y));
                }
                catch (DivideByZeroException)
                {
                    // Everything is fine, we just don't add this point
                }
            }

            data.Points.Sort(); // No idea why I put it here, seems not to have any influence, but better don't remove.

            data.CalculateParameters();
            data.PointsUpdate();
            Histogram.GetHistogram(data);
        }
Esempio n. 2
0
        public static void Quantization(FunctionData first, FunctionData second, double quantizationLevels)
        {
            var levels = new List <double>();
            var step   = first.Amplitude.Value * 2.0d / (quantizationLevels - 1);

            for (var i = 0; i <= quantizationLevels - 1; i++)
            {
                levels.Add(-first.Amplitude.Value + i * step);
            }

            second.AssignSignal(first);

            foreach (var point in second.Points)
            {
                point.Y = levels.OrderBy(l => Math.Abs(point.Y - l)).First();
            }

            second.PointsUpdate();
        }
Esempio n. 3
0
        public static void Compose(FunctionData first, FunctionData second, Operation operation)
        {
            if (operation == Operation.Divide && second.Points.Any(p => Math.Abs(p.Y) < double.Epsilon))
            {
                first.Continuous.Value = false;
            }

            if (first.Type != Signal.Composite)
            {
                first.Function = AvailableFunctions.GetFunction(first.Type);
            }

            if (second.Type != Signal.Composite)
            {
                second.Function = AvailableFunctions.GetFunction(second.Type);
            }

            first.Type = Signal.Composite;
            if (second.Function != null && first.Function != null)
            {
                // TODO Think about a proper way of implementing this feature
                first.Continuous.Value = first.Continuous.Value && second.Continuous.Value;
                first.Function         = FunctionComposer.ComposeFunction(
                    first.Function,
                    second.Function,
                    second,
                    operation);
                Generator.GenerateSignal(first);
            }
            else
            {
                SimpleCompose(first, second, operation);
                first.PointsUpdate();
                Histogram.GetHistogram(first);
            }
        }