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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rayleigh_fad.c

?? ofdm的完整系統(tǒng)模型,包含信道參數(shù),多徑模型,doppler頻移等都可以自由修改!是您做仿真的有力幫助.c語言運(yùn)行速度快!
?? C
字號:
#include "cgs.h"

long	cgs_noiseseed;

void initial_flat(fad_params)
FadParams *fad_params;
{
	double	fr;
	double	*cp, sum, half = 0.5 * (fad_params->P_filter_len-1);
	int	i;
	
	if (strcmp(fad_params->P_interpolate, "yes") == 0 && fad_params->P_int_factor > 1)
		fr = PI2 * fad_params->P_fd * fad_params->P_int_factor / fad_params->P_s_freq;
	else
		fr = PI2 * fad_params->P_fd / fad_params->P_s_freq;
		
	switch(fad_params->P_window)
	{
		case  BLACKMAN: 
			fad_params->S_scoef = DvGenerate(OvBLACKMAN, fad_params->P_filter_len, NULL);
			break;
		case BARTLETT : 
			fad_params->S_scoef = DvGenerate(OvBARTLETT, fad_params->P_filter_len, NULL);
			break;
		case HAMMING  : 
			fad_params->S_scoef = DvGenerate(OvHAMMING, fad_params->P_filter_len, NULL);
			break;
		case HANNING : 
			fad_params->S_scoef = DvGenerate(OvHANNING, fad_params->P_filter_len, NULL);
			break;
		case RECTANGLAR : 
			fad_params->S_scoef = OvAlloc(fad_params->P_filter_len, NULL);
			Dvfill(1.0, fad_params->S_scoef);
			break;
	}
	
	//Generate the impulse response
	cp = (double *) OvGetStart(fad_params->S_scoef);
	#ifdef U_SPECTRUM
	{
		for (i = 0; i < fad_params->P_filter_len; i++) {
			sum = fabs(fr * (i - half));
			if (sum == 0.0) {
				*cp++ *= J25(1.0e-12) * 1000.0;
			}
			else {
				*cp++ *= J25(sum) / pow(sum, 0.25);
			}
		}		
	}
	#else
	{
		double magi = sqrt(2.0* fad_params->P_fd);
		for (i = 0; i < fad_params->P_filter_len; i++) {
			sum = fabs(fr * (i - half));
			if (sum == 0.0) {
				*cp++ *= magi;
			}
			else {
				*cp++ *= magi * sin(sum) / sum ;
			}
		}
	}
	#endif
	
	
	if(strcmp(fad_params->P_norm, "yes") == 0) {
   		Dvdot(fad_params->S_scoef, fad_params->S_scoef, &sum);
		Dvscale(sqrt(0.5 * fad_params->P_norm_power/sum), fad_params->S_scoef, fad_params->S_scoef);
	}
	else{
		Dvcsum(fad_params->S_scoef, &sum);
		Dvscale(sqrt(0.5) * fad_params->P_gain/sum, fad_params->S_scoef, fad_params->S_scoef);
	}


	fad_params->S_stater = OvAlloc(fad_params->P_filter_len, NULL);
	fad_params->S_statei = OvAlloc(fad_params->P_filter_len, NULL);
	
	if(strcmp(fad_params->P_interpolate, "yes") == 0 && fad_params->P_int_factor > 1) {
		fad_params->S_intrp = OvAlloc(fad_params->P_nipts * fad_params->P_int_factor, NULL);
		filtGenWSincLpf(fad_params->S_intrp, PI / fad_params->P_int_factor, (double) fad_params->P_int_factor);

		OvSetStepSize(fad_params->S_intrp, fad_params->P_int_factor);
		OvSetLength(fad_params->S_intrp, fad_params->P_nipts);
		fad_params->S_istater = OvAlloc(fad_params->P_nipts, NULL);
		fad_params->S_istatei = OvAlloc(fad_params->P_nipts, NULL);
		fad_params->S_cnt = 0;
	}
	
/*
 *  Fill up the state vectors
 */
	{
		double	x;
		double	*sr = (double *) OvGetStart(fad_params->S_stater);
		double	*si = (double *) OvGetStart(fad_params->S_statei);
		int	i, n = OvGetLength(fad_params->S_stater);

		for (i = 0; i < n; i++) {
			*sr++ = noiseWGN(&cgs_noiseseed);
			*si++ = noiseWGN(&cgs_noiseseed);
		}
		
		if (strcmp(fad_params->P_interpolate, "yes") == 0 && fad_params->P_int_factor > 1) {
			sr = ((double *) OvGetEnd(fad_params->S_istater)) - 1;
			si = ((double *) OvGetEnd(fad_params->S_istatei)) - 1;
			for (i = 0; i < fad_params->P_nipts; i++) {
				x = noiseWGN(&cgs_noiseseed);
				*sr-- = Dvfir(x, fad_params->S_stater, fad_params->S_scoef);
				x = noiseWGN(&cgs_noiseseed);
				*si-- = Dvfir(x, fad_params->S_statei, fad_params->S_scoef);
			}
		}
	}

}


