Beispiel #1
0
        private static Signal RescaleSignal(Signal decomposition, Signal signal, DecompositionLevel level)
        {
            var rescaled = WaveMath.InterpolateCubic(decomposition, (uint)Math.Pow(2, level.Index + 1));

            if (rescaled.SamplesCount < signal.SamplesCount)
            {
                var extensionSize = signal.SamplesCount - rescaled.SamplesCount;
                int right;
                var left = right = extensionSize / 2;
                if (left + right != extensionSize)
                {
                    left++;
                }

                SignalExtension.Extend(ref rescaled, SignalExtension.ExtensionMode.SmoothPadding0, left, right);
            }
            else
            {
                rescaled.Samples = SignalExtension.Deextend(rescaled.Samples, signal.SamplesCount);
            }
            rescaled.CustomPlot       = null;
            rescaled.Finish           = signal.Finish;
            rescaled.SamplingRate     = signal.SamplingRate;
            rescaled.SamplingInterval = signal.SamplingInterval;
            return(rescaled);
        }
Beispiel #2
0
        /// <summary>
        /// Executes the block
        /// </summary>
        public override void Execute()
        {
            var inputNode1 = InputNodes[0].ConnectingNode as BlockOutputNode;
            var inputNode2 = InputNodes[1].ConnectingNode as BlockOutputNode;

            if (inputNode1 == null || inputNode1.Object == null || inputNode2 == null || inputNode2.Object == null)
            {
                return;
            }

            OutputNodes[0].Object.Clear();
            var approximations = inputNode1.Object;
            var details        = inputNode2.Object;

            var tempLevels = new List <DecompositionLevel>();
            var outputs    = new List <Signal>();

            var currentName = "";

            for (var i = 0; i < approximations.Count; i++)
            {
                var name = approximations[i].Name != null ? approximations[i].Name.Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries)[0] : Resources.Signal;
                if (name != currentName && currentName != "")
                {
                    outputs.Add(new Signal(DWT.ExecuteIDWT(tempLevels, _motherWavelet, Level))
                    {
                        Name = name
                    });
                    tempLevels = new List <DecompositionLevel>();
                }
                currentName = name;
                if (approximations[i].Samples != null && i < details.Count && details[i].Samples != null)
                {
                    var level = new DecompositionLevel
                    {
                        Approximation = approximations[i].Samples,
                        Details       = details[i].Samples,
                        Index         = i
                    };
                    tempLevels.Add(level);
                }
                if (i != approximations.Count - 1)
                {
                    continue;
                }
                outputs.Add(new Signal(DWT.ExecuteIDWT(tempLevels, _motherWavelet, Level))
                {
                    Name = name
                });
            }

            OutputNodes[0].Object = outputs;
            if (Cascade && OutputNodes[0].ConnectingNode != null)
            {
                OutputNodes[0].ConnectingNode.Root.Execute();
            }
        }