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

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

?? simulateesl.c

?? 高階sigma-delta調制器設計matlab工具包, 半波帶濾波器設計工具包
?? C
字號:
/* simulateESL.c - A MEX-file for simulating a the element selection logic%[sv,sx,sigma_se,max_sx,max_sy] = simulateESL(v,ntf,M[16],dw[1..],sx0[0..])%Simulate the Element Selection Logic for a multi-element DAC.%Outputs:% sv is an MXN matrix whose columns are the selection vectors.% sx is an orderxM matrix containing the final state of the ESL.% sigma_se is the rms value of the selection error.% max_sx is the maximum absolute value of the state for all modulators.% max_sy is the maximum absolute value of the input to the VQ.%Inputs:% v is a vector of the digital (positive integer) input values.% ntf is the NTF of the element mismatch, given in zero-pole form.% M is the number of unit elements.% dw is the element-weighting vector.% sx0 is matrix whose columns are the initial states of the ESL.*/#include <stdio.h>#include <stdlib.h>#include <math.h>#include "mex.h"#define	NullMatrix	((mxArray *)0)typedef struct { double x; int i; } DoublePlusIndex;/* 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 = "simulateESL";int    MTF_order,	/* The order of the mismatch-shaping TF. */    N,		/* The number of time steps. */    M,		/* The number of unit elemtents. */    OnlyUnitElements = 1,	/* Flag for the usual case of all unit el. */    Want_sx, Want_sigma_se, Want_max_sx, /* Output flags */    *tentative;	/* Used by calculate_sv1() */double     *sv,	/* The selection vector. */    *sy,	/* The input to the vector quantizer, not normalized. */    *se,	/* The selection error, sv-sy(normalized). */    *pv,	/* Pointer into the input array. */    *sx_start,	/* An n by (M+1) circular array containing the state vectors */    *sxc, *sxn,	/* Pointers to the current and next states. */    *sx_end,	/* Pointer to the element past the end of the sx array */    *dw, 	/* The the DAC weighting vector. */    sum_dw,	/* The sum of the elements of dw. */    Sum_se2,	/* The sum of the squares of the selection error */    Max_sx,	/* The maximum of sx. */    Max_sy,	/* The maximum of sy. */    *A,		/* MTF = B/A +1; */    *B;	DoublePlusIndex     *sySorted;	/* Used by calculate_sv2() */#ifdef __STDC__void fatalError(char *s)#elsefatalError(s)char *s;#endif{    char msg[80];    sprintf(msg, "%s: %-.60s", cmdName, s);    mexErrMsgTxt(msg);}#ifdef __STDC__void initialize_sx(const mxArray *M_sx0)#elseinitialize_sx(M_sx0)mxArray *M_sx0;#endif{    int i,j;    double *sx0, *sxp;    sx_start = (double *)mxCalloc((MTF_order+1)*M,sizeof(double));    if( M_sx0 == NullMatrix || mxGetM(M_sx0)==0 || mxIsNaN(*(sx0=mxGetPr(M_sx0))) ) 	/* Calloc sets it to zero. Do nothing. */;    else if( mxGetM(M_sx0)!=MTF_order || mxGetN(M_sx0)!=M )	fatalError("sx0 must be an MTF_order by M matrix.");    else {	sxp = sx_start;	for(j=0; j<M; ++j){	    for(i=0; i<MTF_order; ++i)		*sxp++ = *sx0++;	    sxp++;		/* Skip the bottom (sxMTF_order) row */	    }	}    sxc = sx_start;    sxn = sx_start+MTF_order;    sx_end = sxn+1;}#ifdef __STDC__void initialize_dw(const mxArray *M_dw)#elseinitialize_dw(M_dw)mxArray *M_dw;#endif{    int i;    if( M_dw==NullMatrix || mxGetM(M_dw)==0 || mxIsNaN(*(dw=mxGetPr(M_dw))) ){        /* Empty or NaN argument */	dw = (double *) mxCalloc(M,sizeof(double));	for(i=0; i<M; ++i)	    dw[i] = 1;	}    else if( mxGetM(M_dw)!=M || mxGetN(M_dw)!=1 )	fatalError("dw must be an M by 1 column vector.");    else {	dw = mxGetPr(M_dw);	sum_dw = dw[0];	for(i=1; i<M; ++i){	    sum_dw += dw[i];	    if( dw[i] != dw[0] )		OnlyUnitElements = 0;	    }	if( OnlyUnitElements == 0 ){	    sySorted = (DoublePlusIndex *) mxCalloc(M,sizeof(DoublePlusIndex));	    }	}}/* Calculate the A and B coefficients% B/A = MTF-1 den = poly(poles);A = -den(2:order+1);num = poly(zeros);B =  num(2:order+1)+A;*/#ifdef __STDC__void calculateCoeffs(mxArray *zeros, mxArray *poles)#elsecalculateCoeffs(zeros,poles)mxArray *zeros, *poles;#endif{mxArray *coeffs;double *p1, *p2, *pA;int i;A = (double*)mxCalloc(MTF_order,sizeof(double));B = (double*)mxCalloc(MTF_order,sizeof(double));mexCallMATLAB(1,&coeffs,1,&poles,"poly");for(p1=A, i=0, p2=mxGetPr(coeffs)+1; i<MTF_order; ++i)    *p1++ = -*p2++;mxDestroyArray(coeffs);mexCallMATLAB(1,&coeffs,1,&zeros,"poly");for(i=0, p1=B, p2=mxGetPr(coeffs)+1, pA=A; i<MTF_order; ++i)    *p1++ = *p2++ + *pA++;mxDestroyArray(coeffs);}#ifdef __STDC__void processInputArgs( int nrhs, const mxArray *prhs[] )#elseprocessInputArgs( nrhs, prhs )int nrhs;mxArray *prhs[];#endif{    const mxArray *arg2=prhs[1];    mxArray *zeros, *poles;    /* Verify the rhs (input) arguments */    if( nrhs < 2 )	fatalError("At least two input arguments are needed.");    pv = mxGetPr(prhs[0]);    N = mxGetN(prhs[0]) > mxGetM(prhs[0])? mxGetN(prhs[0]):mxGetM(prhs[0]);    /* Determine the form of the mtf */    if( mxIsClass(arg2,"zpk") ){		/* NTF in zpk form */		if( (zeros=mxGetCell(mxGetField(arg2,0,"z"),0)) == 0 )		    fatalError("No z field in the NTF object.");		if( !mxIsNumeric(zeros) )		    fatalError("The zeros field is not numeric.");		if( (poles=mxGetCell(mxGetField(arg2,0,"p"),0)) == 0 )		    fatalError("No p field in the NTF object.");		if( (MTF_order=mxGetNumberOfElements(zeros)) != mxGetNumberOfElements(poles) )		    fatalError("The number of poles must equal the number of zeros.");	}    else if( mxIsStruct(arg2) ){		/* 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( (MTF_order=mxGetM(zeros)*mxGetN(zeros)) != mxGetM(poles)*mxGetN(poles) )		    fatalError("The number of poles must equal the number of zeros.");	}    else		fatalError("Impromper MTF specification.");	calculateCoeffs(zeros,poles);    if( nrhs >= 3 && mxGetM(prhs[2])>0 && !mxIsNaN(*mxGetPr(prhs[2])) )		M = (int)(*mxGetPr(prhs[2]));    else		M = 16;    initialize_dw(nrhs>3?prhs[3]:NullMatrix);    initialize_sx(nrhs>4?prhs[4]:NullMatrix);}#ifdef __STDC__void allocateSpace(int nlhs, mxArray *plhs[])#elseallocateSpace(nlhs, plhs)int nlhs;mxArray *plhs[];#endif{    Want_sx = Want_sigma_se = Want_max_sx = 0;    switch(nlhs){	case 5:	    plhs[4] = mxCreateDoubleMatrix(1,1,mxREAL);	    Max_sy = 0;	case 4:	    plhs[3] = mxCreateDoubleMatrix(1,1,mxREAL);	    Want_max_sx = 1;	    Max_sx = 0;	case 3:	    plhs[2] = mxCreateDoubleMatrix(1,1,mxREAL);	    Want_sigma_se = 1;	    Sum_se2 = 0;	case 2:	    plhs[1] = mxCreateDoubleMatrix(MTF_order,M,mxREAL);	    Want_sx = 1;	case 1:	case 0:	    plhs[0] = mxCreateDoubleMatrix(M,N,mxREAL);	    sv  = mxGetPr(plhs[0]);	    break;	default:	    fatalError("Too many output arguments.");    }    sy = (double *) mxCalloc(M,sizeof(double));    tentative = (int *) mxCalloc(M,sizeof(int));}#ifdef __STDC__void stuffOutputVariables( int nlhs, mxArray *plhs[] )#elsestuffOutputVariables(nlhs, plhs)mxArray *plhs[];#endif{    switch(nlhs){	case 5:	    *mxGetPr(plhs[4]) = Max_sy;	case 4:	    *mxGetPr(plhs[3]) = Max_sx;	case 3:	    *mxGetPr(plhs[2]) = sqrt(Sum_se2/(M*N));	case 2:{	    /* copy from the sx circular array, one column at a time */	    int i, j;	    double *sx_out = mxGetPr(plhs[1]), *sxp;	    for( j=0; j<M; ++j ){		sxp = sxc + j*(MTF_order+1);		for( i=0; i<MTF_order; ++i ){		    *sx_out++ = *sxp++;		    if( sxp == sx_end )			sxp -= MTF_order+1;		    }		sx_end += MTF_order+1;		}	    }	case 1:	case 0:	    break;	default:	    fatalError("Incorrect number of output arguments.");    }}/* Calculate sy = B * sx */#ifdef __STDC__void calculate_sy(double *sxc)#elsecalculate_sy(sxc)double *sxc;#endif{double *sy_p, *sx_p, *B_p=B, bi;int i,j,MTF_orderp1=MTF_order+1;for( j=0, sy_p=sy; j<M; ++j )    *sy_p++ = 0;for( i=0; i<MTF_order; ++i ){    bi = *B_p++;    for( j=0, sy_p=sy, sx_p=sxc; j<M; ++j ){	*sy_p++ += bi * *sx_p;	sx_p += MTF_orderp1;	}    if( ++sxc == sx_end )	sxc = sx_start;    }}/* Implement the (floating point) vector quantizer for unit elements *//* !! I could create an integer version for even greater speed. */#define INFINITY 1e38void calculate_sv1(){int i, v=(int)(*pv++), num_tentative, need=v, committed_ones=0, itn;double sy_max=-INFINITY, sy_min=INFINITY, *psy;double threshold, thresh_min, thresh_max;double endpoint_offset; if( v<0 || v>M )    fatalError("v is out of the range [0,M]");/* Make all elements of sv tentative, determine sy_max and sy_min */num_tentative = M;for(i=0, psy=sy; i<M; tentative[i++]=-1){    double syi = *psy++;    if( syi > sy_max )	sy_max = syi;    if( syi < sy_min )	sy_min = syi;    }/* Update the global value of Max_sy */if( -sy_min > Max_sy )    Max_sy = -sy_min;if( sy_max > Max_sy )    Max_sy = sy_max;/* Normalize sy to have a minimum value of zero */for(i=0, psy=sy; i<M; ++i, ++psy)    *psy = *psy - sy_min;sy_max -= sy_min;/* Iteratively assign thresholds until sv has v ones *//* Use a scheme that assumes the sy values are uniformly distributed,   over the range [min-offset, max+offset]. *//* See page 58 of Notebook 7 for some scribbles on the subject.*/endpoint_offset = sy_max/(2*(M-1)); threshold = (M-v)*sy_max/(M-1) -endpoint_offset;thresh_min = 0; thresh_max = sy_max; for(itn=0;itn < 10 && thresh_max-thresh_min>0.01; ++itn){    need = v - committed_ones;    for(i=0; i<M; ++i)	if( tentative[i] )	    if( sy[i] > threshold ){		sv[i] = tentative[i] = 1;		--need;	    }	    else {		tentative[i] = -1;		sv[i] = 0;	    }/* FOR DEBUGGING :r simulateESL.mexPrintfs */    if( need == 0 )	break;    else if( need > 0 ){ 	/* Commit the 1s in sv, decrease threshold */	for(i=0; i<M; ++i)	    if( tentative[i] > 0 ){		sv[i] = 1;		tentative[i] = 0;		--num_tentative;		++committed_ones;	    }	thresh_max = threshold;	threshold -= (threshold - (thresh_min-endpoint_offset))*need/num_tentative;    }    else{	/* Commit the 0s in sv, increase threshold */	for(i=0, psy=sy; i<M; ++i)	    if( tentative[i] < 0 ){		sv[i] = 0;		tentative[i] = 0;		--num_tentative;	    }	thresh_min = threshold;	endpoint_offset = 0; 	threshold -= (thresh_max -threshold)*need/num_tentative;    }} /* for() threshold determination loop *//* Arbitrarily invert some of the tentative components of sv.    For compatibility with the .m file, assign ones to the    first components that are "tentative." Since the VQ algorithm    here is different, the code depends on the sign of "need."    */if( need != 0 )	    if( need > 0 )	for(i=0; i<M && need!=0 ; ++i){	    if( tentative[i] ){		sv[i] = 1;		--need;	    }	}    else 	for(i=M-1; i>=0 && need!=0 ; --i){	    if( tentative[i] ){		sv[i] = 0;		++need;	    }	}} /* void calculate_sv1() *//* Code for handling the case of non-unit elements */#ifdef __STDC__int compareDPI(const void *aa, const void *bb)#elseint compareDPI(aa, bb)	/* Designed to yield descending order in sySorted */const void *aa, *bb;#endif{DoublePlusIndex *a=(DoublePlusIndex *)aa, *b=(DoublePlusIndex *)bb;if( a->x < b->x )    return 1;else if( a->x > b->x )    return -1;else     return 0;}#ifdef __STDC__int selectElements(int v_rem, int offset)#elseint selectElements(v_rem, offset)int v_rem, offset;#endif{int i, dwi, eli;if( v_rem == 0 )    return 0;for( i=offset; i<M; ++i ){ /* Try each element in order of desired usage */    eli = sySorted[i].i;    dwi = (int) dw[eli];    if( dwi <= v_rem ){	if( selectElements(v_rem-dwi, i+1) == 0 ){	    sv[eli] = 1;	    return 0;	}    }}return 1;}void calculate_sv2(){int i, v=(int)(*pv++);double min_sy;if( v<0 || v>sum_dw )    fatalError("v is out of the range [0,sum(dw)]");/* Determine element priority according to sy, the desired usage vector    Note that the use of qsort() will cause ties to be resolved in    (according to the man entry) "an unpredictable manner." */for(i=0; i<M; ++i){    sySorted[i].x = sy[i];    sySorted[i].i = i;}qsort( (void*)sySorted, M, sizeof(DoublePlusIndex), compareDPI );min_sy = sySorted[M-1].x;/* User recursion to determine a selection vector which satisfies   the constraint that sv.*dw = v */if( selectElements(v,0) )    fatalError("Internal Error: selectElements() failed");/* Update the global value of Max_sy */if( sySorted[0].x > Max_sy )    Max_sy = sySorted[0].x;if( -min_sy > Max_sy )    Max_sy = -min_sy;/* Normalize sy to have a minimum value of zero */for(i=0; i<M; ++i)    sy[i] -= min_sy;} /* void calculate_sv2() *//* Compute the next component of the state vector *//* sxn = A * sx + (sv-sy); */void calculate_sxn(){double *sxn_p, *sx_p, *sx_pp, *sv_p, *sy_p, *A_p=A;int i,j,MTF_orderp1=MTF_order+1;if( Want_sigma_se ){    double sum_se=0;    for( i=0, sxn_p=sxn, sv_p=sv, sy_p=sy; i<M; ++i ){	double se = *sv_p++ - *sy_p++;	*sxn_p = se;	sxn_p  += MTF_orderp1;	sum_se  += se;	Sum_se2 += se*se;    }    Sum_se2 -= sum_se*sum_se/M;	/* subtract off the mean value of se */}else    for( i=0, sxn_p=sxn, sv_p=sv, sy_p=sy; i<M; ++i ){	*sxn_p = *sv_p++ - *sy_p++;	sxn_p  += MTF_orderp1;	}for( j=0, sx_p=sxc; j<MTF_order; ++j ){    double aj = *A_p++;    for( i=0, sxn_p=sxn, sx_pp=sx_p; i<M; ++i ){	*sxn_p += aj * *sx_pp;	sxn_p  += MTF_orderp1;	sx_pp  += MTF_orderp1;	}    if( ++sx_p == sx_end )	sx_p = sx_start;    }if( Want_max_sx ){    double value;    for( i=0, sxn_p=sxn; i<M; ++i){	value = fabs(*sxn_p);	if( value > Max_sx )	    Max_sx = value;	sxn_p  += MTF_orderp1;    }}} /* calculate_sxn() *//* 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.) */void simulateESL(){int t;void (*calculate_sv)();if( OnlyUnitElements )    calculate_sv = calculate_sv1;else    calculate_sv = calculate_sv2;for( t=0; t<N; ++t ) {    calculate_sy(sxc);    calculate_sv();    calculate_sxn();    /* Advance the state */    sv += M;    sxc = sxn;    if( --sxn < sx_start )	sxn += MTF_order+1;    }}#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{    processInputArgs(nrhs, prhs);    allocateSpace(nlhs, plhs);    simulateESL();    stuffOutputVariables(nlhs, plhs);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品gif动图一区| 亚洲欧洲日韩在线| 欧美视频完全免费看| 99久久777色| av在线不卡电影| 99久久久久免费精品国产| 91麻豆高清视频| 欧美性受极品xxxx喷水| 欧美精品777| 精品国产免费久久| 国产精品三级在线观看| 国产精品久久久久久久久免费桃花| 欧美激情综合网| 亚洲精品免费在线播放| 亚洲国产日韩一区二区| 日本亚洲免费观看| 国产精品一色哟哟哟| 成人黄色av网站在线| 欧美亚州韩日在线看免费版国语版| 欧美性色aⅴ视频一区日韩精品| 欧美视频一区二区| 精品福利在线导航| 亚洲少妇中出一区| 日韩精品免费专区| 国产精品小仙女| 欧美性大战xxxxx久久久| 欧美一区二区三区成人| 久久久久久久综合色一本| 国产精品成人午夜| 喷白浆一区二区| 成人午夜碰碰视频| 6080国产精品一区二区| 国产精品丝袜久久久久久app| 一区二区成人在线观看| 国内精品久久久久影院一蜜桃| 成人激情黄色小说| 日韩亚洲欧美一区二区三区| 国产精品全国免费观看高清| 日精品一区二区| 成人动漫一区二区| 日韩免费一区二区三区在线播放| 亚洲欧美在线aaa| 蜜芽一区二区三区| 在线观看视频一区二区| 久久精品男人天堂av| 亚洲午夜影视影院在线观看| 成人午夜av在线| 精品久久久久久久久久久久包黑料 | 亚洲婷婷在线视频| 麻豆成人免费电影| 精品视频全国免费看| 国产精品欧美一区二区三区| 日本午夜一本久久久综合| 91在线国内视频| 国产日韩精品一区二区三区| 免费成人在线网站| 欧美日韩视频在线观看一区二区三区 | 国产乱码精品1区2区3区| 在线免费观看日本欧美| 国产精品美女久久久久aⅴ| 蜜臀久久99精品久久久久久9 | 香蕉成人伊视频在线观看| 99视频一区二区| 国产欧美一区二区在线| 狠狠狠色丁香婷婷综合久久五月| 91精品婷婷国产综合久久性色| 亚洲精品写真福利| 91麻豆免费看| 一区二区在线观看免费| 色婷婷精品久久二区二区蜜臀av| 中文字幕欧美一| 91一区二区在线观看| 亚洲国产高清在线| 99久久精品免费看国产免费软件| 国产女人18毛片水真多成人如厕| 国产宾馆实践打屁股91| 国产精品福利电影一区二区三区四区| 国产经典欧美精品| 国产精品久久一卡二卡| 99麻豆久久久国产精品免费| 国产精品国产三级国产| 一本色道久久综合精品竹菊| 中文字幕一区二区三区不卡| www.欧美日韩| 亚洲一区视频在线观看视频| 欧美人与z0zoxxxx视频| 麻豆91在线播放| 国产亚洲婷婷免费| 丁香婷婷综合色啪| 亚洲制服丝袜一区| 日韩一级高清毛片| 成人黄色一级视频| 夜夜操天天操亚洲| 欧美一卡二卡在线观看| 国产激情一区二区三区桃花岛亚洲| 国产女人aaa级久久久级 | 洋洋av久久久久久久一区| 色就色 综合激情| 琪琪久久久久日韩精品| 国产情人综合久久777777| 成人毛片老司机大片| 亚洲一区自拍偷拍| 精品福利av导航| 色素色在线综合| 精品一区二区久久| 亚洲免费观看高清完整版在线 | 亚洲地区一二三色| 2022国产精品视频| 色婷婷国产精品久久包臀 | 久久精品国产精品亚洲综合| 久久美女艺术照精彩视频福利播放| 97精品超碰一区二区三区| 日韩激情中文字幕| 136国产福利精品导航| 这里是久久伊人| 色噜噜狠狠一区二区三区果冻| 日本三级韩国三级欧美三级| 国产精品美女一区二区| 51精品久久久久久久蜜臀| 99riav一区二区三区| 国产一区二区剧情av在线| 亚洲图片一区二区| 国产精品美女久久久久久久久久久 | 欧美猛男超大videosgay| 丁香五精品蜜臀久久久久99网站 | 免费欧美在线视频| 一区二区免费在线播放| 国产欧美精品一区二区三区四区| 欧美日韩亚洲高清一区二区| 99精品久久只有精品| 韩国av一区二区三区在线观看| 夜夜揉揉日日人人青青一国产精品 | 国产一区在线观看视频| 性欧美疯狂xxxxbbbb| 综合电影一区二区三区 | 成人视屏免费看| 国内精品免费**视频| 日韩国产成人精品| 图片区小说区区亚洲影院| 亚洲同性gay激情无套| 国产精品久久久久一区二区三区| 亚洲免费视频中文字幕| 亚洲国产电影在线观看| 国产亚洲欧美中文| 国产日韩在线不卡| 国产女人水真多18毛片18精品视频| 26uuu亚洲综合色欧美| 欧美tickle裸体挠脚心vk| 日韩欧美中文字幕制服| 欧美一区二区三区视频免费| 4438x成人网最大色成网站| 在线综合+亚洲+欧美中文字幕| 欧美系列一区二区| 欧美日韩高清在线| 日韩精品在线一区二区| 欧美一区午夜视频在线观看| 7777精品伊人久久久大香线蕉完整版| 欧美自拍偷拍午夜视频| 欧美另类一区二区三区| 欧美一级高清片| 久久五月婷婷丁香社区| 国产色产综合色产在线视频| 国产欧美精品国产国产专区| 亚洲欧美日韩在线不卡| 一区二区三区日本| 日韩国产一区二| 久久99精品久久久久久动态图| 国内外精品视频| 成人激情开心网| 欧美视频一二三区| 欧美不卡一区二区三区| 国产精品拍天天在线| 亚洲影院理伦片| 精品一区二区三区香蕉蜜桃| 国产高清亚洲一区| 日本韩国视频一区二区| 91精品国产综合久久久久久久| 久久综合九色欧美综合狠狠| 国产精品久久久久久久久动漫| 一区二区三区四区亚洲| 麻豆91在线看| 色综合色狠狠综合色| 日韩精品专区在线影院观看| 国产精品久久一卡二卡| 五月婷婷欧美视频| 成+人+亚洲+综合天堂| 欧美精品乱码久久久久久| 国产精品无圣光一区二区| 性久久久久久久久久久久| 成人精品gif动图一区| 欧美一级二级在线观看| 成人欧美一区二区三区1314| 性久久久久久久久| 成人精品鲁一区一区二区| 欧美一区二区免费观在线| 亚洲欧美激情一区二区| 国产一区久久久| 91精品欧美一区二区三区综合在| 中文字幕中文字幕一区二区| 免费久久99精品国产|