/// <summary> /// Returns a matrix whose columns consist of autocorrelations of freq bin samples. /// The columns are non-overlapping. /// </summary> public static double[,] GetXcorrByTimeMatrix(double[] signal, int sampleLength) { // NormaliseMatrixValues freq bin values to z-score. This is required else get spurious results signal = DataTools.Vector2Zscores(signal); int sampleCount = signal.Length / sampleLength; double[,] xCorrelationsByTime = new double[sampleLength, sampleCount]; for (int s = 0; s < sampleCount; s++) { int start = s * sampleLength; double[] subArray = DataTools.Subarray(signal, start, sampleLength); double[] autocor = AutoAndCrossCorrelation.AutoCorrelationOldJavaVersion(subArray); //DataTools.writeBarGraph(autocor); MatrixTools.SetColumn(xCorrelationsByTime, s, autocor); } return(xCorrelationsByTime); }
/// <summary> /// Returns a matrix whose columns consist of autocorrelations of freq bin samples. /// The columns are non-overlapping. /// </summary> /// <param name="signal">an array corresponding to one frequency bin.</param> /// <param name="sampleLength">the length of a sample or patch (non-overllapping) for which xcerrelation is obtained.</param> public static double[,] GetXcorrByTimeMatrix(double[] signal, int sampleLength) { // NormaliseMatrixValues freq bin values to z-score. This is required else get spurious results signal = DataTools.Vector2Zscores(signal); // get number of complete non-overlapping samples or patches var sampleCount = signal.Length / sampleLength; var xCorrelationsByTime = new double[sampleLength, sampleCount]; for (var s = 0; s < sampleCount; s++) { var start = s * sampleLength; var subArray = DataTools.Subarray(signal, start, sampleLength); // do xcorr which returns an array same length as the sample or patch. var autocor = AutoAndCrossCorrelation.AutoCorrelationOldJavaVersion(subArray); //DataTools.writeBarGraph(autocor); MatrixTools.SetColumn(xCorrelationsByTime, s, autocor); } // return a matrix of [xCorrLength, sampleLength] return(xCorrelationsByTime); }