Example #1
0
        /// <summary>
        /// 簡易處理方式, 多段時間同時輸入時, 請自行分段輸入.
        /// </summary>
        /// <param name="tSignal">原始訊號來源</param>
        /// <param name="newSignals">本次要新增的訊號</param>
        protected virtual void ProcAndPushData(SNetTSignalSecSetF8 tSignal, SNetTSignalSecF8 newSignals)
        {
            if (!this.IsEnalbed)
            {
                return;
            }
            this.Purge();//先Purge, 避免Exception造成沒有Purge


            var ea = new SNetTdSignalSecSetF8EventArg();

            ea.Sender = this;
            var time = newSignals.Time.HasValue ? newSignals.Time.Value : DateTime.Now;

            ea.Time          = time;
            ea.TSignalSource = tSignal;
            ea.PrevTime      = this.PrevTime;

            ea.TSignalNew.Add(time, newSignals.Signals);
            tSignal.Add(time, newSignals.Signals);
            this.OnDataChange(ea);

            this.PrevTime = time;
            this.Purge();
        }
Example #2
0
 public void TgInput(object sender, SNetTdSignalSecSetF8EventArg ea)
 {
     if (!this.IsEnalbed)
     {
         return;
     }
     this.OnDataChange(ea);
 }
Example #3
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 #4
0
 /// <summary>
 /// 集合型, 建議照時間序列(Seq)來input, 避免後續使用的Block認定是Sequence, 然而不是
 /// </summary>
 /// <param name="vals"></param>
 /// <param name="dt"></param>
 public void TgInput(object sender, SNetTdSignalSecSetF8EventArg ea)
 {
     //IEnumerable<double> vals, DateTime? dt = null
     if (!this.IsEnalbed)
     {
         return;
     }
     foreach (var kv in ea.TSignalNew.Signals)
     {
         this.TgInput(this.TSignalSet, kv);
     }
 }
Example #5
0
        /// <summary>
        /// 單一型, 直接執行
        /// 最後都會執行這段
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="ea"></param>
        public void TgInput(object sender, SNetTdSignalSecF8EventArg ea)
        {
            if (!this.IsEnalbed)
            {
                return;
            }
            this.Purge();//先Purge, 避免Exception造成沒有Purge

            var tSignalSet = this.TSignalSet;
            var newSignals = ea.TSignal;
            var time       = newSignals.Time.HasValue ? newSignals.Time.Value : DateTime.Now;


            tSignalSet.Add(time, newSignals.Signals);
            var evtea = new SNetTdSignalSecSetF8EventArg()
            {
                Sender        = this,
                Time          = time,
                TSignalSource = tSignalSet,
                PrevTime      = this.PrevTime,
            };

            if (this.IsTriggeredPerSecond)
            {
                if (this.PrevTime.HasValue && this.PrevTime != time)
                {
                    var prevTime = this.PrevTime.HasValue ? this.PrevTime.Value : DateTime.Now;
                    if (this.TSignalSet.ContainKey(prevTime))
                    {
                        var prevSignal = this.TSignalSet.Get(prevTime);
                        evtea.TSignalNew.Add(time, newSignals.Signals);
                        this.OnDataChange(evtea);
                    }
                }
            }
            else
            {
                evtea.TSignalNew.Add(time, newSignals.Signals);
                this.OnDataChange(evtea);
            }


            this.PrevTime = time;
        }