You are here: Start » AVL.NET » AVL.ProfileAutocorrelation


Computes the correlation between neighboring sub-profiles of different sizes and infers the most probable period length.



public static void ProfileAutocorrelation
	AvlNet.Profile inProfile,
	int inStart,
	int inMinPeriod,
	int inMaxPeriod,
	int inMinVerifiedLength,
	bool inFlexibleVerification,
	int inMinRepeatCount,
	float inHarmonicHysteresis,
	AvlNet.PeriodPrecisionMethod inPrecisionMethod,
	IList<float> outAutocorrelationValues,
	out float outPeriod,
	out float outPeriodScore


Name Type Range Default Description
inProfileAvlNet.ProfileInput profile.
inStartint<0, INF>Beginning index of the sub-profile of interest.
inMinPeriodint<2, INF>2Minimum period length. Default value: 2.
inMaxPeriodint<2, INF>2Maximum period length. Default value: 2.
inMinVerifiedLengthint<1, INF>1Minimum number of profile points that verify single period (increases the actual RepeatCount for small periods). Default value: 1.
inFlexibleVerificationboolCompensates errors resulting from whole-pixel precision.
inMinRepeatCountint<1, INF>1The number of repeats for sufficiently big periods. Default value: 1.
inHarmonicHysteresisfloat<0.0f, 1.0f>0.05fDefines how much better must be the period T than T/2, T/3 etc. to be accepted. Default value: 0.05f.
inPrecisionMethodAvlNet.PeriodPrecisionMethodDefines if and how sub-point precision is achieved.
outAutocorrelationValuesSystem.Collections.Generic.IList<float>Autocorrelation values for consecutive period values.
outPeriodfloatEstimated period length.
outPeriodScorefloatCorrelation value for the estimated period length.


This filter is usually used to find a period within a profile. It tests all possible periods from the range inMinPeriod and inMaxPeriod. For each candidate period it creates several sub-profiles of that size and computes the normalized correlation between the first one and the others. As the final score, the minimum of the correlations is taken. The number of sub-profiles that is used is determined with the inMinRepeatCount and inMinVerifiedLength inputs. The latter is used to increase the number of sub-profiles that are used for small period candidates, which often cause false high-scoring periods when used without this parameter. Furthermore, as for any good period of the length T, the periods of the length T * 2, T * 3 etc. also score high, the inHarmonicHysteresis input can be used to define the minimum difference between the score of the tested period (T) and its integer partitions (T/2, T/3, ...).


On this profile the ProfileAutocorrelation filter finds a period of length 302 and score 0.998.

Hardware Acceleration

This operation supports automatic parallelization for multicore and multiprocessor systems.

Hardware acceleration settings may be manipulated with Settings class.


List of possible exceptions:

Error type Description
DomainError inMinPeriod is larger than inMaxPeriod in ProfileAutocorrelation.
DomainError inStart + inMinVerifiedLength is larger than the profile size in ProfileAutocorrelation.
DomainError The range of applicable profile periods is empty in ProfileAutocorrelation.

See also