Complex rayleigh_flat(cpx_in, fad_params)
Complex cpx_in;
FadParams *fad_params;
{

	Complex	w, fad_out;
	double	v;
	
	if(strcmp(fad_params->P_interpolate, "yes") == 0 && fad_params->P_int_factor > 1) {
		if (fad_params->S_cnt-- < 2) {
			fad_params->S_cnt = fad_params->P_int_factor;
			v = noiseWGN(&cgs_noiseseed);
			w.real = Dvfir(v, fad_params->S_stater, fad_params->S_scoef);
			v = noiseWGN(&cgs_noiseseed);
			w.imag = Dvfir(v, fad_params->S_statei, fad_params->S_scoef);
			OvSetVirtStart(fad_params->S_intrp, OvGetStart(fad_params->S_intrp));
			w.real = Dvfir2(w.real, fad_params->S_istater, fad_params->S_intrp);
			w.imag = Dvfir2(w.imag, fad_params->S_istatei, fad_params->S_intrp);
		}
		else {
			OvSetVirtStart(fad_params->S_intrp, OvGetVirtStart(fad_params->S_intrp) + sizeof(double));
			Dvdot(fad_params->S_istater, fad_params->S_intrp, &w.real);
			Dvdot(fad_params->S_istatei, fad_params->S_intrp, &w.imag);
		}             
	}
	else {
		v = noiseWGN(&cgs_noiseseed);
		w.real = Dvfir(v, fad_params->S_stater, fad_params->S_scoef);
		v = noiseWGN(&cgs_noiseseed);
		w.imag = Dvfir(v, fad_params->S_statei, fad_params->S_scoef);	
	}
		
		
	fad_out.real = w.real * cpx_in.real - w.imag * cpx_in.imag;
	fad_out.imag = w.real * cpx_in.imag + w.imag * cpx_in.real;
	
	return fad_out;

}

