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; }
public void Interpolation(int dataSize) { if (dataSize == this.signals.Count) { return; } var list = CtkNumUtil.Interpolation(this.signals.ToArray(), dataSize); this.signals.Clear(); this.signals.AddRange(list); }
public void Interpolation(int dataSize) { foreach (var kv in this.Signals) { var ss = kv.Value; if (dataSize == ss.Count) { continue; } var list = CtkNumUtil.InterpolationCanOneOrZero(ss, dataSize); kv.Value.Clear(); kv.Value.AddRange(list); } }
public void Input(object sender, SNetTdSignalEventArg e) { if (!this.IsEnalbed) { return; } var tsSetSecondEa = e as SNetTdSignalSecSetF8EventArg; if (tsSetSecondEa == null) { throw new SNetException("尚未無法處理此類資料: " + e.GetType().FullName); } if (!tsSetSecondEa.PrevTime.HasValue) { return; } if (tsSetSecondEa.Time == tsSetSecondEa.PrevTime.Value) { return; } var t = tsSetSecondEa.PrevTime.Value; //取得時間變更前的時間資料 IList <double> signalData = tsSetSecondEa.TSignalSource.GetOrCreate(t); if (this.FilterArgs.Mode != CtkEnumPassFilterMode.None) { this.PassFilter.SetFilter(this.FilterArgs); signalData = CtkNumUtil.InterpolationCanOneOrZero(signalData, (int)this.FilterArgs.SampleRate); signalData = this.PassFilter.ProcessSamples(signalData); } this.ProcAndPushData(this.TSignal, new SNetTSignalSecF8(t, signalData)); e.InvokeResult = this.disposed ? SNetTdEnumInvokeResult.IsDisposed : SNetTdEnumInvokeResult.None; }