/// <summary> /// Perform an action for each frequency value on a logarithmically scaled graph or spectrum band. /// </summary> /// <param name="source">Sample array or spectrum</param> /// <param name="startFreq">Frequency at the first element of the array</param> /// <param name="endFreq">Frequency at the last element of the array</param> /// <param name="action">Performed action</param> public static void ForEachLog <T>(T[] source, double startFreq, double endFreq, FrequencyFunction <T> action) { double mul = Math.Pow(10, (Math.Log10(endFreq) - Math.Log10(startFreq)) / (source.Length - 1)); for (int i = 0; i < source.Length; ++i) { action(startFreq, ref source[i]); startFreq *= mul; } }
/// <summary> /// Perform an action for each frequency value on a linearly scaled graph or spectrum band. /// </summary> /// <param name="source">Sample array or spectrum</param> /// <param name="startFreq">Frequency at the first element of the array</param> /// <param name="endFreq">Frequency at the last element of the array</param> /// <param name="action">Performed action</param> public static void ForEachLin <T>(T[] source, double startFreq, double endFreq, FrequencyFunction <T> action) { double step = (endFreq - startFreq) / (source.Length - 1); for (int entry = 0; entry < source.Length; ++entry) { action(startFreq + step * entry, ref source[entry]); } }