⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfunc.mod

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 MOD
字号:
/* $Id: cfunc.mod,v 1.2 2003/08/05 17:20:35 pnenzi Exp $ *//*.......1.........2.........3.........4.........5.........6.........7.........8================================================================================FILE limit/cfunc.modCopyright 1991Georgia Tech Research Corporation, Atlanta, Ga. 30332All Rights ReservedPROJECT A-8503-405               AUTHORS                          6 Jun 1991     Jeffrey P. MurrayMODIFICATIONS        2 Oct 1991    Jeffrey P. Murray                                   SUMMARY    This file contains the model-specific routines used to    functionally describe the limit code model.INTERFACES           FILE                 ROUTINE CALLED         CMutil.c             void cm_smooth_corner(); REFERENCED FILES    Inputs from and outputs to ARGS structure.                     NON-STANDARD FEATURES    NONE===============================================================================*//*=== INCLUDE FILES ====================*/                                      /*=== CONSTANTS ========================*//*=== MACROS ===========================*/  /*=== LOCAL VARIABLES & TYPEDEFS =======*/                                        /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/                   /*==============================================================================FUNCTION void cm_limit()AUTHORS                           2 Oct 1991     Jeffrey P. MurrayMODIFICATIONS       NONESUMMARY    This function implements the limit code model.INTERFACES           FILE                 ROUTINE CALLED         CMutil.c             void cm_smooth_corner(); RETURNED VALUE        Returns inputs and outputs via ARGS structure.GLOBAL VARIABLES        NONENON-STANDARD FEATURES    NONE==============================================================================*//*=== CM_LIMIT ROUTINE ===*/void cm_limit(ARGS)  /* structure holding parms,                                        inputs, outputs, etc.     */{    double out_lower_limit;   /* output lower limit */	double out_upper_limit;   /* output upper limit */	double limit_range;       /* upper and lower limit smoothing range */	double gain;              /* gain */    double threshold_upper;   /* value above which smoothing takes place */	double threshold_lower;   /* value below which smoothing takes place */	double out;               /* output */	double limited_out;       /* limited output value */    double out_partial;       /* partial of the output wrt input */        Mif_Complex_t ac_gain;    /* Retrieve frequently used parameters... */    out_lower_limit = PARAM(out_lower_limit);    out_upper_limit = PARAM(out_upper_limit);    limit_range = PARAM(limit_range);    gain = PARAM(gain);    if (PARAM(fraction) == MIF_TRUE)     /* Set range to absolute value */        limit_range = limit_range *               (out_upper_limit - out_lower_limit);    threshold_upper = out_upper_limit -   /* Set Upper Threshold */                         limit_range;    threshold_lower = out_lower_limit +   /* Set Lower Threshold */                         limit_range;                                  /* Compute Un-Limited Output */    out = gain * (PARAM(in_offset) + INPUT(in));     if (out < threshold_lower) {       /* Limit Out @ Lower Bound */        if (out > (out_lower_limit - limit_range)) { /* Parabolic */            cm_smooth_corner(out,out_lower_limit,out_lower_limit,                        limit_range,0.0,1.0,&limited_out,                        &out_partial);                           out_partial = gain * out_partial;           }        else {                             /* Hard-Limited Region */            limited_out = out_lower_limit;            out_partial = 0.0;        }        }    else {        if (out > threshold_upper) {       /* Limit Out @ Upper Bound */            if (out < (out_upper_limit + limit_range)) { /* Parabolic */                cm_smooth_corner(out,out_upper_limit,out_upper_limit,                            limit_range,1.0,0.0,&limited_out,                            &out_partial);                               out_partial = gain * out_partial;             }            else {                             /* Hard-Limited Region */                limited_out = out_upper_limit;                out_partial = 0.0;            }        }        else {               /* No Limiting Needed */            limited_out = out;            out_partial = gain;        }    }    if (ANALYSIS != MIF_AC) {     /* DC & Transient Analyses */        OUTPUT(out) = limited_out;        PARTIAL(out,in) = out_partial;    }    else {                        /* AC Analysis */        ac_gain.real = out_partial;        ac_gain.imag= 0.0;        AC_GAIN(out,in) = ac_gain;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -