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

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

?? viterbi_qam.c

?? Hard Viterbi QPSK in AWGN, Rayleight soft Viterbi QAM in AWGN, Rayleight viterbi QAM in AWGN, Rayl
?? C
字號:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include "random.h"
// make the complex structure
typedef struct complex1
{
	double real;
	double imag;
}complex;
// define the number of the iteration
#define ITERATION pow(10, 4)
#define THENUMBEROFDATA 1000

void convolution(int *data, int *codeddata);
double modulation(int data);
void demodulation(double * r_data);
int bercheck(int data, double d_data);
int comparison(int com1, int com2);
void viterbi_decode(int *d_data, int *decode_data);

void main()
{
	FILE *fp1;
	double Noisepower;
	complex Noise;
	int data[THENUMBEROFDATA];
	int codeddata[2*(THENUMBEROFDATA+2)];
	int cr_data[2];
	int ci_data[2];
	complex m_data;
	complex r_data;
	double d_datareal[2];
	double d_dataimag[2];
	int d_data[2*(THENUMBEROFDATA+2)];
	int decode_data[THENUMBEROFDATA+2];
	int error;
//	int error1;
//	int error2;
//	int error3;
	double avgerr;
	int EbofN0;
	
	// open and make the text file 
	fp1=fopen("result_16qam_Viterbi.txt","w");
	srand(time(0));
	for(EbofN0=11; EbofN0<=15; EbofN0+=1)
	{
		double sumerr=0.0;
		int run;		
		int i;
		int l;
	
		for(run=0;run<ITERATION;run++)
		{
			// generate the real part data 		
			generate_random(&data[0], THENUMBEROFDATA);
			
			convolution(data, codeddata);
			// generate the imaginary part data
            //generate_random(&data1[0], THENUMBEROFDATA/2);
			
            for (i=0; i<=(THENUMBEROFDATA/2);i++)
			{
			
				cr_data[0]=codeddata[4*i];
				cr_data[1]=codeddata[4*i+1];
                ci_data[0]=codeddata[4*i+2];
				ci_data[1]=codeddata[4*i+3];
				// modulated the real part signal
				m_data.real = modulation(cr_data);
				// modulated the imaginary part signal 
				m_data.imag = modulation(ci_data);

				// make the noisepower	
				Noisepower=1/(2*pow(10,(double)EbofN0/10));
				// make the real part of noise
				Noise.real = sqrt(Noisepower/2)*GaussRand();
				// make the imaginary part of noise
				Noise.imag = sqrt(Noisepower/2)*GaussRand();
			
				// receive the real part of the signal 
				r_data.real = sqrt(1.0/10.0)*m_data.real + Noise.real;
				// receive the imaginary part of the signal 
				r_data.imag = sqrt(1.0/10.0)*m_data.imag + Noise.imag;
						
				d_datareal[0] = r_data.real; 
				d_dataimag[0] = r_data.imag;
				// demodulated the real part of the signal 
				demodulation(&d_datareal);
				// demodulated the imaginary part of the signal 
				demodulation(&d_dataimag);
				d_data[4*i]=(int)d_datareal[0];
				d_data[4*i+1]=(int)d_datareal[1];
				d_data[4*i+2]=(int)d_dataimag[0];
				d_data[4*i+3]=(int)d_dataimag[1];
			}
			viterbi_decode(d_data,decode_data);
			// check the error 

			for (l=0;l<=(THENUMBEROFDATA-1);l++)
			{				
				//printf("%d=",decode_data[l]);
				//printf("%d\n",data[l]);
				error= bercheck(data[l], decode_data[l]);
				sumerr = sumerr + error;
			}
			//error= bercheck(data[0], d_datareal[0]);
			//error1= bercheck(data[1], d_datareal[1]);
			//error2= bercheck(data1[0], d_dataimag[0]);
			//error3= bercheck(data1[1], d_dataimag[1]);

			//sumerr = sumerr + error + error1 + error2 + error3;
		}
		//calculated the BER
		avgerr = sumerr / (ITERATION*THENUMBEROFDATA);
		fprintf(fp1,"%.7f\n",avgerr);		

		printf("%.7f\n", avgerr);
	}
	fclose(fp1);
}
// modulation function
double modulation(int *data)
{
	int m_data;
	if (*data==1)
	{
		if(*(data+1)==1)
		{
			m_data=1;
		}
		else
		{
			m_data=3;
		}
	}
	else
	{
		if(*(data+1)==1)
		{
			m_data=-1;
		}
		else
		{
			m_data=-3;
		}		
	}
	return (m_data);
}
// demodulation function
void demodulation(double *r_data)
{
	if (r_data[0]>=0.0)
	{
		if (r_data[0]>=sqrt(1.0/10.0)*2.0)
		{
			r_data[0]=1;
     		r_data[1]=0;
		}
		else
		{
			r_data[0]=1;
			r_data[1]=1;
		}
	}
	else
	{
		if (r_data[0]<=sqrt(1.0/10.0)*(-2.0))
		{
			r_data[0]=0;
     		r_data[1]=0;
		}
		else
		{
			r_data[0]=0;
     		r_data[1]=1;
		}
	}
}
// error check function
int bercheck(int data, double d_data)
{
	int error=0;
	if ((double)data==d_data)
	{
		error=0;
	}
	else
	{
		error=1;
		//printf("error occured\n");
	}
	return (error);
}

