📄 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 + -