Example #1
0
        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);
        }
Example #2
0
        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);
        }