fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define _SAMPLE_RATE_ 963.6
  5.  
  6. typedef struct
  7. {
  8. double A0;
  9. double A1;
  10. double A2;
  11. double B0;
  12. double B1;
  13. double B2;
  14. double Gain;
  15. }FilterParam_Typedef;
  16.  
  17. typedef struct
  18. {
  19. double A;
  20. double B;
  21. double R;
  22. double L;
  23. double C;
  24. }FilterAdj_Typedef;
  25.  
  26. FilterParam_Typedef CalcParam(FilterAdj_Typedef fil,float freq){
  27.  
  28. FilterParam_Typedef retFilterParam;
  29.  
  30. double T=1/_SAMPLE_RATE_;
  31. double G;
  32. double A=fil.A;
  33. double B=fil.B;
  34. double R=fil.R;
  35. double L=fil.L;
  36. double C=fil.C;
  37.  
  38.  
  39. double pi=3.14159265358979;
  40. double W;
  41. double a0,a1,b0,b1;
  42. double H0,H1;
  43. double Amp;
  44.  
  45.  
  46. G=4*C*R*L+2*L*T+R*T*T+(2*R*L*T/(A+B));
  47. retFilterParam.A0=1;
  48. retFilterParam.A1=(2*R*(T*T)-8*C*R*L)/G;
  49. retFilterParam.A2=(4*C*R*L-2*L*T+R*T*T-(2*R*L*T/(A+B)))/G;
  50.  
  51. retFilterParam.B0=(4*C*R*L+2*L*T+R*T*T+(2*R*L*T/A))/G;
  52. retFilterParam.B1=retFilterParam.A1;
  53. retFilterParam.B2=(4*C*R*L-2*L*T+R*T*T-(2*R*L*T/A))/G;
  54.  
  55. W=2*pi*freq;
  56. a0=A*R*(1-C*L*W*W);
  57. a1=W*L*(A+R);
  58. b0=(A+B)*R*(1-C*L*W*W);
  59. b1=W*L*(A+B+R);
  60.  
  61. H0=A/(A+B);//H0=(A*R)/((A+B)*R)=A/(A+B)
  62. H1=sqrt((a0*b0+a1*b1)*(a0*b0+a1*b1)+(a1*b0-a0*b1)*(a1*b0-a0*b1))/(b0*b0+b1*b1);
  63. retFilterParam.Gain=H1/H0;
  64.  
  65. return retFilterParam;
  66. }
  67.  
  68. void CalcFilterOut(FilterParam_Typedef *pFP,float *pVin, float *pVout ,unsigned int sample_cnt){
  69. unsigned int i=0;
  70. unsigned int j=0;
  71. double in2_total=0;
  72. double out2_total=0;
  73. double y0_1,y0_2,y1_1,y1_2,y2_1,y2_2;
  74.  
  75. double xa,y0,out;
  76.  
  77.  
  78. while(i<sample_cnt){
  79. y0=*(pVin+i);
  80. if(i==0){
  81. y0_1=y0_2=y1_1=y1_2=y2_1=y2_2=y0;
  82. }
  83.  
  84. xa=y0-y0_1*pFP[0].A1-y0_2*pFP[0].A2;
  85. out=pFP[0].B0*xa+pFP[0].B1*y0_1+pFP[0].B2*y0_2;//out=B0*(y0-y1*A1-y2*A2)+B1*y1+B2*y2
  86. y0_2=y0_1;
  87. y0_1=xa;
  88.  
  89. xa=out-y1_1*pFP[1].A1-y1_2*pFP[1].A2;
  90. out=pFP[1].B0*xa+pFP[1].B1*y1_1+pFP[1].B2*y1_2;//out=B0*(y0-y1*A1-y2*A2)+B1*y1+B2*y2
  91. y1_2=y1_1;
  92. y1_1=xa;
  93.  
  94. xa=out-y2_1*pFP[2].A1-y2_2*pFP[2].A2;
  95. out=pFP[2].B0*xa+pFP[2].B1*y2_1+pFP[2].B2*y2_2;//out=B0*(y0-y1*A1-y2*A2)+B1*y1+B2*y2
  96. y2_2=y2_1;
  97. y2_1=xa;
  98.  
  99.  
  100. *pVout++=(float)out;
  101. i++;
  102.  
  103. }
  104. }
  105.  
  106. double Find_Filter_Gain(float *pVin, unsigned int sample_cnt ,float adj_vrms ,float freq,unsigned char *stat){
  107. unsigned char adj_ok=0;
  108. unsigned int i=0;
  109. unsigned int T;
  110. float fin=freq*2;
  111. float n_cycle;
  112. float n_sample;
  113. float fT;
  114.  
  115. float Vout[9000];
  116. double V2=0;
  117.  
  118. double d_err=adj_vrms*0.000005;
  119. double f_err;
  120. double hi=50000;
  121. double lo=0;
  122. double h_l,gain;
  123. double *A;
  124. FilterParam_Typedef FIL_Param[3];
  125. FilterAdj_Typedef FIL[]={
  126. {605.3,1000,1700,67.1,7e-5},//lo_freq
  127. {2000,1000,1000,100,0}, //mid_freq
  128. {250,1700,3000,0.35,8.8e-7},//hi_freq
  129. };
  130.  
  131. if(freq<50){
  132. A=&FIL[1].A;
  133. }else{
  134. A=&FIL[2].A;
  135. }
  136.  
  137. while(!adj_ok){
  138. FIL_Param[0]=CalcParam(FIL[0],fin);
  139. FIL_Param[1]=CalcParam(FIL[1],fin);
  140. FIL_Param[2]=CalcParam(FIL[2],fin);
  141.  
  142. CalcFilterOut(FIL_Param,pVin, Vout ,sample_cnt);
  143.  
  144. n_sample=_SAMPLE_RATE_/freq;
  145. n_cycle=(sample_cnt/2)/n_sample;
  146. fT=n_sample*n_cycle;
  147. T=(int)fT;
  148. if((fT-T)>0.5){
  149. T+=1;
  150. }
  151. i=sample_cnt-T;
  152. //printf("sample_cnt=%u,freq=%f,\n",sample_cnt,freq);
  153. //printf("n_sample=%f,n_cycle=%f,\n",n_sample,n_cycle);
  154. //printf("fT=%f,i=%u,T=%u\n",fT,i,T);
  155. V2=0;
  156.  
  157. for(;i<sample_cnt;i++){
  158. V2+=Vout[i]*Vout[i];
  159. printf("Vout[%u]=%f,",Vout[i]);
  160. }
  161. V2=sqrt(V2/T);
  162. f_err=V2-adj_vrms;
  163. printf("adj_vrms=%f,V2=%lf,f_err=%lf,",adj_vrms,V2,f_err);
  164. if(f_err>0){
  165. if(f_err<d_err){
  166. adj_ok=1;
  167. }else{
  168. lo=*A;
  169. *A=(hi+lo)/2;
  170. adj_ok=0;
  171. }
  172.  
  173. }else{
  174. f_err*=-1;
  175. if(f_err<d_err){
  176. adj_ok=1;
  177. }else{
  178. hi=*A;
  179. *A=(hi+lo)/2;
  180. adj_ok=0;
  181. }
  182.  
  183. }
  184. printf("A=%f\n",*A);
  185. h_l=hi-lo;
  186. if(h_l<0.0001)break;
  187.  
  188.  
  189. }
  190.  
  191. *stat=adj_ok;
  192. gain=FIL_Param[0].Gain* FIL_Param[1].Gain* FIL_Param[2].Gain;
  193.  
  194. if(adj_ok){
  195. printf("ADJ OK! A=%f,GAIN=%f\n",*A,gain);
  196. }else{
  197. printf("ADJ FAIL! A=%f,GAIN=%f\n",*A,gain);
  198. }
  199.  
  200.  
  201. return gain;
  202.  
  203. }
  204.  
  205. int main(void) {
  206. int i;
  207. int Vin_len;
  208. unsigned char pass=0;
  209. float Vin[3][4] = {
  210. {0.341942208, 0.346447328, 0.337648896, 0.339111168},
  211. {0.395944736, 0.391118336, 0.410157536, 0.402040992},
  212. {1.02248272, 1.04838504, 0.969520576, 0.99726976},
  213. {0.0,0.0,0.0,0.0},
  214. {0.0,0.0,0.0,0.0},
  215. {0.0,0.0,0.0,0.0},
  216. };
  217. float Adj_Vin[] = {0.9948160480839788, 0.9944888095104931, 0.9944882746997378, 0.9944913185483115, 0.0, 0.0};
  218. float OutFreq[] = {1000, 3, 3.5, 8.5, 40, 100};
  219. float Adj_Gain[6];
  220. char MaxFreq=6;
  221.  
  222. for(i=0;i<MaxFreq;i++){
  223. if(i!=0){
  224. Vin_len=4;
  225. Adj_Gain[i]=Find_Filter_Gain(Vin[i], Vin_len ,Adj_Vin[i],OutFreq[i],&pass);
  226. }
  227. }
  228. return 0;
  229. }
  230.  
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
Vout[2]=0.555381,Vout[0]=0.578100,adj_vrms=0.994489,V2=0.566854,f_err=-0.427635,A=1000.000000
Vout[2]=0.612526,Vout[0]=0.618040,adj_vrms=0.994489,V2=0.615289,f_err=-0.379200,A=500.000000
Vout[2]=0.741177,Vout[0]=0.708174,adj_vrms=0.994489,V2=0.724864,f_err=-0.269625,A=250.000000
Vout[2]=1.011434,Vout[0]=0.897753,adj_vrms=0.994489,V2=0.956285,f_err=-0.038204,A=125.000000
Vout[2]=1.561189,Vout[0]=1.283581,adj_vrms=0.994489,V2=1.429141,f_err=0.434653,A=187.500000
Vout[2]=1.194097,Vout[0]=1.025936,adj_vrms=0.994489,V2=1.113196,f_err=0.118707,A=218.750000
Vout[2]=1.089598,Vout[0]=0.952601,adj_vrms=0.994489,V2=1.023394,f_err=0.028906,A=234.375000
Vout[2]=1.047883,Vout[0]=0.923329,adj_vrms=0.994489,V2=0.987572,f_err=-0.006917,A=226.562500
Vout[2]=1.068014,Vout[0]=0.937455,adj_vrms=0.994489,V2=1.004857,f_err=0.010368,A=230.468750
Vout[2]=1.057776,Vout[0]=0.930271,adj_vrms=0.994489,V2=0.996066,f_err=0.001577,A=232.421875
Vout[2]=1.052788,Vout[0]=0.926771,adj_vrms=0.994489,V2=0.991783,f_err=-0.002706,A=231.445312
Vout[2]=1.055271,Vout[0]=0.928513,adj_vrms=0.994489,V2=0.993915,f_err=-0.000574,A=230.957031
Vout[2]=1.056521,Vout[0]=0.929390,adj_vrms=0.994489,V2=0.994988,f_err=0.000499,A=231.201172
Vout[2]=1.055895,Vout[0]=0.928951,adj_vrms=0.994489,V2=0.994451,f_err=-0.000038,A=231.079102
Vout[2]=1.056208,Vout[0]=0.929171,adj_vrms=0.994489,V2=0.994719,f_err=0.000231,A=231.140137
Vout[2]=1.056052,Vout[0]=0.929061,adj_vrms=0.994489,V2=0.994585,f_err=0.000096,A=231.170654
Vout[2]=1.055974,Vout[0]=0.929006,adj_vrms=0.994489,V2=0.994518,f_err=0.000029,A=231.185913
Vout[2]=1.055934,Vout[0]=0.928979,adj_vrms=0.994489,V2=0.994485,f_err=-0.000004,A=231.185913
ADJ OK! A=231.185913,GAIN=3.626008
Vout[2]=1.249723,Vout[0]=1.336378,adj_vrms=0.994488,V2=1.293776,f_err=0.299288,A=26000.000000
Vout[2]=1.183313,Vout[0]=1.293154,adj_vrms=0.994488,V2=1.239451,f_err=0.244963,A=38000.000000
Vout[2]=1.182937,Vout[0]=1.292912,adj_vrms=0.994488,V2=1.239145,f_err=0.244657,A=44000.000000
Vout[2]=1.182851,Vout[0]=1.292856,adj_vrms=0.994488,V2=1.239075,f_err=0.244587,A=47000.000000
Vout[2]=1.182819,Vout[0]=1.292836,adj_vrms=0.994488,V2=1.239049,f_err=0.244561,A=48500.000000
Vout[2]=1.182806,Vout[0]=1.292827,adj_vrms=0.994488,V2=1.239038,f_err=0.244550,A=49250.000000
Vout[2]=1.182799,Vout[0]=1.292823,adj_vrms=0.994488,V2=1.239033,f_err=0.244545,A=49625.000000
Vout[2]=1.182796,Vout[0]=1.292821,adj_vrms=0.994488,V2=1.239031,f_err=0.244542,A=49812.500000
Vout[2]=1.182795,Vout[0]=1.292820,adj_vrms=0.994488,V2=1.239029,f_err=0.244541,A=49906.250000
Vout[2]=1.182794,Vout[0]=1.292820,adj_vrms=0.994488,V2=1.239029,f_err=0.244541,A=49953.125000
Vout[2]=1.182794,Vout[0]=1.292820,adj_vrms=0.994488,V2=1.239029,f_err=0.244540,A=49976.562500
Vout[2]=1.182793,Vout[0]=1.292820,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49988.281250
Vout[2]=1.182793,Vout[0]=1.292820,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49994.140625
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49997.070312
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49998.535156
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.267578
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.633789
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.816895
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.908447
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.954224
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.977112
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.988556
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.994278
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.997139
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.998569
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.999285
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.999642
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.999821
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.999911
Vout[2]=1.182793,Vout[0]=1.292819,adj_vrms=0.994488,V2=1.239028,f_err=0.244540,A=49999.999955
ADJ FAIL! A=49999.999955,GAIN=1.184407
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=1000.000000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=500.000000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=250.000000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=125.000000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=62.500000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=31.250000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=15.625000
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=7.812500
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=3.906250
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=1.953125
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.976562
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.488281
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.244141
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.122070
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.061035
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.030518
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.015259
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.007629
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.003815
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.001907
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000954
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000477
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000238
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000119
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000060
Vout[2]=0.000000,Vout[0]=0.000000,adj_vrms=0.994491,V2=0.000000,f_err=-0.994491,A=0.000030
ADJ FAIL! A=0.000030,GAIN=8753415.065587
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=1000.000000
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=500.000000
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=250.000000
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=125.000000
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=62.500000
Vout[2]=-0.000000,Vout[0]=-0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=31.250000
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=15.625000
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=7.812500
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=3.906250
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=1.953125
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.976562
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.488281
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.244141
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.122070
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.061035
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.030518
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.015259
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.007629
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.003815
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.005722
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.006676
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.007153
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.006914
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.007033
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.007093
Vout[2]=-0.000000,Vout[0]=0.000000,adj_vrms=0.000000,V2=0.000000,f_err=0.000000,A=0.007063
ADJ FAIL! A=0.007063,GAIN=90418.838952
Vout[2]=9207896.000000,Vout[0]=-6654117.000000,adj_vrms=0.000000,V2=8033138.309522,f_err=8033138.309522,A=25125.000000
Vout[2]=-130267.703125,Vout[0]=-142570.500000,adj_vrms=0.000000,V2=136557.719489,f_err=136557.719489,A=37562.500000
Vout[2]=-133744.125000,Vout[0]=-137793.765625,adj_vrms=0.000000,V2=135784.043127,f_err=135784.043127,A=43781.250000
Vout[2]=-134500.281250,Vout[0]=-136734.359375,adj_vrms=0.000000,V2=135621.919644,f_err=135621.919644,A=46890.625000
Vout[2]=-134772.187500,Vout[0]=-136351.078125,adj_vrms=0.000000,V2=135563.931486,f_err=135563.931486,A=48445.312500
Vout[2]=-134889.187500,Vout[0]=-136185.734375,adj_vrms=0.000000,V2=135539.013542,f_err=135539.013542,A=49222.656250
Vout[2]=-134943.640625,Vout[0]=-136108.703125,adj_vrms=0.000000,V2=135527.423646,f_err=135527.423646,A=49611.328125
Vout[2]=-134969.921875,Vout[0]=-136071.500000,adj_vrms=0.000000,V2=135521.832337,f_err=135521.832337,A=49805.664062
Vout[2]=-134982.828125,Vout[0]=-136053.218750,adj_vrms=0.000000,V2=135519.078155,f_err=135519.078155,A=49902.832031
Vout[2]=-134989.234375,Vout[0]=-136044.140625,adj_vrms=0.000000,V2=135517.714266,f_err=135517.714266,A=49951.416016
Vout[2]=-134992.421875,Vout[0]=-136039.640625,adj_vrms=0.000000,V2=135517.045540,f_err=135517.045540,A=49975.708008
Vout[2]=-134994.015625,Vout[0]=-136037.375000,adj_vrms=0.000000,V2=135516.701731,f_err=135516.701731,A=49987.854004
Vout[2]=-134994.812500,Vout[0]=-136036.250000,adj_vrms=0.000000,V2=135516.531715,f_err=135516.531715,A=49993.927002
Vout[2]=-134995.203125,Vout[0]=-136035.703125,adj_vrms=0.000000,V2=135516.448596,f_err=135516.448596,A=49996.963501
Vout[2]=-134995.406250,Vout[0]=-136035.421875,adj_vrms=0.000000,V2=135516.410814,f_err=135516.410814,A=49998.481750
Vout[2]=-134995.500000,Vout[0]=-136035.281250,adj_vrms=0.000000,V2=135516.388145,f_err=135516.388145,A=49999.240875
Vout[2]=-134995.546875,Vout[0]=-136035.203125,adj_vrms=0.000000,V2=135516.373033,f_err=135516.373033,A=49999.620438
Vout[2]=-134995.578125,Vout[0]=-136035.171875,adj_vrms=0.000000,V2=135516.373033,f_err=135516.373033,A=49999.810219
Vout[2]=-134995.578125,Vout[0]=-136035.156250,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.905109
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.952555
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.976277
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.988139
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.994069
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.997035
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.998517
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.999259
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.999629
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.999815
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.999907
Vout[2]=-134995.593750,Vout[0]=-136035.140625,adj_vrms=0.000000,V2=135516.365477,f_err=135516.365477,A=49999.999954
ADJ FAIL! A=49999.999954,GAIN=1.125430