void initial_sel(ray_params)
RayParams *ray_params;
{
	int i, nv_delay[12];
	double f_doppler, absv_pow[12], total_pow;
	long interpolater_len;
	
	/* initial noise seed for the same channel of each loop */
	cgs_noiseseed = 1550;

	total_pow = 0;
	
	// delay and power of each path
	#ifdef CHNANNEL_COST207
	{
		double factor_a;
		factor_a = 3 * log(10.0) / MAX_DELAY;
		for (i = 0; i < NUM_MULTIPATH; i++) {
			nv_delay[i] = (int) floor(i * MAX_DELAY * CH_SAMPLE_RATE / (NUM_MULTIPATH-1) + 0.5);
			//absv_pow[i] = factor_a * exp(-factor_a*nv_delay[i]/CH_SAMPLE_RATE) / (1-exp(-factor_a*MAX_DELAY));
			absv_pow[i] = exp(-factor_a*nv_delay[i]/CH_SAMPLE_RATE);	// power relative to first path
			total_pow = total_pow + absv_pow[i];
		}
		for (i = NUM_MULTIPATH; i < 12; i++) {
			nv_delay[i] = 0;
			absv_pow[i] = 0;
		}
	}
	#else
	{
		for (i = 0; i < NUM_MULTIPATH; i++) {
			nv_delay[i] = (int) floor(vec_delay_t[i] * CH_SAMPLE_RATE + 0.5);
			absv_pow[i] = pow(10.0, vec_power_db[i]/10.0);
			total_pow = total_pow + absv_pow[i];
		}
		for (i = NUM_MULTIPATH; i < 12; i++) {
			nv_delay[i] = 0;
			absv_pow[i] = 0;
		}
	}
	#endif
	
	// fading channel normalized gain
	ray_params->Ch_Norm_Factor = 1.0 / sqrt(total_pow);
	
	// doppler frequency
	#ifdef FD_CACULATE
		f_doppler = (CH_CARRIER_FREQ * CH_MOBILE_SPEED) / (3.6 * 3.0e8);
	#else
		f_doppler = CH_DOPPLER_FREQ;
	#endif
	
	// interpolater length
	#ifdef FD_NORMALIZE
		interpolater_len = (long) floor(FD_NORMALIZE*CH_SAMPLE_RATE/f_doppler + 0.5);
	#else
		interpolater_len = CH_INTERPOLATE_LEN;
	#endif		
	
	// initial each filter's paramter
	for (i = 0; i < NUM_MULTIPATH; i++) {
		ray_params->fad_params[i].delay_n = nv_delay[i];
		ray_params->fad_params[i].P_s_freq = CH_SAMPLE_RATE;
		ray_params->fad_params[i].P_fd = f_doppler;
		ray_params->fad_params[i].P_int_factor = interpolater_len;
		ray_params->fad_params[i].P_filter_len = CH_FILTER_LEN;
		ray_params->fad_params[i].P_nipts = CH_INTERPOLATE_NUM;
		ray_params->fad_params[i].P_gain = sqrt(absv_pow[i]);
		ray_params->fad_params[i].P_norm_power = absv_pow[i];
		ray_params->fad_params[i].P_window = CH_WINDOW;
		strcpy(ray_params->fad_params[i].P_norm, CH_IF_NORMALIZE);
		strcpy(ray_params->fad_params[i].P_interpolate, CH_IF_INTERPOLATE);
	}

	// initial each filter's state 
	for (i = 0; i < NUM_MULTIPATH; i++) {
		initial_flat(&(ray_params->fad_params[i]));
	}
	
	// initial circular buffer
	ray_params->Data_Buff = OvAlloc((nv_delay[NUM_MULTIPATH-1] + 1)*2, NULL);
	
	// logfile
	#ifdef LOG_SCOEF_FILE
	{
		FILE *fp_scoef;
		//char *log_scoef = LOG_SCOEF_FILE;
		double *coef_p = (double *) OvGetStart(ray_params->fad_params[0].S_scoef);
		
		fp_scoef = fopen(LOG_SCOEF_FILE, "w");
		for (i = 0; i < OvGetLength(ray_params->fad_params[0].S_scoef); i++) {
			fprintf(fp_scoef, "%f\n", *coef_p);
			coef_p++;
		}
		fclose(fp_scoef);
	}
	#endif
	
}


Complex rayleigh_sel(cpx_in, ray_params)
Complex		cpx_in;
RayParams	*ray_params;
{
	int i;
	Complex sum, filt_out;
	
	register Complex *sp = (Complex *) ray_params->Data_Buff->curr_loc;
	register Complex *se = (Complex *) ray_params->Data_Buff->virtend;
	register Complex *cur_idx = (Complex *) ray_params->Data_Buff->curr_loc;
	
 	// update the circular buffer pointer.
	if (sp-- <= (Complex *) ray_params->Data_Buff->virtstart) {
		sp = se - 1;
	}
	*sp = cpx_in;
	ray_params->Data_Buff->curr_loc = (char *) sp;
	
	// pass to channel
	sum.real = 0;
	sum.imag = 0;
	
	for (i = 0; i < NUM_MULTIPATH; i++) {
		cur_idx = sp + ray_params->fad_params[i].delay_n;
		if (cur_idx >= se) cur_idx = ((Complex *) ray_params->Data_Buff->virtstart) + (cur_idx - se);
		filt_out = rayleigh_flat(*cur_idx, &(ray_params->fad_params[i]));
		sum = c_add(sum, filt_out);
	}
	sum.real = sum.real * ray_params->Ch_Norm_Factor;
	sum.imag = sum.imag * ray_params->Ch_Norm_Factor;

	return sum;
}


