public void SpectrumData_LogarithmicTransform()
        {
            SpectrumData data = SpectrumData.Create(
                new float[][]
            {
                new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f }
            },
                ScaleType.Linear,
                ScaleType.Linear,
                0f, 1000f);
            var log = data.LogarithmicTransform(3, 1, 1000);

            Assert.AreEqual(1, log.Count);
            Assert.AreEqual(3u, log.FrequencyCount);
            Assert.AreEqual(1, log.MinFrequency);
            Assert.AreEqual(1000, log.MaxFrequency);

            var expected = new float[] { 0.009495f, 0.1395f, 5.3f };

            for (int index = 0; index < log.Count; index++)
            {
                Assert.AreEqual(expected[0], log[0][0], 1e-9);
                Assert.AreEqual(expected[1], log[0][1], 1e-7);
                Assert.AreEqual(expected[2], log[0][2], 1e-5);
            }
        }
        public void SourceConverter_RiseAndFall()
        {
            var nextFrame = new VisualizationDataFrame(
                testFrame.Time.Value.Add(testFrame.Duration),
                testFrame.Duration,
                ScalarData.Create(Enumerable.Repeat <float>(1.0f, (int)expectedChannelCount).ToArray()),
                ScalarData.Create(Enumerable.Repeat <float>(2.0f, (int)expectedChannelCount).ToArray()),
                SpectrumData.Create(
                    Enumerable.Repeat <float>(1.0f, (int)(expectedChannelCount * expectedFrequencyCount)).ToArray(), expectedChannelCount, ScaleType.Linear, ScaleType.Linear, expectedMinFrequency, expectedMaxFrequency)
                );

            sut.SpectrumRiseTime = TimeSpan.FromMilliseconds(100);
            sut.SpectrumFallTime = TimeSpan.FromMilliseconds(50);
            sut.RmsRiseTime      = TimeSpan.FromMilliseconds(80);
            sut.RmsFallTime      = TimeSpan.FromMilliseconds(40);
            sut.PeakRiseTime     = TimeSpan.FromMilliseconds(20);
            sut.PeakFallTime     = TimeSpan.FromMilliseconds(200);

            var data = sut.GetData();

            testSource.Frame = nextFrame;
            data             = sut.GetData();
            Assert.IsNotNull(data.RMS);
            Assert.IsNotNull(data.Peak);
            Assert.IsNotNull(data.Spectrum);
        }
Пример #3
0
        public void SpectrumData_CreateWithValues()
        {
            var data = SpectrumData.Create(g_InitialValues, 2, ScaleType.Linear, ScaleType.Linear, 0, 20000);

            CollectionAssert.AreEqual(g_InitialValues.Take(5).ToArray(), data[0].ToArray());
            CollectionAssert.AreEqual(g_InitialValues.Skip(5).ToArray(), data[1].ToArray());
        }
Пример #4
0
        public void SpectrumData_CombineChannels()
        {
            SpectrumData data = SpectrumData.Create(
                new float[]
            {
                1, 0, 0, 0, 0,
                0, 1, 0, 0, 0,
                0, 0, 1, 0, 0,
                0, 0, 0, 1, 0,
                0, 0, 0, 0, 1
            },
                5,
                ScaleType.Linear,
                ScaleType.Linear,
                0,
                20000
                );

            var spectrum = data.CombineChannels(new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f });

            Assert.AreEqual(2, spectrum.Count);
            Assert.AreEqual(5u, spectrum.FrequencyCount);
            Assert.AreEqual(ScaleType.Linear, spectrum.AmplitudeScale);
            Assert.AreEqual(ScaleType.Linear, spectrum.FrequencyScale);
            Assert.AreEqual(0.0f, spectrum.MinFrequency);
            Assert.AreEqual(20000f, spectrum.MaxFrequency);
            Assert.AreEqual(4000f, spectrum.FrequencyStep);
            CollectionAssert.AreEqual(new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f }, spectrum[0].ToArray());
            CollectionAssert.AreEqual(new float[] { 0.6f, 0.7f, 0.8f, 0.9f, 1.0f }, spectrum[1].ToArray());
        }
Пример #5
0
 public void SpectrumData_CreateArgs_ValuesAreNull()
 {
     Assert.ThrowsException <NullReferenceException>(
         () =>
     {
         var s = SpectrumData.Create(null, 2, ScaleType.Linear, ScaleType.Linear, 0.0f, 20000f);
     }, "Null initializer");
 }
Пример #6
0
        public void SpectrumData_ConvertToDecibels()
        {
            var testValues = new float[] { 0.0f, 0.1f, 1.0f, 1e-6f, 1e6f, -1 };
            var data       = SpectrumData.Create(testValues, 1, ScaleType.Linear, ScaleType.Linear, 20, 20000);
            var logData    = data.ConvertToDecibels(-100, 0);

            CollectionAssert.AreEqual(new float[] { -100.0f, -20.0f, 0.0f, -100.0f, 0.0f, -100.0f }, logData[0].ToArray());
        }
