public void TestRealTransform() { IDFT realFourierTransform = new RealFastFourierTransform(); FrequencyDomain realFormatResult; List <double> recreatedSignal; int sampleRate = 1000; // hz List <double> timePoints = new List <double>(2 * sampleRate); for (double timePointVal = 0; timePointVal < 2.0; timePointVal += (1.0 / sampleRate)) { timePoints.Add(timePointVal); } List <double> signal = new List <double>(timePoints.Count); foreach (double timePointVal in timePoints) { double signalValue = (2.5 * Math.Sin(2 * Math.PI * 4 * timePointVal)) + (1.5 * Math.Sin(2 * Math.PI * 6.5 * timePointVal)); signal.Add(signalValue); } realFormatResult = realFourierTransform.Transform(signal.GetRange(0, 256), sampleRate); recreatedSignal = realFourierTransform.Synthesize(realFormatResult); Assert.IsNotNull(realFormatResult); Assert.IsNotNull(recreatedSignal); for (int idx = 0; idx < recreatedSignal.Count; idx++) { Assert.IsTrue((Math.Abs(recreatedSignal[idx] - signal[idx]) < MaxDifference)); } }
static void Main(string[] args) { // ISignalGenerator sinusoid = new Sinusoid(); // Sample sinusoidSamp = new Sample(1000, 1, 200, sinusoid); // List<double> signal = sinusoidSamp.GetNextSamplesForTimeSlice(64); // IDFT transform = new FastFourierTransform(); // FrequencyDomain frequencyDomain = transform.Transform(signal); // List<double> synthesis = transform.Synthesize(frequencyDomain); try { StreamReader input = new StreamReader(args[0]); List <double> signal = new List <double>(64); while (input.Peek() > 0) { double value; if (Double.TryParse(input.ReadLine(), out value)) { signal.Add(value); } } IDFT transform = new RealFastFourierTransform(); FrequencyDomain frequencyDomain = transform.Transform(signal); //List<double> synthesis = transform.Synthesize(frequencyDomain); FileStream output = new FileStream("FourierTransformResults.csv", FileMode.Create); if (output.CanWrite) { StreamWriter writer = new StreamWriter(output); // Write header row writer.WriteLine("Index, Signal, Synthesis, Real, Imaginary"); for (int idx = 0; idx < signal.Count; idx++) { double sampleVal = signal[idx]; double synthVal = 0.0f; writer.WriteLine(idx + "," + sampleVal + "," + synthVal + "," + frequencyDomain.RealComponent[idx] + "," + frequencyDomain.ImaginaryComponent[idx]); } writer.Close(); } output.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }