public void Test_DiscreteFourierTransform() { var inputSample = new[] { new Complex(1, 0), new Complex(2, 0), new Complex(3, 0), new Complex(4, 0) }; var result = FourierTransforms.DiscreteFourierTransform(inputSample); var expectedResult = new[] { new Complex(10, 0), new Complex(-2, 2), new Complex(-2, 0), new Complex(-2, -2) }; for (int i = 0; i < result.Length; i++) { var r = result[i]; var er = expectedResult[i]; var difference = 1E-10; Assert.IsTrue(Math.Abs(r.Real - er.Real) <= difference); Assert.IsTrue(Math.Abs(r.Imaginary - er.Imaginary) <= difference); } }
static LinkedList <FrequencyMagnitude> DFT(string filePath, string ouputDirectoryPath) { var inputSamplesList = CSVUtils.ReadCSVFile <CSVWaveRecord>(filePath); if (ZeroPadDFT) { Utils.PadWithZeros(inputSamplesList); } var frequencyResolution = Utils.CalculateFrequencyResolution(inputSamplesList); var inputSamplesArray = inputSamplesList.Select(x => new Complex((double)x.Volts, 0)).ToArray(); var dftValues = FourierTransforms.DiscreteFourierTransform(inputSamplesArray); inputSamplesArray = null; var size = dftValues.Length / 2; var leftHalfArray = new Complex[size]; Array.Copy(dftValues, leftHalfArray, size); dftValues = null; var intermediateFile = Path.Combine(ouputDirectoryPath, Path.GetFileName(filePath).Replace("Wave", "DFT")); Utils.printOutput(leftHalfArray, frequencyResolution, intermediateFile); return(Utils.GetFrequencyDomain(leftHalfArray, frequencyResolution)); }
public void Test_FFT_VS_DFT() { var csvFilePath = Path.Combine( TestContext.CurrentContext.TestDirectory, @"TestData\Wave000.csv"); var inputSamplesList = CSVUtils.ReadCSVFile <CSVWaveRecord>(csvFilePath); var dftInputArray = inputSamplesList.Select(x => new Complex((double)x.Volts, 0)).ToArray(); Utils.PadWithZeros(inputSamplesList); var fftInputArray = inputSamplesList.Select(x => new Complex((double)x.Volts, 0)).ToArray(); FourierTransforms.DiscreteFourierTransform(dftInputArray); FourierTransforms.FastFourierTransform(fftInputArray, 0, fftInputArray.Length); }