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); }
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(); }