/* free the memory of the rayleigh channel */
void free_rayleigh_sel(ray_params)
RayParams	*ray_params;
{
	int i;

	/* free the multipath buffer */
	if (NULL != ray_params->Data_Buff->start) {
		free(ray_params->Data_Buff->start);
		ray_params->Data_Buff->start = NULL;
		ray_params->Data_Buff->virtstart = NULL;
	}

	/* free the fadding channel buffer */
	for(i = 0; i < NUM_MULTIPATH; i++) {
		
		if (NULL != ray_params->fad_params[i].S_scoef->start) {
			free(ray_params->fad_params[i].S_scoef->start);
			ray_params->fad_params[i].S_scoef->start = NULL;
			ray_params->fad_params[i].S_scoef->virtstart = NULL;
		}		
		if (NULL != ray_params->fad_params[i].S_stater->start) {
			free(ray_params->fad_params[i].S_stater->start);
			ray_params->fad_params[i].S_stater->start = NULL;
			ray_params->fad_params[i].S_stater->virtstart = NULL;
		}
		if (NULL != ray_params->fad_params[i].S_statei->start) {
			free(ray_params->fad_params[i].S_statei->start);
			ray_params->fad_params[i].S_statei->start = NULL;
			ray_params->fad_params[i].S_statei->virtstart = NULL;
		}
		if (NULL != ray_params->fad_params[i].S_istater->start) {
			free(ray_params->fad_params[i].S_istater->start);
			ray_params->fad_params[i].S_istater->start = NULL;
			ray_params->fad_params[i].S_istater->virtstart = NULL;
		}
		if (NULL != ray_params->fad_params[i].S_istatei->start) {
			free(ray_params->fad_params[i].S_istatei->start);
			ray_params->fad_params[i].S_istatei->start = NULL;
			ray_params->fad_params[i].S_istatei->virtstart = NULL;
		}
		if (NULL != ray_params->fad_params[i].S_intrp->start) {
			free(ray_params->fad_params[i].S_intrp->start);
			ray_params->fad_params[i].S_intrp->start = NULL;
			ray_params->fad_params[i].S_intrp->virtstart = NULL;
		}
	}

}

/* initial AWGN channel */
void initial_gauss(gauss_params, chn_delay, signal_pow, chn_snr)
GauParams *gauss_params;
double chn_delay;
double signal_pow;
double chn_snr;
{
	
	gauss_params->Ch_Delay = (int) floor(chn_delay * CH_SAMPLE_RATE + 0.5);
	gauss_params->Norm_Var = sqrt(0.5 * signal_pow / pow(10.0, chn_snr/10.0));
	gauss_params->Delay_Buff = OvAlloc(2*(gauss_params->Ch_Delay+1), NULL);
	Dvfill(0.0, gauss_params->Delay_Buff);
}

/* AWGN Channel */
Complex awgn_channel(cpx_in, gauss_params)
Complex	cpx_in;
GauParams *gauss_params;
{
	double noise;
	Complex cpx_out, cpx_tmp;

	register Complex *sp = (Complex *) gauss_params->Delay_Buff->curr_loc;
	register Complex *se = (Complex *) gauss_params->Delay_Buff->virtend;
	register Complex *cur_idx = (Complex *) gauss_params->Delay_Buff->curr_loc;

 	// update the circular buffer pointer.
	if (sp-- <= (Complex *) gauss_params->Delay_Buff->virtstart) {
		sp = se - 1;
	}
	*sp = cpx_in;
	gauss_params->Delay_Buff->curr_loc = (char *) sp;

	/* read data from delay_buffer */
	cur_idx = sp + gauss_params->Ch_Delay;
	if (cur_idx >= se) cur_idx = ((Complex *) gauss_params->Delay_Buff->virtstart) + (cur_idx - se);
	cpx_tmp = *cur_idx;
	
	noise = gauss_params->Norm_Var * noiseWGN(&cgs_noiseseed);
	cpx_out.real = cpx_tmp.real + noise;
	noise = gauss_params->Norm_Var * noiseWGN(&cgs_noiseseed);
	cpx_out.imag = cpx_tmp.imag + noise;
	
	return cpx_out;
}