void convolution(int *data, int *codeddata)
{
	int a = data[0];
	int b = 0;
	int c = 0;
	int N =0;
	//int codeddata[12];
	for(N=0;N<=(THENUMBEROFDATA+1);N++)
	{
		codeddata[2*N] = a^b^c;
		codeddata[2*N+1] = a^c;
		a = data[N+1];
		b = data[N];
		if(N == 0)
		{
			c = 0;
		}else
		{
			c = data[N-1];
		}
		if(N>=(THENUMBEROFDATA-1))
		{
			a=0;
		}
		if(N>=THENUMBEROFDATA)
		{
			b=0;
		}
	}
}

void viterbi_decode(int *d_data, int *decode_data)
{
	int s[4][(THENUMBEROFDATA+3)];
	int k1;
	int k2;
	int c[(THENUMBEROFDATA+2)];
	int l1;
//	int l2;
	int i;
	int l;
	for (i = 0;i<=3;i++)
	{
		for(l=0;l<=THENUMBEROFDATA+2;l++)
		{
			s[i][l]=9;
		}
	}
    s[0][0]=0;
	s[0][1]=(d_data[0]^0)+(d_data[1]^0);
	s[1][1]=(d_data[0]^1)+(d_data[1]^1);
	s[0][2]=s[0][1]+(d_data[2]^0)+(d_data[3]^0);
	s[1][2]=s[0][1]+(d_data[2]^1)+(d_data[3]^1);
	s[2][2]=s[1][1]+(d_data[2]^1)+(d_data[3]^0);
	s[3][2]=s[1][1]+(d_data[2]^0)+(d_data[3]^1);
	
	for(k2=3;k2<=(THENUMBEROFDATA+2);k2++)
	{
		for(k1=0;k1<=3;k1++)
		{
			if(k1==0)
			{
				s[k1][k2]=comparison(s[k1][k2-1]+(d_data[2*(k2-1)]^0)+(d_data[2*(k2-1)+1]^0), s[k1+2][k2-1]+(d_data[2*(k2-1)]^1)+(d_data[2*(k2-1)+1]^1));
			}
			else if(k1==1)
			{
				s[k1][k2]=comparison(s[k1-1][k2-1]+(d_data[2*(k2-1)]^1)+(d_data[2*(k2-1)+1]^1), s[k1+1][k2-1]+(d_data[2*(k2-1)]^0)+(d_data[2*(k2-1)+1]^0));
			}
			else if(k1==2)
			{
				s[k1][k2]=comparison(s[k1-1][k2-1]+(d_data[2*(k2-1)]^1)+(d_data[2*(k2-1)+1]^0), s[k1+1][k2-1]+(d_data[2*(k2-1)]^0)+(d_data[2*(k2-1)+1]^1));
			}
			else if(k1==3)
			{
				s[k1][k2]=comparison(s[k1-2][k2-1]+(d_data[2*(k2-1)]^0)+(d_data[2*(k2-1)+1]^1), s[k1][k2-1]+(d_data[2*(k2-1)]^1)+(d_data[2*(k2-1)+1]^0));
			}
		}
	}
    
	if((s[0][(THENUMBEROFDATA+1)]+(d_data[2*(THENUMBEROFDATA+1)]^0)+(d_data[2*(THENUMBEROFDATA+1)+1]^0))==comparison(s[0][(THENUMBEROFDATA+1)]+(d_data[2*(THENUMBEROFDATA+1)]^0)+(d_data[2*(THENUMBEROFDATA+1)+1]^0) , s[2][(THENUMBEROFDATA+1)]+(d_data[2*(THENUMBEROFDATA+1)]^1)+(d_data[2*(THENUMBEROFDATA+1)+1]^1)))
	{
		c[(THENUMBEROFDATA+1)] = 0;
		decode_data[(THENUMBEROFDATA-1)]=0;
	}
	else 
	{
		c[(THENUMBEROFDATA+1)] = 2;
		decode_data[(THENUMBEROFDATA-1)]=0;
	}
	for (l1=(THENUMBEROFDATA+1);l1>=1;l1--)
	{
		if (c[l1]==0)
		{
			if((s[0][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^0))==comparison(s[0][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^0),s[2][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^1)))
			{
				c[l1-1] = 0;
				decode_data[l1-1]=0;
			}
			else 
			{
				c[l1-1] = 2;
				decode_data[l1-1]=0;
			}
		}else if(c[l1]==1)
		{
			if((s[0][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^1))==comparison(s[0][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^1),s[2][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^0)))
			{
				c[l1-1] = 0;
				decode_data[l1-1]=1;
			}
			else 
			{
				c[l1-1] = 2;
				decode_data[l1-1]=1;
			}
		}else if(c[l1]==2)
		{
			if((s[1][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^0))==comparison(s[1][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^0),s[3][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^0)))
			{
				c[l1-1] = 1;
				decode_data[l1-1]=0;
			}
			else 
			{
				c[l1-1] = 3;
				decode_data[l1-1]=0;
			}
		}else if(c[l1]==3)
		{
			if((s[1][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^1))==comparison(s[1][l1-1]+(d_data[2*(l1-1)]^0)+(d_data[2*(l1-1)+1]^1),s[3][l1-1]+(d_data[2*(l1-1)]^1)+(d_data[2*(l1-1)+1]^0)))
			{
				c[l1-1] = 1;
				decode_data[l1-1]=1;
			}
			else 
			{
				c[l1-1] = 3;
				decode_data[l1-1]=1;
			}
		}
	}
	/*
		for(l=0;l<=THENUMBEROFDATA+1;l++)
		{
			printf("%d ",c[l]);
		}
	printf("\n");
	
	for(i=0;i<=3;i++)
	{
		for(l=0;l<=THENUMBEROFDATA+2;l++)
		{
			printf("%d",s[i][l]);	
		}
		printf("\n");
	}*/
	
}

