|
- #include "include.h"
- #include "fuzzy.h"
- void fuzzyout(const FUZTAB *l_tab,s16 l_EE,s16 l_EEC,s16 *pout,s16 *iout,s16 *dout)
- {
- unsigned char i,j;
- long psum=0,isum=0,dsum=0;
- s16 l_BP[10]={0,0,0,0,0,0,0,0,0,0};
- s16 l_BD[10]={0,0,0,0,0,0,0,0,0,0};
- //先确定偏差位置,并求出占相邻点比重
- for(i=0;i<l_tab->cntrow;i++)
- {
- if(l_EE<=l_tab->Edot[i])break;
- };
- if(i==0)l_BP[0]=100;
- else if(i==l_tab->cntrow)l_BP[l_tab->cntrow-1]=100;
- else if(i>0 && i<l_tab->cntrow)
- {
- l_BP[i]=(long)100*(l_EE-l_tab->Edot[i-1])/(l_tab->Edot[i]-l_tab->Edot[i-1]);
- l_BP[i-1]=(long)100*(l_tab->Edot[i]-l_EE)/(l_tab->Edot[i]-l_tab->Edot[i-1]);
- }
- //同理求出偏差微分的位置,并求出占相邻点比重
- for(j=0;j<l_tab->cntcolume;j++)
- {
- if(l_EEC<=l_tab->ECdot[j])break;
- };
- if(j==0)l_BD[0]=100;
- else if(j==l_tab->cntcolume)l_BD[l_tab->cntcolume-1]=100;
- else if(j>0 && j<l_tab->cntcolume)
- {
- l_BD[j]=(long)100*(l_EEC-l_tab->ECdot[j-1])/(l_tab->ECdot[j]-l_tab->ECdot[j-1]);
- l_BD[j-1]=(long)100*(l_tab->ECdot[j]-l_EEC)/(l_tab->ECdot[j]-l_tab->ECdot[j-1]);
- }
- //求出该点在这个二维结构中所占比重
- for(i=0;i<l_tab->cntrow;i++)
- {
- for(j=0;j<l_tab->cntcolume;j++)
- {
- psum+=(long)l_BP[i]*l_BD[j]*l_tab->ptab[i][j];
- isum+=(long)l_BP[i]*l_BD[j]*l_tab->itab[i][j];
- dsum+=(long)l_BP[i]*l_BD[j]*l_tab->dtab[i][j];
- }
- }
- if(Mid_pro>-8&& Mid_pro<8 )
- {
- *pout=(s16)(0.9*psum/100);
- *iout=(s16)(isum/100);
- *dout=(s16)(1.1*dsum/100);
- }
- if(Mid_pro>8&& Mid_pro<16)
- {
- *pout=(s16)(1.1*psum/100);
- *iout=(s16)(isum/100);
- *dout=(s16)(0.8*dsum/100);
- }
- if(Mid_pro>-16&& Mid_pro<-8)
- {
- *pout=(s16)(1.1*psum/100);
- *iout=(s16)(isum/100);
- *dout=(s16)(0.8*dsum/100);
- }
- else
- {
- *pout=(s16)(psum/100);
- *iout=(s16)(isum/100);
- *dout=(s16)(dsum/100);
- }
- }
复制代码
|
-
-
模糊.rar
1.08 KB, 下载次数: 15, 下载积分: 黑币 -5
|