首页 > 编程知识 正文

滑动平均值滤波程序,压力传感器滤波算法

时间:2023-05-05 06:59:12 阅读:141978 作者:4332

滤波前的曲线

滤波后的曲线

滤波代码

/**arg1:原始数据*arg2:滑动平均滤波计算平均值时所取得点数,点数越到越失真*arg3:原始数据大小*arg4:平滑后的数据*/static void Smooth(float *rawData, int pointsOfWindow, int dataLen, float *processData){int N = pointsOfWindow;int size = dataLen; float Sum1=0; for(int j=0;j<size;j++) { //if(j<N/2) //{ // for(int k=0;k<N;k++) // { // Sum1+=rawData[j+k]; // } // processData[j]=Sum1/N; //} //else // if(j<size -N/2) if(j<size-N) { //for(int k=0;k<N/2;k++) for(int k=0;k<N;k++) { //Sum1+=(rawData[j+k]+rawData[j-k]); Sum1+=rawData[j+k]; } processData[j]=Sum1/N; } else { for(int k=0;k<size-j;k++) { Sum1+=rawData[j+k]; } for(int k=0;k<(N-size+j);k++) { Sum1+=rawData[j-k]; } processData[j]=Sum1/N; } Sum1=0; }}/*Function1、平滑阻抗和相位并返回平滑后的阻抗和相位Function2、保存原始的阻抗和相位到rawData.txt,只保留最近一次的数据arg1:原始阻抗数据arg2:原始相位数据arg2:平滑的点数arg3:数据个数arg4:处理后的阻抗数据arg5:处理后的相位数据*/static void SmoothImpedanceAndPhase(float *rawFreqData, float *rawImpedanceData, float *rawPhaseData, int pointsOfWindow, int dataLen, float *processImpedanceData, float *processPhaseData){FILE *fp = fopen("./rawData.txt", "w");if(fp == NULL)MessagePopup("Tips", "写数据时打开文件出错0");Smooth(rawImpedanceData, pointsOfWindow, dataLen, processImpedanceData);//平滑阻抗Smooth(rawPhaseData, pointsOfWindow, dataLen, processPhaseData);//平滑相位for(int i = 0;i<dataLen;i++){//processData_Im[i] =processData_impedance[i] * sin(processData_phase[i] * 3.1415926535 / 180);//processData_Re[i] =processData_impedance[i] * cos(processData_phase[i] * 3.1415926535 / 180);fprintf(fp, "%.5ft%.5ft%.5fn",rawFreqData[i], rawImpedanceData[i], rawPhaseData[i]);//保存原始数据到可执行程序目录下,以备查看}fclose(fp);}int CVICALLBACK RunSmoothingCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_LEFT_CLICK_UP:FILE *fp = fopen("./rawData.txt", "w");if(fp == NULL)MessagePopup("Tips", "写数据时打开文件出错0");float processData_impedance[260];float processData_phase[260];float processData_Im[260];float processData_Re[260];unsigned char ctrlVal = 0;GetCtrlVal(panel, SMOOTHINGP_RING, &ctrlVal); //Points of WindowSmooth(cdc_Data.myImpedance, ctrlVal, cdc_Data.pointsNum, processData_impedance);//平滑阻抗Smooth(cdc_Data.myPhase, ctrlVal, cdc_Data.pointsNum, processData_phase);//平滑相位for(int i = 0;i<cdc_Data.pointsNum;i++){processData_Im[i] = -processData_impedance[i] * sin(processData_phase[i] * 3.1415926535 / 180);processData_Re[i] =processData_impedance[i] * cos(processData_phase[i] * 3.1415926535 / 180);fprintf(fp, "%.5ft%.5ft%.5fn",cdc_Data.freq[i], cdc_Data.myImpedance[i], cdc_Data.myPhase[i]);//保存原始数据到可执行程序目录下,以备查看}fclose(fp);GraphInit(hGraphDispPanel, 0, 1,cdc_Data.pointsNum,&Graph1);DeleteGraphPlot (hGraphDispPanel, GRAPHDISP_GRAPH1, -1, VAL_IMMEDIATE_DRAW);//Delete a painting from a drawingGraphDeinit(&Graph1);SetAxisScalingMode(hGraphDispPanel, GRAPHDISP_GRAPH1, VAL_LEFT_YAXIS, VAL_AUTOSCALE, 0,0);SetAxisScalingMode(hGraphDispPanel, GRAPHDISP_GRAPH1, VAL_BOTTOM_XAXIS, VAL_AUTOSCALE, 0,0); Graph1.plotHandle=PlotXY(hGraphDispPanel, GRAPHDISP_GRAPH1, processData_Re, processData_Im, cdc_Data.pointsNum, VAL_FLOAT, VAL_FLOAT,Graph1.pCurveArray->pCurveAttr->plotStyle,Graph1.pCurveArray->pCurveAttr->pointStyle,Graph1.pCurveArray->pCurveAttr->lineStyle, 1,Graph1.pCurveArray->pCurveAttr->lineColor);break;}return 0;}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。