int comparison(int com1, int com2)
{
	int com3;
	if(com1>=com2)
	{
		com3=com2;
	}else
	{
		com3=com1;
	}
	return (com3);
}






?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91色综合久久免费分享| 欧美综合欧美视频| 欧美成人免费网站| 国内成+人亚洲+欧美+综合在线| 91精品国产综合久久久蜜臀图片 | 欧美成人精品福利| 久久精工是国产品牌吗| 国产亚洲美州欧州综合国| 粉嫩高潮美女一区二区三区| √…a在线天堂一区| 日本一区二区免费在线| 91香蕉视频黄| 日韩在线一区二区三区| 久久综合九色综合97_久久久| 国产风韵犹存在线视精品| 中文字幕一区二区三区不卡| 欧美影院一区二区三区| 日本美女一区二区| 中文文精品字幕一区二区| www久久精品| 91视频免费看| 日本aⅴ亚洲精品中文乱码| 欧美www视频| 色综合色综合色综合| 蜜臀av性久久久久蜜臀aⅴ| 欧美国产精品中文字幕| 欧美高清你懂得| 国产成人免费视| 亚洲五月六月丁香激情| 视频一区在线视频| 国产欧美日韩综合精品一区二区| 在线视频欧美精品| 国产精品一区久久久久| 亚洲国产日韩a在线播放性色| 亚洲精品在线观看视频| 一本大道久久a久久综合| 精品一区二区三区蜜桃| 亚洲精品成人少妇| 久久久综合视频| 欧美高清一级片在线| 欧美老女人在线| 91麻豆高清视频| 国产乱码精品一区二区三| 午夜成人免费电影| 中文字幕亚洲一区二区va在线| 91精品在线观看入口| 成人国产精品免费| 麻豆国产精品官网| 亚洲国产精品久久不卡毛片 | 日韩影院免费视频| 国产精品久线在线观看| 欧美mv日韩mv国产网站| 精品视频123区在线观看| 丁香婷婷综合网| 精品无人区卡一卡二卡三乱码免费卡 | 在线不卡a资源高清| 色婷婷综合中文久久一本| 欧美一区国产二区| 色欧美乱欧美15图片| 国产成人啪午夜精品网站男同| 日本视频在线一区| 亚洲成人黄色影院| 亚洲一区二区三区美女| 中文字幕中文字幕在线一区| 久久综合九色综合97婷婷女人 | 久久99精品网久久| 亚洲成人一二三| 一级日本不卡的影视| 中文字幕字幕中文在线中不卡视频| www亚洲一区| 久久亚洲免费视频| 26uuu亚洲综合色欧美| 日韩精品一区二区三区在线观看| 欧美高清hd18日本| 欧美片网站yy| 欧美精品1区2区| 中文字幕在线观看不卡视频| 国产精品灌醉下药二区| 日本一区二区三区国色天香 | 国产一区二区女| 国产综合色在线| 国产精品69毛片高清亚洲| 韩国欧美国产1区| 国产成人aaa| 成人av第一页| 国产拍揄自揄精品视频麻豆| 中文字幕乱码一区二区免费| 国产精品高潮呻吟久久| 亚洲视频 欧洲视频| 亚洲欧洲制服丝袜| 亚洲一二三区在线观看| 午夜欧美大尺度福利影院在线看| 亚洲国产精品人人做人人爽| 天天av天天翘天天综合网色鬼国产| 三级不卡在线观看| 久久国产夜色精品鲁鲁99| 欧美精品99久久久**| 精品久久国产97色综合| 久久精品视频一区二区三区| 国产精品久久久久影视| 亚洲另类在线视频| 日韩精品电影在线观看| 国内精品国产成人国产三级粉色| 国产电影精品久久禁18| 91玉足脚交白嫩脚丫在线播放| 欧美丝袜自拍制服另类| 日韩免费视频线观看| 全国精品久久少妇| 国产不卡高清在线观看视频| 91在线视频在线| 91精品国产综合久久蜜臀| 国产网站一区二区三区| 中文字幕色av一区二区三区| 亚洲在线成人精品| 国模一区二区三区白浆| 日本久久一区二区| 精品国产乱码久久久久久夜甘婷婷 | 高清shemale亚洲人妖| 欧美自拍丝袜亚洲| 精品国产乱码91久久久久久网站| |精品福利一区二区三区| 日韩av在线免费观看不卡| 成人综合日日夜夜| 91精品免费在线| 国产精品久久久99| 蜜臀久久99精品久久久久久9| 日韩女优av电影| 亚洲女子a中天字幕| 老司机免费视频一区二区| 99精品欧美一区二区三区小说| 91精品国产品国语在线不卡| 日韩一区欧美小说| 久久99久久99精品免视看婷婷 | 国产成人免费xxxxxxxx| 欧美亚洲一区三区| 欧美激情一区二区三区不卡| 午夜精品久久久| 日韩一区二区视频在线观看| 亚洲日本va在线观看| 国产美女久久久久| 欧美一区二区三区思思人| 亚洲卡通动漫在线| 国产91精品欧美| 精品久久久网站| 婷婷开心久久网| 99久久久国产精品免费蜜臀| 久久午夜羞羞影院免费观看| 日韩国产精品久久| 欧美日韩中字一区| 国产成人精品一区二| 日韩欧美在线一区二区三区| 亚洲一区在线播放| 91麻豆视频网站| 亚洲日本在线看| 成人av影视在线观看| 久久久久久麻豆| 狠狠色狠狠色综合| 日韩一级片网站| 日本在线观看不卡视频| 欧美丰满一区二区免费视频| 亚洲免费电影在线| 91在线你懂得| 国产一区二区日韩精品| 2019国产精品| 国产又黄又大久久| 久久久亚洲精品一区二区三区| 免费在线观看一区二区三区| 欧美精品日韩综合在线| 五月婷婷综合在线| 欧美日韩国产小视频| 亚洲国产成人av| 欧美乱妇20p| 人人爽香蕉精品| 欧美成人一区二区| 国产制服丝袜一区| 蜜臀va亚洲va欧美va天堂| 日韩丝袜美女视频| 国产尤物一区二区| 国产精品五月天| 99久久99久久综合| 一区二区三区中文字幕| 在线视频一区二区三区| 午夜欧美电影在线观看| 欧美一区二区成人| 国产制服丝袜一区| 国产精品久久久久一区二区三区| av电影在线不卡| 亚洲一区二区三区自拍| 欧美挠脚心视频网站| 95精品视频在线| 亚洲 欧美综合在线网络| 日韩视频免费直播| 国产成+人+日韩+欧美+亚洲| 1024成人网| 在线观看91av| 粉嫩一区二区三区性色av| 亚洲影视在线播放| 日韩视频免费直播| 国产xxx精品视频大全| 亚洲黄色av一区|