public void Test2UpwardsTrackAlgorithm() { // Set up the recognizer parameters. var parameters = new UpwardTrackParameters() { MinHertz = 500, MaxHertz = 6000, MinBandwidthHertz = 200, MaxBandwidthHertz = 5000, DecibelThreshold = 2.0, CombineProximalSimilarEvents = false, SyllableStartDifference = TimeSpan.FromSeconds(0.2), SyllableHertzDifference = 300, }; //Set up the virtual recording. var segmentStartOffset = TimeSpan.Zero; int samplerate = 22050; double signalDuration = 13.0; //seconds // set up the config for a virtual spectrogram. var sonoConfig = new SonogramConfig() { WindowSize = 512, WindowStep = 512, WindowOverlap = 0.0, // this must be set WindowFunction = WindowFunctions.HANNING.ToString(), NoiseReductionType = NoiseReductionType.Standard, NoiseReductionParameter = 0.0, Duration = TimeSpan.FromSeconds(signalDuration), SampleRate = samplerate, }; var spectrogram = this.CreateArtificialSpectrogramToTestTracksAndHarmonics(sonoConfig); var plots = new List <Plot>(); // do a SECOND TEST of the vertical tracks var(spectralEvents, dBArray) = UpwardTrackAlgorithm.GetUpwardTracks( spectrogram, parameters, segmentStartOffset); // draw a plot of max decibels in each frame double decibelNormalizationMax = 5 * parameters.DecibelThreshold.Value; var dBThreshold = parameters.DecibelThreshold.Value / decibelNormalizationMax; var normalisedDecibelArray = DataTools.NormaliseInZeroOne(dBArray, 0, decibelNormalizationMax); var plot2 = new Plot("decibel max", normalisedDecibelArray, dBThreshold); plots.Add(plot2); var allResults2 = new RecognizerResults() { NewEvents = new List <EventCommon>(), Hits = null, ScoreTrack = null, Plots = new List <Plot>(), Sonogram = null, }; // combine the results i.e. add the events list of call events. allResults2.NewEvents.AddRange(spectralEvents); allResults2.Plots.AddRange(plots); allResults2.Sonogram = spectrogram; // DEBUG PURPOSES ONLY - COMMENT NEXT LINE this.SaveTestOutput( outputDirectory => GenericRecognizer.SaveDebugSpectrogram(allResults2, null, outputDirectory, "UpwardTracks2")); Assert.AreEqual(10, allResults2.NewEvents.Count); }
public void Test1UpwardsTrackAlgorithm() { // Set up the recognizer parameters. var parameters = new UpwardTrackParameters() { MinHertz = 6000, MaxHertz = 11000, MinBandwidthHertz = 100, MaxBandwidthHertz = 5000, DecibelThreshold = 2.0, CombineProximalSimilarEvents = true, SyllableStartDifference = TimeSpan.FromSeconds(0.2), SyllableHertzDifference = 300, }; //Set up the virtual recording. int samplerate = 22050; double signalDuration = 13.0; //seconds // set up the config for a virtual spectrogram. var sonoConfig = new SonogramConfig() { WindowSize = 512, WindowStep = 512, WindowOverlap = 0.0, // this must be set WindowFunction = WindowFunctions.HANNING.ToString(), NoiseReductionType = NoiseReductionType.Standard, NoiseReductionParameter = 0.0, Duration = TimeSpan.FromSeconds(signalDuration), SampleRate = samplerate, }; var spectrogram = this.CreateArtificialSpectrogramToTestTracksAndHarmonics(sonoConfig); //var image1 = SpectrogramTools.GetSonogramPlusCharts(spectrogram, null, null, null); //results.Sonogram.GetImage().Save(this.outputDirectory + "\\debug.png"); var segmentStartOffset = TimeSpan.Zero; var plots = new List <Plot>(); var(spectralEvents, dBArray) = UpwardTrackAlgorithm.GetUpwardTracks( spectrogram, parameters, segmentStartOffset); // draw a plot of max decibels in each frame double decibelNormalizationMax = 5 * parameters.DecibelThreshold.Value; var dBThreshold = parameters.DecibelThreshold.Value / decibelNormalizationMax; var normalisedDecibelArray = DataTools.NormaliseInZeroOne(dBArray, 0, decibelNormalizationMax); var plot1 = new Plot("decibel max", normalisedDecibelArray, dBThreshold); plots.Add(plot1); var allResults = new RecognizerResults() { NewEvents = new List <EventCommon>(), Hits = null, ScoreTrack = null, Plots = new List <Plot>(), Sonogram = null, }; // combine the results i.e. add the events list of call events. allResults.NewEvents.AddRange(spectralEvents); allResults.Plots.AddRange(plots); // effectively keeps only the *last* sonogram produced allResults.Sonogram = spectrogram; // DEBUG PURPOSES ONLY - COMMENT NEXT LINE this.SaveTestOutput( outputDirectory => GenericRecognizer.SaveDebugSpectrogram(allResults, null, outputDirectory, "UpwardsTrack1")); Assert.AreEqual(2, allResults.NewEvents.Count); var @event = (SpectralEvent)allResults.NewEvents[0]; Assert.AreEqual(10.0, @event.EventStartSeconds, 0.1); Assert.AreEqual(10.1, @event.EventEndSeconds, 0.1); Assert.AreEqual(6450, @event.LowFrequencyHertz); Assert.AreEqual(10750, @event.HighFrequencyHertz); @event = (SpectralEvent)allResults.NewEvents[1]; Assert.AreEqual(11.0, @event.EventStartSeconds, 0.1); Assert.AreEqual(11.24, @event.EventEndSeconds, 0.1); Assert.AreEqual(6450, @event.LowFrequencyHertz); Assert.AreEqual(7310, @event.HighFrequencyHertz); }