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

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

?? mai_processor.cpp

?? 用matlab程序實現WCDMA系統的仿真
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "C:\MATLABR11\extern\include\mex.h"
#include "MAI_Mpath_Channel.cpp"
#include "ScrambleLong1.cpp"
#include "GenUplinkSignal.cpp"


#define CHIPS_PER_FRAME	38400
#define CONTROL_BITS	150

extern void scramble_long(unsigned long, short int *, short int *);
extern void GenWCDMAUplinkSignal(double *,double *,double *,double *,
	  					         double *,double *,unsigned ,double *,unsigned ,
						         unsigned ,double *,double *,unsigned );
extern void MAI_Mpath_Channel(double * ,double *,unsigned long,
						      unsigned long * ,unsigned long ,double *,double ,unsigned long ,
						      double *,double *);

void MAI_Processor(double *, double *, unsigned long, double *, double *,
				   unsigned long, const mxArray *, unsigned, unsigned long *,
				   unsigned long, double *, double *, unsigned, double, 
				   unsigned, unsigned, unsigned, double *, double *, 
				   unsigned long, double *, double *, unsigned long,bool);

void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
/***************************************************************************************
* void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
*
* Copyright 2002 The Mobile and Portable Radio Research Group
*
* Gateway function for MAI_Processor.  Supports the passing of seven or nine input 
* parameters and two output parameters.  If nine input parameters are passed, then the 
* funciton assumes that the parameters for describing a a multipath channel are passed.  
* In this case the multipath channel is applied to the MAI.  If only seven parameters are 
* passed, then the function assumes that the parameters for describing a multipath 
* channel are not passed.  In this case the multipath channel is not applied to the MAI
* The inpup parameters are
*		CurrentSignal		Matrix containing the interfering signals associated with 
*							the current frame
*		LastSignal			Matrix containing the interfering signals associated wit
*							the previous frame
*		ChanCode			The Channel Code Matrix
*		SamplesPerChip		Contains the oversampling factor
*		PulseShape			Vector containing the imulse response transmitter filter
*		MaxOffset			The maximum allowable offset for each interferer in ters
*		MPathDelay			Vector containing the delay (in terms of sample durations)
*							for each of the multipath components.  This is only needed
*							to determine the maximum delay, which is necessary to ensure
*							that the array is of the correct size
* (Optional Parameters)
*		MPathAmp			Vector containing the energ in each multipath component
*		fDoppler			Contains the Doppler rate associated with all multipath 
*							components
*							of Chips
*
* The two output parameters are
*		MAI_Signal			Matrix containing the MAI signal from each interferer
*		NextSignal			Matrix containign the interferering signals associated 
*							with the next frame
***************************************************************************************/
{
	const mxArray *tprhs,*tplhs;
	double *mexRealCurrentSigPtr,*mexImagCurrentSigPtr;
	double *mexRealLastSigPtr,*mexImagLastSigPtr;
	unsigned long mexNSig;
	const mxArray *mexChanCodePtr;
	unsigned mexNumInterferers,mexSF;
	double *mexDblDelayPtr,*TempDbleDelayPtr;
	unsigned long *mexDelayPtr,*TempDelayPtr,mexNumDelays;
	double *mexMPathAmpPtr,mexfDoppler;
	unsigned mexSamplesPerChip;
	double *mexPulseShapePtr;
	unsigned mexPulseLength,mexMaxOffset;
	double *mexRealNextSigPtr,*mexImagNextSigPtr;
	double *mexRealMAISigPtr,*mexImagMAISigPtr;
	unsigned mexMaxDelay;
	unsigned long mexN_MAISignal;
	unsigned mrows,ncols,mrowsA,ncolsB;
	unsigned i;
	double dbl_value, fraction, integer_portion;
	bool M_PATH_FLAG;

		//Check for the proper number of input and output arguments
	if ((nrhs != 9) && (nrhs != 7)) mexErrMsgTxt("\nEither NINE or SEVEN input arguemnts are required!!\n");
	else if (nlhs != 2 ) mexErrMsgTxt("\nExactly TWO output arguements arerequired!!\n");

	//CurrentSignal
	//Must be a double, complex and a vector or Matrix
	tprhs = *prhs;
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || !mxIsComplex(tprhs) || (mrows ==1 && ncols ==1) )
		mexErrMsgTxt("\nCurrentSignal must be a complex vector or matrix\n");
	mexNumInterferers = mrows;
	mexNSig = ncols;
	mexRealCurrentSigPtr = mxGetPr(tprhs);
	mexImagCurrentSigPtr = mxGetPi(tprhs);

	//LastSignal
	//Must be a double, complex and a vector or Matrix
	tprhs = *(prhs+1);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || !mxIsComplex(tprhs) || (mrows ==1 && ncols ==1) )
		mexErrMsgTxt("\nLastSignal must be a complex vector or matrix\n");
	if ( (mrows != mexNumInterferers) || (ncols != mexNSig))
		mexErrMsgTxt("\nLastSignal and Current Signal Must have the same dimensions\n");
	mexRealLastSigPtr = mxGetPr(tprhs);
	mexImagLastSigPtr = mxGetPi(tprhs);
	
	//ChanCode
	//Must be a real valued, square matrix
	tprhs = *(prhs+2);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows ==1 && ncols ==1) || (mrows != ncols))
		mexErrMsgTxt("\nChanCode must be a real-valued, square matrix\n");
	mexChanCodePtr = tprhs;
	mexSF = mrows;

	//SamplesPerChip
	//Must be a dobule, real valued scalar
	tprhs = *(prhs+3);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows !=1) || (ncols !=1) )
		mexErrMsgTxt("\nSampelsPerChip must be a real-valued, scalar\n");
	dbl_value=mxGetScalar(tprhs);
	fraction=modf(dbl_value,&integer_portion);
	mexSamplesPerChip = (unsigned ) integer_portion;
	if (fraction != 0) mexErrMsgTxt("\nSamplesPerChip must be an integer\n");

	//PulseShape
	//Must be a dobule, real valued vector
	tprhs = *(prhs+4);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows ==1 && ncols ==1) || ((mrows > 1) && (ncols > 1)))
		mexErrMsgTxt("\nPulseShape must be a real-valued, vector\n");
	if (mrows >= ncols) mexPulseLength = mrows;
	else mexPulseLength = ncols;
	mexPulseShapePtr = mxGetPr(tprhs);
	
	//MaxOffset
	//Must be a dobule, real valued scalar
	tprhs = *(prhs+5);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows !=1) || (ncols !=1) )
		mexErrMsgTxt("\nMaxOffset must be a real-valued, scalar\n");
	dbl_value=mxGetScalar(tprhs);
	fraction=modf(dbl_value,&integer_portion);
	mexMaxOffset = (unsigned) integer_portion;
	if (fraction != 0) mexErrMsgTxt("\nMaxOffset must be an integer\n");

	//MPathDelay
	//Must be a dobule, real valued vector or scalar
	tprhs = *(prhs+6);
	mrows = (unsigned) mxGetM(tprhs);
	ncols = (unsigned) mxGetN(tprhs);
	if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || ((mrows > 1) && (ncols > 1)))
		mexErrMsgTxt("\nMPathDelay must be a real-valued, vector or scalar\n");
	if (mrows >= ncols) mexNumDelays = mrows;
	else mexNumDelays = ncols;
	mexDblDelayPtr = mxGetPr(tprhs);

	mexDelayPtr = (unsigned long *) mxCalloc(mexNumDelays,sizeof(unsigned long));
	if (mexDelayPtr == NULL)
		mexErrMsgTxt("\nAllocation of mexDelay ptr array failed--exiting\n");

	TempDbleDelayPtr = mexDblDelayPtr;
	TempDelayPtr = mexDelayPtr;
	for (i = 0; i < mexNumDelays; i++) *TempDelayPtr++ = (unsigned long) *TempDbleDelayPtr++;

	mexMaxDelay = 0;
	TempDelayPtr = mexDelayPtr;
	for (i=0; i<mexNumDelays; i++)
	{
		if (*TempDelayPtr > mexMaxDelay) mexMaxDelay = *TempDelayPtr++;
		else TempDelayPtr++;
	}

	if (nrhs == 9)
	{
		//MPathAmp
		//Must be a dobule, real valued vector
		tprhs = *(prhs+7);
		mrowsA = (unsigned) mxGetM(tprhs);
		ncolsB = (unsigned) mxGetN(tprhs);
		if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows ==1 && ncols ==1) || ((mrows > 1) && (ncols > 1)))
			mexErrMsgTxt("\nMPathAmp must be a real-valued, vector\n");
		if ( (mrowsA != mrows) || (ncolsB != ncols))
			mexErrMsgTxt("\nMPathDelay and MPathAmp Must have the same dimensions\n");
		mexMPathAmpPtr = mxGetPr(tprhs);

		//fDoppler
		//Must be a dobule, real valued scalar
		tprhs = *(prhs+8);
		mrows = (unsigned) mxGetM(tprhs);
		ncols = (unsigned) mxGetN(tprhs);
		if ( !mxIsDouble(tprhs) || mxIsComplex(tprhs) || (mrows !=1) || (ncols !=1) )
		mexErrMsgTxt("\nfDoppler must be a real-valued, scalar\n");
		mexfDoppler = mxGetScalar(tprhs);
		M_PATH_FLAG = true;
	}
	else
	{
		mexMPathAmpPtr = NULL;
		mexfDoppler = NULL;
		M_PATH_FLAG = false;
	}
	

	mexN_MAISignal = mexNSig + mexMaxDelay;

	
	*plhs = mxCreateDoubleMatrix(1,mexN_MAISignal,mxCOMPLEX);
	tplhs = *plhs;
	if ( tplhs == NULL)
		mexErrMsgTxt("\n MAI_Signal Matrix Could Not be Created!!--Exiting\n");
	mexRealMAISigPtr = mxGetPr(tplhs);
	mexImagMAISigPtr = mxGetPi(tplhs);

	
	*(plhs+1) = mxCreateDoubleMatrix(mexNumInterferers,mexNSig,mxCOMPLEX);
	tplhs = *(plhs+1);
	if ( tplhs == NULL)
		mexErrMsgTxt("\n NextSignal Matrix Could Not be Created!!--Exiting\n");
	mexRealNextSigPtr = mxGetPr(tplhs);
	mexImagNextSigPtr = mxGetPi(tplhs);

	MAI_Processor(mexRealCurrentSigPtr,mexImagCurrentSigPtr,mexNSig,
				   mexRealLastSigPtr,mexImagLastSigPtr,mexNSig,
				   mexChanCodePtr,mexSF,mexDelayPtr,mexNumDelays,
				   mexMPathAmpPtr,
				   mexPulseShapePtr,mexPulseLength,mexfDoppler,mexSamplesPerChip,
				   mexMaxOffset,mexNumInterferers,
				   mexRealNextSigPtr,mexImagNextSigPtr,mexNSig,
				   mexRealMAISigPtr, mexImagMAISigPtr, mexN_MAISignal,
				   M_PATH_FLAG);
	mxFree(mexDelayPtr);
}