/* free the memory of the AWGN channel */
void free_gauss(gauss_params)
GauParams *gauss_params;
{
	if (NULL != gauss_params->Delay_Buff->start) {
		free(gauss_params->Delay_Buff->start);
		gauss_params->Delay_Buff->start = NULL;
		gauss_params->Delay_Buff->virtstart = NULL;
	}
}


/* initial carrier offset channel */
void initial_carrier_offset(freq_params, freq_shift, phase_ini)
FreqParams *freq_params;
double freq_shift;
double phase_ini;
{
	freq_params->Phase_Reg = phase_ini;
	freq_params->Base_Phase = PI2*freq_shift/SUBCARRIERS;			// relative to subcarrier
//	freq_params->Base_Phase = PI2*freq_shift/CH_SAMPLE_RATE;
}


/* Frequency Offset */
Complex carrier_offset(cpx_in, freq_params)
Complex	cpx_in;
FreqParams *freq_params;
{
	Complex cpx_out;
	Complex phase_rotate;

	phase_rotate.real = cos(freq_params->Phase_Reg);
	phase_rotate.imag = sin(freq_params->Phase_Reg);

	cpx_out = c_mul(cpx_in, phase_rotate);

	freq_params->Phase_Reg = freq_params->Phase_Reg + freq_params->Base_Phase;
	if (fabs(freq_params->Phase_Reg) >= PI2) {
		freq_params->Phase_Reg = (freq_params->Phase_Reg > 0)? freq_params->Phase_Reg-PI2 : freq_params->Phase_Reg+PI2;
	}
	
	return cpx_out;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区三区| 欧洲亚洲国产日韩| 在线观看亚洲专区| 久久这里只有精品6| 夜夜嗨av一区二区三区四季av | 国内精品国产三级国产a久久| 99精品桃花视频在线观看| 日韩视频免费观看高清在线视频| 亚洲三级在线看| 国产一区二区三区电影在线观看| 91视频免费播放| 欧美极品少妇xxxxⅹ高跟鞋| 免费高清视频精品| 在线看不卡av| 亚洲人成网站在线| 粉嫩av一区二区三区在线播放| 日韩一级大片在线| 亚洲国产成人精品视频| 欧美在线一区二区三区| 亚洲另类春色校园小说| 成人动漫精品一区二区| 国产欧美日韩麻豆91| 国产麻豆成人传媒免费观看| 日韩一区二区三区电影在线观看| 香蕉成人啪国产精品视频综合网| 日本乱人伦aⅴ精品| 日韩毛片精品高清免费| 99精品欧美一区二区三区小说| 国产日韩综合av| 风流少妇一区二区| 一色屋精品亚洲香蕉网站| 丰满少妇久久久久久久| 欧美激情在线一区二区| 国产成人aaaa| ...xxx性欧美| 99久久精品免费精品国产| 成人免费在线视频| 一本一本久久a久久精品综合麻豆| 亚洲天堂精品视频| 欧美午夜在线观看| 天堂在线一区二区| 精品国产免费人成电影在线观看四季| 久久99在线观看| 欧美激情一区二区三区在线| 国产福利视频一区二区三区| 亚洲国产成人一区二区三区| 91欧美一区二区| 日日夜夜精品视频天天综合网| 日韩欧美三级在线| 福利电影一区二区三区| 亚洲精品久久久久久国产精华液| 欧美色图12p| 首页欧美精品中文字幕| 久久尤物电影视频在线观看| jlzzjlzz欧美大全| 亚洲综合一二三区| 欧美mv日韩mv亚洲| 99热99精品| 日韩影院免费视频| 久久精品亚洲国产奇米99| 一本大道av一区二区在线播放| 午夜精品福利久久久| 久久婷婷色综合| 91免费看视频| 久久精品国产亚洲a| 中文字幕av资源一区| 在线一区二区三区做爰视频网站| 美腿丝袜一区二区三区| 国产精品免费网站在线观看| 欧美日本在线看| 国产成人在线网站| 天天综合网 天天综合色| 久久久一区二区三区| 欧美唯美清纯偷拍| 成人免费毛片aaaaa**| 丝袜美腿亚洲一区| 欧美国产禁国产网站cc| 777午夜精品免费视频| 99精品视频在线播放观看| 日韩高清一区二区| 亚洲男人天堂av网| 久久蜜桃香蕉精品一区二区三区| 欧美性videosxxxxx| 成人av电影在线| 国产永久精品大片wwwapp| 亚洲国产精品久久一线不卡| 国产精品嫩草影院com| 亚洲精品在线一区二区| 欧美久久一区二区| 色中色一区二区| 99精品欧美一区| 成人晚上爱看视频| 国产综合成人久久大片91| 亚洲高清免费一级二级三级| 综合色中文字幕| 国产欧美1区2区3区| 欧美va在线播放| 91精品国产综合久久精品性色| 色国产综合视频| 99在线精品观看| 成人亚洲精品久久久久软件| 激情五月婷婷综合| 久久国产日韩欧美精品| 日韩不卡在线观看日韩不卡视频| 亚洲精品国产无天堂网2021| ●精品国产综合乱码久久久久| 国产精品久久久久久久久久久免费看| 精品国产一区二区三区不卡 | 国产欧美日韩精品a在线观看| 欧美一区二区大片| 欧美一区二区三区免费在线看| 欧美性猛片aaaaaaa做受| 欧美亚洲日本国产| 欧美在线影院一区二区| 欧美日韩精品综合在线| 欧美日韩国产影片| 欧美一级一区二区| 久久在线观看免费| 中文字幕第一区综合| 国产精品美女久久久久久2018| 亚洲欧洲性图库| 亚洲精品国产精华液| 一区二区三区在线观看国产| 一区二区三区日韩精品视频| 亚洲一卡二卡三卡四卡 | 国产精品久久夜| 亚洲精品免费播放| 三级亚洲高清视频| 国内精品视频666| 成人高清av在线| 欧美在线视频全部完| 91精品免费观看| 久久久国产一区二区三区四区小说 | 久久成人精品无人区| 久久激情综合网| 成人av手机在线观看| 在线亚洲一区观看| 日韩欧美一区在线观看| 国产欧美1区2区3区| 一区二区三区四区在线| 日韩av中文字幕一区二区三区| 国产乱码精品一品二品| 91免费国产在线观看| 欧美久久久久久久久中文字幕| 精品99999| 曰韩精品一区二区| 国产一二精品视频| 欧美日韩午夜精品| 国产欧美精品一区| 日韩电影免费在线观看网站| 国产精品一区二区免费不卡| 欧美在线免费视屏| 久久久久97国产精华液好用吗| 一区二区三区色| 国产中文一区二区三区| 在线观看成人免费视频| 久久欧美中文字幕| 偷拍一区二区三区| 91视频在线观看| 亚洲精品在线观| 视频一区视频二区中文| gogo大胆日本视频一区| 91麻豆精品国产自产在线| 国产精品的网站| 国内精品写真在线观看| 欧美日韩在线不卡| 最新不卡av在线| 国产伦精品一区二区三区在线观看 | 一卡二卡欧美日韩| 国产黑丝在线一区二区三区| 欧美日韩久久久一区| 1024成人网| 成人综合婷婷国产精品久久蜜臀| 欧美夫妻性生活| 一区二区三区四区不卡在线 | 麻豆精品久久精品色综合| 一本到不卡免费一区二区| 久久久99久久| 男人的天堂久久精品| 精品视频1区2区3区| 亚洲嫩草精品久久| 成人激情黄色小说| 久久久亚洲精华液精华液精华液| 日本女优在线视频一区二区| 91国偷自产一区二区使用方法| 国产嫩草影院久久久久| 国模冰冰炮一区二区| 欧美成人性福生活免费看| 日韩高清不卡一区| 4438x亚洲最大成人网| 亚洲国产成人av| 欧美另类久久久品| 午夜视频一区二区| 欧美性猛片aaaaaaa做受| 亚洲午夜一区二区| 欧美日韩精品福利| 日本一不卡视频| 日韩欧美高清在线| 国产美女av一区二区三区| 国产三级精品三级|