Пример #7
0
 public void SpectrumData_CreateArgs_MinFZeroWhenFScaleLog()
 {
     Assert.ThrowsException <ArgumentException>(
         () =>
     {
         var s = SpectrumData.Create(g_InitialValues, 2, ScaleType.Linear, ScaleType.Logarithmic, 0.0f, 20000f);
     }, "MinFrequency == 0 while FrequencyScale == Logarithmic");
 }
Пример #8
0
 public void SpectrumData_CreateArgs_MinF_Negative()
 {
     Assert.ThrowsException <ArgumentException>(
         () =>
     {
         var s = SpectrumData.Create(g_InitialValues, 2, ScaleType.Linear, ScaleType.Linear, -1.0f, 20000f);
     }, "MinFrequency < 0");
 }
Пример #9
0
 public void SpectrumData_CreateArgs_MinF_GT_MaxF()
 {
     Assert.ThrowsException <ArgumentException>(
         () =>
     {
         var s = SpectrumData.Create(g_InitialValues, 2, ScaleType.Linear, ScaleType.Linear, 30000.0f, 20000f);
     }, "MinFrequency > MaxFrequency");
 }
Пример #10
0
 public void SpectrumData_CreateArgs_ValuesSizeByChannelSizeIsLessThan1()
 {
     Assert.ThrowsException <ArgumentException>(
         () =>
     {
         var s = SpectrumData.Create(new float[] { 1, 2 }, 3, ScaleType.Linear, ScaleType.Linear, 0.0f, 20000f);
     }, "Too few init elements");
 }
Пример #11
0
 public void TestInit()
 {
     ltd = SpectrumData.Create(
         new float [] { 1, 2, 3, 4, 5, 10, 20, 30, 40, 50 },
         2,
         ScaleType.Linear,
         ScaleType.Linear,
         0,
         20000
         );
 }
Пример #12
0
        public void SpectrumData_CombineChannels()
        {
            SpectrumData data = SpectrumData.Create(
                new float[][]
            {
                new float[] { 1, 0, 0, 0, 0 },
                new float[] { 0, 1, 0, 0, 0 },
                new float[] { 0, 0, 1, 0, 0 },
                new float[] { 0, 0, 0, 1, 0 },
                new float[] { 0, 0, 0, 0, 1 },
            },
                ScaleType.Linear,
                ScaleType.Linear,
                0,
                20000
                );

            Assert.ThrowsException <NullReferenceException>(() => { data.CombineChannels(null); }, "Null parameter");
            Assert.ThrowsException <ArgumentException>(() => { data.CombineChannels(new float[] { }); }, "Empty map");
            Assert.ThrowsException <ArgumentException>(() => { data.CombineChannels(new float[] { 0, 0, 0, 0 }); }, "Too few elements");
            Assert.ThrowsException <ArgumentException>(() =>
            {
                var logData = SpectrumData.CreateEmpty(2, 10, ScaleType.Logarithmic, ScaleType.Linear, 0, 20000);
                data.CombineChannels(new float[] { 0.5f, 0.5f });
            }, "Combine log amp data");

            var spectrum = data.CombineChannels(new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f });

            Assert.AreEqual(2, spectrum.Count);
            Assert.AreEqual(5u, spectrum.FrequencyCount);
            Assert.AreEqual(ScaleType.Linear, spectrum.AmplitudeScale);
            Assert.AreEqual(ScaleType.Linear, spectrum.FrequencyScale);
            Assert.AreEqual(0.0f, spectrum.MinFrequency);
            Assert.AreEqual(20000f, spectrum.MaxFrequency);
            Assert.AreEqual(4000f, spectrum.FrequencyStep);
            CollectionAssert.AreEqual(new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f }, spectrum[0].ToArray());
            CollectionAssert.AreEqual(new float[] { 0.6f, 0.7f, 0.8f, 0.9f, 1.0f }, spectrum[1].ToArray());
        }
Пример #13
0
        public void SpectrumData_LinearTransform()
        {
            SpectrumData data = SpectrumData.Create(
                new float[][]
            {
                new float [] { 1, 2, 3, 4, 5 },
                new float [] { 10, 20, 30, 40, 50 }
            },
                ScaleType.Linear,
                ScaleType.Linear,
                0,
                20000
                );

            // Case 1 exact division - bins are at 4000 -> mapping to 8000
            var s1 = data.LinearTransform(3, 0, 24000);

            Assert.AreEqual(2, s1.Count);
            Assert.AreEqual(3u, s1.FrequencyCount);
            Assert.AreEqual(ScaleType.Linear, s1.AmplitudeScale);
            Assert.AreEqual(ScaleType.Linear, s1.FrequencyScale);
            Assert.AreEqual(8000.0f, s1.FrequencyStep);
            Assert.AreEqual(0.0f, s1.MinFrequency);
            Assert.AreEqual(24000.0f, s1.MaxFrequency);
            CollectionAssert.AreEqual(new float[] { 4, 8, 2.5f }, s1[0].ToArray());
            CollectionAssert.AreEqual(new float[] { 40, 80, 25 }, s1[1].ToArray());
            // Case 2 bins are > 1 but fractional and shifted up by 1k
            var s2 = data.LinearTransform(4, 1000, 25000);

            Assert.AreEqual(4u, s2.FrequencyCount);
            Assert.AreEqual(6000.0f, s2.FrequencyStep);
            Assert.AreEqual(1000.0f, s2.MinFrequency);
            Assert.AreEqual(25000.0f, s2.MaxFrequency);
            CollectionAssert.AreEqual(new float[] { 3.0f, 5.25f, 5.8125f, 0.15625f }, s2[0].ToArray());
            CollectionAssert.AreEqual(new float[] { 30f, 52.5f, 58.125f, 1.5625f }, s2[1].ToArray());
        }
Пример #14
0
        public void SpectrumData_CreateWithValues()
        {
            float[][] initialValues =
            {
                new float[] { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f },
                new float[] { 0.5f, 0.6f, 0.7f, 0.8f, 0.9f }
            };
            var data = SpectrumData.Create(initialValues, ScaleType.Linear, ScaleType.Linear, 0, 20000);

            CollectionAssert.AreEqual(initialValues[0], data[0].ToArray());
            CollectionAssert.AreEqual(initialValues[1], data[1].ToArray());
            Assert.AreEqual(2, data.Count);
            Assert.AreEqual(2, data.Count());
            Assert.AreEqual(ScaleType.Linear, data.AmplitudeScale);
            Assert.AreEqual(5u, data.FrequencyCount);
            Assert.AreEqual(ScaleType.Linear, data.FrequencyScale);
            Assert.AreEqual(20000 / 5, data.FrequencyStep);
            Assert.AreEqual(0, data.MinFrequency);
            Assert.AreEqual(20000, data.MaxFrequency);
            float[][] logValues =
            {
                new float[] { -100.0f, -80.0f, -60.0f, -40.0f, -20.0f },
                new float[] {  -90.0f, -70.0f, -50.0f, -30.0f, -10.0f }
            };
            var logData = SpectrumData.Create(logValues, ScaleType.Logarithmic, ScaleType.Logarithmic, 20, 20000);

            CollectionAssert.AreEqual(logValues[0], logData[0].ToArray());
            CollectionAssert.AreEqual(logValues[1], logData[1].ToArray());
            Assert.AreEqual(2, data.Count);
            Assert.AreEqual(2, data.Count());
            Assert.AreEqual(ScaleType.Logarithmic, logData.AmplitudeScale);
            Assert.AreEqual(5u, data.FrequencyCount);
            Assert.AreEqual(ScaleType.Logarithmic, logData.FrequencyScale);
            Assert.AreEqual((float)Math.Pow(1000, 1.0 / 5.0), logData.FrequencyStep);
            Assert.AreEqual(20, logData.MinFrequency);
            Assert.AreEqual(20000, logData.MaxFrequency);

            Assert.ThrowsException <NullReferenceException>(
                () =>
            {
                var s = SpectrumData.Create(null, ScaleType.Linear, ScaleType.Linear, 0.0f, 20000f);
            }, "Null initializer");
            Assert.ThrowsException <ArgumentException>(
                () =>
            {
                var s = SpectrumData.Create(new float[][] { new float[] { 1, 2, 3 }, new float[] { 1, 2, 3, 4 } },
                                            ScaleType.Linear, ScaleType.Linear, 0.0f, 20000f);
            }, "Unequal channel initializers");
            Assert.ThrowsException <ArgumentException>(
                () =>
            {
                var s = SpectrumData.Create(logData, ScaleType.Linear, ScaleType.Linear, 30000.0f, 20000f);
            }, "MinFrequency > MaxFrequency");
            Assert.ThrowsException <ArgumentException>(
                () =>
            {
                var s = SpectrumData.Create(logData, ScaleType.Linear, ScaleType.Linear, 20000f, 20000f);
            }, "MinFrequency == MaxFrequency");
            Assert.ThrowsException <ArgumentException>(
                () =>
            {
                var s = SpectrumData.Create(logData, ScaleType.Linear, ScaleType.Linear, -1.0f, 20000f);
            }, "MinFrequency < 0");
            Assert.ThrowsException <ArgumentException>(
                () =>
            {
                var s = SpectrumData.Create(logData, ScaleType.Linear, ScaleType.Logarithmic, 0.0f, 20000f);
            }, "MinFrequency == 0 while FrequencyScale == Logarithmic");
        }