void MAI_Processor(double *RealCurrentSignalPtr,double *ImagCurrentSignalPtr,unsigned long NCurrentSignal,
				   double *RealLastSignalPtr,double *ImagLastSignalPtr,unsigned long NLastSignal,
				   const mxArray *mxChanCodePtr,unsigned SF,unsigned long *DelayPtr,unsigned long NumDelays,
				   double *MPathAmpPtr,
				   double *PulseShapePtr,unsigned PulseLength,double fDoppler,unsigned SamplesPerChip,
				   unsigned MaxOffset,unsigned NumInterferers,
				   double *RealNextSignalPtr,double *ImagNextSignalPtr,unsigned long NNextSignal,
				   double *RealMAISignalPtr, double *ImagMAISignalPtr, unsigned long N_MAISignal,
				   bool M_PATH_FLAG)
/***********************************************************************************************************
/void MAI_Processor(double *RealCurrentSignalPtr,double *ImagCurrentSignalPtr,unsigned long NCurrentSignal,
/				   double *RealLastSignalPtr,double *ImagLastSignalPtr,unsigned long NLastSignal,
/				   mxArray *mxChanCodePtr,double *DelayPtr,double *MPathAmpPtr,double *PulseShapePtr,
/				   double fDoppler,unsigned SamplesPerChip,unsigned MaxOffset,unsigned NumInterferers,
/				   double *RealNextSignalPtr,double *ImagNextSignalPtr,unsigned long NNextSignal,
/				   double *RealMAISignalPtr, double *ImagMAISignalPtr, unsigned long N_MAISignal,
/                  bool M_PATH_FLAG)
/
/ Copyright 2002 The Mobile and Portable Radio Research Group
/
/The funciton generates the Mutual Access Interference signals for each frame,  Each intererer has an 
/offset, which is defined in units of chips.  For each interferer, the datat and control bits are 
/generated at random, spread with the channel code and then scrambled with a different code per 
/interferer.  The resulting froma is then filtered ad processed throug the channel defined by *DelayPtr
/and *MPathAmpPtr.  Once this is done for each interferer, the signals are then added to create 
/the MAI signal
/
/Parameters
/	Input
/		RealCurrentSignalPtr	*double		Pointer to the matrix storing the real part of the 
/											MAI signals associated with the current frame.  Note that
/											this and all other signal arrays contain the signals for all
/											"NumInterferers" Interferers.  Hence this array and all other
/											arrays are of length "NumInterferers*NCurrentSignal"
/		ImagCurrentSignalPtr	*double		Pointer to array string the imaginary part of the MAI 
/											signals associated with the current frame.
/		NCurrentSignal		unsigned long	Contains the length of an MAI signal for  one interferer
/		RealLastSignalPtr	*double			Pointer to the matrix storing the real part of the 
/											MAI signals associated with the previous frame.  
/		ImagLastSignalPtr	*double			Pointer to array string the imaginary part of the MAI 
/											signals associated with the previous frame.
/		NLastSignal			unsigned long	Contains the length of an MAI signal for  one interferer
/		mxChanCodePtr		*mxArray		Pointer to a SF*SF array the contains the 
/											channelization code for the interferers.
/		SF					unsigned		Spreading Factor
/		DelayPtr			*unsigned long	Pointer to the array that contains the delay of each 
/											multipath component
/		NumDelays			unsigned long	Contains the number of multipath delay componenets
/		MPathAmpPtr			*double			Pointer to the array that contains the average energy 
/											for each multipath componnent
/		PulseShapePtr		*double			Pointer to the transmitter pulse shape.
/		PulseLength			unsigned		Length of transmiter pulse shape
/		fDoppler			double			Stores the Doppler Rate
/		SamplesPerChip		unsigned		Stores the number of signal samples per chip
/		MaxOffset			unsigned		The maximum allowable offset for each interferer in 
/											terms of chips
/		NumInterferers		unsigned		The number of interferers
/		N_MAISignal			unsinged long	Length of the combined MAI signal/
/		NNextSignal			unsigned long	Contains the length of an MAI signal for  one interferer
/	Output
/		RealNextSignalPtr	*double			Pointer to the matrix storing the real part of the 
/											MAI signals associated with the next frame.  
/		ImagNextSignalPtr	*double			Pointer to array string the imaginary part of the MAI 
/											signals associated with the next frame.
/		RealMAISignal		*double			Pointer to the matrix storing the real part 
/											of the combined MAI signal
/		ImagMAISignal		*double			Pointer to the matrix storing the imaginary part of the 
/											combined MAI signal
/***********************************************************************************************************/
{
	double *TempRealCurrentPtr,*TempImagCurrentPtr;
	double *TempRealLastPtr,*TempImagLastPtr;
	double *TempRealNextPtr,*TempImagNextPtr;
	unsigned long *TempDelayPtr;
	double *TempRealMAIPtr,*TempImagMAIPtr;
	unsigned MaxDelay;
	double *ControlBitsPtr,*TempControlBitsPtr;
	unsigned long ScrambleCodeNumber;
	double *RealScrambleCodePtr, *ImagScrambleCodePtr, *TmpRealScrambleCodePtr, *TmpImagScrambleCodePtr;
	short int  *RealCodePtr, *ImagCodePtr, *TmpRealCodePtr, *TmpImagCodePtr;
	mxArray *mxScrambleCodePtr,*mxNumChanPtr;
	mxArray *mxLeftHandSide[5],*mxRightHandSide[10];
	int N_lhs,N_rhs;
	int ErrCode;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区小说| 亚洲另类一区二区| 中文字幕亚洲区| 日本欧美韩国一区三区| 东方aⅴ免费观看久久av| 欧美日韩国产精选| 国产精品久久一级| 久久精品国产一区二区三区免费看 | 久久久噜噜噜久久中文字幕色伊伊| 国产精品久久影院| 久久99精品网久久| 欧美色爱综合网| 综合久久久久久| 成人午夜视频在线观看| 日韩欧美精品三级| 亚洲va欧美va人人爽午夜| 成人a区在线观看| 久久久久亚洲蜜桃| 极品瑜伽女神91| 欧美一区午夜视频在线观看| 夜夜操天天操亚洲| 91麻豆123| 国产精品久久免费看| 国产高清不卡一区| 精品国产自在久精品国产| 日韩黄色片在线观看| 欧美日韩一区三区| 一区二区三区四区国产精品| 岛国精品在线观看| 国产丝袜美腿一区二区三区| 久久爱另类一区二区小说| 欧美一区二区女人| 日韩电影免费一区| 91精品国产综合久久国产大片| 亚洲午夜免费福利视频| 欧美综合亚洲图片综合区| 亚洲丝袜另类动漫二区| 91视频国产观看| 一区二区三区在线视频观看58| 99久久精品国产麻豆演员表| 亚洲欧洲一区二区三区| 91小视频免费看| 伊人婷婷欧美激情| 欧美午夜在线观看| 午夜在线成人av| 欧美一区二区三区小说| 麻豆精品在线看| 日韩精品一区二区三区视频在线观看| 欧美aaa在线| 2020国产精品自拍| 成人妖精视频yjsp地址| 亚洲美女视频在线观看| 欧美在线视频不卡| 蜜桃传媒麻豆第一区在线观看| 欧美一级xxx| 国产成人综合亚洲网站| 国产精品美女视频| 欧美中文字幕一区| 久久精品99国产精品| 国产农村妇女毛片精品久久麻豆 | 亚洲女爱视频在线| 欧美日韩中文一区| 久久国产麻豆精品| 国产精品妹子av| 欧美三级日韩在线| 精品亚洲porn| 成人欧美一区二区三区黑人麻豆 | 欧美在线视频全部完| 精品一区二区综合| 综合久久一区二区三区| 91精品免费在线| 成人美女视频在线观看18| 亚洲一区二区三区小说| 欧美mv日韩mv| 色欧美片视频在线观看在线视频| 午夜精品一区二区三区三上悠亚 | 亚洲国产精品二十页| 在线这里只有精品| 国产一区二区h| 亚洲不卡一区二区三区| 中文字幕精品一区二区三区精品| 欧美少妇一区二区| 国产传媒久久文化传媒| 亚洲成人综合网站| 国产精品网友自拍| 日韩精品专区在线| 欧美性感一类影片在线播放| 高清beeg欧美| 久久精品国产亚洲高清剧情介绍 | 欧美日韩卡一卡二| 波多野洁衣一区| 精品亚洲成a人在线观看| 亚洲午夜免费视频| 亚洲色图清纯唯美| 久久久久久久久久电影| 7799精品视频| 色综合天天天天做夜夜夜夜做| 国产美女视频一区| 奇米精品一区二区三区在线观看 | 在线一区二区三区四区| 大胆亚洲人体视频| 国内精品视频666| 天堂影院一区二区| 亚洲精品视频在线观看免费| 国产日韩精品一区二区浪潮av| 5月丁香婷婷综合| 欧美性生活一区| thepron国产精品| 国产成人在线视频网址| 激情小说欧美图片| 老司机精品视频导航| 奇米精品一区二区三区四区| 亚洲国产成人高清精品| 有码一区二区三区| 夜夜嗨av一区二区三区网页| 亚洲欧美日韩精品久久久久| 国产精品福利一区| 亚洲欧美偷拍卡通变态| 椎名由奈av一区二区三区| 国产精品欧美久久久久一区二区| 久久精品在这里| 中文字幕欧美区| 中文字幕中文字幕一区二区| 欧美国产精品中文字幕| 中文一区在线播放| 亚洲同性gay激情无套| 亚洲激情中文1区| 亚洲制服丝袜一区| 日日欢夜夜爽一区| 麻豆国产精品777777在线| 久久国产综合精品| 国产成人亚洲综合a∨婷婷图片 | 国产日韩欧美不卡| 中文字幕一区二区三区蜜月 | 国产成人午夜视频| 99精品1区2区| 欧美性淫爽ww久久久久无| 69成人精品免费视频| 精品播放一区二区| 中文字幕免费不卡| 亚洲欧美日本在线| 男人的天堂亚洲一区| 国产乱人伦精品一区二区在线观看| 国产精品正在播放| 日本道免费精品一区二区三区| 欧美日韩国产一区| 久久久五月婷婷| 亚洲欧美日韩在线| 日av在线不卡| 成人精品视频.| 欧美三级欧美一级| 久久久久成人黄色影片| 亚洲免费观看高清完整| 日本欧美韩国一区三区| av欧美精品.com| 日韩欧美电影一区| 亚洲欧洲一区二区在线播放| 日本午夜一区二区| 99久久99久久精品免费看蜜桃| 欧美三级电影一区| 欧美国产日韩在线观看| 午夜视频在线观看一区二区三区 | 岛国av在线一区| 欧美疯狂做受xxxx富婆| 久久综合狠狠综合久久综合88| 成人免费在线视频观看| 老司机免费视频一区二区三区| 91老司机福利 在线| 精品少妇一区二区三区视频免付费| 亚洲免费在线视频| 国产精品综合在线视频| 欧美日韩精品欧美日韩精品一综合| 久久久久成人黄色影片| 午夜欧美2019年伦理| 91影视在线播放| 国产亚洲精品精华液| 日韩av电影一区| 在线观看日韩电影| 中文字幕中文字幕中文字幕亚洲无线 | 日韩精品乱码av一区二区| 成人激情视频网站| 精品粉嫩超白一线天av| 亚洲成av人片一区二区| 91香蕉视频污| 中文字幕欧美国产| 国内精品免费**视频| 91精品综合久久久久久| 一区二区三区日韩欧美精品 | 亚洲国产成人私人影院tom| 九一九一国产精品| 欧美一区二区三区免费| 亚洲午夜精品17c| 一本大道av一区二区在线播放 | 91精选在线观看| 亚洲影院理伦片| 91久久精品午夜一区二区| 亚洲视频在线观看三级| 97久久精品人人爽人人爽蜜臀| 国产精品久久久久久一区二区三区| 国产中文一区二区三区|