Esempio n. 1
0
        static void ExampleUsePlanDirectly()
        {
            // Use the same arrays for as many transformations as you like.
            // If you can use the same arrays for your transformations, this is faster than calling DFT.FFT / DFT.IFFT
            using (var timeDomain = new FftwArrayComplex(253))
                using (var frequencyDomain = new FftwArrayComplex(timeDomain.GetSize()))
                    using (var fft = FftwPlanC2C.Create(timeDomain, frequencyDomain, DftDirection.Forwards))
                        using (var ifft = FftwPlanC2C.Create(frequencyDomain, timeDomain, DftDirection.Backwards))
                        {
                            // Set the input after the plan was created as the input may be overwritten
                            // during planning
                            for (int i = 0; i < timeDomain.Length; i++)
                            {
                                timeDomain[i] = i % 10;
                            }

                            // timeDomain -> frequencyDomain
                            fft.Execute();

                            for (int i = frequencyDomain.Length / 2; i < frequencyDomain.Length; i++)
                            {
                                frequencyDomain[i] = 0;
                            }

                            // frequencyDomain -> timeDomain
                            ifft.Execute();

                            // Do as many forwards and backwards transformations here as you like
                        }
        }
Esempio n. 2
0
        public static void SetupPlan(int numDpTime)
        {
            DFT.Wisdom.Import("wisdom.txt");

            mTimeBuffer = new FftwArrayComplex(numDpTime);
            mFreqBuffer = new FftwArrayComplex(numDpTime);
            mPlanFore   = FftwPlanC2C.Create(mTimeBuffer, mFreqBuffer, DftDirection.Forwards, PlannerFlags.Measure);
            mPlanBack   = FftwPlanC2C.Create(mFreqBuffer, mTimeBuffer, DftDirection.Backwards, PlannerFlags.Measure);
        }
Esempio n. 3
0
        private static string ProcessMessage(string s, PinnedArray <double> pin, FftwArrayComplex com, FftwPlanRC fft)
        {
            //Deserialize and then FFTW then return datasample as json string
            WFOTransporter wav    = JsonConvert.DeserializeObject <WFOTransporter>(s);
            WaveFileObject obj    = new WaveFileObject(wav);
            DataSample     sample = new DataSample(FFT(obj, pin, com, fft));
            string         json   = JsonConvert.SerializeObject(sample);

            return(json);
        }
Esempio n. 4
0
        static double[] FFT(WaveFileObject obj, PinnedArray <double> pin, FftwArrayComplex com, FftwPlanRC fft)
        {
            Console.WriteLine("FFT");
            double[] magnitudes;
            Console.WriteLine(obj.soundData.Count);
            double[] input = new double[obj.soundData.Count + 20286];
            Array.Clear(input, 0, input.Length);
            obj.soundData.CopyTo(input, 0);

            switch (obj.header.channels)
            {
            case 1:
                for (int i = 0; i < pin.Length; i++)
                {
                    pin[i] = input[i];
                    //Console.Write(pin[i] + " : ");
                }
                break;

            case 2:
                for (int i = 0; i < pin.Length; i++)
                {
                    pin[i] = input[i + i];
                    //Console.WriteLine(pin[i]);
                }
                break;

            default:
                break;
            }

            fft.Execute();

            magnitudes = new double[com.Length];
            for (int i = 0; i < 4000; i++)
            {
                magnitudes[i] = 10 * Math.Log10((com[i].Magnitude / inputSize) * (com[i].Magnitude / inputSize));

                /*
                 * if (10 * Math.Log10((com[i].Magnitude / inputSize) * (com[i].Magnitude / inputSize)) > 10)
                 * {
                 *  Console.WriteLine("Bin: " + i * sampleRate / com.Length + " " + 10 * Math.Log10((com[i].Magnitude / inputSize) * (com[i].Magnitude / inputSize)));
                 * }
                 */
            }

            Console.WriteLine(com.Length);
            Console.WriteLine();

            Console.WriteLine("Returning magnitudes");
            return(magnitudes);
        }
Esempio n. 5
0
        static double calcFreqEnergy(FftwArrayComplex data, int rate)
        {
            //   T a0^2 + T/2 Σcn^2 [n=1~N]
            // = T/2(2*a0^2 + Σcn^2)
            var len    = data.Length;
            var T      = len / rate;
            var energy = (data[0].Magnitude * data[0].Magnitude) * 2;            //2*a0^2

            for (int i = 1; i < len; i++)
            {
                energy += data[i].Magnitude * data[i].Magnitude; //Σcn^2
            }
            energy *= T / 2.0;                                   // T/2
            return(energy);
        }
Esempio n. 6
0
        public AudioIn(int sampleRate, int device, int bufferSize)
        {
            if (device > WaveIn.DeviceCount)
            {
                throw new Exception();
            }

            this.sampleRate = sampleRate;
            this.bufferSize = bufferSize;
            audioDataTrue   = new short[bufferSize + 20286];
            tempOdd         = new double[audioDataTrue.Length];
            tempTrue        = new double[audioDataTrue.Length];

            realIn = new PinnedArray <double>(audioDataTrue.Length);
            comOut = new FftwArrayComplex(DFT.GetComplexBufferSize(realIn.GetSize()));
            fft    = FftwPlanRC.Create(realIn, comOut, DftDirection.Forwards);

            waveInDevices            = WaveIn.DeviceCount;
            waveEvent                = new WaveInEvent();
            waveEvent.DeviceNumber   = device;
            waveEvent.DataAvailable += OnWaveIn;
            channels             = WaveIn.GetCapabilities(device).Channels;
            waveEvent.WaveFormat = new WaveFormat(sampleRate, 1);

            string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/NetworkSave01.json";

            // Load Neural network
            if (File.Exists(path))
            {
                Console.WriteLine("exists");
                network = NeuralNetwork.LoadNetwork(path);
            }
            else
            {
                throw new FileNotFoundException();
            }

            //network.PrintWeights();

            waveEvent.StartRecording();
        }
Esempio n. 7
0
        static void Main(string[] args)
        {
            try
            {
                TcpClient tcpClient = new TcpClient("127.0.0.1", 10000);
                Console.WriteLine("Connected");

                StreamReader reader = new StreamReader(tcpClient.GetStream());
                StreamWriter writer = new StreamWriter(tcpClient.GetStream());
                string       s      = "";

                using (var timeDomain = new PinnedArray <double>(inputSize))
                    using (var frequencyDomain = new FftwArrayComplex(DFT.GetComplexBufferSize(timeDomain.GetSize())))
                        using (var fft = FftwPlanRC.Create(timeDomain, frequencyDomain, DftDirection.Forwards))
                        {
                            while (!(s = reader.ReadLine()).Equals("Quit") || (s == null))
                            {
                                string result = "";

                                if (IsValidJson(s))
                                {
                                    result = ProcessMessage(s, timeDomain, frequencyDomain, fft);
                                }

                                writer.WriteLine(result);
                                writer.Flush();
                                GC.Collect();
                            }
                            reader.Close();
                            writer.Close();
                            tcpClient.Close();
                        }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Console.WriteLine(e.InnerException);
                Console.WriteLine(e.Message);
                throw;
            }
        }
Esempio n. 8
0
        static void ExampleR2C()
        {
            double[] input = new double[97];

            var rand = new Random();

            for (int i = 0; i < input.Length; i++)
            {
                input[i] = rand.NextDouble();
            }

            using (var pinIn = new PinnedArray <double>(input))
                using (var output = new FftwArrayComplex(DFT.GetComplexBufferSize(pinIn.GetSize())))
                {
                    DFT.FFT(pinIn, output);
                    for (int i = 0; i < output.Length; i++)
                    {
                        Console.WriteLine(output[i]);
                    }
                }
        }