Example #1
0
        public void Input(object sender, SNetTdEventArg e)
        {
            if (!this.IsEnalbed)
            {
                return;
            }
            var myea = e as SNetTdSignalSecSetF8EventArg;

            if (myea == null)
            {
                throw new SNetException("尚未無法處理此類資料: " + e.GetType().FullName);
            }



            if (!myea.PrevTime.HasValue)
            {
                return;
            }
            if (myea.Time == myea.PrevTime.Value)
            {
                return;
            }
            var t = myea.PrevTime.Value;

            this.Purge();//先Purge, 避免Exception造成沒有Purge


            //取得時間變更前的時間資料
            IList <double> signalData = myea.TSignalSource.GetOrCreate(t);

            signalData = CtkNumUtil.InterpolationForce(signalData, this.SampleRate);

            var ctkNumContext = CtkNumContext.GetOrCreate();
            var comp          = ctkNumContext.FftForward(signalData);

            var fftData = new double[comp.Length];

            Parallel.For(0, comp.Length, (idx) =>
            {
                fftData[idx] = comp[idx].Magnitude;
            });
            this.TSignalSet.Set(t, fftData.ToList());



            var ea = new SNetTdSignalSecSetF8EventArg();

            ea.Sender        = this;
            ea.PrevTime      = this.PrevTime;
            ea.Time          = t;
            ea.TSignalSource = this.TSignalSet;
            ea.TSignalNew    = new SNetTSignalSecSetF8(t, fftData);
            this.OnDataChange(ea);

            myea.InvokeResult = this.disposed ? SNetTdEnumInvokeResult.IsDisposed : SNetTdEnumInvokeResult.None;
        }
Example #2
0
        public ComplexD[] ComputeSpectrumH()
        {
            var fft = this.ComputeFft();

            var freqData = CtkNumContext.GetOrCreate().SpectrumFftD(fft);

            this.spectrum = new ComplexD[fft.Length / 2];
            for (int idx = 0; idx < spectrum.Length; idx++)
            {
                spectrum[idx] = freqData[idx];
            }

            return(this.spectrum);
        }
Example #3
0
        public ComplexD[] ComputeFft()
        {
            if (this.fft != null)
            {
                return(this.fft);
            }
            this.fft = new ComplexD[this.signals.Count()];
            if (this.signals.Count <= 0)
            {
                return(this.fft);
            }

            this.fft = CtkNumContext.GetOrCreate().FftForwardD(this.signals);
            return(this.fft);
        }
Example #4
0
        public ComplexD[] ComputeFft()
        {
            this.RefreshTime();
            if (this.signals.Count <= 0)
            {
                this.fft = new ComplexD[0]; return(this.fft);
            }


            fft = new ComplexD[signals.Count];
            if (signals.Count <= 0)
            {
                return(fft);
            }

            this.fft = CtkNumContext.GetOrCreate().FftForwardD(this.signals);
            return(fft);
        }