亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? simulatedsm.c

?? Oversampling Delta-Sigma Data Converters
?? C
字號:
/* simulateDSM.c - A MEX-file for simulating a delta-sigma modulator %[v,xn,xmax,y] = simulateDSM( u, ABCD, nlev[2], x0[0] )% or%[v,xn,xmax,y] = simulateDSM( u, ntf, nlev[2], x0[0] )%%Compute the output of a general delta-sigma modulator with input u,%a structure described by ABCD, an initial state x0 (default zero) and %a quantizer with a number of levels specified by nlev.%Multiple quantizers are implied by making nlev an array,% and multiple inputs are implied by the number of rows in u.%%Alternatively, the modulator may be described by an NTF.%The NTF is zpk object. (The STF is assumed to be 1.)%The structure that is simulated is the block-diagional structure used by%zp2ss.m.%%The obsolete NTF style is %a struct with fields 'zeros' and 'poles' ('k' is assumed to be 1).%the STF is assumed to be 1.%The structure that is simulated is the block-diagional structure used by%zp2ss.m.*/#include <stdio.h>#include <math.h>#include "mex.h"/* Global variables *//* In an effort to make the code more readable and to cut down on the overhead    associated with function calls, I have made many variables global. */char *cmdName = "simulateDSM";int    order,	/* The order of the modulator. */    nu,		/* The number of inputs, inferred from size(u,1). */    nq,		/* The number of quantizers, inferred from nlev */    N,		/* The number of time steps. */    ABCD_rows,	/* The number of rows in ABCD */    saveState;	/* Flag: keep track of the states. */double     *u,		/* Points into the input array. */    *v,		/* Points into the output array. */    *x,		/* The current state. */    *xn,	/* Points (in)to the (output) state array. */    *xMax,	/* Points to the state maxima output array. */    *py,	/* Points to the quantizer input output array. */    *ABCD,	/* The ABCD array (col-wise) description of the moduator. */    *nlev,	/* The number of quantizer levels. */    default_nlev=2;#ifdef __STDC__double quantize(double yy, int nLevels)#elsedouble quantize(yy, nLevels)double yy;int nLevels;#endif{     double vv;    if(nLevels%2) { /* Mid-tread quantizer */	vv = 2*floor(0.5*(yy+1));	if( vv > nLevels )	    vv = nLevels-1;	else if( vv < -nLevels )	    vv = 1-nLevels;    }    else { /* Mid-rise quantizer */	vv = 2*floor(0.5*yy)+1;	if( vv > nLevels )	    vv = nLevels-1;	else if( vv < -nLevels )	    vv = 1-nLevels;    }    return vv;}/* The following function is for debugging purposes only */#ifdef __STDC__void printMatrix(double *x, int m, int n)#elseprintMatrix(x, m, n)double *x;int m, n;#endif{int i,j;for(i=0; i<m; ++i){    for(j=0; j<n; ++j)	mexPrintf("%8.3f ",x[i+m*j]);    mexPrintf("\n");    }}#ifdef __STDC__void fatalError(char *s)#elsefatalError(s)char *s;#endif{    char msg[1024];    sprintf(msg, "%s: %s", cmdName, s);    mexErrMsgTxt(msg);}#ifdef __STDC__void initializeX(const mxArray *M_x0)#elseinitializeX(M_x0)mxArray *M_x0;#endif{    int i;    double *x0 = mxGetPr(M_x0);    if( mxGetM(M_x0)!=order || mxGetN(M_x0)!=1 )	fatalError("x0 must be an order x 1 column vector.");    for(i=0; i<order; ++i)	x[i] = *x0++;}#ifdef __STDC__void checkArgs(int nlhs, mxArray **plhs, int nrhs, const mxArray **prhs)#elsecheckArgs(nlhs, plhs, nrhs, prhs)int nlhs, nrhs;mxArray *plhs[], *prhs[];#endif{    int i;    int form;    double *pABCD;    const mxArray *arg2=prhs[1];    mxArray *zeros, *poles;    /* Verify the rhs (input) arguments */    if( nrhs < 2 )	fatalError("At least two input arguments are needed.");    if( !mxIsDouble(prhs[0]) )	fatalError("The input vector does not contain double-precision data.");    u = mxGetPr(prhs[0]);    nu = mxGetM(prhs[0]);    N = mxGetN(prhs[0]);    nq = 1;    nlev = &default_nlev;    if(nrhs>=3)	if( !( mxIsEmpty(prhs[2]) || mxIsNaN(*mxGetPr(prhs[2])) ) ){	    nq = mxGetM(prhs[2]) * mxGetN(prhs[2]);	    nlev = mxGetPr(prhs[2]);	}    /* Determine the form of the modulator */    if( mxIsClass(arg2,"zpk") ){		/* NTF in zpk form */	/* Matlab code: [z,p,k] = zpkdata(ntf); zeros = z{1}; poles=p{1} */	mxArray *lhs[3];	form = 0;	mexCallMATLAB(3,lhs,1,&arg2,"zpkdata"); 	zeros = mxGetCell(lhs[0],0);	poles = mxGetCell(lhs[1],0);	if( (order=mxGetNumberOfElements(zeros)) != mxGetNumberOfElements(poles) )	    fatalError("The number of poles must equal the number of zeros.");    }    else if( mxIsStruct(arg2) ){		/* Obsolete NTF form */	if( (zeros=mxGetField(arg2,0,"zeros"))==0 )	    fatalError("No zeros field in the NTF struct.");	if( !mxIsNumeric(zeros) )	    fatalError("The zeros field is not numeric.");	if( (poles=mxGetField(arg2,0,"poles"))==0 )	    fatalError("No poles field in the NTF struct.");	if( !mxIsNumeric(poles) )	    fatalError("The poles field is not numeric.");	if( (order=mxGetNumberOfElements(zeros)) != mxGetNumberOfElements(poles) )	    fatalError("The number of poles must equal the number of zeros.");	mexWarnMsgTxt("You appear to be using an old-style form of NTF specification.\nAutomatic converstion to the new form will be done for this release only.");	form = 2;    }    else if( mxIsNumeric(arg2) ){	if( mxGetN(arg2)==mxGetM(arg2)+nu && mxIsDouble(arg2) ){	    form = 1;			/* ABCD form */	    order = mxGetM(arg2)-nq;	}	else if( mxGetN(arg2)==2 ){	    mexWarnMsgTxt("You appear to be using the old-style form of NTF specification.\nAutomatic converstion to the new form will be done for this release only.");	    form = 3;		/* old NTF form */	    order = mxGetM(arg2);	}	else	    fatalError("ABCD must be an order+nq by order+nu+nq matrix.");    }    else	fatalError("The second argument is neither a proper ABCD matrix nor an NTF.");    if( form==1 ){		/* ABCD form */	ABCD = mxGetPr(arg2);    }    else if( form==0 || form==2 || form==3 ){	/* NTF form */	/* MATLAB code for computing ABCD 	   [A,B2,C,D2] = zp2ss(ntf.poles,ntf.zeros,-1);	   D2 = 0;	   % !!!! Assume stf=1	   B1 = -B2;	   D1 = 1;	   ABCD = [ A B1 B2; C D1 D2]	*/	mxArray *lhs[4],*pntf[3];	double *p1,*p2;	if( nu != 1 )	    fatalError("Fatal error. Number of inputs must be 1 for a modulator specified by its NTF\n");	if( nq != 1)	    fatalError("Fatal error. Number of quantizers must be 1 for a modulator specified by its NTF\n");	/* Copy the ntf (arg2) into the temporary pntf[] matrices. */	/* This could be accomplished more efficiently (but more dangerously)	   by directly setting the elements of the mxArray data structure. */	pntf[0] = mxCreateDoubleMatrix(order,1,mxCOMPLEX);	pntf[1] = mxCreateDoubleMatrix(order,1,mxCOMPLEX);	pntf[2] = mxCreateDoubleMatrix(1,1,mxREAL);	p2 = mxGetPr((form==0||form==2) ? zeros:arg2);	for( p1=mxGetPr(pntf[1]), i=0; i<order; ++i)	    *p1++ = *p2++;	if( form!=3 )	    p2 = mxGetPr(poles);	for( p1=mxGetPr(pntf[0]), i=0; i<order; ++i)	    *p1++ = *p2++;	p2 = mxGetPi((form==0||form==2) ? zeros:arg2);	if( p2 ) /* Non-null imaginary part. */	    for( p1=mxGetPi(pntf[1]),  i=0; i<order; ++i)		*p1++ = *p2++;	if( form!=3 )	    p2 = mxGetPi(poles);	if( p2 ) /* Non-null imaginary part. */	    for( p1=mxGetPi(pntf[0]), i=0; i<order; ++i)		*p1++ = *p2++;	*mxGetPr(pntf[2]) = -1;	mexCallMATLAB(4,lhs,3,pntf,"zp2ss"); 	p1 = mxGetPr(lhs[0]);	p2 = mxGetPr(lhs[2]);	ABCD = (double *)mxCalloc((order+nu)*(order+nu+nq),sizeof(double));	pABCD = ABCD;	for( i=0; i<order; ++i ){	    int j;	    for( j=0; j<order; ++j )		*pABCD++ = *p1++;	    *pABCD++ = *p2++;	}	p1 = mxGetPr(lhs[1]);	/* B1 = -B2 */	for( i=0; i<order; ++i )	    *pABCD++ = -*p1++;	*pABCD++ = 1;		/* D1 */	p1 = mxGetPr(lhs[1]);	/* B2 */	for( i=0; i<order; ++i )	    *pABCD++ = *p1++;	*pABCD = 0;		/* D2 */	for(i=0;i<4;++i) 	    mxDestroyArray(lhs[i]);	for(i=0;i<2;++i) 	    mxDestroyArray(pntf[i]);    }    else	fatalError("Internal error. form != 0, 1, 2 or 3!");    ABCD_rows = order + nq;    plhs[0] = mxCreateDoubleMatrix(nq,N,mxREAL);    v = mxGetPr(plhs[0]);    x = (double *)mxCalloc(order,sizeof(double));    if(nrhs>=4){	if( !( mxIsEmpty(prhs[3]) || mxIsNaN(*mxGetPr(prhs[3])) ) )		    initializeX(prhs[3]);	}        /* Verify the lhs (output) arguments */    saveState=0;     py=0;    xMax=0;    switch(nlhs){	case 4:	    plhs[3] = mxCreateDoubleMatrix(nq,N,mxREAL);	    py = mxGetPr(plhs[3]);	case 3:	    plhs[2] = mxCreateDoubleMatrix(order,1,mxREAL);	    xMax = mxGetPr(plhs[2]);	case 2:	    plhs[1] = mxCreateDoubleMatrix(order,N,mxREAL);	    xn = mxGetPr(plhs[1]);	    saveState=1;	    break;	case 1:	    break;	default:	    fatalError("Incorrect number of output arguments.");    }    if( !saveState )	xn = (double *)mxCalloc(order,sizeof(double));}/* Simulate the modulator using the difference equations. *//* For efficiency, store the state in xn and compute from x. *//* (These variables may be recycled internally, depending   on the output variables requested.) */#ifdef __STDC__void simulateDSM()#elsesimulateDSM()#endif{    int i,j,t, qi;    double *pABCD, *ptr, *pxn, tmp;    for( t=0; t<N; ++t ){ /* [xn;y] = ABCD*[x;u;v]; x=xn;*/	/* Compute y = C*x + D1*u and thence v for each quantizer */	for( qi=0; qi<nq; ++qi){	    tmp = 0;	    for(i=0, pABCD=ABCD+order+qi, ptr=x; i<order; ++i, pABCD+=ABCD_rows)		tmp += (*pABCD) * *ptr++;	    for(i=0, ptr=u; i<nu; ++i, pABCD+=ABCD_rows)		tmp += (*pABCD) * *ptr++;	    if( py!=0 )		*py++ = tmp;	    v[qi] = quantize(tmp, nlev[qi]);	}	/* Next compute xn = A*x + B*[u;v], */	for( i=0, pxn=xn; i<order; ++i ){	    tmp=0;	    pABCD=ABCD+i;	    for( ptr=x, j=0; j<order; ++j, pABCD += ABCD_rows )		tmp += *pABCD * *ptr++;	    for( ptr=u, j=0; j<nu; ++j, pABCD += ABCD_rows )		tmp += *pABCD * *ptr++;	    for( ptr=v, j=0; j<nq; ++j, pABCD += ABCD_rows )		tmp += *pABCD * *ptr++;	    *pxn++ = tmp;	    }	u += nu;	v += nq;	if(xMax!=0){	    for( i=0; i<order; ++i){		double abs=fabs(xn[i]);		if( abs > xMax[i] )		    xMax[i] = abs;	    }	}	if(saveState){	    x = xn;	    xn += order;	}	else { /* swap x and xn */	    double *xtmp = x;	    x = xn;	    xn = xtmp;	} /* if(saveState) */    } /* for( t=0 .... ) */}#ifdef __STDC__void mexFunction(int nlhs, mxArray **plhs, int nrhs, const mxArray **prhs)#elsemexFunction(nlhs, plhs, nrhs, prhs)int nlhs, nrhs;mxArray *plhs[], *prhs[];#endif{    checkArgs(nlhs, plhs, nrhs, prhs);    /* Print the variables being used     mexPrintf("x=\n");		printMatrix(x,order,1);    mexPrintf("\nABCD=\n");	printMatrix(ABCD,order+nq,order+nu+nq);    */    simulateDSM();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人高清免费观看| 亚洲成av人片一区二区梦乃| 精品一区二区三区在线播放 | 亚洲视频免费看| youjizz久久| 亚洲主播在线观看| 5858s免费视频成人| 日本不卡的三区四区五区| 日韩欧美国产综合一区 | 91免费看`日韩一区二区| 亚洲日本免费电影| 欧美久久久久久久久久| 蜜桃91丨九色丨蝌蚪91桃色| 久久中文娱乐网| 成人成人成人在线视频| 亚洲一级二级三级| 日韩免费高清视频| www.欧美色图| 亚洲高清免费一级二级三级| 日韩精品在线网站| 99热精品一区二区| 日本欧美一区二区在线观看| 国产欧美日韩在线看| 欧美羞羞免费网站| 国产一区二区看久久| 亚洲三级视频在线观看| 日韩小视频在线观看专区| 成人在线一区二区三区| 亚洲一区二区三区四区五区黄| 欧美电影免费观看高清完整版在线观看| 国产原创一区二区三区| 亚洲黄色小视频| 日韩免费电影网站| 91成人免费在线视频| 国产精品中文欧美| 亚洲bt欧美bt精品| 国产精品麻豆99久久久久久| 欧美剧情片在线观看| 成人av中文字幕| 乱一区二区av| 亚洲高清视频的网址| 国产精品卡一卡二| 欧美成人精品二区三区99精品| 色综合天天综合| 国产精品自产自拍| 色偷偷88欧美精品久久久| 日韩在线卡一卡二| 亚洲女厕所小便bbb| 久久久久综合网| 欧美精品亚洲一区二区在线播放| 不卡欧美aaaaa| 国产综合久久久久久鬼色 | 久久久国际精品| 538prom精品视频线放| 91在线云播放| 成人免费看黄yyy456| 精彩视频一区二区三区| 午夜电影网一区| 亚洲激情一二三区| 自拍偷拍欧美精品| 国产精品高潮呻吟久久| 久久天天做天天爱综合色| 日韩天堂在线观看| 欧美一区二区精品在线| 欧美日韩视频一区二区| 色婷婷亚洲综合| 99久久免费视频.com| 成人午夜看片网址| 国产精品77777| 精品亚洲国内自在自线福利| 免费人成黄页网站在线一区二区 | 视频一区二区三区中文字幕| 亚洲人成精品久久久久久| 国产网站一区二区三区| 日韩免费观看高清完整版| 日韩三级在线免费观看| 欧美一级高清大全免费观看| 欧美肥胖老妇做爰| 欧美精品自拍偷拍动漫精品| 欧美日韩精品一区二区三区蜜桃| 在线观看亚洲专区| 欧日韩精品视频| 在线观看一区日韩| 欧美精品免费视频| 欧美一区二区免费视频| 日韩欧美一区在线| 精品美女在线播放| 国产午夜精品福利| 国产精品国产精品国产专区不蜜| 国产一区二区三区| 国产福利91精品一区| 国产一区二区三区香蕉| www.欧美色图| 色悠久久久久综合欧美99| 在线免费亚洲电影| 欧美伦理电影网| 日韩一区二区三区在线| 精品999久久久| 国产欧美日产一区| 一区二区三区在线播放| 图片区小说区国产精品视频| 奇米精品一区二区三区在线观看一| 日本美女视频一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 成人不卡免费av| 欧美日韩aaaaaa| 久久久天堂av| 一区二区三区国产豹纹内裤在线| 天天亚洲美女在线视频| 国精产品一区一区三区mba视频| 成人晚上爱看视频| 欧美亚洲一区三区| 欧美成人一区二区三区| 中文成人av在线| 亚洲成人av一区二区| 极品美女销魂一区二区三区| 国产91丝袜在线18| 欧美日韩综合在线免费观看| 精品国产乱码久久久久久蜜臀| 亚洲色图视频网站| 麻豆国产欧美日韩综合精品二区| 成人理论电影网| 欧美人与z0zoxxxx视频| 久久久久久夜精品精品免费| 亚洲欧美一区二区三区极速播放 | 狠狠色丁香婷综合久久| 97久久超碰精品国产| 欧美一级黄色录像| 一区二区三区在线视频观看| 精品一区在线看| 在线观看91精品国产入口| 久久五月婷婷丁香社区| 亚洲小少妇裸体bbw| 国产成人精品一区二| 欧美一区二区三区免费观看视频 | 欧美一级高清片| 亚洲欧美日韩久久| 国模无码大尺度一区二区三区| 在线观看欧美黄色| 国产午夜精品一区二区三区视频 | 欧美午夜电影在线播放| 国产日韩视频一区二区三区| 五月婷婷综合激情| 91亚洲午夜精品久久久久久| 精品国产凹凸成av人网站| 亚洲国产欧美日韩另类综合| 成人h动漫精品一区二| 久久综合久久99| 日韩福利电影在线观看| 日本精品裸体写真集在线观看| 国产三级一区二区三区| 麻豆精品视频在线观看免费| 欧美老人xxxx18| 伊人性伊人情综合网| av在线不卡观看免费观看| 国产丝袜美腿一区二区三区| 狠狠色丁香婷婷综合久久片| 欧美一区二区三区不卡| 日韩精品每日更新| 制服丝袜日韩国产| 亚洲18女电影在线观看| 欧美在线观看一二区| 亚洲欧美一区二区三区久本道91 | 成人a级免费电影| 久久久九九九九| 国产福利精品一区| 中文字幕欧美区| 国产精品99久久久久久似苏梦涵| 欧美电视剧免费观看| 久久精品国产亚洲高清剧情介绍| 欧美日韩美女一区二区| 一区二区在线看| 欧美在线看片a免费观看| 亚洲va欧美va人人爽午夜| 欧美主播一区二区三区| 亚洲成人在线免费| 欧美一区二区三区视频在线| 男女男精品视频| 2023国产一二三区日本精品2022| 国产一区二区调教| 国产精品久线观看视频| 一本色道综合亚洲| 亚洲成在人线在线播放| 69成人精品免费视频| 麻豆91在线播放免费| 国产色产综合色产在线视频| 成人午夜av影视| 亚洲乱码中文字幕| 欧美日韩国产小视频| 午夜私人影院久久久久| 欧美成人艳星乳罩| 国产精品白丝jk白祙喷水网站| 国产精品福利影院| 欧美午夜电影在线播放| 久久精品噜噜噜成人88aⅴ| 久久久久国产免费免费| 91在线无精精品入口| 亚洲妇熟xx妇色黄| 精品免费国产一区二区三区四区| 国产91高潮流白浆在线麻豆|