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);
            }
        }
Пример #2
0
        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);
        }