public void SpectralAnalysis_RMSFromPowerSpectrum() { var sineGen = new SineWaveGenerator(1000, 100, 52100); var d = sineGen.GetNextXSamples(1000).SelectMany(x => x.Data); var data = d.ToList(); var fftData = SpectralAnaylser.FFT(data).ToArray(); var powerSpectrum = SpectralAnaylser.PowerSpectrum(fftData).ToArray(); var expected = Math.Sqrt(data.Select(x => x * x).Sum() / data.Count); var rmsPowerSpec = SpectralAnaylser.RmsFromPowerSpec(powerSpectrum); Assert.AreEqual(expected, rmsPowerSpec, 0.0001); }
public void SpectralAnalysis_PowerSpectrum_FromComplexFFT() { var sineGen = new SineWaveGenerator(1000, 100, 52100); var data = sineGen.GetNextXSamples(1000).SelectMany(x => x.Data); var fftData = SpectralAnaylser.FFT(data).ToArray(); var powerSpectrum = SpectralAnaylser.PowerSpectrum(fftData).ToArray(); //First 20 points var expectedData = new[] { 0.245170056015, 0.49658325619, 0.515681392978, 0.548785216463, 0.597970475506, 0.66651053222, 0.759341701516, 0.883840416896, 1.05113644411, 1.2783980737, 1.59297851554, 2.04035148994, 2.70034243877, 3.7232172295, 5.41902088726, 8.51292503252, 15.0403276039, 32.666419917, 113.029844515, 4391.24421811 }; for (var i = 0; i < expectedData.Length; i++) { Assert.AreEqual(expectedData[i], powerSpectrum[i], 0.0001); } }