📄 math.c
字号:
void ratio_convert(const unsigned int ratio,char *p)
{
int ratio_data;
ratio_data = (int)(0.0092736*ratio*ratio*ratio-1.4211*ratio*ratio+27.83*ratio+3079.2);
*p++ = ratio_data & 0xff;
*p = (ratio_data>>8) & 0xff;
}
void freq_convert(const unsigned int fFreq,char *p)
{
int i;
unsigned int hi=0,lo=0,bjs,cha;
bjs = fFreq;
//计算商的高17位
for(i=0;i<17;i++)
{
if(bjs >= 300000000)
{
cha = bjs - 300000000;
hi = (hi<<1) +1;
}
else
{
cha = bjs;
hi = (hi<<1) +0;
}
bjs = (cha<<1) + 0;
}
//计算商的低32位
for(i=0;i<32;i++)
{
if(bjs >= 300000000)
{
cha = bjs - 300000000;
lo = (lo<<1) +1;
}
else
{
cha = bjs;
lo = (lo<<1) +0;
}
bjs = (cha<<1) + 0;
}
for(i=0;i<4;i++)
{
*p++ = (lo>>i*8)&0xff;
}
for(i=0;i<2;i++)
*p++ = (hi>>i*8)&0xff;
}
void amp_convert(const unsigned int fFreq, const unsigned int iAmpl, char *p)
{
float xv[4]=
{ 0.000000000032063, -0.0000001098, 0.0023569, 2207.2 };
float xs[4]=
{ -0.0000000030361, 0.000019911, 0.53307, -31.974 };
float fc1[8][4]=
{
{-0.000063782, 0.0019287, -0.006831, 0.99580},
{0.0000277, -0.00057448, 0.020849, 0.72486},
{-0.00010457, 0.0076912, -0.17184, 2.1312},
{-0.000084561, 0.0076168, -0.21318, 2.7505},
{0.00015724, -0.019397, 0.77797, -9.1286},
{0.00015724, -0.024114, 1.2131, -19.003},
{-0.00012724, 0.026687, -1.8187 ,41.420 },
{-0.00012373, 0.026033,-1.7921 ,41.174 }
};
float y,yy,Ia,aaa,tFa;
int i,j,temp,Y,H,M;
Ia = fFreq / 100000.0;
i = Ia / 10;
j=i/10;
tFa = iAmpl;
j=0;
if (i<8) j=0;
if ((i<10)&&((i==8)||(i>8))) j=1;
if ((i<20)&&((i==10)||(i>10))) j=2;
if ((i<30)&&((i==20)||(i>20))) j=3;
if ((i<60)&&((i==30)||(i>30))) j=4;
if ((i<81)&&((i==60)||(i>60))) j=5;
y=fc1[j][0]*i*i*i+fc1[j][1]*i*i+fc1[j][2]*i+fc1[j][3];
if (i>10)
{
if( tFa>10000.0 ) tFa=10000.0;
if( tFa<20.0 ) tFa=20.0;
}
else
{
if( tFa>20000.0 ) tFa=20000.0;
if( tFa<20.0 ) tFa=20.0;
}
if (tFa>5000.0)
{
aaa=0.25;
temp=4;
}
if ((tFa>1249.9)&&(tFa<5000.1))
{
aaa=1.0;
temp=0;
}
if ((tFa>312.4)&&(tFa<1250.1))
{
aaa=4.0;
temp=1;
}
if ((tFa>156.1)&&(tFa<312.5))
{
aaa=8.0;
temp=2;
}
if ((tFa>19.9)&&(tFa<156.2))
{
aaa=32.0;
temp=3;
}
y=y*tFa*aaa*1.02;
y=xs[0]*y*y*y+xs[1]*y*y+xs[2]*y+xs[3];
yy=xv[0]*y*y*y+xv[1]*y*y+xv[2]*y+xv[3];
if (y>4095) y=4095;
if (yy>4095) yy=4095;
Y=(int)y;
H=(int)yy;
M=temp;
*p++ = H & 0xff;
*p++ = H>>8 & 0xff;
*p++ = Y & 0xff;
*p++ = Y>>8 & 0xff;
*p = M;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -