⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m进制调制.cpp

📁 M进制调制
💻 CPP
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include "MPSK_Module.h"
#define  N 32     //the length of every frame
#define  M 16     //MPSK
#define  EsN0_NUM 4
#define  EsN0_ITV 0.5
#define  EsN0_BEGIN 0.0
#define  CODE_FRAMES 1

struct plural{
	double real;
	double imag;
}

void main()
{
	//to declaration variables 
	char *Message;
	struct plural *Modulated_Symbol;
	int n=log(M)/log(2);
	int length=N/n;
	struct plural *Rec_Value;
	char *DeM_Code;
	double EsN0[EsN0_NUM];
	double BER[EsN0_NUM];
	double FER[EsN0_NUM];
	double AWGN_AVR;
	double ber;
	double fer;
	int count;
	long int Errors;    //记录错误的比特数
	int Frame_Errors;
	int EsN0_i;    //不同信道条件循环的控制变量
	int frame_i;   //不同帧过信道时的循环控制变量
	int i,j;
	FILE *fp;
	//to declaration variables
	
	

	//different EsN0
	for(EsN0_i=0;EsN0_i<EsN0_NUM;EsN0_i++)
	{
		EsN0[EsN0_i]=EsN0_BEGIN + EsN0_ITV * EsN0_i;
		
		//to allocate memory
		Message=(char *)malloc(N*sizeof(char));
		Modulated_Symbol=(struct plural *)malloc(length*sizeof(struct plural));
		Rec_Value=(struct plural *)malloc(length*sizeof(struct plural));
		DeM_Code=(char *)malloc(N*sizeof(char));
		
		//to initialize 
		for(i=0;i<EsN0_NUM;i++)
		{
			BER[i]=0;
			FER[i]=0;
		}
		ber=0;
		fer=0;
		//to initialize 

		Errors=0;
		Frame_Errors=0;

		//different frame
		for(frame_i=0;frame_i<CODE_FRAMES;frame_i++)
		{
			//to create Message bits , which has a length of N
			Random_Bits(Message,N);
			Display_char(Message,N);

			//to modulate 
			MPSK_Modulate(Message,Modulated_Symbol,length,n);
			Display_plural(Modulated_Symbol,length);
			
			/*
			//to add AWGN_Noise
			TRAN_AWGN(Modulated_Symbol,Rec_Value,length);

			//to demodulate
			MPSK_Demodulate(Rec_Value,DeM_Code,length);

			//to count the numbers of error bits
			count=0;
			for(j=0;j<N;j++)
			{
				if(Message[j]!=DeM_Code[j])
					count++;
			}
			Errors += count;

			if(count)
				Frame_Errors++;
		}

		ber=(double)Errors/(double)(CODE_FRAMES*N);
		fer=(double)Frame_Errors/(double)CODE_FRAMES;
		//to save the result
		fp=fopen("result.txt","a");
		fprintf(fp,"*************EsN0=%lf***********\n",EsN0[EsN0_i]);
		fprintf(fp,"BER=%lf\n",ber);
		fprintf(fp,"FER=%lf\n",fer);
		printf("*************EsN0=%lf***********\n",EsN0[EsN0_i]);
		printf("BER=%lf\n",ber);
		printf("FER=%lf\n",fer);
		fclose(fp);
		

	}

	fp=fopen("total_record.txt","a");

	fprintf(fp,"EsN0=[");
	for(i=0;i<EsN0_NUM-1;i++)
	{
		fprintf(fp,"%lf,",EsN0[i]);
	}
	fprintf(fp,"%lf];\n",EsN0[i]);

	fprintf(fp,"BER=[");
	for(i=0;i<EsN0_NUM-1;i++)
	{
		fprintf(fp,"%lf,",BER[i]);
	}
	fprintf(fp,"%lf];\n",BER[i]);

	fprintf(fp,"FER=[");
	for(i=0;i<EsN0_NUM-1;i++)
	{
		fprintf(fp,"%lf,",FER[i]);
	}
	fprintf(fp,"%lf];\n",FER[i]);

	fclose(fp);
*/
		}
	}
	free(Message);
	free(Modulated_Symbol);
	free(Rec_Value);
	free(DeM_Code);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -