public static void AssertFrequencyInSignal(WavReader wavReader, double[] signal, int[] frequencies, int variance = 1) { var fft = DSP_Frames.ExtractEnvelopeAndAmplSpectrogram(signal, wavReader.SampleRate, wavReader.Epsilon, 512, 0.0); var histogram = SpectrogramTools.CalculateAvgSpectrumFromEnergySpectrogram(fft.AmplitudeSpectrogram); var max = histogram.Max(); double threshold = max * 0.8; var highBins = frequencies.Select(f => (int)(f / fft.FreqBinWidth)).ToArray(); bool isOk = true; for (int bin = 0; bin < histogram.Length; bin++) { var value = histogram[bin]; if (value > threshold) { bool anyMatch = false; foreach (var highBin in highBins) { if (bin >= highBin - variance && bin <= highBin + variance) { anyMatch = true; break; } } isOk = anyMatch; } if (!isOk) { break; } } BaseTest.Assert.IsTrue(isOk); }