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

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

?? softviterbiqaminawgn.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);
double comparison(double com1, double com2);
void viterbi_decode(int *d_data, int *decode_data);
void quantization(double r_data, int *d_data);
double dis(int data, int data1, int data2, int value1, int value2);

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[3];
	int d_data1[3];
	int dd_data[6*(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_ViterbiSoft.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];
				//printf("%d",cr_data[0]);
				//printf("%d",cr_data[1]);
				//printf("%d",ci_data[0]);
				//printf("%d\n",ci_data[1]);
				// 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;
						
				quantization(r_data.real,d_data);
				quantization(r_data.imag,d_data1);
                
				dd_data[6*i]=d_data[0];
				dd_data[6*i+1]=d_data[1];
				dd_data[6*i+2]=d_data[2];
				dd_data[6*i+3]=d_data1[0];
				dd_data[6*i+4]=d_data1[1];
				dd_data[6*i+5]=d_data1[2];
				//printf("%d",dd_data[6*i]);
				//printf("%d",dd_data[6*i+1]);
				//printf("%d",dd_data[6*i+2]);
				//printf("%d",dd_data[6*i+3]);
				//printf("%d",dd_data[6*i+4]);
				//printf("%d\n",dd_data[6*i+5]);
				//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(dd_data,decode_data);
			// check the error 

			for (l=0;l<=(THENUMBEROFDATA-1);l++)
			{
				//printf("%d\n",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);
}

void quantization(double r_data, int *d_data)
{
	if (r_data<=-sqrt(1.0/10.0)*3*3/4)
	{
		d_data[0]=0;
		d_data[1]=0;
		d_data[2]=0;
	}else if (r_data<=-sqrt(1.0/10.0)*3*2/4)
	{
		d_data[0]=0;
		d_data[1]=0;
		d_data[2]=1;
	}else if (r_data<=-sqrt(1.0/10.0)*3*1/4)
	{
		d_data[0]=0;
		d_data[1]=1;
		d_data[2]=0;
	}else if (r_data <= 0 )
	{
		d_data[0]=0;
		d_data[1]=1;
		d_data[2]=1;
	}else if (r_data<=sqrt(1.0/10.0)*3*1/4)
	{
		d_data[0]=1;
		d_data[1]=0;
		d_data[2]=0;
	}else if (r_data<=sqrt(1.0/10.0)*3*2/4)
	{
		d_data[0]=1;
		d_data[1]=0;
		d_data[2]=1;
	}else if (r_data<=sqrt(1.0/10.0)*3*3/4)
	{
		d_data[0]=1;
		d_data[1]=1;
		d_data[2]=0;
	}else 
	{
		d_data[0]=1;
		d_data[1]=1;
		d_data[2]=1;
	}
}
// 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)
{
	double s[4][(THENUMBEROFDATA+3)];
	int k1;
	int k2;
	int c[2*((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]=10000000000000;
		}
	}
    s[0][0]=0;
	s[0][1]=dis(d_data[0],d_data[1],d_data[2],0,0);
	s[1][1]=dis(d_data[0],d_data[1],d_data[2],1,1);
	s[0][2]=s[0][1]+dis(d_data[3],d_data[4],d_data[5],0,0);
	s[1][2]=s[0][1]+dis(d_data[3],d_data[4],d_data[5],1,1);
	s[2][2]=s[1][1]+dis(d_data[3],d_data[4],d_data[5],1,0);
	s[3][2]=s[1][1]+dis(d_data[3],d_data[4],d_data[5],0,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]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],0,0), s[k1+2][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],1,1));
			}
			else if(k1==1)
			{
				s[k1][k2]=comparison(s[k1-1][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],1,1), s[k1+1][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],0,0));
			}
			else if(k1==2)
			{
				s[k1][k2]=comparison(s[k1-1][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],1,0), s[k1+1][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],0,1));
			}
			else if(k1==3)
			{
				s[k1][k2]=comparison(s[k1-2][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],0,1), s[k1][k2-1]+dis(d_data[3*(k2-1)],d_data[3*(k2-1)+1],d_data[3*(k2-1)+2],1,0));
			}
		}
	}
    
	if((s[0][(THENUMBEROFDATA+1)]+dis(d_data[3*(THENUMBEROFDATA+1)],d_data[3*(THENUMBEROFDATA+1)+1],d_data[3*(THENUMBEROFDATA+1)+2],0,0))==comparison(s[0][(THENUMBEROFDATA+1)]+dis(d_data[3*(THENUMBEROFDATA+1)],d_data[3*(THENUMBEROFDATA+1)+1],d_data[3*(THENUMBEROFDATA+1)+2],0,0) , s[2][(THENUMBEROFDATA+1)]+dis(d_data[3*(THENUMBEROFDATA+1)],d_data[3*(THENUMBEROFDATA+1)+1],d_data[3*(THENUMBEROFDATA+1)+2],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]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,0))==comparison(s[0][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,0),s[2][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],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]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],1,1))==comparison(s[0][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],1,1),s[2][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,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]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],1,0))==comparison(s[1][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],1,0),s[3][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,1)))
			{
				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]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,1))==comparison(s[1][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],0,1),s[3][l1-1]+dis(d_data[3*(l1-1)],d_data[3*(l1-1)+1],d_data[3*(l1-1)+2],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("%f ",s[i][l]);	
		}
		printf("\n");
	}*/
}

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

