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

📄 cfunc.mod

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 MOD
字号:
/* $Id: cfunc.mod,v 1.2 2003/08/05 17:20:31 pnenzi Exp $ *//*.......1.........2.........3.........4.........5.........6.........7.........8================================================================================FILE divide/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 divide 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 ====================*/#include <math.h>                                      /*=== CONSTANTS ========================*//*=== MACROS ===========================*/  /*=== LOCAL VARIABLES & TYPEDEFS =======*/                                        /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/                   /*==============================================================================FUNCTION void cm_divide()AUTHORS                           2 Oct 1991     Jeffrey P. MurrayMODIFICATIONS       NONESUMMARY    This function implements the divide 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_DIVIDE ROUTINE ===*/void cm_divide(ARGS)  {    double den_lower_limit;  /* denominator lower limit */	double den_domain;       /* smoothing range for the lower limit */	double threshold_upper;  /* value above which smoothing occurs */	double threshold_lower;  /* value below which smoothing occurs */    double numerator;        /* numerator input */	double denominator;      /* denominator input */	double limited_den;      /* denominator value if limiting is needed */   	double den_partial;      /* partial of the output wrt denominator */	double out_gain;         /* output gain */    double num_gain;         /* numerator gain */	double den_gain;         /* denominator gain */        Mif_Complex_t ac_gain;    /* Retrieve frequently used parameters... */    den_lower_limit = PARAM(den_lower_limit);    den_domain = PARAM(den_domain);    out_gain = PARAM(out_gain);    num_gain = PARAM(num_gain);    den_gain = PARAM(den_gain);                                                        if (PARAM(fraction) == MIF_TRUE)    /* Set domain to absolute value */        den_domain = den_domain * den_lower_limit;    threshold_upper = den_lower_limit +   /* Set Upper Threshold */                         den_domain;    threshold_lower = den_lower_limit -   /* Set Lower Threshold */                         den_domain;    numerator = (INPUT(num) + PARAM(num_offset)) * num_gain;     denominator = (INPUT(den) + PARAM(den_offset)) * den_gain;     if ((denominator < threshold_upper) && (denominator >= 0)) {  /* Need to limit den...*/        if (denominator > threshold_lower)   /* Parabolic Region */            cm_smooth_corner(denominator,den_lower_limit,                        den_lower_limit,den_domain,0.0,1.0,                        &limited_den,&den_partial);        else {                            /* Hard-Limited Region */            limited_den = den_lower_limit;            den_partial = 0.0;                }    }	else    if ((denominator > -threshold_upper) && (denominator < 0)) {  /* Need to limit den...*/        if (denominator < -threshold_lower)   /* Parabolic Region */            cm_smooth_corner(denominator,-den_lower_limit,                        -den_lower_limit,den_domain,0.0,1.0,                        &limited_den,&den_partial);        else {                            /* Hard-Limited Region */            limited_den = -den_lower_limit;            den_partial = 0.0;                }    }    else {                         /* No limiting needed */        limited_den = denominator;        den_partial = 1.0;    }    if (ANALYSIS != MIF_AC) {        OUTPUT(out) = PARAM(out_offset) + out_gain *                          ( numerator/limited_den );        PARTIAL(out,num) = out_gain * num_gain / limited_den;        PARTIAL(out,den) = -out_gain * numerator * den_gain *                            den_partial / (limited_den * limited_den);    }    else {        ac_gain.real = out_gain * num_gain / limited_den;        ac_gain.imag= 0.0;        AC_GAIN(out,num) = ac_gain;        ac_gain.real = -out_gain * numerator * den_gain *                            den_partial / (limited_den * limited_den);        ac_gain.imag= 0.0;        AC_GAIN(out,den) = ac_gain;    }}

⌨️ 快捷键说明

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