/** * 零相位延迟FIR滤波 * @param: * dataSerial 输入波形 * samplingFreq 采样率 Hz * lowCutOff 低截至频率 Hz * highCutOff 高截至频率 Hz * * @return FIRResult 滤波后数据 */ public double[] ZeroPhaseFIR(double[] dataSerial, double samplingFreq, double lowCutOff, double highCutOff) { IList <double> coef = new List <double>(); double[] hf = FirCoefficients.BandPass(samplingFreq, lowCutOff, highCutOff, 64); //获得滤波系数 foreach (double number in hf) { coef.Add(number); } OnlineFirFilter filter = new OnlineFirFilter(coef); double[] FIRResult = filter.ProcessSamples(dataSerial); //正向滤波 FIRResult = filter.ProcessSamples(FIRResult.Reverse().ToArray()); //反向滤波 FIRResult = FIRResult.Reverse().ToArray(); //反转 return(FIRResult); }
protected override void Execute() { _filteredDatas.Clear(); OnlineFirFilter filter = _configForm.Filter; for (int i = 0; i < this.DataBuf.Count; i++) { double[] showData = this.DataBuf[i]; _filteredDatas.AddRange(filter.ProcessSamples(showData)); } }
protected override void Execute() { _filteredDatas.Clear(); int samplesPerView = GlobalInfo.SamplesInChart; // if (null == _filteredWave || _filteredWave.Length != samplesPerView) // { // _filteredWave = new double[samplesPerView]; // } OnlineFirFilter filter = _configForm.Filter; for (int i = 0; i < GlobalInfo.EnableChannelCount; i++) { double[] showData = DataBuf.GetRange(i * samplesPerView, samplesPerView).ToArray(); _filteredDatas.AddRange(filter.ProcessSamples(showData)); } }