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); }
/// <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(); } }