/// <summary> /// 计算光谱文件的信噪比SNR /// </summary> /// <param name="filename">光谱文件</param> /// <param name="intStart">信号区间起始波数</param> /// <param name="intEnd">信号区间结束波数</param> /// <param name="noiseStart">噪声区间起始波数</param> /// <param name="noiseEnd">噪声区间结束波数</param> /// <returns>信噪比SNR值, 如果返回0,表示出错了</returns> private float calulateSNR(string filename, float intStart, float intEnd, float noiseStart, float noiseEnd, out float noiseInteValue, out float singalInteValue) { noiseInteValue = singalInteValue = 0; SpecFileFormat spcdata = new SpecFileFormat(); if (spcdata.ReadFile(filename) == false) { ErrorString = spcdata.ErrorString; return(0); } singalInteValue = (float)SpectrumAlgorithm.Integrate(spcdata.XDatas, spcdata.YDatas, intStart, intEnd); if (singalInteValue == 0) { ErrorString = "光谱积分计算错误"; return(0); } noiseInteValue = (float)SpectrumAlgorithm.CalculateRMS(spcdata.XDatas, spcdata.YDatas, noiseStart, noiseEnd); if (noiseInteValue == 0) { ErrorString = "光谱RMS计算错误"; return(0); } return((float)(singalInteValue / noiseInteValue)); }
/// <summary> /// 计算Accuracy_PeakPoints指定位置的当前光谱的峰位 /// </summary> /// <param name="filename">光谱文件名</param> /// <returns>峰位值</returns> private float[] Accuracy_Calculate(string filename) { //读取SPC光谱数据 SpecFileFormat spcData = new SpecFileFormat(); if (spcData.ReadFile(filename) == false) { ErrorString = spcData.ErrorString; return(null); } float[] peakPicked = new float[SettingData.settingData.accuracy_test.peakPoint.Count]; double newyvalue = 0; for (int i = 0; i < peakPicked.Length; i++) { //获取指定点的峰位 peakPicked[i] = (float)SpectrumAlgorithm.PickPeak(spcData.XDatas, spcData.YDatas, SettingData.settingData.accuracy_test.peakPoint[i], 1, out newyvalue); } return(peakPicked); }