Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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);
            }
        }