Beispiel #1
0
/*------------------------------page_push----------------------------------*/
long
page_push (PFUNC_VAR)       
{        
  static int hTest = ID_NULL;

  switch (message) {       
  case YOPEN:       
    hTest = *((int*)YGet("wlong1"));
  case YDRAW:       
    YDrawRectF (0,0,WND->w,WND->h, YColor("lime") );        

    YBeginGroup ("PUSH", 30,40, 120,90, YColor("white"));   
    YWnd (Ph(), PUSH, "Push1", 30,20, 65,20, 0,0,0,0, YColor("red"));
    YWnd (Ph(), PUSH, "Push2", 30,50, 65,20, 0,0,0,0, YColor("gray"));
    YEndGroup ();

    break;        
  case YCLOSE:       
    YWndClean (id);        
    break;   
  default:
    YSend (hTest, message, mes1,mes2,mes3,mes4);
  }       
  
  RETURN_TRUE;
}
Beispiel #2
0
static void add_format_to_parser(Char *c, int len, int ivnr, Char mode,
				 int tabbing, int pmode, int prec,
				 int shortop)
{
    int i,j,n=1,llp;
    char *str=NULL;
    Char *tmp;
    j=0;
    for (i=0;i<len;i++) if (IsPh(c[i])) n++;
    n=n*2;
    tmp = (Char*) malloc(n*sizeof(Char));
    tex_set_string(&str);
    if (tabbing) out_latex_char(TabOpen);
    out_latex_char(mode);
    llp=tex_current_pos();
    if (shortop) tex_code(SOpOpen);
    n=0;
    for (i=0; i<len; i++) {
	if (IsPh(c[i]))  {
	    switch (Ph(c[i])) {
	    case MP_Expr: tex_code(ExprOpen); break;
	    case MP_Op:   tex_code(LOpOpen); break;
	    case MP_Id:   tex_code(SIdOpen); break;
	    case MP_Var:  tex_code(VarOpen); break;
	    case MP_Text: tex_code(TextOpen); break;
	    default: break;
	    }
	    out_latex_char(' ');
	    j=tex_current_pos()-1;
	    if (j!=llp && str[j]==' ') {
		str[j]='\0';
		if (aig(tmp[n]=lex_add_string(str+llp, 0)))
		    n++;
		str[j]=' ';
	    }
	    llp=j+1;
	    switch (Ph(c[i])) {
	    case MP_Expr: tex_code(ExprClose); break;
	    case MP_Op:   tex_code(LOpClose); break;
	    case MP_Id:   tex_code(SIdClose); break;
	    case MP_Var:  tex_code(VarClose); break;
	    case MP_Text: tex_code(TextClose); break;
	    default: break;
	    }
	    tmp[n++]=c[i];
	}
	out_latex_char(c[i]);
    }
    if (shortop) tex_code(SOpClose);
    if (llp!=tex_current_pos()) tmp[n++]=lex_add_string(str+llp,0);
    tmp[n]=0;
    tex_unset();
    if (!str)
	free(tmp);
    else
	if (!parse_add_rule(pmode, tmp, n, ivnr, prec))
	    free(tmp);
}
Beispiel #3
0
Operator &ParNonlinearForm::GetGradient(const Vector &x) const
{
   ParFiniteElementSpace *pfes = ParFESpace();

   pGrad.Clear();

   NonlinearForm::GetGradient(x); // (re)assemble Grad, no b.c.

   OperatorHandle dA(pGrad.Type()), Ph(pGrad.Type());

   if (fnfi.Size() == 0)
   {
      dA.MakeSquareBlockDiag(pfes->GetComm(), pfes->GlobalVSize(),
                             pfes->GetDofOffsets(), Grad);
   }
   else
   {
      MFEM_ABORT("TODO: assemble contributions from shared face terms");
   }

   // TODO - construct Dof_TrueDof_Matrix directly in the pGrad format
   Ph.ConvertFrom(pfes->Dof_TrueDof_Matrix());
   pGrad.MakePtAP(dA, Ph);

   // Impose b.c. on pGrad
   OperatorHandle pGrad_e;
   pGrad_e.EliminateRowsCols(pGrad, ess_tdof_list);

   return *pGrad.Ptr();
}
Beispiel #4
0
/*------------------------------page2_proc----------------------------------*/
long
page2_proc (PFUNC_VAR)       
{        

  static int hEdit1, hEdit2, hCheck1, hCheck2;
  static int hList1, hList2, hDec1, hDec2;
  static int hTest = ID_NULL;

  static char *list1[]= {
    "string_01", "string_02", "string_03",
    "string_04", "string_05", "string_06", 
    "string_07", "string_08", "string_09", 
    "string_10", "string_11", "string_12", 
    NULL}; 
  static char *list2[]={
    "listitem1", "listitem2", "listitem3",
    "listitem4", "listitem5", "listitem6", 
    "listitem7", "listitem8", "listitem9", 
    NULL}; 


  switch (message) {       
  case YOPEN:       
    hTest = *((int*)YGet("wlong1"));
  case YDRAW:       
    YDrawRectF (0,0,WND->w,WND->h, YColor("teal"));        

    YBeginGroup ("LIST", 30,40, 240,110, YColor("navy"));    
    YWnd (&hList1, LIST, NULL,  15,20, 100,70, (long)list1, 3,0,0, YColor("yellow")); 
    YWnd (&hList2, LIST, NULL, 125,20, 100,70, (long)list2, 2,0,0, YColor("lime")); 
    YEndGroup (); 

    YBeginGroup ("CHECK", 300,40, 130,110, YColor("fuchsia"));   
    YWndGroupBegin ();
    YWnd (&hCheck1, CHECK, "Check1", 25,10, 20,20, TRUE,0,0,0, YColor("white"));
    YWnd (&hCheck2, CHECK, "Check2", 25,40, 20,20, FALSE,0,0,0, YColor("white"));
    YWndGroupEnd ();
    YWnd (Ph(), CHECK, "Check3", 25,75, 20,20, FALSE,0,0,0, CLR_DEF);
    YEndGroup (); 

    YBeginGroup ("EDIT", 60,195, 170,70, YColor("fuchsia"));  
    YWnd (&hEdit1, EDIT, "Edit1 ",  65,10, 90,20, (long)"string1",0,0,0, YColor("white"));   
    YWnd (&hEdit2, EDIT, "Edit2 ",  65,40, 90,20, (long)"string2",0,0,0, YColor("white"));   
    YEndGroup (); 

    YBeginGroup ("DECIMAL", 300,195, 130,70, YColor("fuchsia"));  
    YWnd (&hDec1, DECIMAL, "Dec1 ",  60,10, 40,20, 4,0,10,0, YColor("white"));   
    YWnd (&hDec2, DECIMAL, "Dec2 ",  60,40, 40,20, 2,0,15,0, YColor("white"));   
    YEndGroup (); 

    break;        
  case YCLOSE:       
    YWndClean (id);        
    break;   
  default:
    YSend (hTest, message, mes1,mes2,mes3,mes4);
  }       
  
  RETURN_TRUE;
}
Beispiel #5
0
/*-----------------------------dial_proc-------------------------------------*/
long
dial_proc (PFUNC_VAR)
{

  switch (message) {
  case YOPEN:
  case YDRAW:
    YPaintRectFB (0, 0, WND->w, WND->h, YColor("lime"), YColor("black"));
    test_picture ();
 
    YWnd (Ph(), push_proc, "O'Key",  90, 160, 80,30, 0,0,0,0, YColor("yellow"));
    break;
  case MYPUSH_UP:
    YDlgEnd (0);
    break;
  case YLMOUSEDOWN:
		printf ("dial_proc_YLMOUSEDOWN: %d %d \n", mes1, mes2);
    break;
  case YCLOSE:
    YWndClean (id);
    break;
  default: ;;;;
  }

  RETURN_TRUE;
}
AFComplexVector<fftw_complex, double>& AFComplexVector<fftw_complex, double>::ToPolar()
{
    assert(!m_bIsPolar);
    /*
     * It overwrites the input vector U with its own polar
     * complex coordinates.
     * Here the fftwf_complex type is reinterpretated from Re,Im, to Mag,Phase
     */
    fftw_complex cpxTmp;
    
    for(AFSampleCount i = 1; i < (m_smpcLength-1); i++)
    {
        Mag(cpxTmp) = Magnitude(m_pcpxUf[i]);
        Ph(cpxTmp)  = -Phase(m_pcpxUf[i]);
        Mag(m_pcpxUf[i]) = Mag(cpxTmp);
        Ph(m_pcpxUf[i])  = Ph(cpxTmp);
    }
    m_bIsPolar = true;
    return *this;
}
Beispiel #7
0
/*------------------------------dial2_proc--------------------------------*/
long
dial2_proc (PFUNC_VAR)       
{        
  static int hExit, hTest = ID_NULL;
  static YT_BOOK pages[] = {        
    {"MORE",   impr_proc,   LP(hTest)},       
    {"Page_1", page1_proc,  LP(hTest)},       
    {"Page_2", page2_proc,  LP(hTest)},       
    {"Page_3", page3_proc,  LP(hTest)},       
    {"Page_4", page4_proc,  LP(hTest)},       
    {"", NULL, 0}        
  };        

  enum local_keys {
    DRAW_MESS = YKEY_LOCALS
  };

  switch (message) {       
  case YOPEN: 
  case YDRAW:       
    YDrawRectF (0,0, WND->w,WND->h, YColor("yellow"));        

    YBeginGroup ("MESSAGES", 30,375, 420,55, YColor(""));
    YWnd (&hTest, TESTMSG, "",  15,15, 385,30, 0,0,0,0, CLR_DEF);
   /*  YWnd (&hTest, testmsg_proc, "",  15,15, 385,30, 0,0,0,0, CLR_DEF); */
    YEndGroup ();

    YWnd (&hExit, PUSH, "Exit", 455,380, 65,40, 0,0,0,0, YColor("lime"));

    YWnd (Ph(), BOOK, "", 30,20, WND->w-60,340, (long)pages,75,30,YUP, CLR_DEF);      
    break;        
  case YCLOSE:       
    YWndClean (id);        
    break; 
  case YPUSH:
    if (mes1 == hExit)  exit(0); 
  default:
    return (YSend (hTest, message, mes1,mes2,mes3,mes4)); 
  }       
  
  RETURN_TRUE;
}
Beispiel #8
0
/*------------------------------page_clock----------------------------------*/
long
page_clock (PFUNC_VAR)       
{        
  static int hTest = ID_NULL;

  switch (message) {       
  case YOPEN:       
    hTest = *((int*)YGet("wlong1"));
  case YDRAW:       
    YDrawRectF (0,0,WND->w,WND->h, YColor("lime") );        

    YWnd (Ph(), CLOCK, "This is Clock", 30,30, WND->w-60,WND->h-60, 0,0,0,0, YColor("green"));

    break;        
  case YCLOSE:       
    YWndClean (id);        
    break;   
  default:
    YSend (hTest, message, mes1,mes2,mes3,mes4);
  }       
  
  RETURN_TRUE;
}
AFComplexVector<fftwf_complex, float>& AFComplexVector<fftwf_complex, float>::ToRectangular()
{
    assert(m_bIsPolar);
    /*
     * It overwrites the complex 'polar' input vector U with its own rectangular
     * complex coordinates.
     * Here the fftwf_complex type is reinterpretated from Re,Im, to Mag,Phase
     */
    
    // Devo verificare se la fase della componente DC o Fnyq è pi greca,
    // o multiplo intero se la fase non è un multiplo intero di 2pi allora
    // la assumo negativa.
    
    //a freq. zero ho solo componente reale
    Im(m_pcpxUf[0]) = 0.0;
    if( (fmodf(Ph(m_pcpxUf[0]), M_PI) > 1.0) && (fmodf(Ph(m_pcpxUf[0]), M_PI) < 3.0) )
        Re(m_pcpxUf[0]) = -Mag(m_pcpxUf[0]); //cioe' se il resto e' non zero,
    else
        Re(m_pcpxUf[0]) = Mag(m_pcpxUf[0]);
    
    //alla freq. di Nyquist, ho solo valore reale, la Fnyq e' il secondo elemento di h e l'ultimo di hpm
    Im(m_pcpxUf[m_smpcLength-1]) = 0.0;
    if( (fmodf(Ph(m_pcpxUf[m_smpcLength-1]), M_PI) > 1.0) && (fmodf(Ph(m_pcpxUf[m_smpcLength-1]), M_PI) < 3.0) )
        Re(m_pcpxUf[m_smpcLength-1]) = -Mag(m_pcpxUf[m_smpcLength-1]); //cioe' se il resto non e' zero,
    else
        Re(m_pcpxUf[m_smpcLength-1]) = Mag(m_pcpxUf[m_smpcLength-1]);
                                      
    fftwf_complex cpxTmp;
                  
    for(AFSampleCount i = 1; i < (m_smpcLength-1); i++)   // altre frequenze, conto fino ad L2
    {
        Re(cpxTmp) = Mag(m_pcpxUf[i]) * cosf(Ph(m_pcpxUf[i]));
        Im(cpxTmp) = Mag(m_pcpxUf[i]) * sinf(Ph(m_pcpxUf[i]));
        Re(m_pcpxUf[i]) = Re(cpxTmp);
        Im(m_pcpxUf[i]) = Im(cpxTmp);
    }
    m_bIsPolar = false;
    return *this;
}
Beispiel #10
0
BlockOperator & ParBlockNonlinearForm::GetGradient(const Vector &x) const
{
   if (pBlockGrad == NULL)
   {
      pBlockGrad = new BlockOperator(block_trueOffsets);
   }

   Array<const ParFiniteElementSpace *> pfes(fes.Size());

   for (int s1=0; s1<fes.Size(); ++s1)
   {
      pfes[s1] = ParFESpace(s1);

      for (int s2=0; s2<fes.Size(); ++s2)
      {
         phBlockGrad(s1,s2)->Clear();
      }
   }

   GetLocalGradient(x); // gradients are stored in 'Grads'

   if (fnfi.Size() > 0)
   {
      MFEM_ABORT("TODO: assemble contributions from shared face terms");
   }

   for (int s1=0; s1<fes.Size(); ++s1)
   {
      for (int s2=0; s2<fes.Size(); ++s2)
      {
         OperatorHandle dA(phBlockGrad(s1,s2)->Type()),
                        Ph(phBlockGrad(s1,s2)->Type()),
                        Rh(phBlockGrad(s1,s2)->Type());

         if (s1 == s2)
         {
            dA.MakeSquareBlockDiag(pfes[s1]->GetComm(), pfes[s1]->GlobalVSize(),
                                   pfes[s1]->GetDofOffsets(), Grads(s1,s1));
            Ph.ConvertFrom(pfes[s1]->Dof_TrueDof_Matrix());
            phBlockGrad(s1,s1)->MakePtAP(dA, Ph);
         }
         else
         {
            dA.MakeRectangularBlockDiag(pfes[s1]->GetComm(),
                                        pfes[s1]->GlobalVSize(),
                                        pfes[s2]->GlobalVSize(),
                                        pfes[s1]->GetDofOffsets(),
                                        pfes[s2]->GetDofOffsets(),
                                        Grads(s1,s2));
            Rh.ConvertFrom(pfes[s1]->Dof_TrueDof_Matrix());
            Ph.ConvertFrom(pfes[s2]->Dof_TrueDof_Matrix());

            phBlockGrad(s1,s2)->MakeRAP(Rh, dA, Ph);
         }

         pBlockGrad->SetBlock(s1, s2, phBlockGrad(s1,s2)->Ptr());
      }
   }

   return *pBlockGrad;
}
Beispiel #11
0
void BKE_init_ocean(struct Ocean *o, int M, int N, float Lx, float Lz, float V, float l, float A, float w, float damp,
                    float alignment, float depth, float time, short do_height_field, short do_chop, short do_normals,
                    short do_jacobian, int seed)
{
	int i, j, ii;

	BLI_rw_mutex_lock(&o->oceanmutex, THREAD_LOCK_WRITE);

	o->_M = M;
	o->_N = N;
	o->_V = V;
	o->_l = l;
	o->_A = A;
	o->_w = w;
	o->_damp_reflections = 1.0f - damp;
	o->_wind_alignment = alignment;
	o->_depth = depth;
	o->_Lx = Lx;
	o->_Lz = Lz;
	o->_wx = cos(w);
	o->_wz = -sin(w); /* wave direction */
	o->_L = V * V / GRAVITY;  /* largest wave for a given velocity V */
	o->time = time;

	o->_do_disp_y = do_height_field;
	o->_do_normals = do_normals;
	o->_do_chop = do_chop;
	o->_do_jacobian = do_jacobian;

	o->_k = (float *) MEM_mallocN(M * (1 + N / 2) * sizeof(float), "ocean_k");
	o->_h0 = (fftw_complex *) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0");
	o->_h0_minus = (fftw_complex *) MEM_mallocN(M * N * sizeof(fftw_complex), "ocean_h0_minus");
	o->_kx = (float *) MEM_mallocN(o->_M * sizeof(float), "ocean_kx");
	o->_kz = (float *) MEM_mallocN(o->_N * sizeof(float), "ocean_kz");

	/* make this robust in the face of erroneous usage */
	if (o->_Lx == 0.0f)
		o->_Lx = 0.001f;

	if (o->_Lz == 0.0f)
		o->_Lz = 0.001f;

	/* the +ve components and DC */
	for (i = 0; i <= o->_M / 2; ++i)
		o->_kx[i] = 2.0f * (float)M_PI * i / o->_Lx;

	/* the -ve components */
	for (i = o->_M - 1, ii = 0; i > o->_M / 2; --i, ++ii)
		o->_kx[i] = -2.0f * (float)M_PI * ii / o->_Lx;

	/* the +ve components and DC */
	for (i = 0; i <= o->_N / 2; ++i)
		o->_kz[i] = 2.0f * (float)M_PI * i / o->_Lz;

	/* the -ve components */
	for (i = o->_N - 1, ii = 0; i > o->_N / 2; --i, ++ii)
		o->_kz[i] = -2.0f * (float)M_PI * ii / o->_Lz;

	/* pre-calculate the k matrix */
	for (i = 0; i < o->_M; ++i)
		for (j = 0; j <= o->_N / 2; ++j)
			o->_k[i * (1 + o->_N / 2) + j] = sqrt(o->_kx[i] * o->_kx[i] + o->_kz[j] * o->_kz[j]);

	/*srand(seed);*/
	BLI_srand(seed);

	for (i = 0; i < o->_M; ++i) {
		for (j = 0; j < o->_N; ++j) {
			float r1 = gaussRand();
			float r2 = gaussRand();

			fftw_complex r1r2;
			init_complex(r1r2, r1, r2);
			mul_complex_f(o->_h0[i * o->_N + j], r1r2, (float)(sqrt(Ph(o, o->_kx[i], o->_kz[j]) / 2.0f)));
			mul_complex_f(o->_h0_minus[i * o->_N + j], r1r2, (float)(sqrt(Ph(o, -o->_kx[i], -o->_kz[j]) / 2.0f)));
		}
	}

	o->_fft_in = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in");
	o->_htilda = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_htilda");

	if (o->_do_disp_y) {
		o->_disp_y = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_y");
		o->_disp_y_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in, o->_disp_y, FFTW_ESTIMATE);
	}

	if (o->_do_normals) {
		o->_fft_in_nx = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_nx");
		o->_fft_in_nz = (fftw_complex *) MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_nz");

		o->_N_x = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_x");
		/* o->_N_y = (float *) fftwf_malloc(o->_M * o->_N * sizeof(float)); (MEM01) */
		o->_N_z = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_N_z");

		o->_N_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nx, o->_N_x, FFTW_ESTIMATE);
		o->_N_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_nz, o->_N_z, FFTW_ESTIMATE);
	}

	if (o->_do_chop) {
		o->_fft_in_x = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_x");
		o->_fft_in_z = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex), "ocean_fft_in_z");

		o->_disp_x = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_x");
		o->_disp_z = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_disp_z");

		o->_disp_x_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_x, o->_disp_x, FFTW_ESTIMATE);
		o->_disp_z_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_z, o->_disp_z, FFTW_ESTIMATE);
	}
	if (o->_do_jacobian) {
		o->_fft_in_jxx = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex),
		                                             "ocean_fft_in_jxx");
		o->_fft_in_jzz = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex),
		                                             "ocean_fft_in_jzz");
		o->_fft_in_jxz = (fftw_complex *)MEM_mallocN(o->_M * (1 + o->_N / 2) * sizeof(fftw_complex),
		                                             "ocean_fft_in_jxz");

		o->_Jxx = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxx");
		o->_Jzz = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jzz");
		o->_Jxz = (double *)MEM_mallocN(o->_M * o->_N * sizeof(double), "ocean_Jxz");

		o->_Jxx_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxx, o->_Jxx, FFTW_ESTIMATE);
		o->_Jzz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jzz, o->_Jzz, FFTW_ESTIMATE);
		o->_Jxz_plan = fftw_plan_dft_c2r_2d(o->_M, o->_N, o->_fft_in_jxz, o->_Jxz, FFTW_ESTIMATE);
	}

	BLI_rw_mutex_unlock(&o->oceanmutex);

	set_height_normalize_factor(o);

}
Beispiel #12
0
/*------------------------------page1_proc----------------------------------*/
long
page1_proc (PFUNC_VAR)       
{        

  enum ywords {
    MY_TESTWORK = YKEY_LOCALS + 1
  };

  static int hTest = ID_NULL;
  static YT_BOOK pages[] = {        
    {"CLOCK", page_clock, LP(hTest)},       
    {"PUSH",  page_push,  LP(hTest)},       
    {"DITTO", DITTO,      0},       
    {"", NULL, 0}        
  };        
  static int hMess, hOpen, hWait, hAbout, hHelp;
  static YT_COLOR colors;
  long  ret_file;

  switch (message) {       
  case YOPEN:       
    hTest = *((int*)YGet("wlong1"));
    colors = YColor("yellow");
  case YDRAW:       
    YDrawRectF (0,0,WND->w,WND->h, YColor("blue"));        

    YBeginGroup ("BOOK", 30,40, 275,210, YColor(""));   
    YWnd (Ph(), BOOK, "", 15,15, 250,180, (long)pages,70,25,YRIGHT, CLR_DEF);      
    YEndGroup();

    YBeginGroup ("Dialogs", 325,20, 130,200, YColor(""));   
    YWnd (&hWait,   PUSH, "Wait",    30, 15,  65,25, 0,0,0,0, CLR_DEF);
    YWnd (&hMess,   PUSH, "Message", 30, 50,  65,25, 0,0,0,0, CLR_DEF);
    YWnd (&hOpen,   PUSH, "F-Files", 30, 85,  65,25, 0,0,0,0, CLR_DEF);
    YWnd (&hAbout,  PUSH, "About",   30,120,  65,25, 0,0,0,0, CLR_DEF);
    YWnd (&hHelp,   PUSH, "Help",    30,155,  65,25, 0,0,0,0, CLR_DEF);
    YEndGroup();

    YBeginGroup ("Colors", 325,235, 130,50, YColor(""));   
    YWnd (Ph(), COLORS, "", 30,15, 65,25, LP(colors),0,0,0, CLR_DEF);
    YEndGroup();

    break;        
  case MY_TESTWORK:
    if (YWaitSend (TRUE))
      break;
  case YTIMER:
    YWaitEnd (); 
    YKillTimer ();
    YKillProcess ();
    break;
  case YPUSH:
    if      (FALSE) YBeep();
    else if (mes1 == hWait) {
      YWaitBegin (WAIT, 20000, "Test work !");
      YSetTimer (id, 1000);
      YSetProcess (id, MY_TESTWORK);
    } 
    else if (mes1 == hOpen) {   
      if (ret_file = YFindFile ())  
				/* 	OUTS ((char*)ret_file); */
				YSend (hTest, YSTRING, 0,0,ret_file,0);
    }
    else if (mes1 == hMess)   YMessageBox ("Do you like beer?", "Yes_No");
    else if (mes1 == hAbout)  YDlg (ABOUT, "About", 0,0,0,0, 0,0,0,0, CLR_DEF, TRUE); 
    else if (mes1 == hHelp)   YHelpPages(); 
    break;
  case YCLOSE:       
    YWndClean (id);        
    break;   
  default:
    YSend (hTest, message, mes1,mes2,mes3,mes4);
  }       
  
  RETURN_TRUE;
}
Beispiel #13
0
/*----------------------------------main_proc---------------------------------*/
long
main_proc (PFUNC_VAR)       
{        

  switch (message) {       
  case YOPEN: 
  case YDRAW:       
		printf("YOPEN : %d %d %d %d  \n", 0,0, WND->w,WND->h);

    YPaintRectF (30,30, WND->w-60,WND->h-60, YColor("blue"));
		YPaintLine  (30,30, WND->w-60,WND->h-60, YColor("white"));

    YWnd (Ph(), PUSH,   "PUSH",    70,10, 70,30, 0,0,0,0, YColor("yellow"));
    YWnd (Ph(), F_PUSH, "лопрлб", 150,10, 70,30, 0,0,0,0, YColor("yellow"));

    YWnd (Ph(), CHECK,   "CHECK",    70, 60, 30,30, 0,0,0,0, YColor("yellow"));
    YWnd (Ph(), F_CHECK, "F_CHECK",  70,100, 30,30, 0,0,0,0, YColor("yellow"));

    YWnd (Ph(), SCROLL,    "",  70,140, 30,140, 100,40,10, 0, YColor("yellow"));
    YWnd (Ph(), F_SCROLL,  "", 120,140, 30,140, 100,40,10, YVERT, YColor("yellow"));

    YWnd (Ph(), EDIT,    "Edit:",  220,140, 100,30, (long)"string1",0,0,0, YColor("yellow"));
    YWnd (Ph(), F_EDIT,  "Edit:",  220,180, 100,30, (long)"string2",0,0,0, YColor("yellow"));
    YWnd (Ph(), F_EDIT,  "Edit:",  220,220, 100,30, (long)"string3",0,0,0, YColor("yellow"));

    YWnd (Ph(), F_CLOCK,  "Edit:",  220,260, 100,100, 0,0,0,0, YColor("yellow"));
    break;        
  case YPUSH:
		printf("YPUSH \n");
    break;        
  case YCHECK:
		printf("YCHECK \n");
    break;        
  case YSCROLL:
		printf("YSCROLL %d \n", mes1);
    break;        
  case YLMOUSEDOWN:
		printf("YLMOUSEDOWN (%d %d) \n", mes1, mes2);
		YFindFile (); 
    break;        
  case YLMOUSEUP:
		printf("YLMOUSEUP (%d %d) \n", mes1, mes2);
    YWnd (Ph(), PUSH, "PUSH", mes1,mes2, 70,30, 0,0,0,0, YColor("yellow"));
    break;        
  case YRMOUSEDOWN:
		printf("YRMOUSEDOWN (%d %d) \n", mes1, mes2);
    break;        
  case YRMOUSEUP:
		printf("YRMOUSEUP (%d %d) \n", mes1, mes2);
    YWnd (Ph(), F_PUSH, "F_PUSH", mes1,mes2, 70,30, 0,0,0,0, YColor("yellow"));
    break;        
  case YKEYBOARD:
		printf("YKEYBOARD \n");
    break;        
  case YCLOSE:       
    /* YWndClean (id);  */       
    break; 
  default: ;;;;
  }       
  
  RETURN_TRUE; 
}
Beispiel #14
0
 Mm AdcDynTest(Mm ADout, Mm fclk, Mm numbit, Mm NFFT, Mm V, Mm code, i_o_t, Mm& SNR__o, Mm& SINAD__o, Mm& SFDR__o, \
    Mm& ENOB__o, Mm& y__o) {
   begin_scope
   ADout.setname("ADout"); fclk.setname("fclk"); numbit.setname("numbit"); NFFT.setname("NFFT"); V.setname("V");  \
     code.setname("code"); 
   dMm(SNR); dMm(SINAD); dMm(SFDR); dMm(ENOB); dMm(y); dMm(ad_len_N); dMm(maxADout); dMm(AmpMax); dMm(t1); dMm(AmpMin) \
     ; dMm(t2); dMm(Vpp); dMm(ADout_w); dMm(AA); dMm(ad_len); dMm(ADout_spect); dMm(ADout_dB); dMm(maxdB); dMm(fin_v) \
     ; dMm(fin); dMm(freq_fin); dMm(data_ref); dMm(n); dMm(n_AdcDynTest_v0); dMm(data_ref_w); dMm(data_ref_spect);  \
     dMm(data_ref_dB); dMm(ref_dB); dMm(span); dMm(spanh_har); dMm(span_s); dMm(spectP); dMm(Pdc); dMm(Pdc_dB); dMm( \
     l); dMm(u); dMm(Ps); dMm(Ps_dB); dMm(Fh); dMm(Ph); dMm(Harbin); dMm(Ph_dB); dMm(har_num); dMm(har_num_AdcDynTest_v1) \
     ; dMm(tone); dMm(har_peak); dMm(har_bin); dMm(spectP_temp); dMm(i_); dMm(i_AdcDynTest_v2); dMm(disturb_len);  \
     dMm(spectP_disturb); dMm(Harbin_disturb); dMm(findSpac); dMm(findSpan); dMm(findStart); dMm(i_AdcDynTest_v3);  \
     dMm(spectP_disturb_peak); dMm(num); dMm(array_flag); dMm(jj); dMm(jj_AdcDynTest_v4); dMm(k); dMm(k_AdcDynTest_v5) \
     ; dMm(spectP_disturb_temp); dMm(Harbin_disturb_temp); dMm(Ph_disturb); dMm(Ph_disturb_dB); dMm(Fn_disturb); dMm( \
     i_AdcDynTest_v6); dMm(Pd_disturb); dMm(Pd_disturb_dB); dMm(Pd); dMm(Pd_dB); dMm(Pn); dMm(Pn_dB); dMm(Vin); dMm( \
     THD); dMm(HD); dMm(SNRFS); dMm(ENOBFS); 
   
   call_stack_begin;
   // nargin, nargout entry code
   double old_nargin=nargin_val; if (!nargin_set) nargin_val=6.0;
   nargin_set=0;
   double old_nargout=nargout_val; if (!nargout_set) nargout_val=5.0;
   nargout_set=0;
   
   // translated code
   
   // function [SNR, SFDR, SNRFS, SINAD, y, THD, HD, ENOB, ENOBFS, Pn_dB] = AdcDynTest( ADout, fclk, numbit, NFFT, V, code )
   // Pn_dB为底噪声,fclk为采样频率,numbit为采样精度,NFFT为FFT的深度,V为峰峰值,TPY和TPX分别为时域图的Y和X轴,code
   // 为1:补码,2:偏移码,3:格雷码。
   //例子:若采样时钟80MHZ,精度16为,峰峰值2v,时域图显示Y轴+-1V和X轴0-0.01ms,码源为补码
   //[SNR, SFDR, SNRFS, SINAD, THD, HD, ENOB, ENOBFS, Pn_dB] = calc_dynam_params( 80e6, 16, 32768, 2, 1, 0.01, 1 )
   
   if (istrue(code==1.0)) {
     if (istrue(numbit<16.0)) {
       ADout = fix(ADout/mpower(2.0,(16.0-numbit)));
     }
     ADout = ADout/mpower(2.0,(numbit-1.0));
     
   } else
   if (istrue(code==2.0)) {
     if (istrue(numbit<16.0)) {
       ADout = fix(ADout/mpower(2.0,(16.0-numbit)));
     }
     ADout = ADout/mpower(2.0,(numbit-1.0))-1.0;
   } else {
     
     if (istrue(numbit<16.0)) {
       ADout = fix(ADout/mpower(2.0,(16.0-numbit)));
     }
   }
   
   ADout = V/2.0*ADout;
   
   ad_len_N = length(ADout);
   
   maxADout = max(abs(ADout));
   /*[AmpMax,t1] = */max(ADout,i_o,AmpMax,t1);
   /*[AmpMin,t2] = */min(ADout,i_o,AmpMin,t2);
   Vpp = AmpMax-AmpMin;
   
   
   ADout_w = times(ADout,chebwin(ad_len_N,200.0));
   AA = zeros(NFFT-ad_len_N,1.0);
   ADout_w = (BR(ADout_w),semi,
   AA);
   ad_len = length(ADout_w);
   ADout_spect = fft(ADout_w,NFFT);
   ADout_dB = 20.0*log10(abs(ADout_spect));
   
   maxdB = max(ADout_dB(colon(1.0,1.0,ad_len/2.0)));
   fin_v = find(ADout_dB(colon(1.0,1.0,ad_len/2.0))==maxdB);
   
   fin = fin_v(1.0);
   freq_fin = (fin*fclk/ad_len);
   
   data_ref = zeros(ad_len_N,1.0);
   n_AdcDynTest_v0 = colon(1.0,1.0,ad_len_N); int n_AdcDynTest_i0;
   for (n_AdcDynTest_i0=0;n_AdcDynTest_i0<n_AdcDynTest_v0.cols();n_AdcDynTest_i0++) {
     forelem(n,n_AdcDynTest_v0,n_AdcDynTest_i0);
     
     data_ref(n) = V/2.0*sin((n-1.0)*(freq_fin)/fclk*2.0*pi);
   }
   data_ref_w = times(data_ref,chebwin(ad_len_N,200.0));
   
   data_ref_w = (BR(data_ref_w),semi,
   AA);
   data_ref_spect = fft(data_ref_w,NFFT);
   data_ref_dB = 20.0*log10(abs(data_ref_spect));
   ref_dB = max(data_ref_dB(colon(1.0,1.0,ad_len/2.0)));
   
   // $$$ figure( 1 )
   // $$$ plot( [0:round( ad_len / 2 ) - 1].*fclk / ad_len, - 20, ' - k' );
   // $$$ hold on;
   // $$$ plot( [0:50:round( ad_len / 2 ) - 1].*fclk / ad_len, - 40, ' - - k' );
   // $$$ hold on;
   // $$$ plot( [0:round( ad_len / 2 ) - 1].*fclk / ad_len, - 60, ' - k' );
   // $$$ hold on;
   // $$$ plot( [0:50:round( ad_len / 2 ) - 1].*fclk / ad_len, - 80, ' - - k' );
   // $$$ hold on;
   // $$$ plot( [0:round( ad_len / 2 ) - 1].*fclk / ad_len, - 100, ' - k' );
   // $$$ hold on;
   // $$$ plot( [0:50:round( ad_len / 2 ) - 1].*fclk / ad_len, - 120, ' - - k' );
   // $$$ hold on;
   // $$$ plot( [0:round( ad_len / 2 ) - 1].*fclk / ad_len, ADout_dB( 1:round( ad_len / 2 ) ) - ref_dB );
   // $$$ 
   // $$$ 
   // $$$ title( 'FFT PLOT' ); 
   // $$$ xlabel( 'ANALOG INPUT FREQUENCY ( MHz )' );
   // $$$ ylabel( 'AMPLITUDE ( dBFs )' );
   // $$$ a1 = axis; axis( [a1( 1 ) a1( 2 ) - 140 0] ); 
   
   //Calculate SNR, SINAD, THD and SFDR values
   //Find the signal bin number, DC = bin 1
   
   //Span of the DC on each side
   span = max(11.0);
   
   
   //Searching span for peak harmonics amp on each side 
   spanh_har = 4.0;
   //Span of the signal on each side
   span_s = 19.0;
   //8
   //Determine power spectrum
   spectP = times((abs(ADout_spect)),(abs(ADout_spect)));
   
   //Find DC offset power 
   Pdc = sum(spectP(colon(1.0,1.0,span)));
   
   Pdc_dB = sum(ADout_dB(colon(1.0,1.0,span)));
   //Extract overall signal power
   
   l = max(fin-span_s,1.0);
   u = min(fin+span_s,ad_len/2.0);
   Ps = sum(spectP(colon(l,1.0,u)));
   Ps_dB = sum(ADout_dB(colon(l,1.0,u)));
   //Vector / matrix to store both frequency and power of signal and harmonics
   Fh = nop_M;
   
   
   //The 1st element in the vector / matrix represents the signal, the next element represents
   //the 2nd harmonic, etc.
   Ph = nop_M;
   
   Harbin = nop_M;
   Ph_dB = nop_M;
   
   har_num_AdcDynTest_v1 = colon(1.0,1.0,11.0); int har_num_AdcDynTest_i1;
   for (har_num_AdcDynTest_i1=0;har_num_AdcDynTest_i1<har_num_AdcDynTest_v1.cols();har_num_AdcDynTest_i1++) {
     forelem(har_num,har_num_AdcDynTest_v1,har_num_AdcDynTest_i1);
     
     tone = rem((har_num*(fin-1.0)+1.0)/ad_len,1.0);
     
     if (istrue(tone>0.5)) {
       
       tone = 1.0-tone;
       
     }
     
     Fh = (BR(Fh),tone);
     
     
     l = max(1.0,round(tone*ad_len)-spanh_har);
     u = min(ad_len/2.0,round(tone*ad_len)+spanh_har);
     har_peak = max(spectP(colon(l,1.0,u)));
     
     har_bin = find(spectP(colon(l,1.0,u))==har_peak);
     har_bin = har_bin+round(tone*ad_len)-spanh_har-1.0;
     
     l = max(1.0,har_bin-spanh_har);
     u = min(ad_len/2.0,har_bin+spanh_har);
     Ph = (BR(Ph),sum(spectP(colon(l,1.0,u))));
     
     Ph_dB = (BR(Ph_dB),sum(ADout_dB(colon(l,1.0,u))));
     Harbin = (BR(Harbin),har_bin);
   }
   
   spectP_temp = spectP;
   
   i_AdcDynTest_v2 = colon(2.0,1.0,10.0); int i_AdcDynTest_i2;
   for (i_AdcDynTest_i2=0;i_AdcDynTest_i2<i_AdcDynTest_v2.cols();i_AdcDynTest_i2++) {
     forelem(i_,i_AdcDynTest_v2,i_AdcDynTest_i2);
     l = max(1.0,Harbin(i_)-spanh_har);
     u = min(ad_len/2.0,Harbin(i_)+spanh_har);
     spectP_temp(colon(l,1.0,u)) = 0.0;
   }
   l = max(1.0,fin-span_s);
   u = min(ad_len/2.0,fin+span_s);
   spectP_temp(colon(l,1.0,u)) = 0.0;
   spectP_temp(colon(1.0,1.0,span)) = 0.0;
   
   
   disturb_len = 19.0;
   spectP_disturb = zeros(1.0,disturb_len);
   Harbin_disturb = zeros(1.0,disturb_len);
   findSpac = 30.0;
   findSpan = (findSpac-1.0)/2.0;
   findStart = findSpan+1.0;
   
   i_AdcDynTest_v3 = colon(findStart,findSpac,ad_len/2.0); int i_AdcDynTest_i3;
   for (i_AdcDynTest_i3=0;i_AdcDynTest_i3<i_AdcDynTest_v3.cols();i_AdcDynTest_i3++) {
     forelem(i_,i_AdcDynTest_v3,i_AdcDynTest_i3);
     l = max(1.0,i_-findSpan);
     u = min(ad_len/2.0,i_+findSpan);
     /*[spectP_disturb_peak,num] = */max(spectP_temp(colon(l,1.0,u)),i_o,spectP_disturb_peak,num);
     
     if (istrue(spectP_disturb_peak>spectP_disturb(1.0))) {
       spectP_disturb(1.0) = spectP_disturb_peak;
       Harbin_disturb(1.0) = i_-findStart+num;
       array_flag = 1.0;
     } else {
       
       array_flag = 0.0;
     }
     if (istrue(array_flag==1.0)) {
       jj_AdcDynTest_v4 = colon(1.0,1.0,disturb_len-2.0); int jj_AdcDynTest_i4;
       for (jj_AdcDynTest_i4=0;jj_AdcDynTest_i4<jj_AdcDynTest_v4.cols();jj_AdcDynTest_i4++) {
         forelem(jj,jj_AdcDynTest_v4,jj_AdcDynTest_i4);
         k_AdcDynTest_v5 = colon(1.0,1.0,(disturb_len-jj)); int k_AdcDynTest_i5;
         for (k_AdcDynTest_i5=0;k_AdcDynTest_i5<k_AdcDynTest_v5.cols();k_AdcDynTest_i5++) {
           forelem(k,k_AdcDynTest_v5,k_AdcDynTest_i5);
           if (istrue(spectP_disturb(k)>spectP_disturb(k+1.0))) {
             spectP_disturb_temp = spectP_disturb(k);
             spectP_disturb(k) = spectP_disturb(k+1.0);
             spectP_disturb(k+1.0) = spectP_disturb_temp;
             Harbin_disturb_temp = Harbin_disturb(k);
             Harbin_disturb(k) = Harbin_disturb(k+1.0);
             Harbin_disturb(k+1.0) = Harbin_disturb_temp;
             
           }
         }
       }
     }
   }
   Ph_disturb = nop_M;
   Ph_disturb_dB = nop_M;
   Fn_disturb = Harbin_disturb/(ad_len);
   i_AdcDynTest_v6 = colon(1.0,1.0,disturb_len); int i_AdcDynTest_i6;
   for (i_AdcDynTest_i6=0;i_AdcDynTest_i6<i_AdcDynTest_v6.cols();i_AdcDynTest_i6++) {
     forelem(i_,i_AdcDynTest_v6,i_AdcDynTest_i6);
     l = max(1.0,Harbin_disturb(i_)-spanh_har);
     u = min(ad_len/2.0,Harbin_disturb(i_)+spanh_har);
     Ph_disturb = (BR(Ph_disturb),sum(spectP(colon(l,1.0,u))));
     Ph_disturb_dB = (BR(Ph_disturb_dB),sum(ADout_dB(colon(l,1.0,u))));
   }
   Pd_disturb = sum(Ph_disturb(colon(1.0,1.0,disturb_len)));
   Pd_disturb_dB = sum(Ph_disturb_dB(colon(1.0,1.0,disturb_len)));
   
   Pd = sum(Ph(colon(2.0,1.0,10.0)));
   Pd_dB = sum(Ph_dB(colon(2.0,1.0,10.0)));
   
   
   Pn = (sum(spectP(colon(1.0,1.0,ad_len/2.0)))-Pdc-Ps-Pd);
   Pn_dB = (sum(ADout_dB(colon(1.0,1.0,ad_len/2.0)))-Pdc_dB-Ps_dB-Pd_dB-Pd_disturb_dB)*2.0/ad_len-ref_dB;
   // Vin = 20*log10( Vpp / 2 );
   Vin = maxdB-ref_dB;
   SINAD = 10.0*log10(Ps/(Pn+Pd));
   SNR = 10.0*log10(Ps/Pn);
   
   // $$$ disp( 'THD is calculated from 2nd through 5th order harmonics' );
   THD = 10.0*log10(Pd/Ph(1.0));
   SFDR = 10.0*log10(Ph(1.0)/max(max(Ph(colon(2.0,1.0,10.0)),max(Ph_disturb(colon(1.0,1.0,disturb_len))))));
   
   // $$$ disp( 'Signal & Harmonic Power Components:' );
   HD = 10.0*log10(Ph(colon(1.0,1.0,10.0))/Ph(1.0));
   
   
   
   
   // $$$ hold on; 
   // $$$ 
   // $$$ plot( Fh( 2 )*fclk, ADout_dB( Harbin( 2 ) ) - ref_dB, 'rv', Fh( 3 )*fclk, ADout_dB( Harbin( 3 ) ) - ref_dB, 'rv', Fh( 4 )*fclk, ADout_dB( Harbin( 4 ) ) - ref_dB, 'rv', Fh( 5 )*fclk, ADout_dB( Harbin( 5 ) ) - ref_dB, 'rv', Fh( 6 )*fclk, ADout_dB( Harbin( 6 ) ) - ref_dB, 'rv', Fh( 7 )*fclk, ADout_dB( Harbin( 7 ) ) - ref_dB, 'rv', Fh( 8 )*fclk, ADout_dB( Harbin( 8 ) ) - ref_dB, 'rv', Fh( 9 )*fclk, ADout_dB( Harbin( 9 ) ) - ref_dB, 'rv', Fh( 10 )*fclk, ADout_dB( Harbin( 10 ) ) - ref_dB, 'rv' );
   // $$$ hold on;
   // $$$ plot( [0:round( ad_len / 2 ) - 1].*fclk / ad_len, Pn_dB, 'm - ' );
   // $$$ switch ( NFFT )
   // $$$  case 16384
   // $$$   NFFT_txt = '16K';
   // $$$  case 32768
   // $$$   NFFT_txt = '32K';
   // $$$  case 65536
   // $$$   NFFT_txt = '64K'; 
   // $$$ end
   // $$$ FRQ_txt = num2str( freq_fin / 1e6, '%2.1f' );
   // $$$ FRQ_txt = strcat( FRQ_txt, 'MHz' );
   // $$$ FFT_txt = strcat( NFFT_txt, ' FFT' );
   // $$$ FREQ_txt = strcat( num2str( fclk / 1e6, '%2d' ), 'MSPS' );
   // $$$ DBFS_txt = strcat( FRQ_txt, '@', num2str( maxdB - ref_dB, '%2.1f' ), 'dBFs' );
   // $$$ SNR_txt = strcat( 'SNR =', num2str( SNR, '% 2.3f' ), ' dBc' );
   // $$$ SFDR_txt = strcat( 'SFDR = ', num2str( SFDR, '% 2.3f' ), ' dBc' );
   // $$$ text( fclk*5.6 / 16, - 5, FFT_txt, 'HorizontalAlignment', 'left', 'Color', 'r' );
   // $$$ text( fclk*5.6 / 16, - 13, FREQ_txt, 'HorizontalAlignment', 'left', 'Color', 'r' );
   // $$$ text( fclk*5.6 / 16, - 21, DBFS_txt, 'HorizontalAlignment', 'left', 'Color', 'r' );
   // $$$ text( fclk*5.6 / 16, - 29, SNR_txt, 'HorizontalAlignment', 'left', 'Color', 'r' );
   // $$$ text( fclk*5.6 / 16, - 37, SFDR_txt, 'HorizontalAlignment', 'left', 'Color', 'r' );
   // $$$ text( Fh( 2 )*fclk, ADout_dB( Harbin( 2 ) ) - ref_dB + 2, '2', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 3 )*fclk, ADout_dB( Harbin( 3 ) ) - ref_dB + 2, '3', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 4 )*fclk, ADout_dB( Harbin( 4 ) ) - ref_dB + 2, '4', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 5 )*fclk, ADout_dB( Harbin( 5 ) ) - ref_dB + 2, '5', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 6 )*fclk, ADout_dB( Harbin( 6 ) ) - ref_dB + 2, '6', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 7 )*fclk, ADout_dB( Harbin( 7 ) ) - ref_dB + 2, '7', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 8 )*fclk, ADout_dB( Harbin( 8 ) ) - ref_dB + 2, '8', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 9 )*fclk, ADout_dB( Harbin( 9 ) ) - ref_dB + 2, '9', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ text( Fh( 10 )*fclk, ADout_dB( Harbin( 10 ) ) - ref_dB + 2, '10', 'VerticalAlignmen', 'bottom', 'Color', 'r' );
   // $$$ hold on;
   // $$$ for i = 0:disturb_len / 2
   // $$$  hold on;
   // $$$  plot( Fn_disturb( disturb_len - i )*fclk, ADout_dB( Harbin_disturb( disturb_len - i ) ) - ref_dB, 'g*' );
   // $$$ end
   // $$$ hold off;
   // $$$ 
   // $$$ 
   // $$$ VPP_txt = strcat( num2str( Vpp, '%2.3f' ), ' Vpp' );
   // $$$ figure( 2 )
   // $$$ 
   // $$$ plot( [1:ad_len_N].*1e3 / fclk, ADout( 1:ad_len_N ) );
   // $$$ title( 'Time PLOT' ); 
   // $$$ xlabel( 'TIME ( ms )' );
   // $$$ ylabel( 'AMPLITUDE ( V )' );
   // $$$ hold on
   
   SNRFS = SNR+abs(maxdB-ref_dB);
   ENOB = (SINAD-1.76)/6.02;
   ENOBFS = ENOB+abs(maxdB-ref_dB)/6.02;
   HD = (BR(ADout_dB(max(Harbin(2.0),1.0))-ref_dB),ADout_dB(max(Harbin(2.0),1.0))-ref_dB,ADout_dB(max(Harbin(3.0) \
     ,1.0))-ref_dB,ADout_dB(max(Harbin(4.0),1.0))-ref_dB,ADout_dB(max(Harbin(5.0),1.0))-ref_dB,ADout_dB(max(Harbin( \
     6.0),1.0))-ref_dB,ADout_dB(max(Harbin(7.0),1.0))-ref_dB,ADout_dB(max(Harbin(8.0),1.0))-ref_dB,ADout_dB(max(Harbin( \
     9.0),1.0))-ref_dB,ADout_dB(max(Harbin(10.0),1.0))-ref_dB);
   
   y = ADout_dB-ref_dB;
   
   call_stack_end;
   
   // nargin, nargout exit code
   nargin_val=old_nargin; nargout_val=old_nargout;
   
   // function exit code
   ADout.setname(NULL); fclk.setname(NULL); numbit.setname(NULL); NFFT.setname(NULL); V.setname(NULL); code.setname( \
     NULL); 
   SNR__o=SNR; SINAD__o=SINAD; SFDR__o=SFDR; ENOB__o=ENOB; y__o=y; 
   return x_M;
   end_scope
 }