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 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); }
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); }
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); }