#include #include #include #include using namespace std; int svtsim_gb_phicor(int phi, int &wedge) { int center[13] = {0, 683, 1365, 2048, 2731, 3413, 4096, 4779, 5461, 6144, 6827, 7509, 8192}; int edge[12] = {342, 1024, 1707, 2405, 3102, 3805, 4488, 5170, 5803, 6496, 7168, 7851}; int region[15] ={-334, -317, -298, -276, -250, -218, -173, 11, 173, 218, 250, 276, 298, 317, 334}; int corr_value[16] = {7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8}; int phiwedge=0, phicorr=0; int subt, i; for(i=0; i<=10; i++){ if( (phi>edge[i]) && (phi<=edge[i+1]) ){ phiwedge = center[i+1]; wedge = i+1; break; } else { if(phi<=edge[0]) phiwedge = center[0]; else phiwedge = center[12]; wedge = 0; } } subt = phi-phiwedge; for(i=0; i<=13; i++){ if( (subt>region[i]) && (subt<=region[i+1]) ) { phicorr = corr_value[i+1]; break; } else { if(subt <= region[0]) phicorr = corr_value[0]; else phicorr = corr_value[15]; } } return phicorr; } int main() { int ibit=0, wedge=0, signbit=0; int phicorr, cossign, sinsign, cosabs, sinabs; float phi; FILE *fp1, *fp2, *fp3; fp1 = fopen("fram1.mif","w"); fp2 = fopen("fram2.mif","w"); for(ibit=0; ibit<8192; ibit++){ phicorr = svtsim_gb_phicor(ibit,wedge); phi = (float)ibit/8192.0*2.0*3.1415927; printf("%d %d %d %f %f\n", ibit, wedge, abs(phicorr), cos(phi), sin(phi) ); /* determine sign of correction value */ if( phicorr>=0 ) signbit=0; else signbit=1; /* determine sign of cos/sin */ if( cos(phi)<0 ) cossign = 1; else cossign = 0; if( sin(phi)<0 ) sinsign = 1; else sinsign = 0; /* determine absolute value of cos/sin for FRAM2, FRAM3*/ cosabs = abs( (int)( cos(phi)*255.99999 ) ); sinabs = abs( (int)( sin(phi)*255.99999 ) ); /* fprintf(fp1, " %x/%x;\n", ibit, (sinsign<<10 | cossign<<9 | wedge<<5 | signbit<<4 | abs(phicorr))); fprintf(fp2, " %x/%x;\n", ibit, (sinabs<<8 | cosabs<<0) ); */ fprintf(fp1, " %d\n", (sinsign<<10 | cossign<<9 | wedge<<5 | signbit<<4 | abs(phicorr))); fprintf(fp2, " %d\n", (sinabs<<8 | cosabs<<0) ); } fclose(fp1); fclose(fp2); return 0; }