Example #1
0
        public void GetAmpSpectrumAndMax_ShortVec1_sameResult()
        {
            List <double> vecX = new List <double>()
            {
                319.5, 319.570564104974, 319.570564104974, 319.387187167831
            };
            List <double> vecY = new List <double>()
            {
                239.5, 239.690534471355, 239.690534471355, 239.447377199610
            };
            FftResult resultX = Fft.GetAmpSpectrumAndMax(29.966, vecX);
            FftResult resultY = Fft.GetAmpSpectrumAndMax(29.966, vecY);

            resultY.Values = resultY.Values.Select(x => Math.Round(x, 7)).ToList();
            resultX.Values = resultX.Values.Select(x => Math.Round(x, 7)).ToList();
            List <double> matlabValuesX = new List <double>()
            {
                0, 0.1964851
            };
            List <double> matlabValuesY = new List <double>()
            {
                0, 0.3089156
            };

            Assert.Equal(matlabValuesX, resultX.Values);
            Assert.Equal(matlabValuesY, resultY.Values);
        }
Example #2
0
        public void GetAmpSpectrumAndMax_ShortVec_sameResult()
        {
            List <double> Vector = CreateVector(1, 13, -10, 10);
            FftResult     fft    = new FftResult();
            FftResult     result = Fft.GetAmpSpectrumAndMax(1, Vector);

            for (int i = 0; i < result.Values.Count; i++)
            {
                result.Values[i] *= 1e13;
                result.Values[i]  = Math.Round(result.Values[i], 2, MidpointRounding.AwayFromZero);
            }
            List <(double, double)> valFreqTuple = new List <(double, double)>()
            {
                (0d, 0d), (3.25, 0.05), (1.49, 0.1), (0.16, 0.15), (1.36, 0.2), (1.27, 0.25), (0.03, 0.3), (1.46, 0.35), (1.92, 0.4), (1.31, 0.45), (0.54, 0.5)
            };

            valFreqTuple.ForEach(x => { fft.Values.Add(x.Item1); fft.Frequencies.Add(x.Item2); });
            fft.MaxIndex = 1;

            Assert.Equal(result.Frequencies, fft.Frequencies);
            Assert.Equal(result.Values, fft.Values);
            Assert.Equal(result.MaxIndex, fft.MaxIndex);

            /*Hodnoty nejsou přesně shodné s matlabem(Matlab zaokrouhluje jinak než Math.Net)
             * Math.Net počítá s větší přesností (e-21, matlab to zaokrouhlí na nulu)*/
        }
        public void Initialize()
        {
            if (_isInitialized)
            {
                return;
            }
            _isInitialized = true;

            FftResult fftResult = _fftAnalyzer.Analyze(_batCall);

            SimpleIntBin[] simpleIntBins = new SimpleIntBin[fftResult.FftData.Length - 1];
            int            iPeak         = 0;

            for (int i = 1; i < fftResult.FftData.Length; i++)
            {
                //231kHz Sample Rate with 1024 Buffer -> 115.5 / 256 Bins => 0.451 kHz pro Bin
                simpleIntBins[i - 1] = new SimpleIntBin(fftResult.FftData[i], Math.Round(i * 0.451).ToString(CultureInfo.CurrentCulture), false);
                if ((iPeak < fftResult.Peaks.Length) && (fftResult.Peaks[iPeak] == i))
                {
                    simpleIntBins[i - 1].IsHighlighted = true;
                    iPeak++;
                }
            }

            Frequencies = new ObservableCollection <SimpleIntBin>(simpleIntBins);

            PlotModel  pm         = new PlotModel();
            LineSeries lineSeries = new LineSeries();

            pm.Series.Add(lineSeries);
            pm.Axes.Add(new LinearAxis {
                Maximum = 260, Minimum = 0, Position = AxisPosition.Left, Title = "Intensität"
            });
            pm.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom, Title = "Dauer [ms]"
            });

            LineAnnotation lineAnnotation = new LineAnnotation {
                Color = OxyColors.DarkRed, LineStyle = LineStyle.Dash, Type = LineAnnotationType.Horizontal, Y = BatCall.MaxPower, Text = $"Ø {BatCall.MaxPower}"
            };

            pm.Annotations.Add(lineAnnotation);

            if (_batCall.PowerData != null)
            {
                lineSeries.Points.AddRange(_batCall.PowerData.Select((b, i) => new DataPoint(i * 0.246, b)));
            }
            Power = pm.AddStyles();
        }