private void testWindow(int length, IWindow window) { Complex[,] data = (Complex[, ]) this.data.Clone(); ComplexSignal target = ComplexSignal.FromArray(data, 8000); Complex[,] samples = target.ToArray(); Assert.IsTrue(data.IsEqual(samples)); ComplexSignal[] windows = target.Split(window, 1); for (int i = 0; i < windows.Length; i++) { int min = System.Math.Min(i + length, samples.Length / 2); Complex[] segment = windows[i].ToArray().Reshape(1); Complex[] sub = samples.Submatrix(i, min - 1, null).Reshape(1); var expected = new Complex[length * 2]; for (int j = 0; j < sub.Length; j++) { expected[j] = sub[j]; } Assert.IsTrue(segment.IsEqual(expected)); } }
/// <summary> /// Splits a signal using a window /// </summary> /// /// <param name="signal">The signal to be splitted into windows.</param> /// <param name="step">The step size, in number of frames.</param> /// <param name="windowSize">The size of the window (in frames) when splitting the signal.</param> /// public static ComplexSignal[] Split(this ComplexSignal signal, int windowSize, int step) { return(signal.Split(RaisedCosineWindow.Rectangular(windowSize), step)); }