double dis(int data, int data1, int data2, int value1, int value2)
{
	double distance;
	double value;
	if(value1==0)
	{
		if(value2==0)
		{
			value = 0;
		}
		else
		{
			value = 7/3;
		}
	}
	else
	{
		if(value2==0)
		{
			value = 7;
		}else
		{
			value = 14/3;
		}
	}
	distance = sqrt(pow(((data*4+data1*2+data2)-value),2));
	return (distance);
}






?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体一区二区三区| 91精品黄色片免费大全| 欧美日韩国产高清一区二区三区| 久久久久久毛片| 亚洲图片自拍偷拍| 丁香网亚洲国际| 精品久久久久久久久久久久久久久久久| 中文字幕亚洲在| 狠狠狠色丁香婷婷综合激情 | 欧美军同video69gay| 日韩三级免费观看| 一区二区三区久久| 成人精品在线视频观看| 日韩免费观看高清完整版在线观看| 一区二区三区久久久| k8久久久一区二区三区| 欧美精品一区二区三区高清aⅴ | 日韩一区二区三区免费看| 国产精品久久久久久久久久免费看| 美女视频一区二区| 欧美日韩精品一区视频| 亚洲综合色网站| 色噜噜狠狠色综合欧洲selulu| 欧美一级日韩不卡播放免费| 狠狠久久亚洲欧美| 国产美女精品一区二区三区| 91精品久久久久久蜜臀| 一区二区三区欧美日韩| 91无套直看片红桃| 亚洲色图制服丝袜| 在线观看视频一区二区欧美日韩| 国产精品久久久久影院亚瑟 | 日本欧美加勒比视频| 欧美亚洲高清一区| 日精品一区二区| 欧美一级免费大片| 精品一区二区三区欧美| 久久久久久久久岛国免费| 国产一区二区影院| 国产日韩欧美a| 一本色道a无线码一区v| 伊人一区二区三区| 欧美日韩精品欧美日韩精品一 | 岛国精品在线观看| 久久一区二区三区国产精品| 精品一区二区三区av| 精品99久久久久久| 成熟亚洲日本毛茸茸凸凹| 中文在线资源观看网站视频免费不卡 | 成人av片在线观看| 亚洲精品美国一| 91精品国产综合久久蜜臀| 久久99精品国产麻豆婷婷洗澡| 久久影院午夜论| caoporen国产精品视频| 亚洲狠狠爱一区二区三区| 欧美乱妇一区二区三区不卡视频| 狠狠色丁香久久婷婷综| 国产精品不卡一区二区三区| 91久久免费观看| 精彩视频一区二区三区| 1区2区3区欧美| 91精品国产免费久久综合| 国产成人综合网站| 亚洲第一二三四区| 国产午夜亚洲精品不卡| 欧美日韩亚洲丝袜制服| 国产乱理伦片在线观看夜一区| 亚洲欧美偷拍三级| 欧美精品一区二| 欧美色老头old∨ideo| 国产中文字幕精品| 午夜私人影院久久久久| 中文字幕av资源一区| 制服丝袜一区二区三区| 99精品国产热久久91蜜凸| 天天av天天翘天天综合网色鬼国产| 久久综合久久鬼色中文字| 色欲综合视频天天天| 国产精品综合一区二区三区| 亚洲一区二区影院| 中文字幕欧美一| 久久免费电影网| av不卡在线观看| 蜜臀国产一区二区三区在线播放| 亚洲欧洲精品成人久久奇米网| 91精品国模一区二区三区| 91一区二区三区在线观看| 加勒比av一区二区| 五月天中文字幕一区二区| 国产精品美女久久久久久久久久久| 91麻豆精品国产91久久久 | 美女尤物国产一区| 亚洲综合999| 亚洲女性喷水在线观看一区| 久久精品人人做人人爽人人| 日韩欧美一区中文| 91精品国产综合久久小美女| 欧美性淫爽ww久久久久无| 91啪在线观看| 成人a级免费电影| 大白屁股一区二区视频| 国产乱理伦片在线观看夜一区| 日本大胆欧美人术艺术动态| 亚洲国产日韩a在线播放性色| 日本一区二区三区免费乱视频 | 国产精品一区二区久激情瑜伽 | 日韩欧美二区三区| 欧美三片在线视频观看| 色综合久久久久久久久| 91女厕偷拍女厕偷拍高清| 成人av综合一区| av日韩在线网站| 成人激情图片网| 处破女av一区二区| jvid福利写真一区二区三区| 99精品视频在线播放观看| 99精品视频一区| 91亚洲精品久久久蜜桃| 91美女福利视频| 欧美视频一二三区| 在线不卡a资源高清| 日韩欧美资源站| 久久综合九色欧美综合狠狠| 日本一区二区三区在线不卡| 欧美日韩久久一区二区| 久久电影国产免费久久电影| 青青草91视频| 极品美女销魂一区二区三区免费| 免费在线欧美视频| 国产精品夜夜嗨| 色综合视频一区二区三区高清| 91豆麻精品91久久久久久| 欧美日韩一区二区在线观看| 91精品国产综合久久香蕉的特点| 欧美电视剧在线观看完整版| 欧美国产激情一区二区三区蜜月| 亚洲乱码国产乱码精品精小说| 石原莉奈一区二区三区在线观看| 麻豆专区一区二区三区四区五区| 成人亚洲一区二区一| 在线观看欧美日本| 欧美mv日韩mv国产| 国产精品国产a| 五月婷婷另类国产| 国产91在线看| 欧美二区在线观看| 中文字幕av在线一区二区三区| 亚洲午夜久久久久久久久久久| 亚洲成人动漫在线免费观看| 肉丝袜脚交视频一区二区| 韩国午夜理伦三级不卡影院| 成人av网站免费观看| 欧美挠脚心视频网站| 国产欧美日韩不卡免费| 丝袜美腿亚洲色图| 处破女av一区二区| 日韩一区二区在线播放| 亚洲色图制服丝袜| 国产一区二区三区日韩| 欧美亚洲综合色| 久久影院电视剧免费观看| 亚洲成人中文在线| 成人18精品视频| 精品99久久久久久| 日韩成人一级大片| 欧洲另类一二三四区| 日本一区二区三区在线不卡| 日韩激情av在线| 日本高清免费不卡视频| 国产精品色一区二区三区| 日韩影院免费视频| 欧美最猛性xxxxx直播| 国产精品每日更新| 国产一区二区在线看| 欧美一区二区精品| 亚洲va中文字幕| 欧洲亚洲国产日韩| 亚洲人精品一区| 国产mv日韩mv欧美| 久久久久久免费毛片精品| 毛片基地黄久久久久久天堂| 欧美男女性生活在线直播观看| 亚洲激情第一区| 99re8在线精品视频免费播放| 欧美激情一区二区三区不卡| 国产一区二区视频在线播放| 精品免费日韩av| 久久电影网站中文字幕 | 成人开心网精品视频| 久久久一区二区三区| 韩国av一区二区三区在线观看| 在线播放视频一区| 午夜电影网一区| 91精品国产色综合久久| 免费成人小视频| 日韩欧美国产精品| 国产做a爰片久久毛片| 久久人人97超碰com| 国产精品资源网|